No description
Find a file
Simeon Schecter ccbdb47162 Day 5+6 of the vertical slice: multi-size + per-row strips
Expands the slice from a single 300x250 banner to four IAB sizes
(300x600, 300x250, 728x90, 160x600) driven by a designer-authored
TypeSystem and a per-row strip review surface.

Layout engine
- TypeSystem with role-based typography (headline/subheadline/cta/legal)
  and piecewise size-class derivation: half_page / rectangle /
  leaderboard / skyscraper / mobile_banner.
- resolveLayout now derives per-size font/leading from the role +
  artboard size, then clamps to a legibility floor and emits a
  constraint_signal when copy does not fit at the floor.
- Four reference templates with character constraints per size.

AI pipeline (Shape B)
- One extract + one generate per feed row; generate returns per-size
  copy keyed by artboard_id plus a shared rationale block.
- Constraint-signal retry: orchestrator tightens per-(artboard, field)
  limits and re-calls generate before giving up.
- orchestrateRow returns specs[] + rationale + constraint_signals.

Review UI
- /review renders one strip per feed row, all four sizes side-by-side
  at true pixel dimensions, synced on a single GSAP master timeline.
- AiReasoningDrawer shows a per-size copy table, shared rationale, and
  any constraint signals that fired.
- /api/generate response grouped by row; /api/export accepts the same
  shape and writes exports/row-N/artboard_id.zip.

Render worker
- render-to-zip / render-many accept optional subdir + filename
  overrides so multi-size exports can be grouped by feed row.

Docs
- VERTICAL_SLICE and BUILD_SEQUENCE updated for the multi-size scope.
- RESOLVED_FEED.md documents the V1 Resolved Creative Feed proposal.
- SLICE_DEVIATIONS.md records where the slice diverges from V1.

Tests: 56 pass (28 layout-engine + 14 api-lib + 14 render-worker).
Web app: tsc clean, next build succeeds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 14:22:26 -04:00
apps/web Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
feeds Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
infra/fonts Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
packages Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
patches Day 4 of the vertical slice: render + export gate 2026-05-16 13:29:01 -04:00
scripts Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
.env.example Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
.gitignore Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
.nvmrc Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
ANTI_PATTERNS.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
ARCHITECTURE.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
Avoiding UX Failure FIRST.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
BUILD_SEQUENCE.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
CLAUDE.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
EXECUTIVE_SUMMARY.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
FRUSTRATION_LIST.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
INTERACTION_STANDARDS.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
package.json Day 4 of the vertical slice: render + export gate 2026-05-16 13:29:01 -04:00
PHASE_1_BRIEF.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
pnpm-lock.yaml Day 4 of the vertical slice: render + export gate 2026-05-16 13:29:01 -04:00
pnpm-workspace.yaml Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
PROJECT_STRUCTURE.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
README.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
RESEARCH.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
RESOLVED_FEED.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
SLICE_DEVIATIONS.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00
tsconfig.base.json Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
turbo.json Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
UX_ACCEPTANCE_CRITERIA.md Initial commit: Day 1 + Day 2 of the vertical slice 2026-05-15 10:25:21 -04:00
VERTICAL_SLICE.md Day 5+6 of the vertical slice: multi-size + per-row strips 2026-05-18 14:22:26 -04:00

Banner Studio — Claude Code Briefing Bundle

This bundle contains everything needed to begin building the agentic HTML5 banner production platform with Claude Code, plus an executive summary for non-engineering audiences.

What's in here

For Claude Code (drop these in the project root):

  • CLAUDE.md — Read on every session. Locked decisions, conventions, what not to do. The operational source of truth.
  • PROJECT_STRUCTURE.md — Monorepo layout, package by package, file by file. Use as the scaffolding target.
  • PHASE_1_BRIEF.md — Step-by-step prompts for the first week of work. Foundation phase, no UI yet.
  • BUILD_SEQUENCE.md — All 14 phases with exit criteria. Expand each phase into Claude Code prompts as you reach it.
  • ARCHITECTURE.md — The full architecture spec (the document you authored). Source of truth for data shapes, algorithms, and rationale.
  • RESEARCH.md — Research backing the locked decisions. Reference for the "why" behind stack and pattern choices.

For leadership and stakeholder decks:

  • EXECUTIVE_SUMMARY.md — Plain-prose briefing. The PPT source document. Sections map naturally to slides.

How to start

  1. Create the project repo. Copy CLAUDE.md, PROJECT_STRUCTURE.md, PHASE_1_BRIEF.md, BUILD_SEQUENCE.md, ARCHITECTURE.md, and RESEARCH.md into the root.

  2. Open Claude Code in that directory.

  3. First prompt:

    Read CLAUDE.md, then PHASE_1_BRIEF.md. We are at Step 1.1. Begin.

  4. Work through Phase 1 step by step. Do not skip the unit tests on the layout engine. Do not skip Step 1.9 (the type-safety proof) — it confirms the contract chain works before you build anything substantial on top of it.

  5. At Phase 1 exit, tag v0.1.0-foundation and start Phase 2.

A note on the documents

CLAUDE.md is intentionally opinionated. It states what is locked, what is forbidden, and where to look for the why. This is the right shape for a Claude Code briefing — it tells the model what decisions have already been made so it doesn't waste context re-deriving them, and it tells it where to look when a deeper question comes up.

PHASE_1_BRIEF.md is the only phase with literal prompts pre-written. As you complete Phase 1 and start Phase 2, expand that phase's summary in BUILD_SEQUENCE.md into a similar step-by-step brief. The first phase needed prompts because zero-state is the hardest moment; later phases can lean on the patterns established in Phase 1.

EXECUTIVE_SUMMARY.md is written to be read by people who will never touch the code. It's the document that gets adapted into a 10-slide deck or a one-pager for a stakeholder conversation. Sections are sized to map to slides without further editing.