Fun Projects

Fabula

Web-native knowledge and content-creation system for narrative structure and long-form writing.

Cappuccino SPA Haskell REST / Ratatosk Google OAuth

Most writing tools treat a document as a flat sequence of paragraphs. Fabula treats it as a graph: scenes connect to characters, characters connect to arcs, arcs connect to themes. The idea is that a story — or an argument, or a pitch deck, or a research thread — has structure that exists independently of any particular rendering, and a tool should make that structure visible and editable rather than hiding it behind a page metaphor.

The original motivation was book and screenplay writing, where keeping track of character continuity, timelines and thematic throughlines across a 100,000-word manuscript is a genuine cognitive problem. Outliners help but they're one-dimensional. Fabula lets you attach multiple structural views to the same underlying content — a timeline view, a character-perspective view and a chapter-sequence view can all look at the same scene node.

Technical approach

The back-end is a Haskell REST API using Ratatosk (a lightweight Yesod-adjacent routing library) with Google OAuth for identity. The front-end is Cappuccino — chosen for the same reasons as Cogniviva: you need a rich, stateful, drag-capable UI to make graph editing feel natural, and the Cappuccino binding system makes that tractable without fighting a virtual-DOM model that was never designed for it.

Content nodes carry both structural metadata (type, connections, ordering hints) and raw prose. The separation means you can reorganise the graph without touching the prose, and export to different linear orderings without duplicating content.

Status

Fabula is a working prototype used for actual writing. The knowledge-graph core and multi-view editing surface are functional; the export pipeline (to Word, Markdown, PDF) and the real-time collaboration layer are the remaining large pieces.