Fact-checked video scripts written in each client's voice
Clipline Media needed researched video scripts for several clients, each with a different voice. This software checked facts before writing and sent each script to ClickUp, the agency's task tracker, for a person to review. It was used for real client work; both schedules have been paused since April 2026.
CreditBuilt by our founder as lead developer for a partner agency, extending the agency CTO's first version.
From source to script
The facts are checked before the script is written
Watch one source become a draft script for a person to review, written in the client's voice.
Source notes
A first print,
made by hand.
Saturday print workshop.
Materials are included.
“The only workshop in the city.”
Claim review
Use what is verified,
and leave out the rest.
- Saturday workshopVerified
- Materials includedVerified
Only workshop in the cityNot verified · Avoid using
Script draft · Client voice applied
Your first print
starts here.
- Opening
- Your first print starts here.
- Message
- Join Saturday's print workshop. Materials are included.
- Ask
- Ask for the workshop details.
The “only workshop” claim is not in the draft.
Client's ClickUp list
For reviewYour first print
starts here.
Join Saturday's print workshop. Materials are included.
Ask for the workshop details.
The fact-check, in short: “Only workshop in the city” has no supporting source. It is marked “avoid using” and left out of the script.
About Clipline Media
Clipline Media writes for several clients, and each one needs its own voice.
Clipline Media writes short-form video scripts for TikTok, Reels and Shorts. Each creator or brand has its own topics, tone and place to track work. The software had to keep those differences as the agency added more clients.
- Client
- Clipline MediaA short-form video agency writing for creator and brand clients
- Client control
- One Google Sheet, a shared spreadsheet, per client
- Review destination
- The client's own ClickUp list
- Build time
- 5 days to a working multi-client versionExtended the agency CTO's first version, then refined over about 4 months.
The problem
Most of the work happened before anyone wrote a script
Each client's voice was hard to keep track of
The AI instructions (prompts), topics and preferences for each client were spread across different tools, with steps someone had to run by hand.
Research took longer than writing
Finding a useful topic and checking its facts took time before a script could be written.
Searches were repeated too often
The first version ran a new web search every time it read a client's spreadsheet. Each new client added more repeated searches.
What each client controls
Each client can change its voice without changing how the software works
- Voice
- Warm, direct and specific. Explain before you sell.
- Topics
- Printmaking · First-time workshops
- Creators
- Profiles this client chooses to follow
- Drafts
- Paste a rough idea and get a structured script back.
Clients could edit their AI instructions and topics here. The choice of AI models stayed in the code.
Two schedules did two different jobs
Copy the settings
Saves spreadsheet changes to the database (Supabase). No topic search runs on this schedule. Rough drafts are picked up here to be polished.
Find the sources
Searches each active client's topics and chosen creators. It skips links already handled, then checks the facts and writes the script.
These were the schedules used for real client work. Both have been paused since April 2026.
Kept with every script
Each draft keeps its history
- Source link and fact-check results
- Client, topic and script
- AI use and estimated cost
The database kept the record between runs. ClickUp held the task for the person reviewing it.
Control and safety
Each script goes to a person to review, and nothing is published
The script is handed over as a task in ClickUp. The software does not publish anything, and checking a few claims does not prove the whole script is accurate.
- Unverified claims are flagged. The AI writer is told to avoid them. A person still reviews the rest of the script.
- Each client's work is kept separate. Each client has its own spreadsheet, ClickUp space and list, and an ID on its database records. Each user gets viewer, editor or admin access only to the clients they work on.
- Each script records its cost. The AI model used, the amount of text it processed (tokens) and the estimated cost are saved with each script.
- Pausing needs a deliberate step. Switching a client or schedule on or off allows a test run and asks for confirmation first. Both schedules are off in the recorded state.
For technical readers
How the system works
While the schedules were on, settings were copied from each client's spreadsheet into Supabase, the database, every 15 minutes. A daily task found new articles and videos; these and client drafts went through checking and writing. Each script was saved and sent to the client's ClickUp list.
In more detail
Technology used (8 parts)Each part of the system, and why it was chosen.
| Layer | Technology | Why it was chosen |
|---|---|---|
| Jobs | Trigger.dev v4 | Runs the two schedules and tasks that wait for each other, retries failures and keeps a history of each run. |
| Validation | TypeScript, Node.js and Zod | Checks each task's input and the AI's answers before the next step, so bad data stops early. |
| History and access | Supabase Postgres | 9 tables and 10 changes to their structure (migrations). Rules stop duplicates, and each user sees only their own clients' data (row-level security). |
| AI | OpenRouter and the Vercel AI SDK | Recorded setup: Gemini 3.1 Pro for scripts, GPT-5 mini for claim checks, Gemini 3.1 Flash-Lite for cleaning and Gemini 3 Flash for video. |
| Sources | Tavily and Apify | Web search, article extraction, claim lookups and Instagram creator videos. |
| Client controls | Google Sheets API | A spreadsheet clients already know, for their AI instructions, topics, creator profiles and rough drafts. |
| Handoff | ClickUp API | Creates a task in the client's own list, and waits and retries when ClickUp limits requests. |
| Checks and operations | Vitest, logs, usage table and error classifier | Tests the system, records each run and saves AI usage and estimated costs. |
5 engineering decisions that matteredThe problem, what was done, and what it changed.
Separate copying settings from searching
The first version searched for topics every time it copied settings: every 15 minutes, or 96 times a day. Searching moved to one daily run, while settings still refresh every 15 minutes.
ResultAbout 96 scheduled chances to search each day became 1, by calculation. This is not a measured saving on the bill or a count of every request to a provider.
Make running a job twice safe
Duplicate Instagram profiles were removed, and the database now refuses a second copy of the same client and username. A source link that is already done returns its saved script instead of paying to write it again.
Stop early on videos that cannot be used
A size check stops files over 75 MB. Expired links and wrong file types stop without retrying. A task that runs out of memory retries on a larger machine, from 1 GB to 4 GB.
Keep alerts readable
After a service outage put about 8 KB of error text into a team alert, every failure is now sorted into 5 types. Deliberate limits do not retry, and each alert explains the failure in one line.
Clients change the voice, not the AI setup
Clients edit their instructions, topics and profiles in their spreadsheets. The choice of AI models stays in the code, so every client uses the same tested setup.
Testing and build recordHow it was tested, and the build by the numbers.
Quality and reliability
- About 120 automated tests cover the database, the spreadsheet link, the AI layer, cost calculations, the client on/off switch and the settings copy.
- Task inputs and AI answers are checked against set rules (Zod schemas). Each script comes back in named parts, such as the opening and the call to action, not as one block of text.
- Failures that can be retried are tried 3 times with growing delays; deliberate limits and unusable video links stop early.
- If one client's run fails, the daily run carries on, so a broken spreadsheet does not stop the other clients.
- AI provider prices are stored for an hour, with a backup price table. Saved costs are estimates.
By the numbers (build)
- 50 code changes (commits) over about 17 weeks, including the CTO's first version; 34 of them in the first 5 days.
- 13 background tasks: 11 that run when needed and 2 that run on a schedule.
- 9 database tables and 10 changes to their structure.
- About 9,500 lines of application code and about 2,600 lines of test code.
- 66 helper scripts for setting up clients, checking status and cleaning up. Four older no-code workflows were rebuilt in code.
Is it a fit?
Could this work for your team?
- Video and social agencies Your agency writes for several clients with different topics and voices.
- In-house content teams Your team needs a steady supply of researched scripts for people to review.
- Newsletter, podcast and newsroom teams Your team starts from sources and needs claims checked before writing.
- What we would adapt We can adapt the sources, task tracker, script formats and settings each client can edit.
Is your team still moving every script between tools by hand?
Conducted by Apurva · Not a sales call
Or write to care@brownmind.com