Skip to content
Mauricio Pereira BragaFull stack developer
All work

Dumphere

A public document editor with real-time collaboration, offline support and URL sharing, with no account required.

Open Dumphere

Role
Concept, architecture and development
Period
2026
Type
Side project
The Dumphere editor with a Markdown document, a code block and another participant's cursor

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

On the landing page, the address itself is the creation and sharing mechanism.
On the landing page, the address itself is the creation and sharing mechanism.