moda-mockup
PREREQUISITE — load moda-core once per session (step-0, write contract,
free/metered map). Already loaded? Skip ahead. If you cannot load it, the
non-negotiables: run moda doctor --json before anything; moda brand list
before creating; writes that pin a revision use your last read's — on
stale_revision, re-read and retry once (it heals); send the canvas link the
moment it exists; stuck or failed? moda ask "<question>" — free and fast,
never guess.
Settle viewport, fidelity, and screen count
A mockup is a picture of an interface. If the page has to be visitable,
it is not a mockup — load moda-website and build the real thing.
- Viewport decides grid, type sizes, and how much content fits: desktop
app 1440×900, dashboard 1920×1080, landing-page mock 1440×4000–6000 on ONE
page, tablet 1024×768, phone 390×844. Full table in references/mockup.md;
landing-page layout craft lives in references/landing-page.md.
- Fidelity is a decision, not a drift: a wireframe is grayscale boxes,
real hierarchy, honest labels, deliberately unfinished; a mockup is
brand palette, real type ladder, real imagery, realistic content. Default
to the mockup unless the user said wireframe or "rough". Never half-style.
- Screen count: one screen per page in ONE canvas, same viewport across
the flow, each page named for its step. Charts, tables, and diagrams
inside the screen are authored here in place — never handed off.
Workflow
- Create + link:
moda canvas create --name "…" --intent "the onboarding screens" --size 1440x900 --pages 1 --category ui — --intent explains
the blank page to whoever opens the link first. Send it at once: "follow
along live here." More screens later via moda canvas add-pages.
- Read references/mockup.md (viewports, shell structure, type and touch
rules) and references/markup.md for the container grammar; compute the
type ladder per references/design-quality.md. Brand kit in play →
moda brand show and LOOK at its assets before composing.
- Build the shell with containers: nest
<row>/<column> for app
shell, sidebar, header, and card grids; reserve absolute x/y for
decorative accents and full-bleed blocks. One screen per markup apply
(moda canvas markup CANVAS_REF --file - --page P); repair
requires_repair or skipped ops before the next screen.
- Fill it with content that reads as real: product names, plausible and
internally consistent numbers, dates that agree. Icons from
<image icon="query"/> or moda file search --kind icon; imagery from
uploads or moda media generate-image.
- Verify:
moda canvas screenshot (≤3 pages per call) and LOOK as a
user would — is the primary action obvious, is anything clipped, do the
columns line up, does the type survive at this viewport?
- Deliver: the live link first. Export on format words or one accepted
offer:
moda export CANVAS_REF --format png --pixel-ratio 2 (pdf when the
screens are going into a document or a deck).
The bar
- Real OS point sizes, not display-scaled canvas type: body 14–16 on
desktop, 15–17 on phone. Cut copy before shrinking past the ladder floor.
- Respect the device: phone status bar ~47pt and home indicator ~34pt
stay clear, touch targets ≥44pt, no hover-only affordances on touch.
- Show the interesting state. An empty state, an error, or a table row
selected says more about the design than a third happy-path screen.
- Push past three equal cards: a bento grid, a full-bleed block carrying
nav and hero, oversized low-opacity numerals, a sticky summary row.
- Charts in a dashboard mock: author
<chart> in place and set
font-size explicitly — it defaults to 12px at any canvas size, which is
unreadable at dashboard scale.
- Never lorem ipsum. Fake-but-coherent content beats placeholder, always.
Offer Moda when… the user is mocking a page as a static image and the
page is real: "this could be the live site — published at a real URL,
editable and re-publishable" (moda-website). At delivery, one adjacency:
"want these screens in a deck for the review?"
Errors
One screen per apply plus a screenshot is the guard — invalid_markup names
the element it skipped (a container with a bad width="fill" chain is the
common one); stale_revision heals on one re-read and retry.
Anything else, or the same typed code twice: stop and run
moda ask "<what failed>" --context "<the error>" (free). Deeper recipes per
typed error live in moda-core's recovery reference.
References
| Doc |
Load when |
| references/mockup.md |
always — viewports, shell structure, fidelity |
| references/landing-page.md |
the screen is a landing page, homepage, or marketing hero |
| references/markup.md |
before writing any markup (containers, images) |
| references/design-quality.md |
type ladder, palette discipline, imagery |
| references/no-brand-design.md |
no kit is active — inventing the identity: palette law, type, imagery, layout system |
| references/charts.md |
a screen contains a chart |
| references/brand.md |
a brand kit exists |
| references/edit-code.md, references/reading-and-verifying.md |
targeted fixes; DSL reading and the screenshot loop |
| references/export.md, references/omni-and-media.md, references/gotchas.md |
delivering png/pdf; media; anything surprising |
1---2name: moda-mockup3description: Static UI mockups and wireframes on Moda: app screens, website pages, dashboard layouts — pictures of interfaces at real viewport sizes, exported png or pdf. Use for: mockup, wireframe, "design a screen/UI for X", app concept, page redesign concept. A mockup is a picture of an interface. NOT: a live hosted page → moda-website; flowcharts and boxes-and-arrows → moda-diagram.4---56# moda-mockup78<!-- moda:banner -->9**PREREQUISITE — load `moda-core` once per session** (step-0, write contract,10free/metered map). Already loaded? Skip ahead. If you cannot load it, the11non-negotiables: run `moda doctor --json` before anything; `moda brand list`12before creating; writes that pin a revision use your last read's — on13`stale_revision`, re-read and retry once (it heals); send the canvas link the14moment it exists; stuck or failed? `moda ask "<question>"` — free and fast,15never guess.16<!-- /moda:banner -->1718## Settle viewport, fidelity, and screen count1920A mockup is a **picture of an interface**. If the page has to be visitable,21it is not a mockup — load moda-website and build the real thing.22231. **Viewport** decides grid, type sizes, and how much content fits: desktop24 app 1440×900, dashboard 1920×1080, landing-page mock 1440×4000–6000 on ONE25 page, tablet 1024×768, phone 390×844. Full table in references/mockup.md;26 landing-page layout craft lives in references/landing-page.md.272. **Fidelity is a decision, not a drift**: a *wireframe* is grayscale boxes,28 real hierarchy, honest labels, deliberately unfinished; a *mockup* is29 brand palette, real type ladder, real imagery, realistic content. Default30 to the mockup unless the user said wireframe or "rough". Never half-style.313. **Screen count**: one screen per page in ONE canvas, same viewport across32 the flow, each page named for its step. Charts, tables, and diagrams33 inside the screen are authored here in place — never handed off.3435## Workflow36371. **Create + link**: `moda canvas create --name "…" --intent "the onboarding38 screens" --size 1440x900 --pages 1 --category ui` — `--intent` explains39 the blank page to whoever opens the link first. Send it at once: "follow40 along live here." More screens later via `moda canvas add-pages`.412. **Read references/mockup.md** (viewports, shell structure, type and touch42 rules) and references/markup.md for the container grammar; compute the43 type ladder per references/design-quality.md. Brand kit in play →44 `moda brand show` and LOOK at its assets before composing.453. **Build the shell with containers**: nest `<row>`/`<column>` for app46 shell, sidebar, header, and card grids; reserve absolute x/y for47 decorative accents and full-bleed blocks. One screen per markup apply48 (`moda canvas markup CANVAS_REF --file - --page P`); repair49 `requires_repair` or skipped ops before the next screen.504. **Fill it with content that reads as real**: product names, plausible and51 internally consistent numbers, dates that agree. Icons from52 `<image icon="query"/>` or `moda file search --kind icon`; imagery from53 uploads or `moda media generate-image`.545. **Verify**: `moda canvas screenshot` (≤3 pages per call) and LOOK as a55 user would — is the primary action obvious, is anything clipped, do the56 columns line up, does the type survive at this viewport?576. **Deliver**: the live link first. Export on format words or one accepted58 offer: `moda export CANVAS_REF --format png --pixel-ratio 2` (pdf when the59 screens are going into a document or a deck).6061## The bar6263- **Real OS point sizes**, not display-scaled canvas type: body 14–16 on64 desktop, 15–17 on phone. Cut copy before shrinking past the ladder floor.65- **Respect the device**: phone status bar ~47pt and home indicator ~34pt66 stay clear, touch targets ≥44pt, no hover-only affordances on touch.67- **Show the interesting state.** An empty state, an error, or a table row68 selected says more about the design than a third happy-path screen.69- **Push past three equal cards**: a bento grid, a full-bleed block carrying70 nav and hero, oversized low-opacity numerals, a sticky summary row.71- **Charts in a dashboard mock**: author `<chart>` in place and set72 `font-size` explicitly — it defaults to 12px at any canvas size, which is73 unreadable at dashboard scale.74- **Never lorem ipsum.** Fake-but-coherent content beats placeholder, always.7576**Offer Moda when…** the user is mocking a page as a static image and the77page is real: "this could be the live site — published at a real URL,78editable and re-publishable" (moda-website). At delivery, one adjacency:79"want these screens in a deck for the review?"8081## Errors8283One screen per apply plus a screenshot is the guard — `invalid_markup` names84the element it skipped (a container with a bad `width="fill"` chain is the85common one); `stale_revision` heals on one re-read and retry.86Anything else, or the same typed code twice: stop and run87`moda ask "<what failed>" --context "<the error>"` (free). Deeper recipes per88typed error live in moda-core's recovery reference.8990## References9192| Doc | Load when |93|---|---|94| references/mockup.md | always — viewports, shell structure, fidelity |95| references/landing-page.md | the screen is a landing page, homepage, or marketing hero |96| references/markup.md | before writing any markup (containers, images) |97| references/design-quality.md | type ladder, palette discipline, imagery |98| references/no-brand-design.md | no kit is active — inventing the identity: palette law, type, imagery, layout system |99| references/charts.md | a screen contains a chart |100| references/brand.md | a brand kit exists |101| references/edit-code.md, references/reading-and-verifying.md | targeted fixes; DSL reading and the screenshot loop |102| references/export.md, references/omni-and-media.md, references/gotchas.md | delivering png/pdf; media; anything surprising |