Pipeline Hub

format-ui-mockup

Native-UI static ad for DawnBands, a short text-message thread (co-parent blames her, teen texts from bed, sister vent) rendered deterministically and set inside a Dawn brand frame with the band, root cause, mechanism and pill. The thread is a scene of the blame on her, never a review.

Lane: statics · not built yet: 1 (see below) · source: /Users/ayden/.openclaw/workspace/skills/format-ui-mockup

SKILL.mdbeat-sheet.mdrender-spec.mdsources.mdEvals (6)Learnings (12)
1. Read first2. When to use / when not3. The format4. Why it sells5. Beat sheet (full rules in references/beat-sheet.md)6. Pack spec (static spec.json, gen_statics shape + one `thread` block)7. Visual grammar (and the lock reconciliations)8. Audio9. Production (render is $0; review calls are Gemini)10. Gates & QA checklist11. Variants & test plan12. Failure modes13. Sources

format-ui-mockup — the thread is the scene, the frame is the brand

1. Read first

2. When to use / when not

3. The format

Rank Thread Why it fits Receipts / risk
1 Co-parent → mom (husband / ex) The accuser close to her (recipe A's strongest stake) in a vessel that needs no narrator; stake on mom is the static money ($178K, 1.86) VOC: "let him be late" (6 corpus hits), survey S04 "On mornings my husband has wake up… I still end up doing it". Keep him reasonable and wrong: blame/lecture/villain framings died in every batch
2 Teen → mom, from bed Blame lands on her from the kid; the line is already a live static callout "Why didn't you wake me" (3 hits; 10-04 a2 PASS). Vary teen age/gender per variant
3 Mom ↔ sister/friend (her vent) Recipe B allows confession; her own words about the burden m1c (sister thread) starved; it was a before/after story. Burden only, never an "after"
4 School → mom (attendance text) Stake bank #6 (truancy letter in her name) is the top legal stake Attendance-shame statics $121 / 0, m1a attendance portal $20 / 0. Reserve; needs Fish's go

4. Why it sells

5. Beat sheet (full rules in references/beat-sheet.md)

Beat Where Job Must contain Line rules
0 Caption top bar Name her + ADHD in brand voice ADHD; "your" reader; ≤8 words Recipe B POV; no question that only works after reading the thread
1 Opener bubble 1 (them) The stake, in action Verbatim VOC, ≥5-word corpus hit ≤12 words; readable alone at feed size; no backstory
2 Her burden bubble 2 (me) Prove she's the alarm Her verbatim line (tries, knocks, yelling) ≤10 words; she never lectures
3 Escalation bubble 3-4 (them) The blame lands / costs her Consequence the mornings caused One new fact per bubble; reasonable, wrong
4 Last word bubble 4-6 (me, optional) Exhaustion, unresolved Her verbatim Thread ends unresolved; "Delivered" under it
5 Turn product zone Root cause + mechanism Fish's ruled lines verbatim Root cause, then mechanism, then pill

6. Pack spec (static spec.json, gen_statics shape + one thread block)

7. Visual grammar (and the lock reconciliations)

8. Audio

None (static). The primary text and title are the parent static's, verbatim (one variable = the image).

9. Production (render is $0; review calls are Gemini)

B=output/dawn-ui-<slug>-<date>; cd ~/.openclaw/workspace
python3 scripts/statics/voc_check.py "<bubble 1>" "<bubble 2>" …      # every bubble; 0 = rewrite (or survey waiver with file:line)
python3 scripts/statics/gen_statics.py $B/spec.json --check   # real gate; waived findings print as WAIVED + reason (10-06)
python3 scripts/statics/gen_statics.py $B/spec.json --list    # approval sheet incl. waivers
#   + CALLOUTS.md table with every bubble → Fish approves callouts and threads BEFORE any render
# RENDER ($0, built 10-06): HTML → Playwright element screenshot → PIL brand frame → $B/renders/<slug>.png + .render.json
python3 scripts/statics/render_thread.py $B/spec.json [--size 2048x2048,1080x1350,1080x1920] [--only <slugs>]
#   exit 1 = card overflows at 60 px/2048 text (cut a bubble), clock time, or HTML text != lines.bullets; 9:16 keeps y 14-65 %
#   intermediates (html, *.thread.png) go to $B/thread/, outside renders/; iOS values PROVISIONAL until ui-refs/ has the real ref
python3 scripts/statics/static_review.py $B/renders --spec $B/spec.json   # sidecars; FAIL = fix the template, not a regen
python3 ~/ad-batch-hub/stage-session.py $B/renders --brand "Dawn Band" --type static --notes "UI mockup threads" --push

10. Gates & QA checklist

11. Variants & test plan

12. Failure modes

13. Sources

~/research/davidaistar/analysis/{diff_statics.md, gemini_HEa4AVv-ths.md, guide_copy_images_shorts.md}, REPORT.md §2.11; skills/dawn-statics/SKILL.md; scripts/statics/{gen_statics.py, voc_check.py, static_review.py}; ~/ad-batch-hub/stage-session.py (review_gate); knowledge/brands/dawnbands/static-templates/{README.md, templates.json}; output/dawn-iterate-2026-10-04/statics/{CALLOUTS.md, RENDER-LOG.md, check_gate.py, spec.json}; hub batches sniper-p1p2-2026-07-20, m1-retroproof-fakeui-2026-07-25, learnings.json; skills/native-image-gen/SKILL.md (screenshot bans); memory feedback_native_image_scrape_first, feedback_native_image_selection_credit, feedback_native_image_sourcing_corrections, corrections-archive-2026-10-03 (no attribution); MAP.md; dawn-stakes.md.

Not built yet (needs Fish's go)

Every line in this skill that mentions something not built, roughly de-duplicated. Some items repeat in different words.