Skip to content

feat(skills): design.md integration, shared video references, Claude Design gaps#549

Merged
vanceingalls merged 38 commits intomainfrom
vance/04-28-prompt-expansion
Apr 30, 2026
Merged

feat(skills): design.md integration, shared video references, Claude Design gaps#549
vanceingalls merged 38 commits intomainfrom
vance/04-28-prompt-expansion

Conversation

@vanceingalls
Copy link
Copy Markdown
Collaborator

@vanceingalls vanceingalls commented Apr 29, 2026

What

Major skill infrastructure update: design.md support, shared video-composition references, and creative direction patterns extracted from website-to-hyperframes into the base hyperframes skill.

Changes

design.md Integration (lightweight)

  • Step 0a reads any format design.md (YAML, prose, tables) — no format mandate
  • Brand colors/fonts are strict; video layout adapts per video-composition.md
  • Font warning gate: warns user if design.md names fonts without local .woff2 files
  • Design picker generates spec-compliant design.md with YAML frontmatter + prose
  • Picker generates contextual options from user's prompt (3-4 architectures, 5-6 palettes, 3 type pairings)

Shared Video References (extracted from website-to-hyperframes)

  • video-composition.md — density, scale, color presence, frame composition rules. Light canvas guidance (don't override user palette). Always read.
  • beat-direction.md — per-beat planning (concept → mood → choreography verbs → transition), rhythm templates by video type
  • techniques.md — 11 visual techniques with code patterns (SVG drawing, Canvas 2D, kinetic type, Lottie, etc.)
  • narration.md — pacing, tone, script structure, number pronunciation, hooks
  • motion-principles.md — gained image motion treatment + load-bearing GSAP rules

Claude Design Transfer Brief (6 gaps applied)

  1. Discovery step for exploratory requests (audience, platform, priority, variations)
  2. Anti-scope-creep: "build what was asked, every element earns its place"
  3. Read-source discipline: "read actual files, don't guess"
  4. Rhythm planning: declare scene rhythm before implementing
  5. Variations as first-class output for exploratory requests
  6. Two-phase verification: fast checks block, slow checks parallel

Prompt Expansion Updated

  • Uses beat-direction format (concept → mood → verbs → depth layers)
  • Rhythm declaration before scene breakdown
  • References video-composition.md and beat-direction.md

Key Design Decision

design.md = brand truth, not video layout spec. Background color is strict from design.md (don't switch light to dark). Video-composition rules teach how to make any palette work cinematically.

Files Changed (16)

New shared references:

  • skills/hyperframes/references/video-composition.md
  • skills/hyperframes/references/beat-direction.md
  • skills/hyperframes/references/techniques.md
  • skills/hyperframes/references/narration.md

Updated:

  • skills/hyperframes/SKILL.md — discovery, anti-scope-creep, rhythm, variations, two-phase verify, new references
  • skills/hyperframes/references/prompt-expansion.md — beat-direction format
  • skills/hyperframes/references/motion-principles.md — image treatment + GSAP rules
  • skills/hyperframes/references/design-picker.md — contextual generation
  • skills/hyperframes/visual-styles.md — YAML token blocks per preset
  • skills/hyperframes/house-style.md — design.md precedence
  • skills/hyperframes/templates/design-picker.html — spec-compliant output
  • skills/website-to-hyperframes/references/* — now reference shared files

Test plan

  • Design picker generates and serves correctly
  • Picker output is spec-compliant design.md
  • Composition built from picker design.md renders in Studio
  • Before/after eval: 4 topics × 2 versions showing skill guidance impact
  • Light canvas compositions respect user palette (don't switch to dark)

🤖 Generated with Claude Code

vanceingalls and others added 4 commits April 23, 2026 12:43
…e.md

Replace all visual-style.md references with design.md across SKILL.md and
house-style.md. Add Step 0 design system gate: when design.md exists in a
project, read it and use its values for all visual decisions. Add design
adherence eval to Quality Checks — verifies colors, typography, corners,
spacing, depth, and don'ts compliance after composition authoring.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…ce check

- Restore named-style detection in Step 0: if user names a style or mood,
  look up visual-styles.md and generate a design.md before falling through
  to house-style defaults
- Restore motion/style boundary: design.md defines appearance, house-style
  defines motion, design.md motion rules take precedence
- Soften adherence check vocabulary: don't assume specific field names,
  match however the user labeled their palette/don'ts sections
- Add house-style consistency check for no-design.md path: palette
  consistency across scenes + lazy defaults audit

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
When no design.md exists, offer the user a visual picker to create one.
Adds design-picker.md reference doc and design-picker.html template with
7 independent categories: theme, structure, palette, typography, corners,
density, and depth. Live preview updates as user selects options.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…rt guidance

- Add complete example architecture JSON object to design-picker.md showing
  all token placeholders, 15+ elements, and correct structure
- Add mkdir -p .hyperframes before template copy
- Add server cleanup instruction (kill %1 after user pastes design.md)
- Add port guidance (8723 default, try next on conflict)
- Fix subagent instruction: "only start from main conversation thread"
- Integrate picker as step 3 in named-style detection flow

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Copy link
Copy Markdown
Collaborator Author

vanceingalls and others added 8 commits April 28, 2026 20:42
Make design.md a prerequisite for every composition, not an optional
picker step. Step 0a is now "Design system" and must complete before
prompt expansion (Step 0b), because expansion output is supposed to
cite design.md's palette, typography, and motion energy — expanding
first produces generic breakdowns the downstream agents then ignore.

Resolution order for design.md:
1. Existing design.md in project root → use as-is
2. Invoke /visual-style skill in Create mode → save output to design.md
3. references/design-picker.md (fallback if user prefers pre-built)
4. house-style.md defaults (only with explicit "skip design")

Also expand prompt-expansion.md's scene-breakdown spec to require
2–5 decoratives per scene drawn from house-style's list, each using
design.md's palette values. Spells out that "single ambient motion"
means one looping motion applied to these decoratives, not one
element total — this was the p1 regression root cause in the eval run.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Prompt-expansion.md was re-stating house-style rules in its scene
breakdown and negative-prompt sections. That's duplication — if
house-style changes, expansion drifts. Fix:

- Prerequisites now tell the expansion step to read house-style.md
  and design.md before generating. The expansion generates output
  that conforms to those rules; it doesn't re-state them.
- Scene breakdown template names the three layer slots
  (background/midground/foreground) without re-stating the
  decorative-count rule or palette-compliance rule.
- Negative-prompt no longer hard-codes palette/font rules — those
  live in design.md and house-style.md where they belong.
- The "single ambient motion doesn't mean single element"
  clarification moves to house-style.md where the base rule lives,
  so any reader sees it next to the rule it clarifies.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Expansion is not about lengthening a short prompt — it's about
grounding the user's intent against design.md and house-style.md
and producing a consistent intermediate that every downstream
agent reads the same way.

Even a fully-detailed user prompt benefits:
- Color words ("warm", "cinematic") → resolved to design.md hex values
- Decorative layers the user forgot → added explicitly per house-style
- Vague transitions → specified as morph operations with duration/ease
  tied to design.md energy
- Per-scene timing → verified to sum to stated total

The eval showed p5 (fully-expanded brief) skipping this step and
missing the benefit. When expansion runs on an already-expanded
prompt, it's mostly pass-through, but it still binds the prompt to
design.md and house-style — which is the contract downstream steps
depend on.

Single-scene compositions and trivial edits are the only exceptions.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
The p2 eval (sparse prompt, 6 scenes) was dense and alive because
expansion had to invent atmosphere and micro-details to fill in
the 1-sentence input. The scene subagents then built from that
rich spec.

p3/p5/p6 (detailed prompts) produced muted output because the
expansion was framed as "largely pass-through" for already-detailed
inputs. Scene subagents got a thin brief and built thin output.

Make expansion always enrich, never pass-through:

- Every user prompt is a *seed*, not a spec. Expansion takes what
  the user wrote and adds atmosphere, ambient motion, micro-details.
  User's content stays; expansion builds on top.
- Scene-by-scene breakdown now enumerates 5 required fields per
  scene: background (2-5 decoratives with ambient motion), midground,
  foreground, micro-details (2-3 per scene: registration marks, tick
  indicators, monospace labels, background data streams, grid
  patterns), transition morph.
- Framing note: the quality gap between a single-pass composition
  and a multi-scene-pipeline composition comes from this step. If
  expansion front-loads the richness, every scene subagent builds
  from a rich brief; every scene comes out alive.

Addresses user feedback after the eval review: "the only significant
difference I see is in p2" — because p2 was the only case where
expansion had to enrich. Making enrichment mandatory everywhere.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
…sion

DESIGN.md now uses YAML front matter (machine-readable tokens) + markdown
prose, following the google-labs-code/design.md format spec. Extended with
a `motion:` namespace for video-specific tokens (energy, easing, duration,
atmosphere layers, transition shaders).

- step-2-design.md: full rewrite with token schema, section order, two
  complete examples (dark cinematic + light corporate)
- visual-styles.md: all 8 presets now include YAML token blocks ready to
  copy into design.md front matter
- SKILL.md: Step 0a explains new format, resolution order uses preset
  picker instead of visual-style plugin, Visual Identity Gate updated
- prompt-expansion.md: references structured token paths instead of
  prose scraping
- house-style.md: clarified design.md takes precedence

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Resolved conflicts in SKILL.md and house-style.md, taking the simplified
Step 0a (format-agnostic design.md, video-composition.md reference,
lightweight font warning) over both branches' heavier versions.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…ules

- Step 0a: lightweight — read design.md if exists, any format, warn on missing fonts
- video-composition.md: shared video-medium rules (density, scale, color presence)
- design.md = brand truth, not video layout spec
- prompt-expansion: format-agnostic, cites exact values not token paths
- storyboard: references video-composition.md for shared guardrails

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Shared references (from website-to-hyperframes → base hyperframes skill):
- techniques.md: 11 visual techniques with code patterns (zero capture coupling)
- beat-direction.md: per-beat planning, choreography verbs, rhythm templates,
  transition decisions — extracted from storyboard step
- narration.md: pacing, tone, script structure, number pronunciation, hooks
- motion-principles.md: added image motion treatment + load-bearing GSAP rules

Claude Design transfer brief gaps applied to SKILL.md:
1. Discovery step for exploratory requests (audience, platform, priority, variations)
2. Anti-scope-creep: "build what was asked, every element earns its place"
3. Read-source discipline: "read actual files, don't guess"
4. Rhythm planning: declare scene rhythm before implementing
5. Variations as first-class output for exploratory requests
6. Two-phase verification: fast checks block, slow checks run parallel

Website-to-hyperframes now references shared files instead of duplicating.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Staff review

TL;DR: Intent is right (design-first → expand → build is the correct pipeline order), and references/prompt-expansion.md is well-built. But this PR ships a second design gate next to the existing <HARD-GATE> "Visual Identity Gate" already in SKILL.md (lines 56–73 on main) — different filename casing, different resolution order, no reconciliation. Plus a broken file reference, an undeclared external skill dependency, and significant prose duplication.


Blocking

1. Two competing design gates in one file. After this PR, SKILL.md contains both the new "Step 0a" (design.md lowercase, 4-path resolution) and the existing <HARD-GATE> "Visual Identity Gate" (DESIGN.md uppercase, different 4-path resolution). They conflict on:

  • Filename casingdesign.md vs DESIGN.md. On Linux (where the renderer runs) these are different files; on macOS they collide unpredictably. Existing projects with DESIGN.md won't satisfy Step 0a's path 1.
  • Bootstrap source — new gate uses external /visual-style skill + references/design-picker.md + house-style.md; old gate uses in-repo visual-styles.md presets + 3-question fallback.
  • Hardness — old one is wrapped in <HARD-GATE>, new one is just a step.

Pick one. If new replaces old, delete the <HARD-GATE> block in this PR. Align casing — DESIGN.md (uppercase) is already established.

2. Broken reference. SKILL.md:22 (new) links to references/design-picker.md for path 3. That file is not in the diff and not in the tree. Path 3 is unreachable.

3. Undeclared external dependency. Step 0a path 2 invokes /visual-style, which lives at /home/ubuntu/.agents/skills/visual-style/ — a separately-installed skill. OSS users installing via npx skills add heygen-com/hyperframes won't have it. No graceful fallback.

4. Filename + schema mismatch with the dependency. /visual-style natively produces visual-style.md (structured YAML: style_prompt_full, colors[], typography, etc.). The PR says save it as design.md — but never defines a design.md schema. Downstream subagents are told to "use only the values it defines" without knowing what fields are guaranteed. references/prompt-expansion.md:35 even references "ease choices from design.md" — visual-style.md doesn't carry easings. Either define the schema or the contract is fictional.


Significant

5. Duplicated prose. "Design direction shapes/affects expansion output (atmosphere layers, motion energy, typography)..." appears twice almost verbatim (SKILL.md:14 and :25). Drop one.

6. SKILL.md is the hot path. This file loads on every hyperframes invocation. The PR adds ~30 lines. Per skill-creator principles: keep SKILL.md to essentials, push detail into references/. The "Using design.md during construction" subsection (passing-design-downstream bullets) belongs in a reference file.

7. SKILL.md and prompt-expansion.md contradict each other on pass-through.

  • SKILL.md:43 (new): "If the user's prompt is already scene-by-scene, the expansion is mostly pass-through..."
  • references/prompt-expansion.md:24: "Do not skip. Do not pass through."

The reference is more correct (the rest of prompt-expansion.md argues forcefully against pass-through). Fix the SKILL.md sentence.

8. PR template is empty + no test plan. No "What/Why/How/Test plan." For a workflow change that gates every composition, please document at minimum:

  • Run on a project with existing DESIGN.md (uppercase) — confirms migration path.
  • Run on a fresh project with no design context — confirms /visual-style invocation path.
  • "Small edit" run — confirms escape hatch fires.
  • "Skip design" run — confirms last-resort path writes a usable file.

Smaller things

  • Step numbering: 0a/0b/1 is the visible scar of accreted edits. Renumber.
  • house-style.md decorative-count addition is a useful clarification but reads as a band-aid mid-section. Promote to a real subheader.
  • prompt-expansion.md writes to .hyperframes/expanded-prompt.md — confirm nothing in the CLI/registry treats .hyperframes/ as generated artifact directory that lint/build could clobber.
  • Behavioral cost on iteration: even with the "tiny edit" exception, the gate triggers on every fresh invocation. Consider an explicit shortcut: existing design + single-element change → skip expansion entirely.

What this PR gets right

  • Diagnosis is correct: ordering design → expansion → scenes is the right architecture; expanding before grounding produces generic breakdowns.
  • references/prompt-expansion.md is well-structured: clear prerequisites, "why always run", per-section output spec, output destination, user handoff message. Good progressive disclosure.
  • Decorative-vs-motion clarification in house-style.md resolves a real ambiguity ("4 decoratives sharing one breathing motion is correct; 1 decorative is under-dressed" — concrete and memorable).

Recommended path

Block on (1)–(4). Reissue with: one gate not two, schema for design.md, explicit /visual-style dependency note + OSS fallback, the missing design-picker.md (or remove path 3), de-duplicated prose, real PR description and test plan. The reference file and house-style.md clarification can ship as-is.

vanceingalls and others added 2 commits April 29, 2026 14:57
…dance

Background color moved from "adapt for video" to "strict from design.md" —
agents must not override the user's palette choice. Added specific guidance
for making light canvases work cinematically: bolder borders, full-saturation
accents, structural depth via rules/dividers, background texture.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…contextual options

Prompt expansion now uses beat-direction format: concept → mood → choreography
verbs → depth layers → transition per scene. Adds rhythm declaration before
scene breakdown. References beat-direction.md and video-composition.md.

Design picker reference updated: generate architectures, palettes, and type
pairings contextual to the user's prompt instead of generic options. 3-4
architectures, 5-6 palettes (always mix dark+light), 3 type pairings.

Picker template output updated to emit spec-compliant design.md with YAML
frontmatter + prose sections.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@vanceingalls vanceingalls force-pushed the vance/04-28-prompt-expansion branch from 4e73f9e to 9d9154d Compare April 29, 2026 22:03
@vanceingalls vanceingalls changed the title feat(skills): require design.md first via visual-style skill feat(skills): design.md integration, shared video references, Claude Design gaps Apr 29, 2026
vanceingalls and others added 7 commits April 29, 2026 15:11
Two-phase picker UI: Phase 1 shows 3-4 complete mood boards (architecture +
palette + type combined), user picks a direction in one click. Phase 2 opens
fine-tune panel with all categories pre-filled from the mood board selection.

Quick wins:
- Prompt-aware section descriptions via __PROMPT_JSON__ placeholder
- Preview content uses real prompt text via {{prompt_headline}}/{{prompt_sub}}
- "Recommended" badges on options matching the selected mood board
- Phase navigation bar (Direction → Fine-tune)

New data placeholders:
- __MOODBOARDS_JSON__ — array of mood board objects with indices into
  architectures/palettes/typepairs
- __PROMPT_JSON__ — title, headline, subline for contextual UI text

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Mood board count is now contextual — as many as the creative space
warrants, not a fixed number. Documented the url() quoting bug: single
quotes inside preview_html break style attributes. Use url(path) without
quotes.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
3 type pairings wasn't enough range. Now 5-6 covering: safe/corporate,
editorial/serif, bold/display, technical/mono-heavy, warm/humanist.
Each pairing should feel like a different voice. Reference font discovery
script for options beyond defaults.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…t references

Prerequisites now explicitly list ALL references the agent must read before
generating picker options: typography (banned fonts, pairing rules),
house-style (lazy defaults), video-composition (density, scale),
visual-styles (preset inspiration), beat-direction (rhythm patterns).

Each reference includes the specific rules to enforce, not just a title.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…ries

All picker categories must be contextual to the prompt — not just
architectures. Mood boards should tell different brand stories (different
narratives, not different fonts). Palettes named after the brand's world.
Type pairings matched to the brand's energy. No generic options that could
appear on any picker.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Prerequisites now just list the references to read. The rules live in
those files — repeating them here creates two sources of truth.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- Merged Visual Identity Gate into a single HARD-GATE verification check
  that references Step 1 (no duplicate resolution order)
- Renumbered steps: 0a→1 (design), 0b→2 (expansion), 1→3 (plan)
- No /visual-style external dependency (removed earlier this session)
- design-picker.md exists (created earlier this session)
- Format-agnostic design.md (no schema mismatch)
- No pass-through contradiction (removed from SKILL.md)
- PR description already updated with full test plan

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@vanceingalls
Copy link
Copy Markdown
Collaborator Author

Review response

All blocking and significant items addressed:

Blocking (1-4)

1. Two competing gates → Merged. HARD-GATE is now a 2-line verification referencing Step 1. No duplicate resolution order.

2. Broken design-picker.md → File exists. Ships with two-phase mood board UI and spec-compliant output.

3. /visual-style external dependency → Removed. Uses in-repo visual-styles.md presets or the design picker. No external skill.

4. Schema mismatch → Format-agnostic. "Any format works (YAML, prose, tables — just extract the values)." No schema contract to violate.

Significant (5-8)

5. Duplicated prose → Removed.

6. SKILL.md size → Reduced by merging gates. Construction subsection removed.

7. Pass-through contradiction → Fixed. SKILL.md no longer mentions pass-through.

8. PR template → Updated with full description + test plan.

Smaller

  • Step numbering → 1/2/3 (was 0a/0b/1)
  • .hyperframes/ not clobbered by CLI
  • Small edit shortcut: "skip straight to the rules"

Additional work since review

  • video-composition.md — shared video-medium rules (density, scale, color presence, light canvas guidance)
  • beat-direction.md — per-beat planning, choreography verbs, rhythm templates
  • techniques.md, narration.md — extracted from website-to-hyperframes to shared
  • motion-principles.md — gained image treatment + load-bearing GSAP rules
  • 6 Claude Design transfer brief gaps applied (discovery, anti-scope-creep, read-source, rhythm, variations, two-phase verify)
  • Design picker: mood-board-first two-phase UI, contextual generation, prompt-aware previews, media asset support

vanceingalls and others added 2 commits April 29, 2026 16:19
Complete UI rewrite inspired by neuform.ai's polished design system
inspector. Key changes:

- Section cards with icons, headers, meta labels (Neuform sidebar pattern)
- Typography options show full specimen: headline + body preview + letter
  samples + font family metadata
- Palette options show 4-stop color strips (bg → muted → accent → fg)
- Tighter spacing, consistent 4px grid, refined border radius
- Proper font smoothing, letter-spacing, color hierarchy
- Dark chrome (#0e0e0e bg, #141414 cards, #1e1e1e borders)
- Mood board cards with refined preview scaling (0.48x)
- Phase 2 panel-left uses stacked section cards instead of flat lists

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
New Motion section in design picker Phase 2 with 6 easing options:
Confident (power3.out), Snappy (expo.out), Gentle (sine.inOut),
Bouncy (back.out), Elastic (elastic.out), Sharp (power4.out).

Each option shows a dot animating across a track using the real GSAP
ease — looping with yoyo so users can compare feels. Selection is
included in design.md output under ## Motion with entry easing value.

Mood boards can pre-select easing via easing_index.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
vanceingalls and others added 2 commits April 29, 2026 16:35
Reverted the YAML frontmatter format changes to step-2-design.md.
The website-to-video skill should only have extraction changes (shared
references), not format modifications.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…ference

Deleted the redirect file at website-to-hyperframes/references/techniques.md.
Updated SKILL.md reference table to point directly to the shared location
at ../hyperframes/references/techniques.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Copy link
Copy Markdown
Collaborator

@miguel-heygen miguel-heygen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes on the live head 541173f8 because the design file contract is still split between lowercase design.md and the existing uppercase DESIGN.md website-to-HyperFrames pipeline. That is not just naming churn: Step 6 loads the shared hyperframes skill, so captured projects can now miss the brand file and fall into no-design defaults on case-sensitive filesystems.

Validation notes: I checked the current patch and existing website-to-hyperframes docs, ran bunx oxfmt --check on the touched files, ran bunx tsx scripts/lint-skills.ts, and exercised the new design picker in agent-browser with sample JSON. The picker did generate a design.md, but I left a UX/schema comment from that browser pass too. bun run lint:skills did not run directly in this checkout because tsx is not installed locally; the bunx tsx equivalent passed.

Comment thread skills/hyperframes/SKILL.md Outdated

### Step 1: Design system

If `design.md` exists in the project, read it first. It's the source of truth for brand colors, fonts, and constraints. Use its exact values — don't invent colors or substitute fonts. Any format works (YAML frontmatter, prose, tables — just extract the values).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This still leaves the original casing blocker unresolved. The website-to-hyperframes pipeline in this PR still creates and gates on DESIGN.md (skills/website-to-hyperframes/SKILL.md Step 2, plus the Step 6 build docs), but the shared HyperFrames skill now only checks lowercase design.md. Step 6 explicitly loads this skill, so a captured project with only DESIGN.md will take the no-design path here and can prompt/fallback to house style instead of using the captured brand. On Linux those are different files. Please either recognize DESIGN.md here, preferably before design.md for existing projects, or migrate every producer and consumer to one canonical casing in the same PR.


### Mood board data format

Each mood board pre-selects one option from each category. The user picks a mood board in Phase 1, then fine-tunes in Phase 2 with those selections pre-filled.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The template now treats Motion/easing as a required category (checkReady requires picks.easing !== null), but this moodboard contract and example do not include easing_index. I exercised the picker with data shaped like this example: selecting a moodboard prefilled every documented category, but the Create design.md button stayed hidden until I manually scrolled to Motion and picked an easing. Either add easing_index to the required moodboard schema/example or default an easing in goToTune; otherwise the advertised complete-direction path looks stuck.

</script>
```

- **Prefer `tl.fromTo()` over `tl.from()` inside `.clip` scenes.** `gsap.from()` sets `immediateRender: true` by default, which writes the "from" state at timeline construction — before the `.clip` scene's `data-start` is active. Elements can flash visible, start from the wrong position, or skip their entrance entirely when the scene is seeked non-linearly (which the capture engine does). Explicit `fromTo` makes the state at every timeline position deterministic:
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This new rule conflicts with the hot-path docs that still tell authors to use gsap.from() for entrances (skills/hyperframes/SKILL.md under Layout Before Animation and website-to-hyperframes Step 6). Since this section says from() can silently fail under seek, please update those higher-priority examples/instructions in the same PR; otherwise agents will keep following the hot path and only discover this exception later.

Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Staff re-review (round 2)

TL;DR: Major progress. The four blocking items from round 1 are all resolved or substantially addressed. Remaining issues are doc-cleanup-grade — none are blocking. Recommend approve after the stale Step 0a references are updated.


Round 1 blockers — status

1. Two competing design gates → ✅ Resolved. The <HARD-GATE> block has collapsed to a one-line "verify you have a visual identity from Step 1" pointer. design.md casing is now consistent throughout (lowercase). The "Step 0a/0b/1" numbering is gone — clean Step 1/2/3 ordering.

2. Broken references/design-picker.md link → ✅ Resolved. File is in the diff (+116 lines) and well-structured. The two-phase mood-boards-first picker is a solid UX choice, and the preview_html token contract ({{bg}}, {{fg}}, {{ac}}, {{cr}}, {{shadow}}, {{prompt_headline}}, etc.) is concrete enough to author against. Security guidance (no <script>, no event handlers) and the single-quote-in-style gotcha are real and worth keeping.

3. Undeclared external /visual-style dependency → ✅ Resolved. The picker now lives in-skill (templates/design-picker.html is shipped, references/design-picker.md documents the workflow). No external skill required. OSS users get the picker for free.

4. design.md schema mismatch → ✅ Substantially resolved. The picker outputs google-labs-code/design.md spec format (YAML frontmatter with colors, typography, rounded, spacing, plus ## Overview, ## Colors, ## Typography, ## Layout, ## Elevation, ## Components, ## Do's and Don'ts prose). Easings now flow through via the ## Motion block (verified in templates/design-picker.html:1302). One soft-contract concern below.

5. Duplicated prose → ✅ Resolved (zero hits for the duplicated phrases now).

6. SKILL.md hot-path bloat → 🟡 Partly. Net delta is +50 lines (364 → 414) vs the originally-flagged ~30. The "Using design.md during construction" subsection moved out — good. The new shared references (video-composition.md, beat-direction.md, motion-principles.md, narration.md, techniques.md) are pulled into the References block at the bottom marked "Always read" or "Read when…". Loading rule is clear; size is acceptable.

7. Pass-through contradiction → ✅ Resolved. Step 2 in SKILL.md and prompt-expansion.md now agree — always run, exception is single-scene + trivial edits.

8. PR template + test plan → ✅ Body is filled in, test plan is concrete (5 checked items including a before/after eval).


New / lingering issues (non-blocking)

A. Stale Step 0a references in references/prompt-expansion.md. Steps were renumbered to 1/2/3 in SKILL.md, but the reference still says:

  • L5: "Runs AFTER design direction is established (Step 0a)."
  • L16: "If design.md doesn't exist yet, run Step 0a (Design system) first."

Should be "Step 1" / "Step 1 (Design system)". Same stale Step 0a appears in the PR description's ### design.md Integration bullet — worth a one-line edit to keep the description honest.

B. "Ease choices from design.md" is now technically true but soft-contract. prompt-expansion.md:29 tells expansion to cite "exact hex values, typography parameters, ease choices from design.md." The picker does emit a ## Motion prose block (Entry easing: power3.out), so easings are present — but as prose, not a structured field. Scene subagents must regex out of free-form markdown. Workable; flag for future structuring.

C. revert(skills): restore step-2-design.md to original — small thing, but the commit log shows step-2-design.md was added then reverted. If that file was never landed it's fine; if it's referenced anywhere in the new docs, double-check the link still resolves.

D. chore(skills): delete techniques.md redirect stub, update SKILL.md reference — verify the references/techniques.md referenced in SKILL.md:404 points at the in-skill copy and not the website-to-hyperframes shadow that the redirect stub used to forward to. (Spot-checked SKILL.md — the path looks right, just confirming the cleanup is complete.)

E. design picker easing UI is GSDevTools-grade but undocumented in SKILL.md. The new feat(skills): add GSAP easing picker with live animated demos commit adds real value but isn't mentioned in the design-picker.md prerequisites or the SKILL.md References block. Worth a one-liner so authors know easings are first-class in the picker.


What this PR continues to get right

  • Diagnosis is correct: design → expansion → scenes is the right pipeline order.
  • references/prompt-expansion.md has held up well — clear prerequisites, "why always run", per-section output spec, output destination, user handoff message.
  • The decorative-vs-motion clarification in house-style.md ("4 decoratives sharing one breathing motion is correct; 1 decorative is under-dressed") is concrete and memorable.
  • Mood-boards-first picker workflow with deeply-contextual generation requirements ("genuinely different ways to position this product, not different fonts on the same layout") is exactly the right shape for an LLM-driven design tool.
  • ## Motion block in the picker output bridges design + animation cleanly.

Recommended path

Approve after the stale Step 0a references in references/prompt-expansion.md (L5, L16) and the PR description are updated to "Step 1". The other items (B–E) are doc cleanup, not gating.

Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving — round-1 blockers all resolved. The remaining items (stale Step 0a references in references/prompt-expansion.md L5/L16 and the PR description) are doc cleanup, fine to land in a follow-up or as a quick fix before merge.

vanceingalls and others added 13 commits April 29, 2026 16:53
…rings

Font discovery is no longer advisory — it's a blocking requirement before
generating type pairings. Calls out the specific 8 fonts the agent defaults
to from training data (Bricolage, Instrument Serif, Fraunces, etc.) and
names them as the failure mode the script prevents.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Palette strip at top of Direction phase lets users switch palettes and
see all mood boards re-render with the new colors instantly. Clicking a
palette overrides the per-board defaults; clicking again deselects.
Selected palette carries into Phase 2 fine-tune.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Added rule: if two palettes share same bg lightness + similar accent hue,
cut one. Test is whether a user can tell them apart in a 14px swatch chip.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…line

Preview height 260→320px to show more of the architecture content.
Description truncated with text-overflow: ellipsis to prevent overlap.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Fixed height was clipping the info section. aspect-ratio: 16/9 scales
with card width and guarantees the name/description/tokens are visible.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…elow

Preview is flex:1 with min-height:240px, info section is natural height.
No overlap — description always sits below the full preview frame.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Preview at 500px fixed height with 0.38x scale shows ~1315px of
architecture content. Info section sits below with no overlap.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
FAB only shows in Fine-tune phase when all picks are filled.
Hidden during Phase 1 (Direction/mood boards).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Step 1 now presents 3 paths when no design.md is found:
1. User named a style → use presets
2. Want to browse visually → run design picker
3. Want to skip → quick 3 questions + house-style

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1. Case mismatch: Step 1 now checks both design.md and DESIGN.md
2. Easing defaults to index 0 when moodboard lacks easing_index,
   added easing_index to moodboard schema example
3. gsap.from() vs fromTo(): added clarification that sub-compositions
   should prefer fromTo() per motion-principles load-bearing rules
4. Fixed stale Step 0a references → Step 1 in prompt-expansion.md

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@vanceingalls vanceingalls merged commit 22f0e6a into main Apr 30, 2026
29 checks passed
@vanceingalls vanceingalls deleted the vance/04-28-prompt-expansion branch April 30, 2026 00:48
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.

3 participants