work

MUSE

u write some, i write some

shipped
December 2025
stack
Next.js 16 · React 19 · TipTap · Supabase · Claude Sonnet 4.5 · Claude Haiku 4.5
live
muse.somedaystudios.xyz

The problem

Every AI writing tool wants to write for you. You give it a prompt, it hands back finished prose, and the result reads like nobody in particular wrote it. The tools that don't do this are autocomplete — they finish your sentence and have no idea what your piece is about.

Muse sits between those. You write a passage. It continues in your voice. You take the pen back whenever you want.

The interesting part: the rolling Creative Brief

The obvious way to keep an AI in your voice is to stuff the whole document into every request. That gets expensive and slow as the piece grows, and models drift anyway once the context is long enough.

Muse keeps a Creative Brief instead — a compact running description of the piece's voice, tense, tone, and intent. Claude Haiku generates it when you start a piece and updates it roughly every 500 words. The continuation model (Sonnet) gets the brief plus recent text instead of the entire document.

Two models with different jobs: a cheap fast one maintaining state, an expensive one doing the writing.

What was hard

Knowing when to stop. An AI that continues indefinitely takes over the piece. The interceptor parser watches the stream and cuts it at a natural boundary, so the handoff back to you lands somewhere you can actually write from.

Not losing the user's own words. Streaming edits into a live rich-text editor means the AI's output and the user's cursor are competing for the same document. TipTap made the boundaries explicit enough to keep them apart.

Stack notes

Next.js App Router with every API route auth-gated in middleware. Supabase for auth and Postgres, with row-level security doing the per-user isolation rather than application code — the database refuses to return another user's rows even if a query is wrong.