Christian TorresFull stack developer

Full stack developer · AI products · Philippines, remote

I build the AI that turns raw interviews into stories.

That's Plot, the product I lead at Butter Studio: hours of interview footage in, a story out, inside DaVinci Resolve and on the web. I also wire up business systems that never wanted to talk to each other, and payments that have to land exactly once.

RawStory

The story

Seven parts, one arc

06:24
Running time
12
Clips
83
Story score

Hook

The line that makes you stay.

1 clip, 00:28. Found at minute 66 of the raw interview, cut to the word and placed frame-accurate.

Illustrative example. Running time and score come from real test edits.

  • Runs inside DaVinci Resolve
  • Claude reads and writes through MCP
  • Word-level cuts, frame-accurate
  • Story score with fixes

Selected work

Systems, drawn to be questioned

All work →
  1. Claude Desktopeditor's own subscription

    MCP only. No chat in the panel and no API key in Plot. Anthropic doesn't allow a third-party product to offer claude.ai login, so the key and subscription stay with the editor.

  2. Resolve MCPdoes the cutting

    Its main tool is run_script: untyped Python strings, slower edits, no access to our engine or its tests. Claude uses it to cut. The panel doesn't.

  3. Plot MCPwrites the story back

    Hand-written stdlib JSON-RPC on Python 3.9, about 150 lines at first, so no SDK and no pip on the editor's machine. Claude writes sections, sub-categories and the score back, and works through the editor's tasks.

  4. DaVinci Resolvethe real timeline

    No move call in 21.1, and GetSourceStartFrame reads a frame low at 23.976, so source frames come from GetLeftOffset at the exact NTSC rate.

  5. Python enginepy3.9 · stdlib · typed JSON

    Reads the cut back and maps every clip to the transcript. A reorder is DeleteClips plus one AppendToTimeline: 73 ms for 37 clips, two undo entries. It refuses what it can't move safely.

  6. Story sidecarone JSON per timeline

    Keyed on clip numbers with a fingerprint of the cut, so a changed cut marks the story stale. The story follows the footage, not the position, so labels survive trims and reorders.

  7. React panelone committed renderer.js

    Strict CSP, so no inline styles. dnd-kit and Radix inject style tags, so their rules live in a stylesheet with a test that fails on upgrade, and a CSP gate scans the built bundle.

Sheet
1 of 4 · Plot
Client
Butter Studio
Role · period
Full Stack Developer · 2024 to now
Stack
Claude API · MCP · OpenAI API · Next.js
Status
Active

Experience

  1. Sep 2024 to nowFull Stack Developer · Butter Studio (Plot)
  2. OngoingEngineer · Client under NDA
  3. 2026Freelance developer · QC Chart AI
  4. Aug 2023 to Oct 2025Full Stack Developer · Bless Payments
  5. May 2023BS Computer Science · University of Rizal System

GitHub

Mostly private, rarely quiet

1,569
Contributions, last 12 months
99.9%
In private repos
10
Repos contributed to
48
Busiest day (2026-04-14)

Languages across the repos I commit to

  • TypeScript · 5 repos
  • Python · 3 repos
  • JavaScript · 1 repo

Early public projects

From github.com/TorrCod, snapshot 2026-10-29. Client code is private, so most of this shows up as counts.