The reference-round workflow, run end to end for a real template:
Taste system (how we learn the user's taste, persisted):
- references/TASTE_PROFILE.md (living design contract) + references/README.md (the
daily loop) + a "reference round" stage in docs/TEMPLATE_BRIEF.md (provide refs or
I suggest+mock directions).
Design-quality before/after:
- HeroDemo — the fix recipe vs the faint default: layered-depth background, a proper
big video type scale, and a bold composed focal object. (Backgrounds were naked,
text too small, scenes had no objects.)
- YaldaSofreh3D + IGPromoDirections + IGProfileMock — reference-match proofs
(low-poly 3D, 3 IG-promo style directions, the realistic IG-light page).
Instagram channel-promo template (the deliverable — a flexible 5-scene FlexStory):
- igkit + 5 blocks: IGIntro, IGProfile (realistic IG-light profile, scales to all
aspects), IGFeed (post grid), IGStats (animated count-up), IGFollowCTA (Follow taps
to "Following").
- FlexStory gains a `finish` toggle so the IG-light scenes render clean (no brand
grade). INSTAGRAM_PROMO preset + 3 aspect comps in Root.
Verified: a still of every scene at 9:16 renders clean; full preview MP4 rendering.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The real visible quality leap — a handmade craft aesthetic code can't fake by being
smooth:
- craft.ts: useStopMotion (quantize the frame to "on twos/threes" + per-step jitter
→ choppy handmade motion), paperShadow (layered cast shadows for paper depth),
PAPER_TEXTURE (procedural fibrous paper grain).
- PaperCut block: a layered paper-cut landscape — sun + 4 brand-coloured paper hills
with real cast shadows + paper grain, rising into place on stop-motion timing with
an idle wobble, + paper-cut title/subtitle. Re-flows 16:9/1:1/9:16.
Registry now has 13 blocks. Verified: warm Yalda render (fits the Persian/seasonal
moat) + a stop-motion demo clip showing the on-threes choppy rise.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Unlocks the biggest catalog gaps by composition:
- BarChart: animated infographic bars (value + label, normalized, staggered grow).
- Stomp: punchy beat-synced typography — words slam in with overshoot + shake +
accent impact bar (titles / fashion / openers).
- DeviceMockup: phone/browser frame holding the user's screenshot + title/caption
(app / website promo); placeholder when no image.
Registry now has 12 blocks. All verified via FlexStory props-override stills.
docs: CATALOG_PLAN.md (the full template taxonomy + production map + build waves;
the Persian/Islamic occasions = the moat) and PREMIUM_TOOLCHAIN.md (the stop-motion/
paper-cut/premium tool plan; editable-backdrop architecture; Iran/OFAC reality).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds the product/app-showcase template type the engine was missing: a 2.5D device
frame (rounded phone with notch, or a browser window with traffic-lights + URL bar)
holding an uploaded screenshot, with title/subtitle and the shared Three backdrop.
Fields: screenshot, title, subtitle, device (phone|browser). Registry now 9 blocks.
Verified via FlexStory props-override stills (both device modes).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Grows the scene-block library toward full template-type coverage:
- LogoReveal: premium logo-motion — spring scale-in + glint sweep over the logo
(image upload or a branded play-mark placeholder) + brand text + tagline, on the
shared 2.5D Three backdrop. Fields: logoUrl, brandText, tagline.
- StatCounter: animated count-up to a target (English-digit value → Persian
display) + suffix + label. Fields: value, suffix, label.
Registry now has 8 blocks. Both verified via FlexStory props-override stills.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Turns a template into an ordered list of editable scene blocks instead of one
monolithic composition — the foundation for the scene-based template engine
(all Renderforest-style types, per-scene editable duration, add/duplicate/
delete/reorder). Render-side only; backend wiring is Phase 2.
- src/scenes/types.ts: SceneInstance/BlockProps/SceneBlock + withDefaults/clamp.
- src/scenes/chrome.tsx: shared 2.5D Three.js backdrop (parallax camera, blobs,
particles, optional 3D confetti) + grain/vignette/progress/kicker/transition.
- src/scenes/blocks/*: Core 6 blocks — TitleCard, CharacterScene (full room +
vendored CC0 character behind a desk), ImageCaption, KineticQuote, Slideshow,
OutroCTA — each with editable fields + its own duration range.
- src/scenes/registry.ts: the block registry (blockId -> block).
- src/compositions/FlexStory.tsx: the sequencer — stacks blocks in <Sequence>,
clamps per-scene duration, and computes composition length dynamically via
calculateMetadata (so add/delete/reorder/duration all flow to the render).
- StoryScenes.tsx: the 2.5D story proof this productizes; docs/TEMPLATE_BRIEF.md:
the guided creator flow + Template Spec.
Verified: all 6 blocks render via FlexStory in 16:9/1:1/9:16; a custom props
override (reordered scenes, custom characters/durations/colors) renders correctly
and the total length tracks Σ per-scene durations.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>