← All work

Launch video pipeline

Proof

Proof reads a GitHub repo, finds a story worth telling and turns it into a script you can record from a teleprompter. It then cuts the take, adds captions and motion graphics, and exports a vertical video.

1st Runner-Up'Sup Build2026 · 300+ builders · S$5K+ in prizes

Proof checks three frames from every generated scene. If text clips, copy breaks or a graphic covers the speaker, it patches that scene and renders it again.

What it does

Proof reads a GitHub repo, finds a story worth telling and turns it into a script you can record from a teleprompter. It then cuts the take, adds captions and motion graphics, and exports a vertical video.

The result

Proof placed 1st Runner-Up at 'Sup Build2026 among more than 300 builders, with S$5K+ in prizes. The product now runs as an invite-only beta at tryproof.org.

How it avoids generic scripts

Proof does not ask a model for one "viral" script. It creates several different angles, then scores them against evidence from the repository and the founder's answers. The scoring prompt tells the model not to invent numbers before an angle reaches the teleprompter.

The system boundary I built

I built the render service. I also found two security holes in my first version: one let a job fetch unsafe URLs (SSRF), and another could expose another user's render (IDOR). I closed both, put the worker behind token authentication and added row-level security rules so users only see their own jobs.

Jobs are queued, persisted and resumed instead of living inside a browser request. Each attempt is kept so a failed render can be inspected instead of disappearing into a retry.

How the video checks itself

A generated scene does not ship just because its HTML rendered. Proof samples three frames and checks for clipped text, broken copy or graphics over the speaker. If it finds a problem, it patches the same scene and tries again. In the production fixture, it rejected two bad versions before approving the repair.

What broke

Two renders at once finished about 20% faster per video because one could use the worker while the other waited on transcription or upload. A third exhausted memory, so Proof runs two and queues the rest.

Whisper's word timestamps tell the renderer where to cut dead air and place each caption. The measured render time moved from 34.4 seconds to 27.6 seconds without changing the model.

Next case studyClicky for Windows