Hi HN!<p>For the last 8 months we've been working on leaflet.pub, a web app for making delightful documents. We're trying to strike a balance between Notion and Google Docs — very fast, ultralight and easy to share, but also supporting rich blocks and multiple pages.<p>Weirdly, none of the many notetaking/document apps that we could find hit this combination, so we made Leaflet. With it you can:<p>- Instantly create a doc, without an account
- Share read and edit links
- Sign-in with email to sync your docs to different devices
- Add rich blocks, like canvases, subpages, rsvps, and polls<p>It's really useful for one-off collaborations, running events, or just when you need a blank page without having to buy into a whole organizational system.<p>We also spent a lot of time making sure Leaflets look good. We've found that there's a pretty blurry boundary between a document and a website, so making something that people can feel proud to publish online was key.<p>Here's a couple examples!<p>- Jake's presentation on Slöjd, traditional handcraft pedagogy (<a href="https://leaflet.pub/3d28b4a7-3703-4ae5-aaf6-d270ffe1151f" rel="nofollow">https://leaflet.pub/3d28b4a7-3703-4ae5-aaf6-d270ffe1151f</a>)
- Laura's documentation of her website redesign (<a href="https://leaflet.pub/14aba696-e894-440a-9d06-917641a2bfce" rel="nofollow">https://leaflet.pub/14aba696-e894-440a-9d06-917641a2bfce</a>)<p>Some technical details that might be interesting:<p>- We do sync and all our client-side state via Replicache, which I really love!
- Data is modeled as a set of facts about entities, a la Datomic, forming a graph. This has been flexible enough for us to quickly build new features, like canvases and nested pages, without committing to a single document structure.
- We use ProseMirror, but not for the entire document. Instead every text block is a separate ProseMirror instance. This lets us keep the document structure in our database and our schema, without having to dive into ProseMirror's every time we want to modify things.<p>Our (somewhat messy) source is available here: <a href="https://github.com/hyperlink-academy/leaflet">https://github.com/hyperlink-academy/leaflet</a> if you want to dig deeper!<p>On the horizon:<p>- Better home and document organizing features — things like search, tagging, collections etc.
- We're really excited about ATProto and Bluesky and are working on a set of lexicons and an AppView for document publishing! This will include a lexicon for rich text documents, as well as one publications, and some concept of memberships or subscriptions.
- More blocks! Tables, code blocks, etc.<p>Some things we're particularly proud of:<p>- Our list handling
- Custom theming
- Keyboard handling on iOS Safari (and generally works excellently on mobile)
- Side-scrolling multi-page interface
- Works as a PWA!<p>Some things that still need work:<p>- While faster than others, still a lot of work we can do on performance, both speed when working with very large documents and loading docs generally
- Drag and drop and selection in general could be a lot nicer
- Keyboard navigation across multiple pages
- Multiplayer cursors, and generally real-time sync could be sped up greatly leveraging CRDTs (we already use YJS, just could move updates around faster)<p>You can create a new document just by visiting <a href="https://leaflet.pub" rel="nofollow">https://leaflet.pub</a> (or <a href="https://leaflet.pub/new" rel="nofollow">https://leaflet.pub/new</a> if you're signed in) — would love to hear your thoughts and any feedback if you give it a try!