Design Lounge
Install

Nº 367 of 520

Process step dossier

A portfolio case panel: a project's steps from sketch to shipped sit side by side as artboards; hover or focus one to light it and swap in its story.

Preview

Open full size
1280 × 800 · 14.9 KB · 252 lines

Use it

Free to use · credit appreciated

1 Once, in your project

npx skills add SusanAcharya/Design-Lounge

2 Then ask

Using the Design Lounge skill, build "Process step dossier" (piece process-step-dossier) in my stack. Match its brief; restyle it onto my product's theme.

No skill? Paste the brief instead. It carries the numbers, tokens and behaviour.

Brief

189 lines

Build brief for a coding agent. Rebuild this piece in the reader’s stack. If they haven’t said which stack, ask once, then default to semantic HTML + CSS + a little vanilla JS. Match the numbers below; don’t “improve” them.

What it is

Studied from sibaldesign.com: the idea is the projects panel that says “hover a step for its story”, where a project’s process frames sit in a row and the one you point at lights up in the accent while a caption box explains it. This version is the Work section of Fennick, a fictional product designer, on graphite with a signal orange-red accent. Each project shows three or four artboards drawn at rising fidelity: dashed sketch, grey wireframe, full colour, and shipped (device-framed, with a LIVE tag). Under the row, the project name, a dash pager, and a caption box with an orange left rule tell the story of the selected step. Prev and Next switch projects. The detail worth copying is that a case study becomes one screen: the reader sees the whole process at a glance and reads only the step they care about.

The artboards are built from a handful of positioned blocks per layout. Fidelity is a class, not a new drawing. In a product, swap the blocks for real thumbnails and keep the fidelity order.

Reference behaviour

  1. Load: project 01 “Transit pass” (PRJ.001 · MOB). Four phone artboards: 01 Sketch · Paper, 02 Wireframe · 390, 03 Visual · 390, 04 Shipped · iOS 18. Step 03 is selected: full opacity, 1px orange border, 8% orange wash, orange label.
  2. Unselected steps sit at opacity .5 and scale(.96). Hovering one raises it to .8 before it becomes selected.
  3. Hover, focus or click a step: it becomes selected (240ms opacity, 320ms expo scale, 200ms border). The caption meta changes to “Step 0N / 0M · Name · Size”, the story text swaps, and the box slides in from -6px with a fade (320ms). The dash pager moves: the active dash grows from 12px to 22px and turns orange.
  4. Arrow Left / Right move focus (and so selection) between steps, wrapping. Home / End go to the first and last step.
  5. “Next project” / “Prev”: the row is rebuilt for the new project. Steps enter with a 14px rise, scale .96 → 1 and fade (480ms expo, 50ms stagger). Header code, title, tags and the “0N / 03” counter update. The 220px progress line scales to (n / 3) over 500ms expo. Projects wrap.
  6. Each project opens on its own most telling step: project 01 on Visual, project 02 “Grain ledger” on Layout, project 03 “Harbour posters” on Colour.
  7. A polite live region announces “Project 2 of 3: Grain ledger” on project change.
  8. On narrow screens the step row scrolls sideways with snap, and the selected step is scrolled to the centre.
  9. Reduced motion: no scale, rise, slide or smooth scroll. Selection still changes border, opacity and text.

Structure

1280 × 800, padding-inline 84px
┌──────────────────────────────────────────────────────────────────────────┐
│ FENNICK/                          INDEX  WORK  NOTES  CONTACT  ■ BOOKING │ top 56px, 1px rule
│ 02 WORK ───────────────────────────────────────────────────────────────  │ section title 30px
│ ┌ panel ───────────────────────────────────────────────────────────────┐ │
│ │ ■ PRJ.001 · MOB                             HOVER A STEP FOR ITS STORY│ │ head 38px
│ │  grid 24px                                                           │ │
│ │   01·SKETCH   02·WIREFRAME  ┏03·VISUAL┓   04·SHIPPED                 │ │ stage 372px
│ │   ┌╌╌╌╌┐      ┌────┐        ┃┌────┐  ┃   ╭────╮                     │ │ artboards 136×286
│ │   ╎    ╎      │▓▓▓▓│        ┃│████│  ┃   │████│LIVE                 │ │ gap 28px
│ │   └╌╌╌╌┘      └────┘        ┗└────┘  ┛   ╰────╯                     │ │
│ ├──────────────┬───────────────────────────────────────────────────────┤ │
│ │ TRANSIT PASS │ ┃ STEP 03 / 04 · VISUAL · 390                          │ │ lower, 250px | 1fr
│ │ ── ── ━━ ──  │ ┃ Night-blue base so the code reads in sun and in…     │ │
│ │ [IOS] [TICKETING] [FIELD RESEARCH] [PROTOTYPE]                        │ │ tags
│ └──────────────────────────────────────────────────────────────────────┘ │
│ 01 / 03  ━━━━──────────                         [‹ Prev] [Next project ›]│ foot
└──────────────────────────────────────────────────────────────────────────┘
  • header.top: logo link, nav with aria-current on Work, availability label.
  • Section title: number span + h1 “WORK” + flexible rule (::after).
  • section.panel labelled by the project h2.
  • .stage is role="tablist" “Process steps”. Each step is a button role="tab" containing a label row (number · name, size) and an .art div of absolutely positioned i blocks.
  • .lower: left column (h2 project title, dash pager aria-hidden), right column (caption box = role="tabpanel", tabindex=0, aria-labelledby the selected step), tags spanning both columns.
  • .foot: counter, progress line, two buttons.

Tokens

:root {
  --bg: #151517;          /* graphite page */
  --panel: #1c1c1f;       /* panel body */
  --panel-2: #222226;     /* panel head */
  --line: #2d2d32;        /* inner rules, grid */
  --line-2: #3d3d44;      /* panel border, buttons, tags, artboard edges */
  --ink: #ece6da;         /* titles */
  --ink-2: #bdb6aa;       /* body */
  --dim: #8f8a81;         /* nav, labels, sketch lines */
  --accent: #ff5b2e;      /* signal: selected step, caption rule, progress */
  --accent-soft: rgba(255,91,46,.08);

  --sans: "Bai Jamjuree", system-ui, sans-serif;
  --mono: "Azeret Mono", ui-monospace, monospace;

  --gutter: 84px; --space: 6px 10px 14px 20px 28px;
  --art-mob: 136px 286px; --art-dsh: 288px 180px; --art-pst: 184px 260px;

  --ease: cubic-bezier(.2,.7,.2,1);
  --expo: cubic-bezier(.16,1,.3,1);
}
/* per project, set on each .art: --c1 primary, --c2 highlight, --c3 surface, --c4 text lines */

Typography

RoleFamilySizeWeightLine-heightTrackingCase
Section titleBai Jamjuree30px60010.18emUpper
Project titleBai Jamjuree21px6001.350.16emUpper
Story textBai Jamjuree14.5px4001.60Sentence, max 620px
LogoBai Jamjuree15px60010.14emUpper, orange slash
Labels, nav, meta, buttonsAzeret Mono10.5px400–5001.60.18emUpper
Step labelAzeret Mono9px40010.18emUpper
TagsAzeret Mono9.5px40010.18emUpper
LIVE tagAzeret Mono8px50010.14emUpper, dark on orange

Motion

ThingTriggerPropertyFrom → toDurationEasingReduced motion
Step selecthover / focus / clickopacity, scale, border.5, .96, none → 1, 1, orange240 / 320 / 200msease / expo / easeborder and opacity only, instant
Caption swapstep changeopacity, translateX0, -6px → 1, 0320ms--easenone
Dash pagerstep changewidth, colour12px grey → 22px orange300 / 200msexpo / easeinstant
Steps enterproject changeopacity, translateY, scale0, 14px, .96 → 1, 0, 1480ms, 50ms staggerexponone
Progress lineproject changescaleXold → n/3500msexpoinstant
Row scroll (narrow)step changescrollLeft→ centredsmoothbrowserinstant

States

  • Step resting: opacity .5, scale .96, transparent border, label --dim.
  • Step hover (not selected): opacity .8.
  • Step selected: opacity 1, scale 1, 1px --accent border, --accent-soft background, label --accent, aria-selected="true", tabindex=0.
  • Focus-visible: 2px orange outline, offset 3px (also selects).
  • Artboard fidelity: sketch = 1px dashed --dim edges and blocks, text lines as dashed rules; wireframe = #26262b board, #3a3a41 blocks; visual = project colours; shipped = visual + 3px dark ring + 1px outer ring + drop shadow, 14px radius for phones, orange LIVE tag bottom-right.
  • Prev / Next hover: border turns orange, text --ink.
  • Nav link current: --ink.

Accessibility

  • Steps are a tablist with roving tabindex. Focus selects, so keyboard users get the same “hover” reading. Each tab has aria-label="Step 3 of 4: Visual".
  • The caption box is the tabpanel, labelled by the selected step.
  • Project changes are announced in a polite live region. Prev and Next have aria-labels (“Previous project”, “Next project”) because their visible text hides on phones.
  • The dash pager and progress line are aria-hidden; the counter “01 / 03” is visible text.
  • Contrast: #ece6da on #1c1c1f about 14:1; #bdb6aa about 9:1; #8f8a81 about 5:1; orange #ff5b2e on #1c1c1f about 5.6:1.
  • Unselected steps at .5 opacity are previews, not text to read; their labels are repeated in the caption when selected.
  • Targets: steps are at least 156px wide; buttons 40px tall.

Responsive rules

  • ≥1280: as drawn, the row is centred.
  • 1024–1100: gutters 40px, artboards shrink (phone 116×244, dashboard 210×132, poster 150×212), gap 16px.
  • 768: same as 1024; four posters still fit.
  • <760: gutters 16px, nav links and the hint hidden. The stage becomes a horizontal scroller with scroll-snap-type: x mandatory; steps don’t shrink; the selected step is centred. The lower area stacks: title + pager, then caption, then tags. Prev / Next show icons only; the progress line is 80px.
  • No horizontal page overflow at 375px (only the stage scrolls).

Acceptance checklist

Always

  • One project at a time, its steps side by side in process order, three or four steps.
  • Fidelity rises left to right: sketch, wireframe, visual, shipped. Shipped is device-framed and tagged LIVE.
  • Exactly one step is selected: accent border, accent wash, full opacity. The others are at .5 and slightly smaller.
  • Hover, focus and click all select. Arrow keys, Home and End move between steps.
  • The caption box shows “Step N / M · Name · Size” and one or two sentences, with a 2px accent left rule.
  • Each project opens on a chosen step, not always the first.
  • Prev / Next wrap, rebuild the row with a staggered entrance, update counter and progress, and announce the project.
  • Narrow screens scroll the row sideways with snap; the page itself never scrolls sideways.
  • Reduced motion keeps all state changes and drops movement.

This demo

  • Projects: Transit pass (PRJ.001 · MOB), Grain ledger (PRJ.002 · DSH), Harbour posters (PRJ.003 · PRN).
  • Transit pass opens on “Step 03 / 04 · Visual · 390”.
  • Panel head right side reads “Hover a step for its story” in orange.
  • Section title “02 WORK” at 30px with 0.18em tracking.
  • Accent is #ff5b2e on #1c1c1f.

Implementation notes

  1. Draw each layout once as blocks in percentages; fidelity is a class on the board. That keeps every step of a project the same composition, which is the point.
const L = { mob: [['m',8,5,84,6],['m',8,16,84,42],['t',8,63,60,3],['t',8,70,44,3],['b',8,84,84,9]] };
const art = (kind, lvl) => `<div class="art k-${kind} f${lvl}">` +
  L[kind].map(([k,x,y,w,h]) => `<i class="${k}" style="left:${x}%;top:${y}%;width:${w}%;height:${h}%"></i>`).join('') +
  (lvl === 3 ? '<span class="live">LIVE</span>' : '') + '</div>';
.f0, .f0 i { border: 1px dashed var(--dim); }
.f0 i.t { border: 0; border-top: 1px dashed var(--dim); height: 0 !important; }
.f1 { background: #26262b; } .f1 i { background: #3a3a41; }
.f2, .f3 { background: var(--c3); } .f2 i.m, .f3 i.m { background: var(--c1); }
.f3 { box-shadow: 0 0 0 3px #0e0e10, 0 0 0 4px var(--line-2), 0 18px 30px -12px rgba(0,0,0,.6); }
  1. Select on focus, not only on hover. A hover-only reveal hides the story from keyboard and touch users. Bind mouseenter, focus and click to the same select(i), and make arrow keys move focus (which then selects).

  2. With three steps, map them to sketch, wireframe and shipped (levels 0, 1, 3), not 0, 1, 2. A three-step project should still end on the device-framed, LIVE board.

Common mistakes:

  • Drawing each step as a different picture. The reader must see the same layout getting closer to real.
  • Captions that describe the picture (“a blue phone screen”). Each story says what was decided and why, with one number when there is one.
  • Letting unselected steps go below .5 opacity; they stop reading as a row.
  • Scrolling the page sideways on phones instead of the stage.

Details

Palette
Type
Bai Jamjuree · Azeret Mono
Motion
Subtle motion
Build
One session
Designed bySusan AcharyaKathmandu

Studied

Lama Lama

A tiny nav bar can carry the voice. Change its one line for each section.

All sources