Implemented the template as a two-layer system: authoring data and derived scenes.
The authoring contract now lives in src/types.ts:1 and the scene expansion logic is in src/template.ts:1. That means the right way to express this is not “write every scene by hand,” but “fill one structured spec,” and the code turns that into: intro, hero demo, alternating key point text/demo scenes, then a branded ender. The composition itself is in src/FeatureVideo.tsx:135, src/FeatureVideo.tsx:274, src/FeatureVideo.tsx:404, and src/FeatureVideo.tsx:515. Root now validates props with Zod and auto-computes duration from the scene list in src/Root.tsx:51.
For actual videos, the expression is now a simple markdown/YAML spec, not custom React per feature. heroDemo.src is the full-screen clip, and each keyPoints[].demo.src is the clip for that benefit. The scaffold and docs are updated in scripts/new-spec.ts:32 and README.md:40, and the render pipeline reads that schema in scripts/render-video.ts:34. I also added @remotion/media and aligned Remotion package versions in package.json:13.
Verified with bun run check and a full render. The placeholder sample rendered successfully to out/instant-feature-videos-placeholder.mp4. One caveat: the branded ender currently uses the existing logo SVG plus a text wordmark because the repo only had traces-logo.svg; if you want the official wordmark asset, add it under public/ and I can swap that in directly.