Front page.What it is
Building
CCC
One app that researches, writes, designs, films and publishes. My agents use it through the same door I do.
Content Creation Centre. Private, in daily use, still growing.

Set in type.The stack
What it runs on
Six layers, all in one Next.js app. The versions are the ones in its package.json today.
Interface
- Next.js16.2app and API routes
- React19.2the editor and dashboards
- Tailwind4.1styling
Content
- Payload3.82the shared CMS
- Slidev0.50decks
- Remotion4.0video rendered from code
Models
- AI SDK7.0one interface, four providers
- fal.aiimages
- ElevenLabsvoice
Jobs
- Trigger.dev4.5renders, pushes, research
- Upstash Redisrate limits and quotas
- Resendemail
Data
- Neon Postgresits own schema
- Drizzle0.45queries
- pgvectorsearch over my own documents
- Cloudflare R2files
Watch
- Langfusea trace for every model call
- OpenTelemetrythe wire it travels on
On the press.How it works
4 steps, in order
Four stops from an idea to a published page.
Pick a topic
Keywords become clusters. The planner lists the articles a topic needs before anything is written.
Write in a real voice
Each article is drafted in a voice learned from writing samples, then edited and scored for search in one editor.
Make the other formats
The same idea becomes a deck, a carousel, images and a video. Video is rendered from code, so a changed line re-renders.
Publish where it lives
One button pushes the article into Payload, WordPress, Sanity, Contentful or Hygraph.
Pulled proof.The code
The machine door
# the door my agents use: one POST, one picturecurl -X POST "$CCC_URL/api/generate-images" \ -H "x-api-key: $CCC_API_KEY" \ -d '{"mode":"text-to-image","style":"riso","prompt":"…a workbench fed by one cable…"}'{"images":[{"provider":"fal","modelId":"bytedance/seedream/v5/lite/text-to-image", "imageId":"403ea1ac-87b6-429b-8d7c-1ac857994085"}]}# the picture in plate 07 came out of this exact callA real call. The key stays in an environment variable and never appears on the page.
The reel.The walkthrough
Watch it run
Corrections.What it fixes
The problems it solves
Nine AI tools, nine subscriptions, nine logins.One app, four model providers behind it, or your own API keys.
Drafts that never reach the CMS.Publishing is a button, wired into five CMS types.
Decks and videos made by hand, one at a time.They come out of the same pipeline as the article.
No record of what the AI did or cost.Every model call leaves a trace I can read.
Editor's letter.Why I built it
Why it exists
I kept paying for tools that each did one step, and none of them could publish or knew my business.
So I built the factory the rest of my work pulls from. My agents research, write, design and film through it, and I edit in the same place. It started in March 2026 as a media manager and grew one door at a time.

Against the rack.Better than average
Against the usual tools
Against Jasper for writing, Descript for video and Gamma for decks. Their side was read from each vendor's own pages on 2026-09-27.
| What | The market average | This app |
|---|---|---|
| Where a draft ends | In the tool; exported, or pushed to one channel like Webflow. | In your CMS: five CMS types wired in.vendor's page |
| Formats | One main format per tool, plus images or social posts. | Article, deck, carousel, image and video from one idea.vendor's page |
| Models | The vendor picks the text model; Gamma lets you pick the image model. | Four providers, or your own keys, with quotas per user.vendor's page |
The imprint.How long it took
391 commits in 183 days
- commits
- 391
- days with a commit
- 58
- days, first commit to today
- 183
- First commit I can prove. An older media-manager repo came first; its history is lost.
- Moved into the monorepo, history and all
- Still building. This page is part of it.
Measured: git log, my own commits on the app, 2026-09-27. The starter template's history is excluded.
Colophon.Where it sits in the ledger
Still building. Nothing shipped is claimed for it.
← Back to the ledger