Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
stokito committed Oct 11, 2023
1 parent e80978b commit 542a184
Show file tree
Hide file tree
Showing 13 changed files with 1,242 additions and 1 deletion.
66 changes: 65 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,65 @@
# documentation
# Yurt Page: your own homepage website for free and for freedom
<details>
<summary>Intro: What is Yurt Page</summary>

Yurt is a small house that is easy to construct.

<img alt="Yurt near Issyk-Kul lake" width="320px" data-canonical-src="https://upload.wikimedia.org/wikipedia/commons/4/4f/YurtIssykFamily.jpg" src="https://camo.githubusercontent.com/69dd1b0c82aae39cf6322bde1384952e3fc7c23bdac2e15967ea794adf7eefea/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f342f34662f59757274497373796b46616d696c792e6a7067"/>

The YurtPage is a small homepage that all people can deploy on their own devices like router, Raspberry Pi, PC or even TV. Mainly routers because almost everybody have them and they consume small electricity and are always on.
So you don't need to pay for hosting.

The main goal is to make a self-hosted website as cheap as possible and typical usage is to have a closed family storage of photos or a small blog.

If you have friends with a YurtPage then your data will be encrypted and stored on their devices and this gives you a backup for free.
So the bigger your social network the better is for everybody.
This architecture improves privacy but also makes the internet more distributed and stable.
</details>

## Ideology

* Old Web: peoples just readers of content on sites: news, books, portals like Yahoo or MSN.
* [Web2.0](https://en.wikipedia.org/wiki/Web_2.0): peoples now can create their own content and interact with each others: Wiki, YouTube, Facebook.
* [Web3](https://en.wikipedia.org/wiki/Web3): "decentralized" still nobody knows what it is but all talking about BlockChain, metaverse, NFT and other buzzwords.

> I don’t know what Web3 would be based on, but Web4 would be based on HTML and cgi-bin.
> [Albert Einstein](https://twitter.com/marinintim/status/1471480630445813760)
And that's exactly what Yurt uses :) That's essential technologies that may work on the smallest devices.

Basically for the Yurt the terminology is not applied at all. Security, privacy and censorship resistance are cool.
But publicity, accountability and bad content filtering are cool too when used wisely.
The main goal is to make a cheap web. Ideally just for free.
* So small businesses can create a cheap site to sell their products without needing to pay to marketplaces.
* So users may have cheap photos storage: just connect an SSD disk to your router.
* So that authors can create and sell their content without needing to share money with platforms because their followers are seeding their content.

If something is better to be centralized like authorization then ok.
If something can be better decentralized like content distribution: ok, let's try to do it so.
The basic design principle is to make a [frugal solution](https://en.wikipedia.org/wiki/Frugal_innovation) to make it available for mass people.

The end goal is that all users will have a Yurt already installed on their routers and devices when they purchase so they can just start using it.

## Problems and solutions
Even today anybody can create its own site: buy a hosting for about 5$ per month, and also you have to buy some domain, then install WordPress blog engine and configure it.
But nobody will ever visit your site. Only occasional visits from Google search.
The problems are solved by social network: you see everything that your friends posted in a single place. Domains not needed. And that's for free.

* [Similar projects or what do we have today](./alternatives.md)
* [Why selfhost](./why_selfhost.md)
* [Hosting and devices](./hosting.md)
* [Disk space](./disk.md)
* [Connectivity](./connectivity.md)
* [Domains and DNS](./dns.md)
* [HTTP Web Servers](./webservers.md)
* [OpenWrt](./openwrt.md)

## Features
* [Email](./email.md)
* [Blog](./blog.md)
* [Auth](./auth.md)

## Chats
* Join discussion in Matrix https://matrix.to/#/#yurtpage:matrix.org
* https://github.com/orgs/yurt-page/projects?type=classic project ideas and issues

177 changes: 177 additions & 0 deletions alternatives.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# Similar projects or what do we have today
Ideas are not new and many existing projects working in this direction.
But there are always some difference in implementations,

## Movements, communities and organizations

### Selfhosted communities and forums
* https://noted.lol/ web site dedicated to selfhosting
* [/r/selfhosted/](https://www.reddit.com/r/selfhosted/) reddit discussions
* [Awesome Selfhosted](https://github.com/awesome-selfhosted/awesome-selfhosted) directory of software
* [Self-Hosting Guide](https://github.com/mikeroyal/Self-Hosting-Guide)
* [wikipedia: Self-hosting](https://en.wikipedia.org/wiki/Self-hosting_(web_services)) is also a good source
* [IndieBits](https://forum.indiebits.io/) about tunneling (BoringTunnel, TakingNames.io)
* [Зачем нужен личный сайт в 2023 году](https://habr.com/en/companies/ruvds/articles/717952/)

### IndieWeb
[IndieWeb](https://indieweb.org/) is a movement to leave social networks (they call them Silos) and use personal sites.
They're working on creation of easy to use small website engines, technologies and standards to simplify websites to interact with each others.
For example
* [Building blocks](https://indieweb.org/Category:building-blocks) are key design-patterns, technologies, and methods for building and improving your independent website.
* [WebMention](https://indieweb.org/Webmention) protocol allows to easily see when someone makes repost from your site.
* [IndieAuth](https://indieauth.net/) is OAuth extension to login from your domain but difficult to implement.
* Mastodon is twitter like selfhosting service.
* ActivityPub is a protocol to build a social network

See
* https://indieweb.org/
* https://github.com/pfefferle/awesome-indieweb

Yurt is not related to IndieWeb because ideologically is different (we are fine with some centralization) and almost nothing can't be reused from technology stack.
But we'll try to align with this movement.

### Personal data vaults

[Unhosted web apps](http://unhosted.org/) store user data to any server that user choose. E.g. a TODO app that stores tasks to Google Drive or even to you your own storage.
There is a dedicated [remoteStorage](https://remoteStorage.io) protocol that looks like [JSON based WebDAV](https://github.com/remotestorage/remotestorage.js/issues/1093) + OAuth.
Still, for most programs you need a server side with specific API. E.g. for a TODO app send an email with notification.
But anyway quite a lot of apps that are already exists and some of them are even useful and practical like [SuperProductivity](https://app.super-productivity.com/).

It was evolved into [Solid Project](https://solidproject.org/apps) under lead of inventor of web Tim Berns-Lee.
It looks overcomplicated but actively developing and already have some nice apps.

See also [CrossCloud](https://github.com/sandhawke/crosscloud/blob/master/overview.md)

Also interesting article from 2012 (!) [Personal Data Vaults Put You in Control of Your Data Online](https://www.pcworld.com/article/459825/personal_data_vaults_put_you_in_control_of_your_data_online.html)


### Freifunk
[Freifunk](https://en.wikipedia.org/wiki/Freifunk) is a community-driven radio network in Germany.
They developed the OpenWRT, KadNode DNS and some other projects for their needs.

### Turris
[Turris](https://www.turris.com/) is an OpenWrt based router with powerful CPU that almost completely open source and can be used as a home server.
E.g. you can install NextCloud and other programs with just a click.
This is the closest to the Yurt idea and you can try it today.

### prpl Foundation
[prpl Foundation ](https://prplfoundation.org/) is an attempt to collaborate between network equipment manufactures and network providers to create an OpenWrt based platform and use it instead of unknown and unsecure routers firmware.

### iconet Foundation
The [iconet](https://iconet-foundation.org/) is an attempt to create a responsible social network

### Greenhouse
A lot of interesting and useful projects like:
* https://greenhouse.server.garden/ tunnel
* https://git.sequentialread.com/forest/tuber
* https://sequentialread.com/ author's blog

### Framasoft
A French not-for-profit association https://degooglisons-internet.org/
They created some interesting products like PeerTube.

### MobileMe
[MobileMe](https://en.wikipedia.org/wiki/MobileMe) was a nice service at me.com that was replaced with iCloud.
It allowed to make own website and had WebDAV integration.


## Site constructors
MySpace was probably the first popular personal websites hosting.
But all users made their own design that sometimes looks terrible.
It's great that all peoples pages on Facebook looks the same.
Even given a very bad UI on FB it simplifies navigation.
Yurt must provide some advanced website constructor.
Without it peoples just will use something different that Yurt and the whole idea won't work.

* https://myspace.com/ a previously popular social network where many people had their pages.
* https://neocities.org/ reincarnation of GeoCities free hosting. The goal if exactly the same: make home pages for regular peoples. See [High Volume, Bandwidth Heavy Infrastructure On The Cheap - Kyle Drake](https://www.youtube.com/watch?v=-i6wvix6buI)
* https://wix.com/ the most popular commercial constructor


## Software
### WordPress
WordPress is a blog engine and most websites in web are running on WordPress.
It's a very bad software, written in PHP, heavy, has a lot of security vulnerabilities and they always changing it so one day it just becomes unusable.
WP uses a database but for Yurt we'll try to avoid it to keep size minimal.
Yurt Blog may store posts just in raw RSS to make it simpler to generate RSS feed. The same RSS may be fetched by AJAX and then converted to readable HTML.
I.e. from UI respective Yurt Blog can be just an in-browser RSS reader.
BTW WordPress provides RSS feed but for example you can't read it from another site because is [blocked by CORS](https://core.trac.wordpress.org/ticket/50441).

### NextCloud
NextCloud is a self-hosted "cloud" solution i.e. online disk like Google Photos and Google Disk.
You cun upload files like photos and see them from browser or mobile app.
They are written in PHP which is too heavy for most routers. UI is also not perfect. API is problematic too.


## Self-hosting Solutions
Installing and configuring own server is difficult. So you can use some special OS (usually for RaspberryPI or VPS) that already preconfigured and usually gives the following features:
* Web installer with a setup wizard
* Web UI to configure system settings
* App store where you can install something like NextCloud, mail server, RSS reader, file sharing just in one click.
* Dashboard with application icons
* Users management
* Automatic LetsEncrypt TLS certificate issuing
* DDNS or free subdomain. Also for each app is usually used a separate subdomain.
* Backups and snapshots

Usually developers of the projects also selling microcomputers with already installed OS so you can just plug into a router and start using.


### FreedomBox
[FreedomBox](https://freedombox.org/) is a Debian with some Web UI dashboard written in Python+Django. It's the oldest solution and uses traditional software and based by ideology.
It's made by a serious peoples and this is more like a proven solution than a research project.
Original idea was to sell a small server in a small box e.g. what we call today RaspberryPi but at that time it was a new specifically developed device.
See interesting talk [Eben Moglen: "FreedomBox Turns Ten"](https://www.youtube.com/watch?v=2U8PyukPyGE) about its philosophy.

The web panel is written in Python and Django. It lacks of usability e.g. they don't provide a DDNS out of the box.


### Yunohost
[Yunohost](https://yunohost.org/) (sounds like "Why you no host?") is more popular and Docker based solution.
The dashboard provides SSO authorization so you can open any app without being asked for a password.
App are mostly well known: RoundCube for Email, Wordpress for Blog etc.

### 0Web
Small 0Web https://small-tech.org/about/ is a site constructor with many features. [Site.JS](https://sitejs.org/)
It's based on Node.JS and idea is to make an easy to setup website.
They have a good ideology manifest.

### Root project
[https://therootcompany.com/](https://rootprojects.org/hub/) personal cloud. Again in Node.JS.
It's in development but some components like tunnel and JS crypto libraries are working and even used by other solutions.
Here is some description https://git.rootprojects.org/root/meta


## Many other interesting
There is a lot of similar projects that provide a ready to use self-host solutions.
Some noteworthy:

* [Tipi](https://github.com/meienberger/runtipi) a docker based with nice UI
* [umbrel.com](https://umbrel.com/) similar to Tipi, nice and shiny but not FOSS
* [Cloudron](https://cloudron.io/) nice but not FOSS
* [SandStorm](https://sandstorm.io/) has an advanced [secure sandbox model](https://sandstorm.io/how-it-works) based on Linux containers. The project is almost dead.
* [SynCloud](https://syncloud.org/) https://github.com/syncloud similar to FreedomBox but has DDNS and written in Golang.
* [KubeSail](https://kubesail.com/homepage) is a mini PC for homelab hosting.
* TheHelm.com was another one project sold a ready to use and configured microservers. It's closed now, but you may read [Helm Is a Private Home Email Server Anyone Can Use](https://theintercept.com/2019/04/30/helm-email-server/) or find videos.


You can find even more here:
* [Awesome Selfhosted](https://github.com/awesome-selfhosted/awesome-selfhosted#self-hosting-solutions),
* [Alternative Internet](https://github.com/redecentralize/alternative-internet)
* [Awesome Piracy: Dashboards](https://github.com/Igglybuff/awesome-piracy#dashboards-and-homepages)


Probably the Yurt project can implement as part of some of them.
But they are all too heavy for a regular routers and doesn't have a social component.

In fact the Yurt should be the same Self-hosting Solution but with a few differences:
1. Focus on small size and power efficiency.
* So any PHP, NodeJS, Golang, Python based solution won't work for us. We need to use what the OpenWrt use e.g. plain C, Lua, Shell and recently Ucode which is JS dialect.
* Apps that we use should be also small
* Yeah, and we can't use Docker
2. Instead of a nice looking or good UX we have to use "simple" e.g. ugly but more error-prone design. For example use text instead of icons, don't use animation.
* This is a very bad rule that we have to break. If users see that something looks good they think that internally it also works good (even if that is a slow CGI script)
* For most people the main motivation to have own site is to have own design and better customization. Users are curious and want's to enjoy. Maybe some more heavy existing solutions can satisfy such users.
* Basically this is the main problem that if solved at least partially can make many peoples happy. Maybe it's possible some attractive minimal but accurate "suckles" design.
3. Almost all of them have a focus on privacy but for the Yurt it's totally fine to have some degree of centralization and to be more business friendly. E.g. if you wish to use analytic scripts then we weill add this option to you.

14 changes: 14 additions & 0 deletions auth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Auth
1. Yurt MAY have login/pass auth. It's best for privacy because only yurt knows you. Dangerous to avoid spam, hard to store and manage users. As a partial solution may be used an Magic login link send via email
2. OAuth: login with Google, FB and other silos. Not all yurt owners will configure them: you have to manually register an app/client.
1. JS "Sing in" buttons tracking users but makes easier to login. We still may use them on auth.jkl.mn which will have a moderate privacy violation.
3. https://auth.jkl.mn is our OAuth Server for all yurts.
1. All visitors may have SSO. Bad for privacy, must be in iframe, tell to yurt only user_id)
2. Any Yurt have it enabled out of the box with zero configuration (shared client_id, the same redirect_uri). It's called multi tenant config but not so easy to do.
4. IndieAuth: a yurt owner can login on another sites i.e. kind of own password manager+autogenerated email
5. Social login with jkl.mn: we may become the same OAuth provider as Google, FB. This differs from auth by a yurt with IndieAuth

See project tasks https://github.com/orgs/yurt-page/projects/7

## See also
* https://zitadel.com/
Loading

0 comments on commit 542a184

Please sign in to comment.