Skip to content

feat(v0.3): redesign launch film — editorial style, new features, original score#1

Open
duyet wants to merge 2 commits into
mainfrom
claude/launch-video-redesign-dihsct
Open

feat(v0.3): redesign launch film — editorial style, new features, original score#1
duyet wants to merge 2 commits into
mainfrom
claude/launch-video-redesign-dihsct

Conversation

@duyet

@duyet duyet commented Jul 2, 2026

Copy link
Copy Markdown
Member

What

Redesigns the v0.3 launch film into a flat "instrument / editorial" language, folds in the newest chmonitor features, and replaces the stock music with an original synthesized score. Also makes the film's runtime fully self-contained (no CDN), the timeline data-driven, and adds CI that renders + commits the finished media.

Motivation: "improve the launch video with the new features; redesign, no AI slop, change style and audio."

Style — cutting the AI-slop tells

Before After
Breathing orange radial glow + vignette backdrop Flat ground with a faint static measurement grid + soft mask
Lottie "pulse ring" spinner around the logo Removed; clean logo draw-in + a drawn accent rule
Glassmorphism pills (translucent white + dot) Flat monospace spec tags (hairline outline, accent tick)
macOS traffic-light window chrome Hairline product window — status dot, lock, URL, live-refresh arc
Bouncy easeOutBack everywhere Confident easeOutExpo, short travel, mask-revealed titles
Persistent film rail: cue index · progress · domain; numbered, ruled kickers

New / refreshed features

  • Alerts (new scene) — threshold alerts as browser notifications (on by default). Rendered as real notification cards in-film, no screenshot needed.
  • SQL Console (reframed) — multi-query results, database tree, live dependency graph.
  • Expensive queries elevated in the montage; trusted-proxy auth in the deploy scene.
  • Count-up intro stats; fixed the pre-rebrand end-card URL (chmonitor/chmonitor).

14 cues (11 numbered features), ~31s.

Runtime / build

  • Data-driven timeline — cue durations live in buildCues(); start/end (0.15s overlaps) and total are derived and exposed as window.__duration. render.mjs reads it, writes render-duration.txt, and takes the Chrome binary from $CHROME.
  • Self-contained, no CDN — React / ReactDOM / Babel 7 vendored under src/vendor/, Space Grotesk + JetBrains Mono (latin woff2) under src/fonts/. Renders fully offline; Pages self-hosts the player. (Babel 8 broke the in-browser text/babel runner.)
  • Original scoremusic.mp3 is synthesized sample-by-sample (src/scripts/synth-music.mjs: monitor-pulse kick, warm bass, arp, pad over Am–F–C–G) with a soft intro / full body / gentle outro. Deterministic, no stock/AI track.

LFS media + CI auto-render

The re-rendered chmonitor-v03-design-launch.mp4 and src/music.mp3 (both Git LFS) are not in this PR: the environment that produced it blocks lfs.github.com, so new LFS objects couldn't be uploaded. To close that gap this PR adds .github/workflows/render.yml, which on any source change to main (or manual dispatch):

  1. regenerates the score with scripts/synth-music.mjs (verified byte-identical to the shipped track),
  2. renders the 933 frames headless (vendored runtime → offline),
  3. encodes the MP4 (length/fade read from render-duration.txt), and
  4. commits the finished LFS media back.

It triggers only on source paths (never the media it writes), so it can't loop. On merge, main's media updates itself — no manual LFS push needed. The rendered MP4 was also shared with the author out-of-band for immediate review. Everything is reproducible locally too (CHROME=... node render.mjs + the ffmpeg command in v0.3/README.md).

Verification

  • Rendered headless (chromium) with zero page errors across all 14 cues; spot-checked frames for every scene type.
  • Final encode: 31.1s · 1920×1080 · H.264 High + AAC stereo.
  • Synth output confirmed byte-identical (md5) to the audio in the delivered MP4.

Docs updated: v0.3/README.md, root README.md, landing card (index.html), and CLAUDE.md workflow notes.

🤖 Generated with Claude Code

https://claude.ai/code/session_013cRjpwtrRQiy1cdyPo3zq6

duyetbot and others added 2 commits July 2, 2026 11:22
…ginal score

Redesign the v0.3 launch film to a flat "instrument / editorial" language and
fold in the newest features, replacing the previous look and the stock score.

Style (cut the AI-slop tells):
- flat measurement-grid ground (no breathing radial glow / vignette)
- numbered cues, ruled kickers, mask-revealed display titles
- flat monospace "spec" tags instead of glass pills
- hairline product window with a live-refresh arc (no traffic-light chrome)
- persistent film rail (index · progress · domain); confident easeOutExpo motion
- removed the Lottie pulse-ring dependency

Content / new features:
- new Alerts scene (fully rendered browser-notification cards, no screenshot)
- SQL Console reframed (multi-query, database tree, dependency graph)
- expensive-queries elevated in the montage; trusted-proxy auth in deploy scene
- count-up intro stats; fixed the pre-rebrand end-card URL

Runtime / build:
- data-driven timeline (buildCues) — durations + total derived, exposed as
  window.__duration; render.mjs reads it and takes Chrome from $CHROME
- self-contained: React / ReactDOM / Babel 7 vendored under src/vendor, fonts
  under src/fonts — renders fully offline, no CDN
- original deterministic synth score generator (see v0.3 README § Music)

Source only: the re-rendered chmonitor-v03-design-launch.mp4 and src/music.mp3
(both Git LFS) are not included here because this environment's egress policy
blocks lfs.github.com, so new LFS objects cannot be uploaded. The film is fully
reproducible from this source — `CHROME=... node render.mjs` + the ffmpeg
command in v0.3/README.md regenerate the exact MP4 and score.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013cRjpwtrRQiy1cdyPo3zq6
Add .github/workflows/render.yml: on source changes to v0.3/src (or manual
dispatch) it regenerates the deterministic score, renders the frames headless,
encodes the MP4, and commits the finished Git LFS media (MP4 + music.mp3) back.
This closes the loop for environments that can't push LFS objects — the
reproducible source lands via PR, CI produces the binaries. Triggers only on
source paths (never the media it writes), so it can't loop.

- add v0.3/src/scripts/synth-music.mjs (the deterministic music synth; verified
  byte-identical to the shipped score)
- render.mjs writes render-duration.txt so the ffmpeg encode (-t / afade) stays
  in sync with the data-driven timeline
- document the synth command and CI flow in v0.3/README.md; gitignore scratch

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013cRjpwtrRQiy1cdyPo3zq6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants