Plan, write and illustrate a novel in one workspace with AI agents.
Novel Buds folds structural story management and agent-driven generation into a single full-stack platform, so a story moves from planning to draft to localisation without ever leaving the project.
One workspace instead of three
Most authors bounce between a writing tool, a pile of setting notes, and a separate set of AI tools. Novel Buds unifies all three into one project workspace: organise characters, places and lore as cards, build the outline by dragging beats around, draft in a rich-text editor, and hand the same agent tasks like “draft chapter three from these character notes”.
Because every entity is multilingual-aware from the ground up, a single project carries a story from first idea through writing and on to localisation.

An agent that reads the whole project and edits it directly
Multi-provider abstraction
Claude, OpenAI, Gemini, xAI, OpenRouter and Ollama sit behind one interface, with per-project model, thinking mode and effort level. Models without native tool calling get an on-the-fly <tool_call> tag parser; models without native reasoning get prompt-driven chain-of-thought.
Permission-gated tool engine
Tools are gated by read / write / delete / translate / generate scopes. Within them the model patches manuscripts, creates and deletes story entities, and runs semantic search directly — and new tools drop into the modular registry.
Editable prompt pipeline
A Jinja2 template engine composes prompt fragments recursively and versions them, so system and user prompts can be tuned to any voice or style without touching code.
Journeys, agents & MCP
Goal-driven structured Journeys and free-form multi-turn Agents are separate primitives. Sub-agents with their own prompt, model and tools are invoked via call_<name>, and external MCP servers attach per preset.
RAG & conversation memory
Story content is chunked and embedded into pgvector, and a hybrid regex + vector search grounds generation. As a chat grows, older turns are summarised, re-embedded and selectively re-injected so only the relevant detail returns to context.
Human-in-the-loop by default
Every tool call streams to the UI over SSE and moves through an explicit lifecycle. Nothing touches the project until the author accepts it — each step can be reviewed, reshaped or rejected.
- Pending
- Validating
- Applying
- Applied
A model fine-tuned for the agent itself
The platform runs on any major provider, but frontier models are tuned for science and coding and slip on fiction — continuity and consistency are exactly where a novel agent needs to be strongest. So beyond connecting to existing models, I fine-tuned a dedicated one: a QLoRA fine-tune of Gemma 4 31B into a novel-writing agent that drives these same project tools, trained on a synthetic dataset built by a multi-agent data factory.
Built for the way authors actually work
Characters, places and lore as cards
Characters, organisations, places and lorebooks live as rich cards with images and a folder hierarchy. Framer Motion shared-layout animation expands a card in place, and dnd-kit handles reordering.

A timeline in your world’s own calendar
Define custom calendar units for the world, place dated events across multiple tracks, and link each event to the characters, places and chapters it touches.

Art generated and approved in place
Generate illustrations across OpenAI, Gemini, xAI, NovelAI and OpenRouter with per-object positive / negative prompts, then move each through a generate → review → approve flow with AVIF output.

One project workspace
Brief, outline, manuscript, story entities, timeline and agents all live in a single project view.
Writing tools
A TipTap rich-text editor with autosave and version history, plus a drag-and-drop outline → act → chapter manager.
Multilingual by design
Every content entity carries per-language versions with coverage tracking, AI batch translation, and base-language fallback flagged by a warning badge. The UI itself is localised with i18next.
Realtime sync
SSE pushes object, asset and run-state changes so every open view stays in sync.
What it’s built on
- Backend
- Python 3.12+FastAPISQLAlchemy + AlembicPostgreSQL 18 + pgvectorJWT authJinja2
- AI / LLM
- AnthropicOpenAIGoogle GenAIMCPtiktokenprompt caching
- Frontend
- React 19TypeScript 5.8Vite 7React Router 7ZustandTipTapdnd-kiti18next
- Infra
- Docker ComposeCaddy 2 (TLS)AWS LightsailS3Cloudflare
Designed and built end to end — product and UX, frontend, backend and infrastructure.
