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.

Client: Clipline MediaContent agencies

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.

Script desk

Source notes

A first print,
made by hand.

Saturday print workshop.

Materials are included.

“The only workshop in the city.”

Voice from the client's spreadsheetWrite warmly and directly, without hype.

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 review

Your first print
starts here.

Join Saturday's print workshop. Materials are included.

Ask for the workshop details.

Keyword PRINTTags Printmaking · Workshop
Source and fact-check results attachedSaved. Not published.

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

One client's spreadsheet
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

Every15 min

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.

Daily · UTC09:00

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.

Client SheetVoice, topics, drafts
Settings syncEvery 15 minutes
Saved settingsSupabase
Daily searchWeb + Instagram
Client draftFrom the Sheet
Clean + checkUp to 3 claims
Write + saveClient voice + history
ClickUp reviewPerson decides

In more detail

Technology used (8 parts)Each part of the system, and why it was chosen.
LayerTechnologyWhy it was chosen
JobsTrigger.dev v4Runs the two schedules and tasks that wait for each other, retries failures and keeps a history of each run.
ValidationTypeScript, Node.js and ZodChecks each task's input and the AI's answers before the next step, so bad data stops early.
History and accessSupabase Postgres9 tables and 10 changes to their structure (migrations). Rules stop duplicates, and each user sees only their own clients' data (row-level security).
AIOpenRouter and the Vercel AI SDKRecorded 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.
SourcesTavily and ApifyWeb search, article extraction, claim lookups and Instagram creator videos.
Client controlsGoogle Sheets APIA spreadsheet clients already know, for their AI instructions, topics, creator profiles and rough drafts.
HandoffClickUp APICreates a task in the client's own list, and waits and retries when ClickUp limits requests.
Checks and operationsVitest, logs, usage table and error classifierTests 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.
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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