All projects

YardToonz Reactive

Obvious Frontier Build Atlanta · 2026

An internal creator system that reduces the time between a culturally relevant moment and a reviewable YardToonz cartoon, while keeping editorial selection, rights clearance and final approval with a human.

Role
Sole builder and technical decision-maker
Context
Obvious Frontier Build, Atlanta, 2026
Status
Deployed demo on Railway
Core stack
TypeScript · Next.js · SQLite · FFmpeg
The YardToonz Reactive candidate review screen for a rain-day laundry moment: engagement counts and audience comment excerpts on the left, and on the right an overall opportunity score of 79 broken into viral momentum 60, humor response 82 and Yard Toonz fit 100, each with the evidence it was derived from, above Approve for production and Reject candidate buttons.
Each score stays separate and says what it was derived from. Approving records an editorial decision; it does not start generation.Open full size ↗

Engineering brief

Architecture
A Next.js app and a separate long-running worker over one SQLite database and one artifact directory. The web app records decisions and reads state; the worker claims one pipeline stage per poll tick and does the FFmpeg and provider work. Drizzle owns the schema, Zod owns every boundary.
The hard part
Making a media pipeline safe to retry. Stages are claimed with database leases rather than held in memory, each stage fingerprints its inputs, and every output is persisted as a typed artifact, so a worker that dies mid-transcode releases its claim and the next attempt can tell resumption from repetition.
Testing
77 test files: 46 unit, 28 integration and 3 Playwright specs. The browser walkthrough rehearses the whole path against a production build with the real worker process, then downloads the finished MP4 and probes it for 9:16 dimensions and an audio stream.
Known limitation
This is a demonstrable vertical slice, not production infrastructure. SQLite, local artifacts and a polling worker share one Railway service, which is a deliberate fit for a single-operator demo and not what a multi-tenant version would use.
The problem

The bottleneck was latency, not judgment

Making a YardToonz video already worked. What it took was a chain of separate decisions across separate tools: find a moment worth animating, read how an audience actually responded to it, decide whether it fits the YardToonz voice, confirm there is permission to use it, pick a usable few seconds, style the visual, animate it, restore the audio, then look at the result and decide whether it ships.

None of that is a shortage of creative judgment. It is production latency. Every handoff between tools is a place the work sits, and a cultural moment does not wait. Reactive exists to compress the distance between noticing something and having something reviewable, without taking any of the judgment out of it.

The system

One path, with a human at three points on it

Candidate intake, scoring, human approval, rights confirmation, orchestration, the worker stages, artifact storage, QA validation, preview, and finally approval and download.

Scores stay separate

Viral momentum, humor response and Yard Toonz fit are computed and shown independently, each with the inputs it used. They are deterministic rankings over supplied metrics, not predictions of how anything will perform.

A human chooses

Nothing enters production because it scored well. An editor approves a candidate, and the system records that as a decision with a timestamp.

Rights are a hard gate

Confirmation is stored before any upload or processing. Without it the orchestrator reports a blocker and will not advance.

Nothing publishes

The last step is review and download. There is no posting integration, and the finished file leaves through the operator.

Engineering decisions

The calls that shaped it

A separate worker, not a web request

FFmpeg work runs for tens of seconds and must survive a deploy. Doing it inside a request handler ties a browser connection to a transcode and loses the job when the process restarts. The worker polls for claimable stages and runs one per tick, so the web app only ever reads state.

Database-backed claiming, leases and heartbeats

A stage is claimed with a lease rather than handed out in memory, so a worker that dies mid-stage releases its claim on expiry instead of stranding the job. The worker writes a heartbeat the health endpoint reads, which is how you tell "queued" apart from "nothing is running".

Input fingerprints and artifact lineage

Each stage records a fingerprint of its inputs and the artifact it produced. A retry can tell whether it is repeating work or resuming after a crash, and the finished video can be traced back through all seven artifacts to the source clip.

SQLite and Drizzle, deliberately

The demo has to run identically on a laptop and on one Railway service with no external dependencies. SQLite with typed Drizzle migrations gives a deterministic local-first setup, and the schema keeps the stage-name and status constraints in the database rather than only in application code.

Zod at every external and cross-process boundary

Uploads, provider responses and the rows the worker and the web app exchange are all parsed rather than trusted. Schemas are strict, so an unexpected field fails loudly at the boundary instead of flowing into a stage that half understands it.

Providers chosen independently, and attributed

Image and animation providers are selected separately, so the whole path runs on mock adapters with no paid credentials. Whichever provider produced an artifact is recorded on it, which is why the QA report can check attribution rather than assume it.

Rights clearance as a hard gate

A public post is not permission. Confirmation is timestamped and stored before any upload or processing, and the orchestrator refuses to proceed with a RIGHTS_NOT_CONFIRMED blocker. It is a state the system cannot route around.

Diagnostics that leak nothing

The diagnostics view reports provider selection, worker health and stage state without exposing prompts, filesystem paths or credentials, so it is safe to leave reachable on a deployed demo.

The pipeline

Seven stages, one claimed at a time

Each stage is a persisted row with a status, an attempt count and a lease. The worker claims the next claimable stage, runs it, writes its artifact, and releases. A stage that fails is retried from its own recorded inputs rather than from the beginning.

  1. 01

    Ingest source

    The authorized clip is stored and fingerprinted.

  2. 02

    Extract media

    The selected 5 to 8 second segment and its audio come out separately.

  3. 03

    Select keyframe

    One frame is chosen to carry the visual style.

  4. 04

    Style image

    The keyframe becomes a clay-style frame, mock or live provider.

  5. 05

    Animate image

    The styled frame becomes silent motion.

  6. 06

    Mux and normalize

    Original audio is restored and the output is normalized to 9:16.

  7. 07

    Validate output

    Dimensions, audio stream, duration and lineage are checked.

The YardToonz Reactive output screen after a complete run: a vertical cartoon preview with native playback controls beside metadata reading six seconds, 360 by 640, H264 video, restored audio and mock image and animation providers, above all seven pipeline stages marked COMPLETE and a Download MP4 button.
A finished run in mock mode. All seven stages complete, providers recorded on the output, and the last action is a download rather than a publish.Open full size ↗
Evidence

What the repository actually shows

Deterministic inbox

Ten seeded candidates, ranked highest first, identical on every reset.

Separate scores

Viral momentum, humor response and Yard Toonz fit stay separate and explainable, weighted 40/30/30 into an overall figure.

Segment constraint

The selected segment is validated to 5 to 8 seconds before production starts.

Artifact lineage

Seven artifact kinds preserved, from source video through to final video.

Output validation

The final MP4 is probed for 9:16 dimensions and a present audio stream.

QA registry

Ten deterministic checks, including aspect ratio, audio presence, duration window, provider attribution and lineage completeness.

Test coverage

77 test files: 46 unit, 28 integration and 3 Playwright specs, including a full browser walkthrough.

No credentials required

The complete mock workflow runs end to end without an OpenAI or Runway key.

Deployed on Railway, where the web process, the worker, the SQLite database and the artifact directory share one persistent service boundary.

Tradeoffs

What a scaled version would change

The current deployment is a vertical slice built to be demonstrated end to end by one operator. SQLite, a local artifact directory and a polling worker on a single service are the right size for that, and the wrong size for concurrent operators.

Scaling it moves three things: persistence to a managed database, job execution to a real queue with multiple workers, and artifacts to object storage. The domain contracts would not move. Stage claiming already assumes competing workers, artifacts are already addressed by kind and fingerprint rather than by path, and every boundary is already parsed rather than trusted, so the interesting logic survives the swap.

YardToonz in the wild

The brand the system serves

YardToonz is a Jamaican claymation-style comedy brand. It takes moments people already recognise, the domino slam, the sudden rain on fresh laundry, the change calculation that turns into a committee meeting, and animates them as short-form comedy.

The audience response came first. The account has passed 32K followers and 328K likes, and its most-viewed cartoon sits above 1.2M views. What that proved was demand, and what it exposed was the production latency behind meeting it. Reactive was built for that gap. It shortens the time between a moment and a reviewable cartoon, and it leaves the choice of what is actually funny, and what actually ships, with a person.

A YardToonz claymation-style character with exaggerated eyes and a wide grin reacts to camera against a warm orange backdrop, in a vertical short-form clip.

@yard.toonz · Jamaican animated comedy

View YardToonz on TikTok

Human-directed demo using authorized or deterministic source media. Candidate data is seeded fixtures, nothing is imported from social platforms, and nothing publishes automatically.