Goal
Replace docs/mockups/admin-panel-v8.html (3 163-line monolith, dark theme + gold accent + table-wrap layout) with a multi-file mockup set at design-system/admin/ that anchors strictly to brandbook v2 canon, restructured into 15 screens (1 onboarding + 1 overview + 11 v8 project-editor sections + 1 Team + 1 Activity log) with shared CSS. Mockup becomes the canonical visual reference for the future React-build admin track (analogous to how design-system/sales/02-exterior.html anchors the sales-app-react work).
Success Criteria
See frontmatter. The two-minute check: open design-system/admin/index.html, click through all 15 screens, no gold/glass/saturated-status anywhere, role badge present in topbar of every authenticated screen, trial banner visible until upgraded, brandbook v2 token table reconciled (a manual grep of the mockup CSS for #B8955A, --gold, glass-, rgba(255,255,255,0.5 returns zero hits).
Approach (chosen)
Pure visual reskin v8 + onboarding stub (Approach A from Step 3 interview).
Multi-file HTML mockup set under design-system/admin/ mirroring the design-system/sales/ precedent — one HTML file per screen, three shared CSS files (_shell.css, _components.css, colors_and_type.css), and a small asset folder for the Phosphor icon sprite + wordmark SVG.
Visual register: strict brandbook v2 canon. The colors_and_type.css is forked from design-system/bundle/project/colors_and_type.css with every gold-leftover token (--gold, --gold-light, --gold-dim, --gold-border, --skel-accent hex-equal-to-gold) deleted and replaced by VV Moss #6A7061 derivatives. Status palette uses oxidised tokens (--status-available #5C7A4A / --status-reserved #B58440 / --status-sold #8A4438) — not the saturated traffic-light from admin-panel-atelier.html. No glass-* tokens or backdrop-filter: blur() surfaces.
IA-rethink scope (per Step 1 interview pick "Редизайн + переосмысление IA"):
- Add at the start:
01-onboarding.html— first-registration imitation modelled afterdocs/mockups/admin-quick-build-atelier-standalone.html(Trial signup path; "Paid plan" entry deferred to follow-on workstream). - Add after editor:
02-overview.html— post-login workspace landing (project list + KPI row + trial banner). Not present in v8 (v8 dropped users straight into a single-project editor). - Keep v8 sections, reskinned 1:1: Theme / Features / Labels & Terms / Buildings / Galleries / Location / Levels / Amenity / Units / Plans / Plates.
- Add at the end:
14-team.html(RBAC team management, role badges) and15-activity.html(tenant audit surface per Phase 1.3 §2.4 + ADR 0004 v2). - Role-aware affordances on every authenticated screen: role badge in top bar right slot, lock-icons on actions outside the current role's permission set, empty-state copy varies by role for sections the user can't write to.
- Trial-mode banner in shell: thin band above topbar carrying tier label (Trial · Pro 14d) + counters (3/3 seats, 1/N projects, days remaining) + Upgrade CTA. Banner hidden when
tier === 'paid'.
What this plan does NOT cover (explicitly out of scope, scoped to a follow- on workstream that closes CONV-35 designer task-list):
- The 2 Trial-period lock modals
- The 8–12 post-Trial lock modals
- The 3 success-moment upsell modals
- The reactivation pricing modal
- The 7 trial-cascade email templates
These surfaces are referenced from the shell (e.g. the upgrade CTA links to a modal stub) but not designed in this plan. They land in a follow-on admin-panel-trial-ux workstream after this plan ratifies the visual register.
Inputs (canonical)
design-system/bundle/project/colors_and_type.css— token source of truth. Fork intodesign-system/admin/colors_and_type.css, strip gold leftovers, keep Moss + oxidised status + Skeleton White + Warm Stone.design-system/bundle/project/reference/brandbook-v2.html— canonical component anatomy + token table. Authoritative when atelier-mockup diverges.design-system/bundle/project/preview/*.html— 7 working previews (colors / typography / components / spacing-shadow-radius / sales- presentation / admin-panel / brandbook) — copy-paste-friendly token usage examples.docs/mockups/admin-panel-v8.html— IA + section list reference (11 project-editor sections to preserve). NOT a visual reference (dark theme, gold accent → drift).docs/mockups/admin-panel-atelier.html— layout/density inspiration only (sidebar pattern, project switcher chip, header structure). NOT a visual reference (gold + glass → drift per ADR 0015).docs/mockups/admin-quick-build-atelier-standalone.html— onboarding flow inspiration for01-onboarding.html. NOT extended directly (opaque Babel-bundled blob); read it as a design reference.plans/permission-and-tenancy-model.md(ratified v4.18) — role list: Owner / Admin / Sales Manager / Content Editor / Sales Agent + Free Guest org tier. Admin-panel link = next to avatar in sales-app top bar (Phase 1.3.12). Roles drive Team screen + lock-icon logic.plans/onboarding-trial-mode.md(ratified CONV-35 2026-05-11) — tier names: Starter / Pro (Trial default 14d) / Enterprise. 3 seats during trial. Subdomain{slug}.offplan.online, custom domain T2+. Trial banner copy + counters source.docs/decisions/0004-audit-log-retention.md(v2 CONV-34) — 12mo active + 7yr archive (pseudonymised) + append-only + monthly hash-chain seal. Drives Activity log columns + filter UI.docs/decisions/0002-iconset-phosphor.md— Phosphor as canonical iconset. Assemble subset SVG sprite.
Inputs (NOT canonical — explicitly skipped)
docs/mockups/sales-app-atelier.html— sales-app track (ADR 0015 explicit: Roma not 100% happy, do not extend).docs/mockups/admin-panel-improved.html/admin-panel-mockup.html/ `admin- panel-v3.htmlthroughv7.html` — earlier admin-panel iterations, superseded.docs/mockups/operator-panel-*.html— operator/internal dashboard, separate workstream (different audience: internal staff, not customers).- Anything from preview repo
mockups/admin-*— older work, superseded by v8.
Out of scope
- The CONV-35 trial-UX modal set (2 trial-period locks + 8–12 post-trial locks + 3 success upsells + reactivation pricing modal + 7 email templates) — follow-on workstream
admin-panel-trial-ux. - Operator dashboard (internal staff panel at staff.offplan.online per Phase 1.4) — separate track.
- Real backend wiring (this is a static HTML mockup; no JS state, no API calls).
- React port — this plan produces the visual reference; the React build is a follow-on plan once the visual register is ratified.
- Mobile / responsive layouts — desktop 1440-wide first; mobile is a follow-on.
- I18n / RTL — copy is in English; Arabic / RTL deferred.
- Custom-domain DKIM admin UX (Phase 1.2 onboarding-trial-mode covers data model; UI surface is a thin stub on the Theme / Domain settings panel).
- Stripe Checkout redirect surface (per Sub-plan 2 Pick — Stage 1 redirects to Stripe, no embedded billing UI).
- The "Paid plan" entry mode on
01-onboarding.html(only Trial signup path is designed; Paid bypass deferred). - Visual treatment of free-text long-form fields (description editors / WYSIWYG) beyond a Skeleton White input frame — full editor toolbar design deferred.
Implementation Steps
Phase 1 — Foundation (shared CSS + assets + landing)
Tasks:
- Fork
design-system/bundle/project/colors_and_type.cssto `design- system/admin/colors_and_type.css. Strip every--gold*token,--skel- accent,--glass-*. Reaffirm:--moss,--moss-soft,--moss-bg`,--status-available,--status-reserved,--status-sold+-bgvariants, Skeleton White surfaces, Warm Stone surfaces, all type tokens, tracking tokens, radius tokens, shadow tokens, motion tokens. - Create
design-system/admin/_shell.css— shell layout primitives:.shell(CSS grid: sidebar 280px + main 1fr).shell__sidebar(Warm Stone, fixed-width, Phosphor icons + label rows).shell__topbar(Skeleton White, 64px height, breadcrumb + actions).shell__trial-banner(above topbar, thin band, Moss-soft surface, tier label + counters + Upgrade CTA).shell__content(Warm Stone, 32px padding, max-width 1240px).shell__section-header(h1 + eyebrow + actions cluster)
- Create
design-system/admin/_components.css— reusable bits:.btn-primary/.btn-secondary/.btn-ghost/.btn-danger.input/.input--with-icon/.textarea/.select.table/.table__row/.table__cell/.table--editable.tabs/.tab--active.chip/.chip--filter/.chip--filter-active.status-pill(consumes--status-*tokens only; no hex literals).panel(Card + header + body + footer; no glass effect).modal-stub(Skeleton White overlay; opacity-anchored, no blur).banner/.banner--info/.banner--warning/.banner--success.role-badge(small pill carrying role name, surfaced in topbar).lock-icon(Phosphorlock-simple14px, inline next to disabled action)
- Assemble Phosphor SVG sprite at
design-system/admin/assets/icons.svg. Subset: ~30 icons — house, building, image, map-pin, layers, sliders, list, plus, pencil, trash, lock-simple, user-circle, users, gear, signpost, shield, clock-counter-clockwise (for activity log), file-text, image-square, palette, currency-dollar, chart-line, sign-in, sign-out, plus more as discovered during build. Pull from Phosphor 2.x regular weight, 24×24 viewbox. - Copy wordmark from
design-system/sales/assets/brand/wordmark.svgtodesign-system/admin/assets/brand/wordmark.svg(canon mark, already used sales-side). - Create
design-system/admin/index.html— review menu page with thumb grid + name + screen number for each of the 15 screens. Used by Roma+Ilya for screen-by-screen walkthrough. Tiny page, ~60 lines.
Verification:
- AU English grep: `grep -iE 'colorize|organize|behavior|catalog\b' design- system/admin/` → 0 hits.
- Drift grep: `grep -REn '#B8955A|--gold|glass-|backdrop-filter|rgba\(255,255, 255,0\.[5-9]' design-system/admin/` → 0 hits.
- Open
index.htmlin browser → all 15 thumb slots render (image placeholders while pages not yet built); no console errors.
Eval pack:
| Field | Value |
|---|---|
| Artefact | design-system/admin/colors_and_type.css + _shell.css + _components.css + assets folder + index.html |
| 2-min check | Open index.html — 15 thumb slots visible; open colors_and_type.css — visible tokens are Moss + oxidised status + Skeleton White / Warm Stone; no gold tokens present. |
| Agent self-check | All three grep checks pass (AU English, drift, console-errors). Phase-gate handoff: Gate-passed: phase-1. |
Phase 2 — Onboarding + overview (the two new screens)
Tasks:
01-onboarding.html— first-registration Trial signup flow imitation. Modelled afteradmin-quick-build-atelier-standalone.html(Trial signup entry mode). Structure:- Hero strip: wordmark + "Get your white-label sales platform · 14 days, no card required" (Trial T2 Pro default per Sub-plan 2 Pick #1 B4)
- Step 1 — workspace details: Organisation name + subdomain slug live preview
{slug}.offplan.online+ Organisation type chips (Studio / Agency / Developer / Other) per permission-and-tenancy-model Block A. - Step 2 — admin contact: name + email + (optional) phone
- Step 3 — first-project bootstrap: name + project type + skip-for-now link
- Step 4 — confirmation: "Workspace ready · Trial active for 14 days" + CTA "Open admin panel →" (links to
02-overview.html) - No real form submission — pure visual. Buttons are anchor tags.
02-overview.html— post-login workspace landing. Structure:- Shell with sidebar (Phosphor
houseOverview, Phosphorbuildingper project, PhosphorusersTeam, Phosphorclock-counter-clockwiseActivity log, PhosphorgearSettings, Phosphorsign-outSign out at bottom). - Trial banner at top: "Trial · Pro · 11 days left · 1 project of unlimited · 3 of 3 seats · Add card to keep your team" + Upgrade CTA → links to modal-stub.
- Topbar: breadcrumb (
Workspace) + role-badge (default state: Owner) + avatar. - KPI row: 4 cards — Projects (count + open), Saved presentations (count + delta), Active visitors (count + last 7d), Team seats (used / cap).
- Projects list: cards 3-up, per project: cover image (Skeleton White placeholder if none) + name + slug + status pill + last-edited date +
Open →CTA links to03-theme.html(the first editor section per v8). - Empty state: when no projects, large Skeleton White card "No projects yet — Add your first" + Phosphor
plusicon + CTA.
- Shell with sidebar (Phosphor
Verification:
- Open both HTML in browser; visually compare to brandbook v2 components.html reference; flag any deviation.
- Drift grep on both files → 0 hits.
- AU English grep → 0 hits.
- Click "Open admin panel →" on
01→ loads02-overview.html.
Eval pack:
| Field | Value |
|---|---|
| Artefact | 01-onboarding.html + 02-overview.html walkable in browser. |
| 2-min check | Sergei opens 01, fills imaginary org details (UI only — no submit), clicks Open admin panel → lands on 02 → sees trial banner + KPI row + project cards (placeholder Riviera fixture). |
| Agent self-check | Drift + AU greps pass. Phosphor icons render (no missing-glyph squares). Phase-gate handoff: Gate-passed: phase-2. |
Phase 3 — Project-editor sections (the 11 reskins from v8)
Tasks:
For each of the 11 v8 sections, read the v8 HTML to capture the section's data model + form fields, then re-author in canon CSS. Order — same as v8's "workflow bar" (Theme → Features → Labels → Buildings → Galleries → Location → Levels → Amenity → Units → Plans → Plates), one HTML per screen.
03-theme.html— Project theme: accent colour token swatch grid (deep-blue / moss / oxblood / charcoal — per project, not org-level), wordmark upload, hero font scale slider, dark/light preview toggle.04-features.html— Feature flags table: Floor Plates / Floor Plans / Galleries / 360 panoramas / Amenities / Saved units etc. — each toggle on / off with description + dependency hints. Per v8's 706-line Features screen.05-labels.html— Labels & terminology overrides: "Building" → "Tower" / "Apartment" → "Residence" / etc. Per-project i18n stub (English only in Stage 1).06-buildings.html— Building list: name + level count + units count + status. Per-building drawer: floors + amenities + assets.07-galleries.html— Gallery groups: cover + count + reorder + drag- drop hint. Skeleton White card grid.08-location.html— Map: Skeleton White placeholder + lat/long inputs + POI list (cafés / schools / transit) + map style (Skeleton White / dark mode disabled per canon).09-levels.html— Levels per building: floor index + plate assignment + ceiling height + plate count. Per v8.10-amenities.html— Amenities list: name + icon (Phosphor) + tier (resident / public) + photo gallery. Per v8.11-units.html— Unit list table: code + level + layout + beds + baths sample.- aspect + status pill + price (canon JetBrains Mono). Per v8's 23-unit
12-plans.html— Floor plan layouts: thumbnail + name + bed count + floors-using-this + edit pencil. Per v8.13-plates.html— Floorplates: plan view + layout grid + assigned units. Per v8's 21-plate sample.
Every section's shell + topbar comes from _shell.css; every form/table/chip/ pill comes from _components.css. NO inline styles permitted in feature sections (token-as-truth rule per L-1 brandbook product-pattern layer).
Verification:
- For each of the 11: open in browser, click through (intra-page tabs work, inter-page nav works back to overview), no console errors.
- For each: drift grep, AU English grep, Phosphor render check.
- Per-section role-badge contrast over Warm Stone surface verified (Owner / Sales Manager / Content Editor variants visually distinct).
- "Reset filters" / "Save" / "Discard" buttons consistent across sections.
Eval pack:
| Field | Value |
|---|---|
| Artefact | 11 HTML files in design-system/admin/03-…html … 13-…html walkable. |
| 2-min check | Roma + Ilya walk the editor flow: 02 → 03 → 04 → … → 13, no dead-ends, no broken styles, visual register matches brandbook v2 components.html. |
| Agent self-check | All 3 greps × 11 files. Per-screen tab/back-nav works. Phase-gate handoff: Gate-passed: phase-3. |
Phase 4 — Team + Activity log (RBAC-specific new screens)
Tasks:
14-team.html— Team management screen.- Topbar: breadcrumb (
Workspace › Team) + Add member CTA. - Member table: avatar + name + email + role chip + last-active + actions (edit / remove). 5 sample rows covering each role.
- Role legend below table — 5 roles (Owner / Admin / Sales Manager / Content Editor / Sales Agent) with one-line permission summary each, per ratified
permission-and-tenancy-model.mdBlock B matrix. - Empty seat indicator: trial-mode shows "0 of 3 free seats used" if trial, "X of N seats used" if paid; "Upgrade to add more seats" CTA when at cap.
- Pending invitations panel below table: email + role + sent-at + revoke.
- Free Guest section: tenants with guest membership in your projects — name + their Org + their role with you + project link.
- Topbar: breadcrumb (
15-activity.html— Activity (audit) log, per Phase 1.3 §2.4 + ADR 0004 v2.- Topbar: breadcrumb (
Workspace › Activity) + filter chips (date range, actor, action type, target type). - Timeline view: reverse-chrono. Each entry: timestamp (JetBrains Mono) + actor avatar + role chip + action verb + target (with link) + diff summary if applicable.
- Sample entries (10–15): project created, unit status changed, member invited, member removed, theme accent updated, plan published, etc.
- "12 months retained, then archived (pseudonymised) · 7-year horizon" tag in topbar — surfaces ADR 0004 v2 retention policy to the operator.
- Export CSV button (visual only — no real export).
- Topbar: breadcrumb (
Verification:
- Drift greps, AU greps, Phosphor render.
- Role-chip colour consistent with Team screen.
- Activity timeline scrolls; sample entries cover every action type from ADR 0004 §Logged events.
- Lock-icon shown on "Remove member" action when viewing Team as Content Editor role (toggle via URL
?as=cefor review purposes).
Eval pack:
| Field | Value |
|---|---|
| Artefact | 14-team.html + 15-activity.html walkable. |
| 2-min check | Roma walks Team → adds imaginary invitation → sees pending row → walks Activity → filters by actor → sees entry. URL ?as=ce shows lock icons on Remove member rows. |
| Agent self-check | Drift + AU + Phosphor. Role-chip parity vs Phase 3 sections. Phase-gate handoff: Gate-passed: phase-4. |
Phase 5 — Reconciliation + sign-off
Tasks:
- Cross-screen consistency pass — open all 15 HTML side-by-side; verify identical sidebar, identical topbar, identical trial banner, identical button library, identical chip library, identical status-pill across all screens. File diffs of any inconsistency, apply patches.
- Visual register reconciliation against brandbook v2 — open `design- system/bundle/project/reference/brandbook-v2.html` side-by-side with each screen; verify token usage (every colour, every type ramp, every shadow, every radius). Catalogue any deliberate deviation in a `design-system/ admin/REGISTER-NOTES.md` (e.g. "trial banner uses Moss-soft fill not in brandbook palette — intentional, callout reason").
- Sergei walks the full journey solo (success criteria pre-check) — 01 → 02 → 03 → … → 13 → 14 → 15 → back to 02. Notes any dead-end, broken nav, broken style. Patches applied.
- Open question round — anything unresolved (e.g. "should role badge show abbreviation or full name on mobile-narrow viewport?") parked in
design-system/admin/OPEN-QUESTIONS.mdfor later sub-plan or follow-on workstream. - Sign-off with Roma + Ilya — screen-by-screen walkthrough, capture feedback. Two outcomes: (a) approved → workstream
admin-panel-redesignmarked done, follow-onadmin-panel-trial-uxopens; (b) revisions required → back to Phase 3/4 for patch pass before re-walk.
Verification:
- All 5 success-criteria assertions pass (Skeleton/Warm Stone surfaces, Moss primary, oxidised status, Helvetica Neue + Inter + JetBrains Mono, no gold/glass/saturated leftovers, role-badge present on every authenticated screen, trial banner with tier counters).
REGISTER-NOTES.mdandOPEN-QUESTIONS.mdexist + populated.- Roma + Ilya sign-off recorded in workstream session log.
Eval pack:
| Field | Value |
|---|---|
| Artefact | All 15 HTML files + 3 CSS files + assets + 2 notes files. design-system/admin/index.html walkable end-to-end. |
| 2-min check | Sergei loads index.html, clicks every thumb, walks every screen, none broken. Roma + Ilya sign-off captured. |
| Agent self-check | Full drift + AU + Phosphor sweep × 15 screens passes. REGISTER-NOTES.md lists every deliberate deviation with reason. Phase-gate handoff: Gate-passed: phase-5 + demo URL recorded. |
Files to Create / Modify
Phase 1 — Foundation
design-system/admin/colors_and_type.css(new, fork from bundle)design-system/admin/_shell.css(new)design-system/admin/_components.css(new)design-system/admin/assets/icons.svg(new, Phosphor subset sprite)design-system/admin/assets/brand/wordmark.svg(new, copy from sales)design-system/admin/index.html(new, review menu)
Phase 2 — Onboarding + Overview
design-system/admin/01-onboarding.html(new)design-system/admin/02-overview.html(new)
Phase 3 — Project-editor sections
design-system/admin/03-theme.html(new)design-system/admin/04-features.html(new)design-system/admin/05-labels.html(new)design-system/admin/06-buildings.html(new)design-system/admin/07-galleries.html(new)design-system/admin/08-location.html(new)design-system/admin/09-levels.html(new)design-system/admin/10-amenities.html(new)design-system/admin/11-units.html(new)design-system/admin/12-plans.html(new)design-system/admin/13-plates.html(new)
Phase 4 — Team + Activity
design-system/admin/14-team.html(new)design-system/admin/15-activity.html(new)
Phase 5 — Reconciliation
design-system/admin/REGISTER-NOTES.md(new, deliberate deviations log)design-system/admin/OPEN-QUESTIONS.md(new, parked items)docs/decisions/0015-canonical-design-inputs.md(modify — add note: "admin panel canonical mockup is nowdesign-system/admin/; `docs/mockups/admin- panel-*.html` superseded, kept as historical reference until Phase 5 sign- off")
Files explicitly NOT touched
docs/mockups/admin-panel-v8.html— kept as data-model reference (not deleted by this plan; Sergei's call when to delete after Phase 5 sign-off)docs/mockups/admin-panel-atelier.html— kept as historicaldocs/mockups/admin-panel-{improved,mockup,v3..v7}.html— kept as historicaldocs/mockups/admin-quick-build-atelier-standalone.html— kept as onboarding-flow reference
Dependencies
- Phosphor 2.x SVG icons — public-domain, no install required (paste SVGs into a single sprite).
- Brandbook v2 bundle at
design-system/bundle/— already in repo (CONV-30 pull). - Inter, Helvetica Neue, JetBrains Mono — already loaded via brandbook v2 bundle (Inter via Google Fonts; Helvetica Neue is system; JetBrains Mono via Google Fonts).
- No package.json changes, no Node deps. Pure HTML/CSS.
Testing & Verification
- AU English grep — per phase, `grep -iREn 'colorize|organize|behavior| catalog\b' design-system/admin/` returns 0. Hard gate.
- Drift grep — per phase, `grep -REn '#B8955A|--gold|glass-|backdrop- filter|rgba\(255,255,255,0\.[5-9]' design-system/admin/` returns 0. Hard gate.
- Phosphor render check — per phase, open each touched HTML, no missing- glyph squares; sprite paths resolve.
- Console-error sweep — open each HTML, DevTools console must be empty (no 404 asset loads, no CSS parse errors).
- Visual register reconciliation (Phase 5) — every screen side-by-side with brandbook v2 components.html; deviations catalogued.
- Role-badge contrast (Phase 2 + 4) — Owner / Admin / Sales Manager / Content Editor / Sales Agent variants all readable over Skeleton White topbar and Warm Stone content surfaces.
- Cross-screen consistency (Phase 5) — sidebar / topbar / trial banner / button library / chip library / status-pill identical across all 15 screens.
Workstreams
| Name | Priority | Depends On | Tags | Tasks |
|---|---|---|---|---|
admin-panel-foundation |
P0 | — | ux, architecture, tooling | Phase 1 (CSS + assets + index) |
admin-panel-onboarding-overview |
P0 | admin-panel-foundation |
ux, architecture | Phase 2 (01 + 02) |
admin-panel-project-editor |
P0 | admin-panel-onboarding-overview |
ux, architecture, domain | Phase 3 (03–13, 11 sections) |
admin-panel-rbac-audit |
P0 | admin-panel-project-editor |
ux, security, architecture | Phase 4 (14 + 15) |
admin-panel-sign-off |
P0 | admin-panel-rbac-audit |
ux, tooling | Phase 5 (reconciliation + sign-off) |
Five sequential P0 workstreams. Each completable in 1–2 sessions (Phase 3 is the largest — possibly 3 sessions given 11 sections, but each section is ~200-300 lines of HTML/CSS so an experienced pass should land 3-4 per session).
Risks & Edge Cases
| Risk | Severity | Mitigation |
|---|---|---|
Forking colors_and_type.css and missing a subtle token (e.g. spacing scale) drifts admin from sales tokens |
MEDIUM | Phase 1 task 1 explicitly enumerates kept-tokens; verify post-fork by diff'ing canon tokens in admin vs sales colors_and_type.css |
| Phosphor sprite balloons (every icon → 30+ KB) | LOW | Subset to ~30 icons in Phase 1 task 4; assemble as single sprite with <symbol> blocks; gzip-friendly |
| v8 data-model leakage — section content captured wrongly because v8's dark-theme HTML obscures structure | MEDIUM | For each Phase 3 section: read v8 source first, list fields/columns, draft the canon version against that explicit list (not eyeballed) |
| Trial banner copy drifts from Sub-plan 2's authoritative copy | MEDIUM | Pin trial-banner copy to exact strings from plans/onboarding-trial-mode.md Pick #1 + #4; if copy changes upstream, REGISTER-NOTES tracks it |
| Role-badge / lock-icon affordance design drifts from how the real React build will implement RBAC | LOW | This mockup is the design spec for the React build — mockup defines, React conforms. RBAC matrix from ratified permission-and-tenancy-model is authoritative |
| Mockup gets stale as ratified plans evolve | MEDIUM | Section content tagged with source plan (e.g. <!-- spec: onboarding-trial-mode.md Pick #1 --> HTML comments) so future you can grep and update |
| Sergei's atelier-track muscle memory creeps gold accent back in mid-build | LOW | Drift grep is run per-phase as hard gate; CI-style enforcement |
| Roma reviews and wants atelier-style mood after all (per Phase 5 sign-off) | LOW | Sign-off includes "(a) approved or (b) revisions required" branch — revision path documented |
brandbook v2 itself revises mid-build (separate brand-language-and-identity plan is in flight) |
MEDIUM | Tokens forked at start of Phase 1; if brand workstream lands a new token mid-build, sync via REGISTER-NOTES diff; do not chase brand-workstream changes intra-phase |
| Phosphor icon set might miss a needed glyph (e.g. specific architectural symbol) | LOW | Phase 1 task 4 lists the subset; if a glyph missing, swap to Phosphor closest match or assemble custom SVG in assets/custom-icons/ |
01-onboarding.html Trial signup field set differs from Sub-plan 2's authoritative onboarding form (Stripe + KYC fields etc.) |
MEDIUM | Cross-check 01-onboarding.html field list against Sub-plan 2 Step 2 (signup form fields); REGISTER-NOTES if intentionally simpler for mockup |
| Activity log columns + filters don't match what ADR 0004 v2 authoritatively logs | MEDIUM | Cross-check 15-activity.html columns against ADR 0004 §Logged events list; REGISTER-NOTES if intentionally subset for mockup |
File path design-system/admin/ collides with future React design-system/admin-app/ |
LOW | Acceptable — different directory names; mockup-side is admin, React-side will be admin-app (mirroring sales / sales-app split) |
From Learnings DB
- L-1 "Brandbook implementation-idea callouts" [ux, architecture, ops] — any tech-team-facing artefact in this plan (component anatomy, token table, RBAC matrix in 14-team.html) is framed as suggestion/reference, not directive. Specifically: REGISTER-NOTES.md uses "consider:" + "reason:" framing per Sergei's pattern; the canonical brandbook itself owns the authoritative spec.
- L-3 "Multi-level access: 5-tier B2B2C model" [architecture, domain] — superseded by ratified
permission-and-tenancy-model.mdformal 5-role list. Mockup uses formal role names (Owner / Admin / Sales Manager / Content Editor / Sales Agent); the older "VV master / studio admin / studio employees / developer client / developer client's agents" mental model maps as: VV master = separate operator dashboard (not this mockup); studio admin = Owner; studio employees = Admin / Sales Manager / Content Editor / Sales Agent depending on responsibility; developer client = guest member- ship via Free Guest org tier; developer client's agents = Sales Agent role scoped per Free Guest org.
Evaluation
Each phase has its own eval pack inline above (Artefact / 2-min check / Agent self-check). The plan-level evaluation is the success criteria in frontmatter — verifiable by Sergei walking the full demo at the end of Phase 5 + Roma + Ilya sign-off.
Business Review SPEC-AMEND v1.1 (CONV-36, 2026-05-11)
Five concern agents (Customers / Brand / Customer Success / Engineering / Security & Privacy) reviewed this plan in parallel post-Step-4 and returned 51 findings (16 HIGH + 22 MED + 13 LOW). HIGH findings are applied to the plan body as amendments below; MED + LOW are catalogued. Scenarios traced: (S1) Sergei solo walkthrough → sign-off, (S2) Roma+Ilya screen-by-screen review, (S3) future React-build developer reads mockup as spec, (S4) Trial customer Day 1 navigates onboarding → first project bootstrap, (S5) Sales Agent attempts to filter Activity log by other Agent's actions, (S6) trial customer post-T+30 lands on locked admin panel.
HIGH findings — applied inline as Implementation amendments
| # | Source | Finding | Amendment | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| H1 | Customers | Role names (Sales Manager / Sales Agent) are agency-language; 4-8-person studios think "boss / 3D artists / project manager". Studios will mis-assign or default everyone to Owner/Admin. | Phase 4 task 1 (14-team.html): add role-tooltip with studio-native examples per role (e.g. "Content Editor = your 3D artist updating renders; Sales Manager = your account manager handling developer-clients"). Tooltip text captured in REGISTER-NOTES.md for tone-of-voice review. |
|||||||
| H2 | Customers | Free Guest org tier (developer-clients invited by studio) has no defined landing view. Studios won't invite developer-clients into a confusing surface. | NEW Phase 2 task — 02b-overview-guest.html (16th screen): single-project landing, no trial banner, no Team / Activity log sections, restricted sidebar (Phosphor building + project name + Saved + Gallery only). Surfaces "Guest access · invited by {host}" chip. |
|||||||
| H3 | Customers | 11 v8 editor sections in one sidebar paralyses new studios (Labels & Terms / Plates are advanced). "This looks complicated" → churn before first project ships. | Phase 1 task 2 (_shell.css): sidebar groups → "Essentials" (Theme / Buildings / Galleries / Units) + collapsed "Advanced" group (Features / Labels / Levels / Amenity / Plans / Plates / Location). Default state on first visit = Advanced collapsed. |
|||||||
| H4 | Brand | Drift grep regex misses dominant glass pattern. Atelier uses rgba(255,255,255,0.30–0.45) (15+ instances) + whitespace variants + --warn: #B8955A (gold under different name). Hard gate lets most drift through. |
Verification section update: drift grep → `grep -REn 'rgba\(\s255\s,\s255\s,\s255\s,\s*0?\.[0-9]+\)\ | backdrop-filter\ | -webkit-backdrop-filter\ | Cormorant\ | Garamond\ | --gold\ | --navy\ | --warn' design-system/admin/` returns 0. Hard gate. |
| H5 | Brand | 08-location.html map needs canonical --proj-map-water/--proj-map-land/--proj-map-park/--proj-map-road/--proj-map-pin tokens (bundle L281–286). Plan said "Skeleton White placeholder" — ad-hoc map colours would contradict brand contract. |
Phase 3 task 6 (08-location.html): map preview pins a data-project="cote" sample (or house-default) and consumes --proj-map-* tokens exclusively. |
|||||||
| H6 | Brand | Forking colors_and_type.css creates a second source of truth that brand workstream cannot revise by editing the bundle. |
Phase 1 task 1 amendment: admin uses @import url('../bundle/project/colors_and_type.css'); then a sibling _admin-overrides.css with only deletions of gold/glass leftovers via inverted --gold: unset; style. Brand workstream owner co-signs the override file at Phase 1 close. |
|||||||
| H7 | CS | Trial banner copy in plan is a third variant vs Sub-plan 2 Pick #3 header-banner («TRIAL — N days left») and Pick #14 countdown (« Trial ends in N days · Add card to continue → »). Mockup will create "email said 7 days, banner says 11" support tickets. | Phase 2 task 2 (02-overview.html): trial-banner copy pinned verbatim to Pick #3 + Pick #14 strings. HTML comment <!-- spec: onboarding-trial-mode.md Pick #3 + #14 --> next to banner markup. Risk row 4 promoted to ratified copy lock. |
|||||||
| H8 | CS | Out-of-scope trial-UX modals leave a design window where trial customers post-T+30 hit "Object Builder doesn't work" with no surface. Every "where's my data" call routes to CS without anything to screenshot. | Phase 1 task 3 amendment (_components.css): .modal-stub ships with generic post-trial copy "Your Trial ended. Contact [email protected] to reactivate or upgrade →" + Phosphor clock-counter-clockwise icon. CS can screenshot for support docs immediately. Full modal designs land in follow-on admin-panel-trial-ux workstream. |
|||||||
| H9 | CS | 15-activity.html columns (timestamp / actor / role / verb / target / diff) miss target_user_id, pii_class, deletion_journal stages, and Stripe subscription.deleted/chargeback events. Chargeback / "who deleted my data" investigations have no filter pivot. |
Phase 4 task 2 amendment: activity log filter chips → date range, actor, target user / Org, action type, billing-event subgroup (subscription / dispute / deletion_journal stage). Sample entries (10–15) include ≥1 chargeback freeze + ≥1 deletion_journal stage transition + ≥1 customer.subscription.deleted event. |
|||||||
| H10 | Engineering | Token-name divergence sales-mockup (--moss) ↔ sales-app Tailwind v4 (--color-moss). Mockup-to-React port repeats the rename. |
Phase 1 task 1 amendment: every admin token prefixed --color-* / --font-* / --tracking-* / --radius-* / --shadow-* / --ease-* / --duration-* to match Tailwind v4 @theme inline convention. Bundle import remapped via override file (see H6). Mapping table in REGISTER-NOTES.md. |
|||||||
| H11 | Engineering | No CSS namespace strategy for future monorepo collision (admin + sales tokens, .btn-primary, .shell, .panel identical names). |
Phase 1 task 2 amendment: wrap admin shell in [data-app="admin"] scope; mockup index.html body sets data-app="admin". All shell/component classes scoped under this attribute. Mirrors sales-app's [data-project] cascade pattern. |
|||||||
| H12 | Engineering | ?as=ce URL param is undefined behaviour in static HTML (no JS) — either need a tiny script or 5× HTML duplicates per screen. Plan picks neither. |
NEW Phase 1 task — assets/role-switch.js (~20 lines): reads location.search, sets body[data-role="<role>"], components style via body[data-role="ce"] .lock-icon { display: inline; }. Loaded by every screen via <script src="assets/role-switch.js" defer>. |
|||||||
| H13 | Security | ?as=ce is a client-side role-impersonation primitive. If React build mirrors this pattern without server-side auth, it becomes an auth-bypass (?as=owner escalation). |
assets/role-switch.js header comment + REGISTER-NOTES entry: "MOCKUP-ONLY. React role-preview MUST be server-issued ephemeral token, Owner+Admin only (cf. View-as-Agent §4.6). Never URL-parse role client-side in production." |
|||||||
| H14 | Security | View-as-Agent admin debug tool (§4.6 of permission-and-tenancy-model) is absent from the mockup. ADR 0004 v2 classifies it as personal_content PII; React build would invent both UI + audit-entry shape. |
Phase 4 task 1 amendment (14-team.html): add View-as-Agent entry point (Owner-only action on Sales Agent rows). Phase 4 task 2 amendment (15-activity.html): sample entry showing View-as-Agent invocation with pii_class=personal_content badge + read-only-mode indicator + auto-revoke timestamp. |
|||||||
| H15 | Security | Activity log filter design has no role-scoping rule. Sales Agent could filter by other Agents' actor IDs → lateral lead-activity disclosure. | Phase 4 task 2 amendment: activity-log filter scoping legend: Sales Agents see only own actions; Sales Manager sees own team's; Content Editor sees own + content-section actions; Owner / Admin see all. Legend rendered on 15-activity.html so React build conforms. |
|||||||
| H16 | Security | Pseudonymisation surface (post-12mo→7yr boundary per ADR 0004 v2) has no UX treatment. actor avatar + role chip pattern breaks when actor_user_id becomes HMAC hash. |
Phase 4 task 2 amendment: ≥1 sample pseudonymised entry in 15-activity.html with canonical treatment: empty avatar slot → Phosphor user-circle outline + "Archived actor · {role retained} · hash truncated" + tooltip linking to retention policy. |
MED findings — documented for follow-on
| # | Source | Finding | Disposition |
|---|---|---|---|
| M1 | Customers | Subdomain slug live preview is friction-prone — studios pick branded names then can't change. | Phase 2 task 1 sub-add: auto-suggest from Org name + "change later in Settings" inline hint (no commitment to actual change-flow design — that's onboarding-trial-mode scope). |
| M2 | Customers | Trial banner copy "to keep your team" is loss-aversion + 5 facts in one strip is dense. | Resolved by H7 (verbatim from Sub-plan 2). MED finding subsumed. |
| M3 | Customers | "Open admin panel" CTA in sales-app topbar lacks visual spec. | Phase 2 task 2 sub-add: HTML comment in 02-overview.html recommends labelled chip "Admin" + Phosphor gear, not avatar-menu-only. Sales-app implementation is out of scope; recommendation only. |
| M4 | Customers | Onboarding Step 3 skip-for-now → empty 02-overview state with generic "No projects yet" copy. | Phase 2 task 2 sub-add: empty state references prior context — "Skipped project setup? Start with a guided 5-minute walkthrough" + link to 01-onboarding (re-entry path). |
| M5 | Brand | Onboarding + banner copy not tagged [copy:provisional]. |
Phase 1 + 2: every voice-bearing string carries <!-- [copy:provisional] --> HTML comment for brand-language-and-identity tone-of-voice pass. |
| M6 | Brand | 03-theme.html proposes oxblood as project-accent — collapses --status-sold semantic. |
Phase 3 task 1 amendment: project-accent picker excludes any --status-* hex; pulls from existing [data-project="cote/velvet/redwall"] palettes or a curated 6-stop Stone+Moss ramp. |
| M7 | Brand | Role-badge palette unspecified. | Phase 1 task 3 sub-add: 5-stop role-badge token set from Stone + Moss scale (no new hues). Recorded in REGISTER-NOTES.md. |
| M8 | Brand | Wordmark is 3-asset contract (light / mark / on-dark); plan copies only 1. | Phase 1 task 5: copy all three variants (wordmark.svg, wordmark-mark.svg, wordmark-on-dark.svg); on-dark used in sidebar dark surfaces if any. |
| M9 | Brand | Motion tokens unmentioned for modals / banner / drawers / tabs. | Phase 1 task 3 sub-add: _components.css brief requires var(--duration-*) + var(--ease-*) for every transition: declaration. Phase 5 grep: any transition not consuming these vars flagged. |
| M10 | CS | Free Guest section in 14-team.html has no in-product explainer. |
Phase 4 task 1 sub-add: inline help-popover next to Free Guest header — one-line definition + link to (future) docs page. |
| M11 | CS | Phase 5 OPEN-QUESTIONS.md doesn't commit to CS-relevant gaps. |
Phase 5 task 4 amendment: must include post-T+30 freeze branded page (sales-app side) + pseudonymised CSV export policy + role-badge collapse on narrow viewport as OPEN-QUESTIONS items. |
| M12 | CS | Activity log retention tag is operator-facing terse. | Phase 4 task 2 sub-add: info-icon next to retention tag → stub /docs/audit-retention URL. |
| M13 | Engineering | Phosphor sprite → React (@phosphor-icons/react) mapping not stated. |
REGISTER-NOTES.md entry: React build switches to @phosphor-icons/react; pin Phosphor 2.x for glyph parity. |
| M14 | Engineering | No @import strategy for shared CSS. |
Phase 1 task 1 sub-add: single admin.css entry that @imports the override file + bundle import (per H6); every HTML links admin.css only. |
| M15 | Engineering | Accessibility entirely absent. | New Risks row added (see Risks section, A11Y row). Phase 5 task 1 amendment: a11y sweep using axe-core CLI run over all 15 files; semantic-HTML grep (<nav>, <main>, <aside>, aria-current on active sidebar item, role-badge ARIA, focus trap on .modal-stub). |
| M16 | Engineering | Mobile deferred but launch principle says self-serve. | Phase 1 task 2 sub-add: _shell.css grid uses clamp() / container queries so 1440 desktop degrades to 1024 + 768 readable (not pixel-perfect — visual integrity only). Mobile React build = explicit follow-on. |
| M17 | Engineering | Token-only-via-var lint not promoted to hard gate. | Phase 5 verification: grep -REn '#[0-9A-Fa-f]\{3,8\}' design-system/admin/_shell.css design-system/admin/_components.css returns 0. Hard gate. (HTML files allowed hex for inline images/placeholders only — exempt.) |
| M18 | Security | Privacy Policy link missing from shell + onboarding consent. | Phase 1 task 2 sub-add: shell footer carries Privacy · Terms · Cookies link row on every authenticated screen. Phase 2 task 1 sub-add: 01-onboarding.html Step 4 has consent checkbox + privacy-policy link. |
| M19 | Security | Lock-icon = "show but disable" antipattern for destructive actions on other users. | Phase 4 task 1 + Phase 3 sections amendment: destructive actions outside role scope hidden entirely (no lock-icon); lock-icon reserved for non-sensitive write actions where upgrade-path discoverability is valuable. _components.css comment captures the hide-vs-lock decision tree. |
| M20 | Security | Pending invitations panel exposes colleague emails + role pre-hire to Sales Agents. | Phase 4 task 1 amendment: pending-invitations panel gated Owner / Admin (full view), Sales Manager (own-team invites), Content Editor / Sales Agent (hidden). |
| M21 | Security | Trial banner counters expose org commercial data (seats / projects) to Sales Agents + Free Guests. | Phase 1 task 2 amendment: .shell__trial-banner accepts a data-banner-scope="owner-admin" attribute. Owner/Admin → full counters; Sales Manager / Content Editor / Sales Agent → tier label + days-left only; Free Guest → "Guest access" chip, no banner. |
| M22 | Security | Post-trial lock empty-state contract — server-side strip not opacity overlay. | Phase 1 task 3 sub-add: _components.css comment for .modal-stub post-trial state documents "in React: server-side strip content payload, do NOT use opacity/blur overlays". Mockup encodes empty payload directly. |
LOW findings — deferred to OPEN-QUESTIONS.md (Phase 5)
| # | Source | Note |
|---|---|---|
| L1 | Customers | "Developer" self-signup org-type chip wrong (developers come via invite only) — drop from chips. |
| L2 | Customers | Activity log retention copy ("pseudonymised / 7-year horizon") legalese for customers — soften to "We keep 12 months of detailed history; older entries summarised. Export anytime." |
| L3 | Brand | Phosphor weight (regular) provisional pending brand-language icon decision. |
| L4 | Brand | Photographic register silent — use Stone-tinted placeholder shapes only; defer photo policy to brand workstream. |
| L5 | Brand | Persistent trial banner breaks "Moss one-per-view" — either lower to --moss-bg 10% wash or accept admin-chrome exception in REGISTER-NOTES. |
| L6 | CS | 01-onboarding.html Step 2 missing billing-address country field (Stripe automatic_tax requirement). Add as mandatory field. |
| L7 | CS | Trial banner stale-state for Stripe webhook lag — data-banner-state="stale" variant in _shell.css. |
| L8 | Engineering | Mockup-to-React component mapping table (.btn-primary → <Button variant="primary">, etc.) appendix. |
| L9 | Engineering | ADR 0015 update: mockup directory stays canon, NOT deleted when React build lands (sales precedent). |
| L10 | Engineering | scripts/build-phosphor-sprite.sh — tiny shell script documenting source URLs, idempotent re-run. |
| L11 | Security | Role-badge collapse to initials on narrow viewport (screen-share sensitivity). |
| L12 | Security | CSV export must respect pii_class redaction matrix + Owner-only + self-audit-logged when implemented for real. |
| L13 | Security | Subdomain slug typing reveals tenant existence — real availability check must be rate-limited + return ambiguous "unavailable" without distinguishing reserved/taken. |
Files added by SPEC-AMEND v1.1
design-system/admin/02b-overview-guest.html— Free Guest tenant landing (H2)design-system/admin/assets/role-switch.js—?as=<role>URL →body[data-role](H12 + H13)design-system/admin/_admin-overrides.css— gold/glass deletion overlay on bundle import (H6)design-system/admin/admin.css— single entry that@importscolors_and_type+ overrides +_shell+_components(M14)design-system/admin/assets/brand/wordmark-mark.svg+wordmark-on-dark.svg— full wordmark contract (M8)scripts/build-phosphor-sprite.sh— sprite assembly automation (L10)
Workstream amendments
admin-panel-foundationPhase 1 absorbs H4 + H6 + H10 + H11 + H12 + H13 + M14 + M15 + M16 + M17 + M18 + M21 + M22 — substantially larger; may split intoadmin-panel-foundation-tokens+admin-panel-foundation-shellif it overruns 2 sessions.admin-panel-onboarding-overviewPhase 2 absorbs H2 (NEW 16th screen) + H7 + M1 + M3 + M4 + L6 —02b-overview-guest.htmladded.admin-panel-project-editorPhase 3 absorbs H5 + M6.admin-panel-rbac-auditPhase 4 absorbs H1 + H9 + H14 + H15 + H16 + M10 + M12 + M19 + M20.admin-panel-sign-offPhase 5 absorbs M11 + M15 a11y sweep + L1-L13 OPEN-QUESTIONS commitments.
Consolidation
Replaces
- The new
design-system/admin/mockup set is the canonical visual reference for the admin track going forward.docs/mockups/admin-panel-v8.htmlbecomes data-model reference only (not visual). `docs/mockups/admin-panel- atelier.html` becomes historical (kept until Phase 5 sign-off; Sergei's call when to delete). - Approach C from Step 3 ("two-phase: foundation now, trial-UX modals later") effectively materialises as: this plan = foundation; follow-on `admin- panel-trial-ux` workstream = modals + emails. Approach A still applies here; Approach C-style two-phase is the natural sequel.
Dedup check
- Sidebar / topbar / trial banner are shell primitives in
_shell.css; every screen imports + reuses, no per-screen variants. - Buttons / inputs / chips / status pills / role badges live in
_components.css; no inline styles in feature HTML. - Phosphor sprite is single source of truth; no per-screen inline SVG icons.
- Wordmark is single
assets/brand/wordmark.svg; no per-screen inline mark. - Token table is single
colors_and_type.css; no hex literals in_shellor_components(enforced via REGISTER-NOTES audit at Phase 5).
Touch radius
- All new files are scoped under
design-system/admin/— no touches outside this directory except (a) a small note appended to ADR 0015 documenting the canon-source promotion ofdesign-system/admin/, and (b) historical files indocs/mockups/are NOT modified or deleted by this plan. package.jsonunchanged. No deps. No build step.- No tests added (this is a static HTML mockup; verification is grep + browser- walk; no JS to unit-test).
Business Review SPEC-AMEND v1.2 (CONV-37, 2026-05-11)
User feedback mid-build (Phase 2 in flight): the original 01-onboarding.html 4-step wizard pattern is methodical but loses the "wow moment" of the atelier Quick Build flow (split-screen builder with live sales-presentation preview). Real SaaS onboarding precedents (Notion / Linear / Webflow) offer a fork right after signup: fast path / methodical path / skip. Apply the same to Phase 2.
Phase 2 IA change
| # | Screen | Was | Is |
|---|---|---|---|
| 00 | 00-welcome.html |
— | NEW. Post-signup fork screen. Hero «How do you want to start?» + 3 cards: (a) Quick Build → 01-quick-build.html; (b) Set up your organisation → 01-onboarding.html; (c) Skip to admin → 02-overview.html. |
| 01 | 01-onboarding.html |
First-registration 4-step wizard | UNCHANGED. Reached via card #2 «Set up your organisation» on 00-welcome. |
| 01 (sibling) | 01-quick-build.html |
— | NEW. Split-screen Object Builder modelled after atelier mockup. Left column (~580px): wordmark + Trial chip + eyebrow «OBJECT BUILDER · QUICK BUILD» + h1 «Name your project» + project name + subdomain w/ availability check + 3 required uploads (Exterior / Floor Plans / Gallery, numbered i/ii/iii) + SAVE & CONTINUE primary + SKIP ghost. Right column (flex-1): «LIVE PREVIEW · cote-residence.offplan.online» strip + Desktop/Tablet/Mobile toggle + sales-presentation preview frame using [data-project="cote"] + .project-themed cascade to demonstrate per-project brand-contract — sage-leaning marine accent, hero with project name + price + meta. Bottom dock: «Floor Plans · awaiting upload» + «Gallery · 0 of 12 images uploaded» (mirroring the upload-state of the left column). |
| 02 | 02-overview.html |
Workspace landing | UNCHANGED. Reached via card #3 «Skip» on 00-welcome OR after completing 01-onboarding OR after Save&Continue on 01-quick-build. |
Reasoning
- The fork screen is the canonical SaaS post-signup pattern. It respects the user's prior context: power users skip, perfectionists go methodical, visual-thinkers pick Quick Build to see results in seconds.
01-quick-build.htmlmakes the brand-contract system visible — the live preview swaps to[data-project="cote"]accent in real time. This is a marketing-grade demonstration of «your brand, your subdomain, your page».- Sample project remains Côte Résidence across the journey (existing in 02-overview + 02b-overview-guest + bundle
[data-project="cote"]), so the mock walks as one coherent narrative rather than introducing new projects. - Total screens 16 → 18 (15 original + new 02b from v1.1 + new 00-welcome
- new 01-quick-build).
Files added by v1.2
design-system/admin/00-welcome.html— post-signup fork screendesign-system/admin/01-quick-build.html— split-screen Object Builder
Workstream amendments
admin-panel-onboarding-overviewPhase 2 absorbs two new tasks:- Phase 2 task 4 (v1.2 H1): build
01-quick-build.htmlsplit-screen - Phase 2 task 5 (v1.2 H2): build
00-welcome.htmlfork screen index.htmlupdated from 16 → 18 thumb slots; «Onboarding & Overview» section grows from 3 to 5 cards.
- Phase 2 task 4 (v1.2 H1): build
Verification (per v1.2)
- Drift / hex / AU greps still 0 across new files.
01-quick-build.htmlpreview block uses[data-project="cote"]+.project-themedfrom bundle — no hex literals for accent.00-welcome.html3 cards: each card links to its target (01-quick-build/01-onboarding/02-overview). Visually consistent with existingindex.htmlthumb card pattern (Skeleton White surface, no glass).