Skip to content

Nostr CMS

Goal

  • Publish Obsidian vault to Nostr

User Journey

Important TODO

  • Write a blog post about how the titles are supposed to be generated and the difference between wikistr and nostrudel

Notes

  • We just want Notion on Nostr
  • If we want to have our own Obsidian Frontend that replaces Obsidian we need to figure out a couple different things for wiki
    • Block/Meme/Paragraph Modularity
    • Version Control
    • Backlinks
    • Labeled Backlinks with Reactions
    • NIP19 Embeds
    • NIP19 Links
      • Include Relay
      • Check for updated meme Document or Meme from User
    • AI conversations
    • Links into personal PKMS
    • Privacy
      • Publish updates that are encrypted
      • Publish updates to private Nostr Server with Auth

To Research

Next Steps

  • dentropys-obsidian-publisher Patches
  • Script that tries over and over to publish Wiki and produces useful logs with errors rather than mindlessly waiting one second between sending events
    • Sore published nostr events in sqlite
    • Sync published nostr events in sqlite
  • Test the nostrudel client with numbers in the d tag and see if it resolves, maybe we add an additional tag with the numbers and see what happens
  • Script to backup published nostr events of of wiki
  • Script to publish wiki to another nostr relay
    • Documentation of this script
  • Attach CID tag to NIP54 events
  • Back Links integrated somehow for NIP54
    • How can two events link to one another when they both need a hash one another's nostr event
  • NIP proposal for Per cell/block/line/sentence version control Notion/Anytype.io/Coda style
  • Obsidian Extension for Wiki Editing and Sharing keeping everything up to date
  • Note Pin Integration via NIP51
  • TODO
    • Write NIP54 events to local nostr relay
    • Deploy local testing node
    • Function to take title, make everything lower case and replace all non letter character as NIP54
  • Shelved
    • Test naddr rather than nevent for publishing on traditional nostr
      • We can use the uuid of the event for the d tag
    • Loop through all the wiki posts in the nostr file

Completed

Learnings

  • Tags we use for our 308018 events
    • d
    • title
    • a, a link
      • a tag
      • 308018:public_key:d-tag-title
    • e for mentions
    • e for fork
    • e for defer
    • summary, just a short string of what's up single tweet size
    • client (optional)
  • We do not need a nostr relay we needed NIP19 and NIP54
  • Using NIP54 we do not need to worry about creating a directory because linking via name of wiki page Obsidian style is supposed, and also makes federation interesting because you see what other people of the same topic generated
  • Using a separate private key for each document and directory is not needed for the changed scope of this project, NIP54 does version control on the level of the document. Sentence or Line level version control is a completely separate project that is far too complex to be working on right now.
  • Batching events and putting them on S3 to be loaded into a local relay would have required developing our own Nostr Client which we did not end up having to do because we discovered NIP54 was integrated in nostrudel, wikistr and wikifreedia with nostrudel being the one we actually like and use because you can modify your relay in the UI and it supports NIP19 addressing
  • We have a list of custom event type we were expecting to implement,
    • Custom Event Types
      • Directory
        • Contains documents and Directories
      • Document
        • Contains memes and Documents
      • Meme
        • It a version controlled string of text
    • The Document and Meme types were for line or sentence version control which we removed from the scope of this project for now because that would require a custom Nostr client be written
    • The functionality of the Directory Nostr event type can just be implemented with NIP54 events with Obsidian style links and we can later check if NIP19 links are supposed
  • Found big need to leave dashes as a dash