Build on coldopen.

A company’s URL goes in, a 30-second film in their brand comes out. Every step is a checkpoint in Postgres, so you can kill the renderer halfway through and a new worker finishes the film. MIT licensed, and it runs on free tiers.

Four ways in.

The same engine behind each one. Nothing is ever sent for you: every way in makes films and drafts, and a person decides what goes out.

REST API

Make a film, poll its progress, draft the messages, read who watched. OpenAPI docs are live on the hosted app at /docs.

# make a film for one company
curl -X POST $COLDOPEN/v1/films \
  -H "Authorization: Bearer co_…" \
  -H "Idempotency-Key: linear-1" \
  -d '{"url":"https://linear.app"}'

MCP server

Ten tools for Claude, Cursor or ChatGPT: search jobs and YC startups, make films, draft messages, list follow-ups. Make an access token on your Profile page.

claude mcp add --transport http coldopen \
  https://coldopen-nk8o.onrender.com/mcp \
  --header "Authorization: Bearer co_…"

CLI

A film from your terminal, with no server and no model: the built-in writer is free, offline and reproducible. Add --model for Ollama or any OpenAI-compatible API.

git clone https://github.com/tiwaker9404/coldopen
cd coldopen && pnpm install
pnpm film https://linear.app --job <job link>

Your own server

The API, the durable workers and Postgres in one compose file. The hosting guide covers free options with no card.

docker compose up --build
# then open http://localhost:8080

How a URL becomes a film.

  1. Research

    Headless Chromium reads the homepage: colors, typefaces, logo, and every quotable fact. The job post’s requirements join the facts, and their RSS feeds add what they published lately.

  2. Script

    A writer fills six scenes, built in or any OpenAI-compatible model. Code checks every line: word limits, banned phrases, and every number traced to a source. A model gets its violations back and revises; lines it can’t fix fall back to the built-in writer.

  3. Compose

    Each scene is an HTML timeline in the company’s own fonts and colors, with paused animations so any frame can be drawn exactly.

  4. Render

    Scenes render in parallel, each in its own Chromium page, seeked frame by frame and encoded with ffmpeg. Every finished scene is its own checkpoint.

  5. Survive

    Runs are journaled in Postgres with leases. Kill a worker mid-film and the next one replays research and script from the journal, then renders only what’s left.

  6. Share

    A Cloudflare Worker serves the share page and counts real views (opened, played, finished) without storing IP addresses.

Tested like it matters.

328tests: unit, integration, runtime, and a chaos test that kills the worker mid-render
72evals of script and design quality, run on every change
$0to run: GitHub Actions, Supabase, Render and Cloudflare free tiers

Grounded by design

The model points at facts by id instead of quoting them, so code can verify that what’s on screen came from the source.

Observable

OpenTelemetry traces for every step and model call, and Prometheus metrics for queue lag, runs, replayed steps and model calls.

Safe to host

Research only opens public addresses, every redirect included. Rate limits per person, network and app keep the free tiers free.

Starter projects.

Six ways to make a first contribution, each with the files to open. Read CONTRIBUTING, then open an issue with the starter project template to claim one.