Back to DevLog

Config-Driven Channel Templates: One Codebase, Multiple Brands

2 min read

Had one of those satisfying refactor sessions today where everything just clicks into place. Been working on StreamStack's channel template system, and finally cracked the code on making it truly config-driven.

The Problem

I was tired of hardcoded brand colors, watermarks, and CTAs scattered throughout the codebase. Every time I wanted to spin up a new channel, it meant hunting through components and scripts, copy-pasting values, and inevitably missing something. Not scalable.

The Solution: Centralized Channel Config

Built a clean config system that drives everything from one place:

  • TypeScript config (src/config/channels.ts) for Remotion components with full ChannelConfig interface
  • JavaScript subset (scripts/channel-config.js) for Node.js scripts to avoid ts-node complexity
  • Config drives Claude prompts - even the AI script generation pulls CTA text and style from config

Major Refactor Highlights

Pulled all the hardcoded stuff out of FolderScene.tsx - colors, stamps, watermarks, fonts. Now it just accepts a config prop and renders accordingly. The ScriptVideo.tsx component grabs the right config and passes it down.

Even rewrote the theme preview with a channel selector dropdown so I can see all brand variations side-by-side.

BunkerVault Gets a Glow-Up

Switched BunkerVault from that military olive color to a proper neon green (#00ff41) with dark green-black backgrounds. Much more fitting for the vibe.

The Beauty of This Architecture

Now adding a new channel is just:

  1. Add entry to channels.ts
  2. Add corresponding entry to channel-config.js
  3. Done.

No component changes, no hunting through files. The isDossier logic automatically picks up channels that use the folder/dossier layout, and everything else flows from config.

Deployment Strategy

Got two unpushed commits sitting on master because Railway auto-deploys and I don't want to break the 5:30am CT scheduled video. Sometimes the most important part of shipping is knowing when NOT to ship.

Next up: push after the morning video runs, test a BunkerVault render, and start planning the next channel addition. This foundation makes scaling so much cleaner.

Share this post