These are some ideas that spawned from our discussion.
The Goal Note
When a new space is created, a new note should be created with it.
Its title should be "GOAL".
The note should be open and ready to edit.
the cursor should be in the body.
The code could definitely be a lot cleaner.
I'm being far more "practical" than ever in this incarnation.
User Names Policy
- case insensitive
- maybe just letters and numbers ".", "-" and "_"
- no other punctuation allowed.
A Proper Data Model
Almost all the data should be in Neo4j.
- between notes (replies)
- between spaces (tangent/tesseract)
- between users (follow)
Also, the idea of Circles/Teams needs to be revisited.
What is a Circle?
Who gets to define it?
There is no one true database.
This time around, I'm going to try a hybrid storage approach where many entities will be stored in different databases.
When I need hierarchy, the filesystem is a natural fit.
When I have to deal with long lists of things, PostgreSQL is a good fit.
When I have to deal with graph relations, Neo4j is a natural fit.
- Users: pg, neo4j
- Spaces: fs, pg, neo4j
- Notes: fs, pg, neo4j
- Relations: neo4j
- Tags: this could be pg only or neo4j only. I'm not sure which way I want to go with this.
Create a Tangent
The gear menu of a note should allow one to create a Tangent.
A Tangent is just another Space that is bidirectionally connected to this one.
What about FS and PG?
What role will the filesystem and postgres have after much of the data has been moved to Neo4j?
In addition to Markdown formatting, URLs should be automatically embedded if possible.
Image URLs should be transformed into the image itself.
YouTube URLs should be lightly embedded.
There should also be an escape mechanism if you don't want it automatically embedded. Maybe something as simple as a leading "\" would be sufficient.
These should be interpreted also.
Maybe if you're mentioned like this by the space owner, you get invited to the space?
The semantics of invitation need to be figured out.
It can't render GFM tables. I consider this a bug, because it crashes when it fails.
People on the site should be able to see each other in the panel. They should also be able to see what space each user is in.
I have finally made my first React-based panel. I'm quite happy with the results, and the To-Do List Panel and YCTHere will be the next panels to be implemented in this style.
Maybe the notes should only be draggable by the title so that the text inside the note can be highlighted with the mouse.
Email Addresses for Users
Everyone should be able to receive.
Howerver, sending should be a premium feature.
The Ability to Receive Payments
The site should be able to receive payments.
Some things we may sell are:
- lifetime memberships
- storage and bandwidth
This may be a useful library for implementing systematic authorization. I need to figure out a good way to serialize this data, though.