Squalk: an old-school forum engine built on Nostr
I miss classic forums: slow, asynchronous threads that stay readable and searchable for years, instead of knowledge dissolving into chat scrollback. Squalk is my attempt to rebuild that on top of Nostr, an open protocol where users hold a keypair, posts are signed events, and interchangeable relays store and serve them, instead of a private database.
And yes, there is a chat in the sidebar too. I'm not purists: quick back and forth has its place, it just lives next to the threads instead of replacing them. Hash things out in the chat, then write down what matters where it will still be findable next month.
The design in short: a forum is a view over relay-hosted data. Rooms are groups as specified in NIP-29, threads are NIP-7D events, identity is the user's own keypair. The consequence I care about is that the software and the community are decoupled: any other client speaking the same specs (Flotilla, Nostrord) can read and write the same conversations, and if my deployment disappears the history and identities survive on the relay.
Technical bits that might interest this crowd: one SvelteKit codebase builds either as a static SPA or as a server-rendered Node app; the SSR mode renders only the anonymous view (no keys server-side) so threads are crawlable, with a stale-while-revalidate snapshot cache in front of the relay queries. Content is rendered as djot rather than markdown.
Pilot community: https://nostr-proto.org
Test instance where you are welcome to make a mess: https://squalk-test.dtonon.com
Source code: https://github.com/dtonon/squalk
Feedback on the architecture is welcome!
To participate and reply, please