Dumphere
A public document editor with real-time collaboration, offline support and URL sharing, with no account required.
- Role
- Concept, architecture and development
- Period
- 2026
- Type
- Side project

The problem
Opening a shared space to write usually costs an account, an invite and a permissions setup. Dumphere reduces all of that to picking an address. The first visit creates the page, and anyone with the link is already editing alongside you.
Requirements
Functional
- Create the page on the first visit to a valid path, with up to four segments and 100 characters.
- Edit together in visual mode or in the Markdown source, with participants' cursors and presence.
- Show the connection and save status.
- Keep the content in the browser during network drops and sync when the connection returns.
- Export the document as Markdown or HTML.
- Remove the page after 30 days without visits.
Non-functional
- Work with no account, authentication or deliberate collection of personal data.
- Sanitize HTML on the server and cap it at 512 KB, with a 2 MB cap on the collaborative snapshot.
- Rate-limit document creation, requests and collaborative connections per IP.
- Keep document content and connection tokens out of the logs.
- Meet WCAG 2.2 AA in light and dark themes, in Portuguese and English.
My contribution
The first version, from March 2026, used Laravel Reverb with Echo for presence events next to a Yjs server that kept rooms in memory only, deployed with Docker. In July I rewrote the sync layer to rely on Yjs alone, with the Node server requiring a token signed by Laravel and persisting snapshots in PostgreSQL, replaced Docker with deploys through Laravel Forge and went from 2 to 31 test files. Rich editing uses Tiptap, with a per-document local cache in IndexedDB. On the server, HTML is sanitized before it is stored, document creation and connections are rate-limited per IP, and a scheduler removes documents untouched for 30 days. The interface is bilingual and covered by Pest tests. I also evaluated the sync layer in a paper, comparing it with operational transformation and with periodic whole-document replacement, the model common in address-based editors. With automated clients typing at the same time, Dumphere preserved 100% of the words in every condition, including during disconnections, while whole-document replacement kept as little as 13% to 15% with eight clients.
Project highlights
- 100%of words preserved with 8 concurrent clients
- ~101 msmedian for another client to see an edit, at 100 ms round trip
- 30 daysautomatic expiry for untouched pages
Technologies
Laravel 13, Inertia, Vue 3, Tiptap, Yjs, PostgreSQL, Pest
Inside the product
