A local-first & peer-to-peer blog powered by OrbitDB which replicates between browsers and mobile apps. IPFS (only) | ![]() |
Visit orbit-blog @ ipns IPFS Companion needed
- Issues:
- Scan QR-Code isn't fully implemented
- peer-to-peer via WebRTC between two browsers doesn't work
- disable DID and enable default orbitdb.id, DID not yet supported by voyager
- adding & deleting blog databases works only with reloading the page
- in settings the storing the posts db address should happen somewhat automatically, because if forgotten, others cannot add it to there saved blogs
- relay not accessible - renew ssl certifcate
- password should only be asked if a seed phrase is in local storage and we have chose persistent identity
- peerId is a new one after each page load even if we have a persistent identity
- [?] can it be useful to have a new peerId even if identity is persistent? What would be the draw back?
- UI related
- configure your own voyager
- internationalize the UI (en,de,fr,es,it,ru,...)
- use AI for transaltion
- use translation services
- orbitdb address (blog address) should be possible to be given over the url in hash router /#/orbitdb/xyz
- editable / flexible categories
- editable posts
- deploy to IPFS
- markdown support for posts
- [?] markdown support for comments
- search in posts
- search in comments
- add about
- OrbitDB related
- overwrite seedPhrase and generate new peerId and identity (did)
- Voyager evaluation
- install voyager as pinning service https://github.com/orbitdb/voyager/tree/main
- add db addresses to voyager
- support DID on voyager
- allow persistent peerId
- make voyager support pubsub peer discovery
- make voyager websocket wss run with nginx & certbot
- test voyager replication
- add first production blog
- when clicking on a peerId, open a modal to show information about the peer and request information such as (public blog names, impressum, etc.)
- publish blog on request
- enter optional imprint in settings (optional for public blogs)
- when adding a blog address think about optionally adding and dialing peerId too (at least when scanning?)
- sometimes the db cannot be found nor opened then data like blogName, blogAddress can't be read, in such case it might be interesting to implmenent a retry mechanism, e.g. adding it to a queue and try every 20 seconds and remove it from the queue as soon it could connect
- blog settings via private settings db
- blog name
- blog description
- postsdb address
- commentsdb address
- username/did by blockchain (Bitcoin Ordinals, Runes, Namcoin, Doichain)
- did
- did / id by Nostr-Chrome-Extension
- did / id by metmask extension
- seed phrase
- seed phrase encrypted by password
- seed phrase encrypted by passkey
- generate seed phrase, masterseed
- generate libp2p peerid from seed phrase / masterseed
- switch between temporary identity & peerId (default for browsers) and persistent identity & peerId (for mobiles)
- if temporary, always create new seed phrase & identity for orbitdb on app start
- add posts settings db
- create encrypted backup & restore of posts, settings, remoteDBs and store on Filecoin, Arweave etc. (Dropbox, Google Drive, Apple Cloud, Yandex Cloud etc.)
- setup your own relay / voyager
- [?] enable pubsub ipfs pinning of posts and comments
- every post results into a new CID which needs to be published to pubsub pinning service
- every CID needs to be packaged into a metadata.json name, description, media (CID)
- signature and public key from arriving pubsub message (if available)
- pinning must be pre-paid (FIAT/Crypto) for a public-key
- setup own hosted pinning-relay
- run your own pinning RaspberryPi
- AcccessController: blog can only write the local peer-id
- hide delete posts / comments button if not owner
- implement OneTimeAccessController
- https://github.com/silkroadnomad/deContact/blob/main/src/lib/network/AddressBookAccessController.js
- keep temporary private key / peer-id on laptop
- keep secure private key / persistent peer-id on phone
- implement One-Time-Access-Controller with own stream protocol and qr-code peering (phone accepts simple pubsub peering messages with simple pin code comparison)
- DBManager connect & replicated remote blogs
- demonstrate webrtc-direct connections without relay-server but SDP-QR-Codes, SDP-voice or browser bluetooth
- upload & replicate images / integrate ipfs images cids into markdown
- implement svelte components into markdown so they they can be executed / upload svelte code as attachment for the post
- App related
- deployable to IPFS
- run as PWA
- vite-plugin-pwa
- orbitlogo ai generated
- version management
- e2e tests
- ci / cd
- build project inside docker
- publish to ipfs inside docker
- extract CID of build folder
- pin build cid on pinning service
- tag version on github with CID
- display version and CID inside settings / about