HOCO B2B
Design

Design workflow & handoff

How designs move from Claude Design to code — project structure, frame naming, statuses and who moves them, annotations, the handoff bundle, asset export, token releases, change requests after handoff, design QA and responsibilities.

This page is the working agreement between Akram (design), Imad (Flutter apps) and Anis (server, back-office, reseller web). It applies from Day 1 of the design plan to the last design QA.

V1 fits in three months, design to deployment, so handoff is incremental. Each app's frames reach Ready for dev at its client checkpoint, because Imad starts building the reseller app while the back-office is still being designed. Design handoff complete (Day 21) closes the V1 design; it is not the first moment developers see a frame.

Project structure

One Claude Design project, HOCO B2B — Design, shared by link with Anis and Imad (they take the handoff from it) and with HOCO (view and comment, through share links per checkpoint).

PageContentOrganised by
CoverName, version (v1.0), status legend, naming rules, the changelog (one row per release and change request), links to this site—
FoundationsTokens (colour, status tones, spacing, radius), text styles, effect styles (elevation), grids, icon set and custom icons, motion specs, the annotation kitOne frame per foundation (design system)
Components-MobileFlutter-bound components with variantsSections: Actions, Inputs, Selection, Commerce, Orders, Field, Feedback, Navigation, System
Components-Web@hoco/ui-bound components, the five back-office page templates, the reseller-web shellSections: Primitives, Data, Navigation, Overlays, Maps & planning, Templates, Reseller web shell
Reseller AppRA screens with every state00 · Flows & wireframes, then one section per inventory section (RA · Onboarding & account, RA · Shopping, …)
Delegate AppDA screens00 · Flows & wireframes, DA · Access, DA · Day, DA · Tour, DA · Visit, DA · Prospects & conversion, DA · Profile, DA · System
Back-officeBO pages: bespoke pages in full, template pages as template plus page specOne section per sidebar group (inventory)
Reseller WebRW layouts at 1440, 1024 and 768Sections mirroring RA
PrototypesReseller ordering (guest to live tracking); delegate visit day; optional back-office confirmation and deliveryOne flow per prototype, with a start frame
ArchiveSuperseded frames, moved here with the date and the change-request id, never deletedBy date

Rules:

  • Components live only on the two component pages. Screens contain instances, never detached copies. Detaching a component needs a written reason in an annotation.
  • Every colour, radius, spacing and text style is bound to a token or style. A raw hex value in a screen is a defect.
  • One shared mock data set is used in every frame: one store (Bazar du Centre, REV-000123, Oran, Demi-gros), one delegate, one tour, a few orders. It is consistent across frames and in the canonical formats.
  • If the project gets too large (several hundred frames with states), split it into a design-system project (Foundations plus Components) and a product project. The page names stay the same.

Frame naming

Format: SCREEN-ID · Screen name · state, for example RA-18 · Checkout · default.

  • SCREEN-ID and Screen name are exactly as in screens.json (English name).
  • state is kebab-case, from this vocabulary:
StateMeaningExample
defaultNominal, data loadedRA-12 · Catalog · default
loadingSkeletonsRA-21 · Orders · loading
empty · empty-filteredNo data · no result for the filtersRA-12 · Catalog · empty-filtered
error-<code>One API error, code in lower kebab-caseRA-18 · Checkout · error-credit-limit-exceeded
offlineNo networkDA-06 · Tour programme · offline
permission-<kind>Device permission missingDA-08 · Map & navigation · permission-location-denied
guestVisitor without an accountRA-14 · Product detail · guest
status-<enum-value>One business status, from enums.json in lower kebab-caseRA-22 · Order detail & tracking · status-shipped
live-<event>A live update arrivingRA-22 · Order detail & tracking · live-status-changed
<sheet or step>A sheet, dialog or step of the screenRA-13 · Advanced filters & sort · attribute-range
suffix · 1/3A sequenceDA-14 · New reseller · 2/3
suffix · 1440 / · 1024 / · 768Web breakpointBO-41 · Orders to confirm (new, on hold, assisted) · default · 1440

Components use Family/Component with variant properties named like the code parameters: Commerce/Price block, with variant=card|detail|promo|total, state=default|locked. Layers that carry data are named after the field they show (price, availability, orderNumber), so annotations and the handoff read the same.

Design statuses

StatusMeaningSet byTo leave this status
WIPBeing designedAkramAll listed states drawn, annotations done
Ready for reviewComplete; waiting for the daily feasibility checkAkram (end of day)Imad (RA, DA) or Anis (BO, RW) answers OK, OK with notes or Needs change within 15 minutes of review time
Client reviewFeasible; shown to HOCO at a checkpointAkramHOCO's answer is recorded. Assumption: within 3 working days
ApprovedHOCO approved, or its feedback was appliedAkram, recording the approval (meeting date or comment link) on the sectionAssets exported, annotations final
Ready for devFrozen for build; the dev task may startAkram, acknowledged by the consuming developerThe developer starts the build task
In devBeing builtImad or AnisBuild on staging, then design QA
Design QA passedBuild matches the design; no open S1 or S2 issueAkram, after the DQA task—

How it shows in Claude Design:

  • A status badge component (variants per status) sits at the top left of every section.
  • For developers, only Ready for dev sections go into the exported design bundle of a handoff.
  • A frame changed after Ready for dev carries a Changed badge with the change-request id and date, and the section returns to Ready for dev.

When each app reaches Ready for dev. The reseller app after checkpoint 3 (Reseller app designs ready for client review); the delegate app after checkpoint 4; the back-office after checkpoint 5; the reseller web after the Day-21 presentation, because WEB-01 starts once the back-office foundation exists. The build tasks are scheduled after these points in the Gantt. A frame that a developer needs earlier, such as the Day-6 onboarding for MOB-06, goes Ready for dev after the feasibility check, with HOCO's asynchronous look recorded.

Annotation conventions

Annotations use the annotation kit on Foundations. Each one starts with a prefix, so its meaning never depends on its colour.

PrefixContentExample
STATEThe states this frame stands for, and links to the other state framesSTATE: default · see error-min-amount, error-credit-limit-exceeded, offline
ACTIONTrigger → result → feedbackACTION: tap « Ajouter au panier » → cart.items.add → badge bumps, snackbar « Ajouté au panier » (4 s, action « Voir »)
COPYFinal French copy, with variables in ICU form{count, plural, one {# référence} other {# références}} · « Plus que {amount} pour atteindre le minimum »
DATAField ← API operation id (field names as in the OpenAPI document); derived values with their ruleDATA: Solde et crédit ← finance.summary. « En retard » = planned and time slot passed (derived)
RULERequirement ids and the business ruleRULE: [ORD-02] minimum amount from settings; checkout disabled below it
A11YAccessible label, focus order, live region, text scalingA11Y: announce status changes (polite); stepper buttons labelled « Retirer une pièce » / « Ajouter une pièce »
RESPWeb breakpoint behaviourRESP: below 1024 the filter sidebar becomes a drawer with a sticky « Voir 128 produits »
EDGEEdge cases and limitsEDGE: names over 2 lines → ellipsis; more than 99 items → « 99+ »
DECISIONPoints that wait on an open decision, with a link to the decision registerDECISION: prices visible before validation (default: yes)

Every screen frame has at least STATE, DATA and COPY. Every interactive element has an ACTION the first time it appears in a flow.

Using the handoff

  • Access. Akram shares the Claude Design project with Imad and Anis by link. The handoff is the shared link plus the exported design bundle and the token file (hoco.tokens.json).
  • Filter on Ready for dev. Never build from a WIP or Client review frame. If a needed frame is not ready, ask in the team channel; the 15-minute check exists for exactly this.
  • Read tokens, not values. Bound tokens are named (color/status/success/bg, space/4) in the handoff and in the token file. Use the token, not the hex.
  • Units. Mobile frames are drawn at 360 × 800, so 1 px in the design = 1 dp in Flutter. Web frames are drawn at 1x CSS pixels.
  • Compare changes. The Changed badge and the changelog on the Cover show what moved since a frame was marked Ready for dev. Use them together with the change request that caused the change.
  • Component names are the link between the design and @hoco/ui / hoco_ui. The exported design bundle can be handed to Claude Code as a starting point, but the build always uses the existing library components.

Assets export

AssetFormat and sizesNamingGoes to
Lucide iconsNot exported: used from lucide-react and lucide_icons_flutter by nameLucide name in the annotation (map-pin)—
Custom iconsSVG, 24 × 24 viewBox, 2 px stroke, currentColor, no masks, filters or transformsic-gps-check-in.svg (kebab-case, ASCII)hoco_ui assets (Imad) · @hoco/ui icon components (Anis)
Illustrations (empty states, onboarding)SVG preferred. If raster: WebP in Flutter density buckets name.webp, 2.0x/name.webp, 3.0x/name.webp; web 1x and 2xill-empty-cartSame
Product placeholderSVG 1:1img-product-placeholder.svgBoth
App icons (DQA-01)Master 1024 × 1024 PNG per app. Android adaptive layers (foreground, background, monochrome) at 432 × 432 px with the logo inside the 66 dp safe zone. A corner ribbon for the dev and staging flavorsic-launcher-reseller-*.pngImad (flutter_launcher_icons)
Splash (Android 12 and later)Icon centred on a solid blue.600 background. Without icon background: 288 × 288 dp, inside a 192 dp circle. With icon background: 240 × 240 dp, inside a 160 dp circlesplash-reseller.pngImad
Play StoreIcon 512 × 512 PNG; feature graphic 1024 × 500; phone screenshots 1080 × 1920store-*.pngImad (MOB-14)
Webfavicon.svg, 32 px PNG, apple-touch-icon 180 × 180, Open Graph image 1200 × 630 (back-office and reseller web)—Anis
Document templates (DQA-09)A4 layout spec with measurements, fonts and an HTML/CSS-friendly structure—Anis (SRV-18)

Akram sets the export settings in Claude Design and delivers the exports as one archive per release. The consuming developer commits them; Akram does not need repository access.

Tokens release process

  1. Change. Akram edits the tokens in Claude Design on Foundations. Values that are already released are never changed silently.
  2. Export hoco.tokens.json (W3C DTCG format; see token delivery) and write the changelog entry on the Cover page.
  3. Web. Anis commits the JSON to AnisBetehi/hoco with a Conventional Commit (chore(ui): design tokens v1.0). The build regenerates the @hoco/ui CSS variables. The release is tagged tokens-v1.0.0.
  4. Mobile. Imad copies the same JSON into hoco-mobile, regenerates the Dart ThemeExtensions and commits (chore(ui): design tokens v1.0).
  5. Check. A visual pass in Imad's widget gallery app (MOB-04) and on one back-office page. Akram confirms.
VersionWhenContent
v0.9End of Day 2All foundations. Only additive changes afterwards, because MOB-04 starts after Day 3
v1.0Day 21 (Design handoff complete)Final V1 values
v1.1DES-22Only if feedback changes values
LaterOn change requestSemantic versioning: a value change is a patch, a new token a minor, a renamed or removed token a major (both codebases updated in the same week)
## tokens v1.1 — <date>
Changed: color.status.warning.fg  #B45309 → #A84C08  (contrast on new pill background)
Added:   color.whatsapp           #128C7E
Reason:  CR-014 (HOCO feedback, checkpoint 6)
Impact:  status pills (all apps); WhatsApp button (RA, RW)

Handoff checklist (Day 21)

  • Every V1 frame is Approved or Client review with its open items listed. No V1 frame is WIP.
  • Every frame name follows ID · Name · state, and the states listed on the screen pages exist as frames or as STATE annotations.
  • No detached components; no raw hex, radius or font values (checked in the consistency pass).
  • STATE, DATA and COPY annotations on every screen frame; DECISION stickers link the decision register.
  • Prototypes work end to end: reseller ordering, delegate visit day.
  • Tokens v1.0 exported; changelog written; the commits are planned with Anis and Imad.
  • Assets exported (custom icons, illustrations, placeholders), with app icons and splash drafts for DQA-01.
  • The client presentation is held and its feedback recorded for DES-22.
  • A 1-hour handoff walkthrough with Imad and Anis: questions answered or turned into change requests.

Change requests after handoff

A frame that is Ready for dev or later changes only through a change request (CR). This covers HOCO feedback after a checkpoint, a design QA finding that needs a design decision, or a developer's proposal.

  1. Raise. Open an issue in the repository of the affected app: hoco-mobile for RA and DA, AnisBetehi/hoco for BO and RW, label design-change. The title is [RA-18] Afficher le crédit disponible au-dessus des méthodes de paiement. The issue gives the screen ids, the reason, who asked, and a link to the frame (node link). HOCO's requests reach it through Anis.
  2. Triage by Anis, within one working day:
    • accept, reject, or move to V2;
    • size it: S (copy or visual tweak, under an hour of design), M (a new state or component variant, up to a day), L (a new screen, flow or rule);
    • check the plan impact. L requests change the scope: they need HOCO's written approval (the cahier's scope clause) and a plan update in tasks.json.
  3. Design. Akram changes the frames and adds a changelog row on the Cover, with the CR id, the date and the frames. The changed frames get the Changed badge; superseded versions move to Archive.
  4. Docs. The screen's page on this site is updated in the same week. The screen pages are the written spec developers read.
  5. Task. The CR becomes a task: an update of the existing build task if it is not done, or a new fix task. It links the issue and the Claude Design frame.
  6. Build and QA. The developer implements the change and links the pull request to the issue; Akram checks it in the next design QA.

Rules:

  • A design change announced only in chat, by voice, or as a screenshot is not a change.
  • A comment on the shared design becomes a CR only when someone opens the issue.
  • Frames In dev are never edited without a CR.

Design QA procedure

TaskScopeWhen
ContinuousEach Flutter component in Imad's widget gallery; each @hoco/ui component as it is builtDuring MOB-04 and DSH-01
DQA-02Reseller app buildAfter MRA-09
DQA-03Delegate app build, including outdoor readability on a real phoneAfter MDA-11; findings go to MOB-17
DQA-04Back-office at desktop, tablet and large widthsAfter DSH-12
DQA-05Reseller web at desktop, tablet and phone widthsAfter WEB-05, before the functional test campaign (QA-03)
DQA-12V2 surfacesP4

Devices and settings. Staging builds. One mid-range Android phone (about 6.5 inches, 1080p, a recent Android version), one 360-dp-wide phone, and both at 130 % text size; the delegate app also outdoors at full brightness. Web: Chrome at 1440, 1280, 1920 and 1024 × 768, plus a phone width for the reseller web.

Checklist (screen by screen, against the Ready for dev frames)

AreaCheck
LayoutSpacing, alignment and sizes follow tokens. Nothing is clipped at 360 dp or 130 % text
Type and colourText styles; status pills use the right tone; no stray colours
ComponentsThe right variant; correct pressed, focused and disabled states
StatesLoading, empty, error, offline, guest, pending and live states reachable and matching the frames
CopyFrench copy as annotated; accents; no-break spaces; no truncated key information; error messages per code
FormatsMoney 1 250,00 DA; dates; phones; business numbers; no stock quantity shown to resellers or delegates
InteractionFeedback on every tap; transitions; undo and confirmations as specified
AccessibilityContrast spot checks; touch targets; TalkBack labels on icon buttons; focus visible on web; text scaling
RTL readinessSmoke test with the layout direction forced to RTL on key screens (no broken layout, directional icons mirrored)
Field (delegate)Readable in direct sunlight; usable with one hand; GPS and sync states clear

Evidence. Each issue has a screenshot or a screen recording next to the Claude Design frame link, the device and build number, and the steps to reproduce.

Severity

LevelDefinitionExpectation
S1 — BlockerWrong data or action, broken flow, unreadable text, an accessibility blocker, a stock quantity exposedFixed before the release or the acceptance
S2 — MajorWrong component or state, misleading copy, wrong status colour, missing stateFixed in the current build task or the next fix batch
S3 — MinorSpacing or alignment off by a step, wrong icon, small inconsistencyBatched, with an owner and a date
S4 — PolishSuggestion or improvementBacklog, or reviewed with the pilot findings (DQA-08)

Where issues go. GitHub issues in the app's repository (hoco-mobile or AnisBetehi/hoco), with the labels design-qa and S1…S4, and the screen id in the title ([DA-08] Bouton « Je suis arrivé » actif hors tolérance). Assumption: GitHub Issues is the tracker; Anis confirms.

Exit. The DQA task is done when no S1 or S2 issue is open on its scope and the S3 issues have an owner. Akram then marks the sections Design QA passed. Fixed S1 and S2 issues are re-checked on the next build.

Responsibilities

ActivityAkramImadAnisHOCO
Design system (tokens, components)Owns, designsReviews mobile feasibility; builds hoco_ui (MOB-04)Reviews web feasibility; builds @hoco/ui (DSH-01)Approves the direction (checkpoint 1)
Screen inventoryLeads Day 5Co-validates RA and DACo-validates BO and RW; updates screens.jsonConfirms the scope (checkpoint 2)
Screen designsOwns15-minute daily check on mobile days15-minute daily check on web daysReviews at checkpoints 3–6
Client presentationsPresentsAttends RA and DAAttends all; records decisions in the decision registerFeedback within the agreed delay; approval
StatusesWIP → Ready for review → Client review → Approved → Ready for dev; Design QA passedSets In dev on mobileSets In dev on web—
Tokens releaseEdits tokens, exports the JSON, writes the changelogGenerates and commits the Dart tokensCommits the JSON, generates the CSS, tags the release—
AssetsExportsIntegrates mobile assets, icons, splashIntegrates web assetsSupplies vector logos, product photos and the legal mentions for documents
Copy (French)Writes UI and message copy (DQA-10)—Reviews API error messages; co-owns DQA-10Validates terminology and tone
Change requestsDesigns, updates the changelogImplements mobileTriages, plans, implements web, updates docs and tasksRaises through Anis; approves scope changes
Design QARuns it, files issuesFixes mobile (MOB-17)Fixes web—
Screen spec pages on this siteSupplies content and correctionsFlags gaps found while buildingPublishes and keeps them in sync—

On this page