Repurpose Studio
AI content repurposing system for founders and writers
Turns one essay into platform-specific drafts, carousels and narrated videos, with review before publishing.
At a glance
The problem
Turning each essay into posts for every platform took longer than writing it.
What I built
A quiet writing room that drafts every post in my own voice and posts straight to each platform.
What changed
Zero cost per post: it writes through my existing Claude plan, with no paid scheduler.
Walk through it
Read the transcript
This is Repurpose Studio, the tool I built for my own writing.
I write essays. Turning each one into posts for every platform was taking longer than writing it.
So I built a quiet writing room that drafts every post in my own voice, at zero cost per post.
It starts with the essay. A serif for the writer, a monospace for the machine.
Then drafts for each platform, each with alternative hooks to choose from.
I review, approve and schedule them on one calendar.
It writes through my existing Claude plan, and posts straight to each platform. No paid scheduler, no bill per post.
Why it looks and works this way
A writing room, not a dashboard
Repurpose Studio turns one essay into posts for every platform. It is opened several times a day by one writer, so it is designed to feel like a quiet studio: the words in front, the machinery small and exact.
Read the writing room

The writing room, with a sample essay.
- A serif for the writer
Room titles and essays are set in Instrument Serif, with one italic orange word. The human voice gets the human face.
- One accent, used sparingly
A single orange marks the current room and the lead-in rule. Nothing else competes with the writing.
- A mono for the machine
Word counts, dates and labels are set in IBM Plex Mono: system facts look like system facts.
- Numbered rooms, always dark
Nine rooms from 01 Write to 09 Settings in a sidebar that stays dark in both themes, so switching theme never feels like a different app.
- Start from Substack
Pull from Substack brings the essay in; nothing has to be retyped.
Decisions, and why
Two voices in two typefaces
Instrument Serif for writing and room titles, IBM Plex Mono for facts like counts, dates and buttons.
Why: The serif carries the writer, the mono carries the machine. It gives the app an editorial feel instead of generic software.
Orange split in two
One orange for fills, rules and glow, and a darker orange only for small text.
Why: Orange that works as a fill can fail as small text, so text gets its own readable shade.
Home asks what needs you now
The home screen greets you by time of day and names the actual waiting work. No stat cards, no streaks.
Why: A tool opened several times a day needs calm and speed. Streaks and guilt copy age badly.
No brand colours per platform
Platforms use one monochrome glyph system instead of their own logos and colours.
Why: A brand colour per platform would turn the drafts into a billboard and pull attention from the words and their status.
Zero cost per post
Writing runs through Claude Code on an existing plan, and publishing talks straight to each platform's own API.
Why: No per-call API bill and no scheduler subscription. Own API keys are optional.
No framework on purpose
Plain JavaScript, one Node process and a JSON store.
Why: One person can follow a click from screen to handler to style without a build step in the way.
One essay, everywhere
Write or pull an essay from Substack into the writing room.
It drafts posts for each platform in the writer's own voice, with five alternative hooks.
The writer edits, approves and schedules on the calendar.
Posts go out through each platform's own API.
Near-black, near-white, one fire
Grounds are never pure white or pure black, which both read harsh on a screen used all day. The only colour is one orange.
Fills, rules, focus rings and the active room.
The same orange, darker, only for small text.
The room list. Dark in both themes, a fixed anchor.
The light page. Near-white, never pure white.
The dark page. Layered near-black; depth comes from soft light.
The writer and the machine
Essays, room titles and mastheads: the human voice.
Navigation, counts, dates and buttons: the machine's facts.
Specimens are set in the nearest font on your device; the real site loads its own.
The problem
One Substack essay had to be reshaped for LinkedIn, X, Instagram, Threads, Bluesky and video, then scheduled and published through separate tools. The repeated work also risked sanding the writing down into a generic AI voice.
What it does
A self-hosted content engine that uses a voice profile from your writing to create platform-specific drafts. It publishes directly to Bluesky, X, Threads and LinkedIn; Instagram is prepared for manual posting.
Generation runs through Claude in headless mode by default, so there is no per-call bill and no third-party tool in the loop. It has its own six-page marketing site, live at repurposestudio.vercel.app: self-hosting is free and available today, the hosted tier is planned and labelled that way, and interest in it goes straight onto a waitlist.
The website
The marketing website, repurposestudio.vercel.app, exists to explain the product to writers in one scroll: one essay in, every platform out, in your own voice. It walks through the nine jobs the studio does, how it works in four steps, the writing and speaking voice idea, pricing and an FAQ, and it says plainly that everything runs on your own machine. Self-hosting is free and available today; the hosted tier is planned and labelled that way, and interest in it goes onto a waitlist. It is a static, six-page site with no framework, in light and dark themes.
Who it is for
Writers, founders and creators adapting long-form writing for social posts.
What it does, feature by feature
- Pulls your writing in. Imports essays from Substack automatically, takes anything you paste, or watches your feed and drafts new posts every 30 minutes.
- Writes in your voice. Builds a voice profile from your archive and past posts, and keeps learning from the edits you make.
- Platform-specific drafts. A LinkedIn post, an X thread, an Instagram caption, Threads, Bluesky and a short-video script, each following that platform's rules.
- Sharper drafts. Five alternative hooks per draft, a grammar check that respects your voice, and rewrite-with-feedback.
- Visuals. 1080×1350 carousel slides and quote cards, rendered offline.
- Narration and video. Reels read in your own cloned voice, generated on your own PC, or a free Microsoft voice. Finished MP4s in 9:16, 1:1 or 16:9 with captions timed to the audio.
- Ideas. An ideas inbox, ten essay ideas suggested from your archive, outlines, and remixing two essays into a new one.
- Scheduling and publishing. Post now or schedule. A planner spreads approved drafts across the week and posts straight to Bluesky, X, Threads and LinkedIn.
- Safety net. Checks every draft before you approve it, retries failed posts, resumes half-posted threads and sends a Telegram alert if something still fails.
- Any AI model. The default route runs on an existing Claude plan with no extra per-call cost; your own Anthropic, OpenAI, Gemini or OpenRouter key also works, billed by that provider.
- On your phone. Installs as an app, with an Android wrapper, so the desk is reachable away from the PC.
Why it is built this way
I built the whole loop locally: ingest once, generate per-platform drafts, learn from my edits, render the assets and publish through each platform's own API. Generation defaults to the Claude subscription I already have, so there is no per-call bill or third-party scheduler; anyone else running it can bring their own Anthropic, OpenAI, Gemini or OpenRouter key instead, encrypted at rest the same way as the publishing credentials, and the settings screen states plainly who pays. Instagram stays manual because Meta requires a publicly hosted image URL that a private local app cannot provide.
What was hard
Windows path escaping broke ffmpeg's subtitle filter, so video rendering switches to relative filenames and a controlled working directory. The ship-ready pass also had to guard malformed model output after it produced `undefined` drafts and fix missing follower snapshots that rendered as `undefined` in the planner.
Outcomes
- 5 text destinations
- No extra per-call cost on an existing Claude plan
- 4 AI providers supported
Stack
PRODUCT IN USE
Calendar
Engage
Ideas
Pieces
Planner
Pulse
Signin
Voice
Write
Need something similar?
Tell me what your team does by hand today and what the finished system needs to do. I will tell you whether an automation, a custom tool, a portal or a website is the right shape.