ETL to QE, Update 28, Separation of Concerns
After writing ETL to QE, Update 27, Meme Schema Roadmap to Implementation I feel like I can finally put the pieces on the board to play with. Here is what needs to be built.
- Nostr Client
- Encryption PKMS on top of Nostr Client
- Group chat Tokenomics
- Ontology Data Labeling Solution
Alright that is far more clear than whatever I have written previously, at least the first part is. Requiring a Nostr client is something tangible, something that is either feature complete or not, and can be directly compared.
Now the problem is, can I Articulate the tasks so clearly that another person can build it?
Alright let's get the tech stack articulated first,
- nostr-tools
- LevelDB
- Material UI
- React + Vite
- IPLD
- JSONSchema
- Cryptography
Alright you just listed a bunch of tech, what are they all supposed to be used for? What is the scope of the MVP? Where is its user story?
They are the first 4 stories from Epic User Journeys, summarized below,
- QE Demo for Friends at Get Together
- Use tokenomics to signal meaningful conversations
- Community Meme Context Generation User Journey
- Publishing PKMS on Question Engine User Journey
They key points are,
- Have a Usable Nostr Client
- Save all nostr data locally
- Be able to rebroadcast Nostr data
- Be able to have an encrypted group chat using PGP or NaCl
- Index Obsidian data structure
- QE - Token Specification
Cool so what are the features of a Usable Nostr Client?
- Get Relays
- Get Profile events
- Get follower events
- Get events from followers
- Send out events
- Encrypted
- Public
- Tags
- Replies
- Rebroadcast events to specific relays
Okay we have a usability issue. Do we require uses use a Mnemonic or do we allow for the Nostr provider to keep the main key.
If they do not provide a mnemonic and want to use an existing Nostr key we just hash the shit out of it, get a couple signatures then produce another mnemonic.
Can you produce a mnemonic from a seed?
Yes you can. So you either use your existing nostr identity or you bring your Mnemonic. Mnemonic is the primitive we want to use.
In the beginning we will just use a Mnemonic, we can check in on window.nostr later.
So the plan is,
- Get user a Mnemonic or take in one
- Create levelDB indexes for Schema
- DD-Personas-
- Persona Name
- RootPrivateKey
- FirstPGPKey....
- Persona Name
- DD-Events-$PersonaID
- Sent Events
- DD-Chat-$ChatIPNSName
- DD-Personas-
- User can send event type 4 with PGP key inside
- Users then communicate with ephemeral events
- They need to be able to sync up
So how are we going to manage all these separate Nostr accounts from a single UX?
We need that data model we were talking about
So do we transform Nostr messages into raw memes?
Well we do want one of the indexes to be just memes with timestamps, DIDs, and their edges to other memes.
An entire Persona's metadata should fit in a single database.
What about the private key and other metadata?
Everything except that.
Should the messages stay encrypted?
No they should not.
I need to connect with other people?
But who?
docxology, Alex Potential Islander