Remove the docs app. Will figure out how to do this all via the wiki app.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4779 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		@@ -1,4 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "tildefriends-app",
 | 
			
		||||
  "emoji": "📚"
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -1,16 +0,0 @@
 | 
			
		||||
# Tilde Friends Developer's Guide
 | 
			
		||||
[Back to index](#index)
 | 
			
		||||
 | 
			
		||||
A Tilde Friends application runs on the server.  To make an interesting
 | 
			
		||||
application that interacts with the client, it's necessary to understand
 | 
			
		||||
how the parts work together.
 | 
			
		||||
 | 
			
		||||
## Hello, world!
 | 
			
		||||
 | 
			
		||||
A simple starting point.  Presents `Hello, world!` in the browser when
 | 
			
		||||
visited.
 | 
			
		||||
 | 
			
		||||
**app.js**:
 | 
			
		||||
```
 | 
			
		||||
app.setDocument('<h1>Hello, world!</h1>');
 | 
			
		||||
```
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
# Tilde Friends Documentation
 | 
			
		||||
 | 
			
		||||
Tilde Friends is a participating member of a greater social
 | 
			
		||||
network, [Secure Scuttlebutt](https://scuttlebutt.nz/),
 | 
			
		||||
adding a way to safely and securely write, share,
 | 
			
		||||
and run code in the form of server-side web applications.
 | 
			
		||||
 | 
			
		||||
- [Tilde Friends Vision](#vision)
 | 
			
		||||
- [Secure Scuttlebutt from Scratch](#ssb)
 | 
			
		||||
- [Structure](#structure)
 | 
			
		||||
- [Guide](#guide)
 | 
			
		||||
- [TODO](#todo)
 | 
			
		||||
@@ -1,41 +0,0 @@
 | 
			
		||||
# Secure Scuttlebutt from Scratch
 | 
			
		||||
[Back to index](#index)
 | 
			
		||||
 | 
			
		||||
This aims to be the missing reference for those who wish to create a Secure
 | 
			
		||||
Scuttlebutt client from scratch.
 | 
			
		||||
 | 
			
		||||
## Discovery
 | 
			
		||||
A good way to get started is to participate in local network discovery with a known working
 | 
			
		||||
client on the same network.  The
 | 
			
		||||
[Scuttlebutt Programming Guide](https://ssbc.github.io/scuttlebutt-protocol-guide/#local-network)
 | 
			
		||||
is a good start, here, with a few things to note:
 | 
			
		||||
 | 
			
		||||
1. Some clients advertise multiple addresses separated by semicolons (`;`).
 | 
			
		||||
2. Some clients advertise alternative protocols than `shs` and use hostnames instead of
 | 
			
		||||
IPv4 addresses.
 | 
			
		||||
 | 
			
		||||
So be prepared to accept variations.
 | 
			
		||||
 | 
			
		||||
There also an undocumented "new" style of discovery message.
 | 
			
		||||
 | 
			
		||||
## Secret Handshake, Box Stream, and RPC Protocol
 | 
			
		||||
Now that two clients are aware of eachother, they need to complete a secret handshake.
 | 
			
		||||
The [programming guide](https://ssbc.github.io/scuttlebutt-protocol-guide/#handshake)
 | 
			
		||||
is once again a good reference.
 | 
			
		||||
 | 
			
		||||
The box stream and RPC protocol can both be implemented from the
 | 
			
		||||
[same documentation](https://ssbc.github.io/scuttlebutt-protocol-guide/#box-stream)
 | 
			
		||||
without surprises.
 | 
			
		||||
 | 
			
		||||
## Synchronizing Data
 | 
			
		||||
 | 
			
		||||
... `ebt.replicate` or `createHistoryStream` ...
 | 
			
		||||
 | 
			
		||||
## Rooms
 | 
			
		||||
 | 
			
		||||
TODO
 | 
			
		||||
 | 
			
		||||
## References
 | 
			
		||||
* [https://ssbc.github.io/scuttlebutt-protocol-guide/](https://ssbc.github.io/scuttlebutt-protocol-guide/)
 | 
			
		||||
* [https://dev.planetary.social/](https://dev.planetary.social/)
 | 
			
		||||
* [https://dev.scuttlebutt.nz/#/golang/?id=muxrpc-endpoints](https://dev.scuttlebutt.nz/#/golang/?id=muxrpc-endpoints)
 | 
			
		||||
@@ -1,65 +0,0 @@
 | 
			
		||||
# Tilde Friends Structure
 | 
			
		||||
[Back to index](#index)
 | 
			
		||||
 | 
			
		||||
Tilde Friends is a mostly-self-contained executable written in C.
 | 
			
		||||
 | 
			
		||||
In combines the following key components:
 | 
			
		||||
- A Secure Scuttlebutt (SSB) client/server.  This talks with other SSB
 | 
			
		||||
  instances, storing messages and blobs for anyone visible to local
 | 
			
		||||
  users as they are encountered and sharing anything published locally
 | 
			
		||||
  as appropriate.
 | 
			
		||||
- An sqlite database.  This is where the SSB instance stores its data.
 | 
			
		||||
  The general schema involves a `messages` table, storing mostly JSON,
 | 
			
		||||
  a `blobs` table storing arbitrary blob data, and a `properties` table,
 | 
			
		||||
  storing arbitrary state gleaned from `messages` and `blobs`, generally
 | 
			
		||||
  updated on demand and incrementally.
 | 
			
		||||
- A QuickJS runtime.  The core process runs stock scripts and has access
 | 
			
		||||
  and permission to use all resources.  All other processes, which
 | 
			
		||||
  includes everything which runs untrusted code created by Tilde Friends
 | 
			
		||||
  users, are strictly sandboxed in ways similar to how web browsers run
 | 
			
		||||
  untrusted code.  All attempts to access potentially sensitive resources
 | 
			
		||||
  are mediated through the core process.
 | 
			
		||||
 | 
			
		||||
When run with no arguments, it starts a web server on
 | 
			
		||||
[http://localhost:12345/](http://localhost:12345/) and an SSB node.
 | 
			
		||||
 | 
			
		||||
## Web Interface
 | 
			
		||||
The Tilde Friends web server provides access to Tilde Friends applications,
 | 
			
		||||
which are arbitrary user-defined web applications.
 | 
			
		||||
 | 
			
		||||
At the top left, in addition to some basic navigation links, is an `edit`
 | 
			
		||||
link.  Anyone can view, modify, and run in-place the code to any Tilde
 | 
			
		||||
Friends application by using the in-browser editor.
 | 
			
		||||
 | 
			
		||||
At the top right, one can `login` (to save work in their own space)
 | 
			
		||||
or `logout` (proceeding as a guest).
 | 
			
		||||
 | 
			
		||||
The rest of the page is an iframe belonging to the application.
 | 
			
		||||
 | 
			
		||||
## Special Paths
 | 
			
		||||
 | 
			
		||||
- `/~user/app/` - Tilde Friends application paths take the form `/~user/app/`, where `user`
 | 
			
		||||
is a username of a Tilde Friends account, and `app` is an arbitrary name
 | 
			
		||||
of an application saved by the given user.
 | 
			
		||||
- `/~user/app/file` - A raw file in an app.
 | 
			
		||||
- `/&blobid.ed25519` - A raw blob.  Content-Type is inferred for at least
 | 
			
		||||
	a few common image types.
 | 
			
		||||
 | 
			
		||||
## Communication Channels
 | 
			
		||||
Web Browser <-> Core <-> Sandbox
 | 
			
		||||
 | 
			
		||||
Visiting an application path delivers stock HTML and JavaScript which
 | 
			
		||||
establishes a WebSocket connection back to the server.
 | 
			
		||||
 | 
			
		||||
At this point, a new sandbox process is started in Tilde Friends, much
 | 
			
		||||
as a new sandboxed process might be started for a new tab in a web
 | 
			
		||||
browser.  This process has a custom RPC connection to the core process
 | 
			
		||||
which holds the WebSocket connection to the browser.
 | 
			
		||||
 | 
			
		||||
The custom RPC communication between the sandbox process and the core
 | 
			
		||||
process facilitates passing and calling functions remotely.  Calling a
 | 
			
		||||
function in another process returns a `Promise`.
 | 
			
		||||
 | 
			
		||||
An application will typically call `app.setDocument()` at startup to
 | 
			
		||||
populate the app's iframe in the web browser with its own client web
 | 
			
		||||
application resources.
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
# Tilde Friends TODO
 | 
			
		||||
[Back to index](#index)
 | 
			
		||||
 | 
			
		||||
## MVP3
 | 
			
		||||
- Sync status (problem feeds, messages/seconds stats, ...)
 | 
			
		||||
- app: wiki
 | 
			
		||||
- app: public blog
 | 
			
		||||
- Content-Disposition: download
 | 
			
		||||
- remove SSB credentials
 | 
			
		||||
- export SSB credentials
 | 
			
		||||
- initial: better empty news screen
 | 
			
		||||
- initial: remembered wrong user across login/logout
 | 
			
		||||
- initial: bad experience when following nobody
 | 
			
		||||
- make a cool independent app
 | 
			
		||||
- indicate when workspace differs from installed
 | 
			
		||||
- / => Something good.
 | 
			
		||||
- update docs
 | 
			
		||||
- audit + document API exposed to apps
 | 
			
		||||
- fix weird HTTP warnings
 | 
			
		||||
- channels
 | 
			
		||||
- placeholder/missing images
 | 
			
		||||
- no denial of service
 | 
			
		||||
- package standalone executable
 | 
			
		||||
- editor without app iframe
 | 
			
		||||
- sequence_before_author -> flags
 | 
			
		||||
- linkify ssb: links
 | 
			
		||||
- perfect rooms support
 | 
			
		||||
- connections 2.0
 | 
			
		||||
- make a better connections API
 | 
			
		||||
 | 
			
		||||
## Maybe Done
 | 
			
		||||
- blob_wants 2.0
 | 
			
		||||
- image downsample
 | 
			
		||||
- app: todo
 | 
			
		||||
- app: build archive
 | 
			
		||||
- update README
 | 
			
		||||
- administrators config
 | 
			
		||||
- apps name characters
 | 
			
		||||
- initial: can't switch to account when there is only one
 | 
			
		||||
- get tarball under 5MB
 | 
			
		||||
- rooms
 | 
			
		||||
- initial: doesn't refresh when create identity
 | 
			
		||||
- tf account timeout why
 | 
			
		||||
- ssb don't overflow boxes
 | 
			
		||||
- jwt for session tokens
 | 
			
		||||
- linkify https://...
 | 
			
		||||
- emoji reaction picker
 | 
			
		||||
- expose loads of stats
 | 
			
		||||
- confirm posting all new messages
 | 
			
		||||
- multiple identities per user, in database
 | 
			
		||||
- auto-populate data on initial launch
 | 
			
		||||
- make the docker image good / test it / use it
 | 
			
		||||
- leaking imports / exports
 | 
			
		||||
- file upload widget
 | 
			
		||||
- keep working on good error feedback
 | 
			
		||||
- build for windows
 | 
			
		||||
- installable apps (bring back an app message?)
 | 
			
		||||
- sqlStream => sqlExec or something
 | 
			
		||||
- !ssb from child process?
 | 
			
		||||
 | 
			
		||||
## Done
 | 
			
		||||
- update LICENSE
 | 
			
		||||
- logging to browser
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
# Tilde Friends Vision
 | 
			
		||||
[Back to index](#index)
 | 
			
		||||
 | 
			
		||||
Tilde Friends is a tool for making and sharing.
 | 
			
		||||
 | 
			
		||||
It is both a peer-to-peer social network client, participating in Secure
 | 
			
		||||
Scuttlebutt, and an environment for creating and running web applications.
 | 
			
		||||
 | 
			
		||||
## Why
 | 
			
		||||
 | 
			
		||||
This is a thing that I wanted to exist and wanted to work on.  No other reason.
 | 
			
		||||
There is not a business model.  I believe it is interesting and unique.
 | 
			
		||||
 | 
			
		||||
## Goals
 | 
			
		||||
1. Make it **easy and fun** to run all sorts of web applications.
 | 
			
		||||
 | 
			
		||||
2. Provide **security** that is easy to understand and protects your data.
 | 
			
		||||
 | 
			
		||||
3. Make **creating and sharing** web applications accessible to anyone with a
 | 
			
		||||
   browser.
 | 
			
		||||
 | 
			
		||||
## Ways to Use Tilde Friends
 | 
			
		||||
1. **Social Network User**: This is a social network first.  You are just here,
 | 
			
		||||
   because your friends are.  Or you like how we limit your message length or
 | 
			
		||||
   short videos or whatever the trend is.  If you are ambitious, you click links
 | 
			
		||||
   and see interactive experiences (apps) that you wouldn't see elsewhere.
 | 
			
		||||
 | 
			
		||||
2. **Web Visitor**: You get links from a friend to meeting invites, polls, games,
 | 
			
		||||
   lists, wiki pages, ..., and you interact with them as though they were
 | 
			
		||||
   cloud-hosted by a megacorporation.  They just work, and you don't think twice.
 | 
			
		||||
 | 
			
		||||
3. **Group leader**: You host or use a small public instance, installing apps for
 | 
			
		||||
   a group of friends to use as web visitors.
 | 
			
		||||
 | 
			
		||||
4. **Developer**: You like to write code and make or improve apps for fun or to
 | 
			
		||||
   solve problems.  When you encounter a Tilde Friends app on a strange server,
 | 
			
		||||
   you know you can trivially modify it or download it to your own instance.
 | 
			
		||||
 | 
			
		||||
## Future Goals / Endgame
 | 
			
		||||
1. Mobile apps.  This can run on your old phone.  Maybe you won't be hosting
 | 
			
		||||
   the web interface publicly, but you can sync, install and edit apps, and
 | 
			
		||||
   otherwise get the full experience from a tiny touch screen.
 | 
			
		||||
 | 
			
		||||
2. The universal application runtime.  The web browser is the universal
 | 
			
		||||
   platform, but even for the simplest application that you might want to host
 | 
			
		||||
   for your friends, cloud hosting, containers, and complicated dependencies might
 | 
			
		||||
   all enter the mix.  Tilde Friends, though it is yet another thing to host,
 | 
			
		||||
   includes everything you need out of the box to run a vast variety of interesting
 | 
			
		||||
   apps.
 | 
			
		||||
 | 
			
		||||
   Tilde Friends will be built out, gradually providing safe access to host
 | 
			
		||||
   resources and client resources the same way web browsers extended access to
 | 
			
		||||
   resources like GPU, persistent storage, cameras, ... over the years.
 | 
			
		||||
 | 
			
		||||
   Not much effort has been put forward yet to having a robust, long-lasting API,
 | 
			
		||||
   but since the client side longevity is already handled by web browsers, it
 | 
			
		||||
   seems possible that the server-side API can be managed in a similar way.
 | 
			
		||||
 | 
			
		||||
3. An awesome development environment.  Right now it runs JavaScript from the
 | 
			
		||||
   first embeddable text editor I could poorly configure enough to edit code,
 | 
			
		||||
   but it could incorporate a debugger, source control integration a la ssb-git,
 | 
			
		||||
   merge tools, and transpiling from all sorts of different languages.
 | 
			
		||||
		Reference in New Issue
	
	Block a user