Content Blocks thatsadam Design System

thats adam
ACF Flexible Content

All case study pages are assembled from these reusable blocks via ACF Pro flexible content. Each block is a self-contained PHP template with scoped CSS. Editors choose from the block palette in WordPress — no code needed.

Text Block

3-column asymmetric grid. Label + heading in column 1, body copy spans columns 2–3. Forces reading hierarchy — the label anchors the section, the body breathes right.

Research findings

User needs shape every decision

Through twelve stakeholder interviews and two rounds of usability testing, we identified three core user needs that shaped the entire design direction and validated our initial assumptions.

Anatomy

  1. Header (col 1) — label-s + heading-m
  2. Body (col 2–3) — text-l, tertiary colour, spans two columns

ACF Fields

  • labeltextSection eyebrow
  • headingtextSection heading
  • bodytextareaMain copy (large, tertiary)
CSS
.acf-text-block { display:grid; grid-template-columns:1fr 1fr 1fr; gap:var(--space-2xl); }
.acf-text-block__header { grid-column:1; }
.acf-text-block__body   { grid-column:2/span 2; font-size:var(--text-l); }

Text Plus

4-variant flexible text block. Layout controlled by an ACF select field. Covers bullet lists, image+text, and body-only compositions.

Variant: --bullets

Approach

How we work

A structured process that moves from broad research to focused delivery.

  • Discovery & stakeholder interviews
  • Synthesis and affinity mapping
  • Prototyping and testing

Variant: --no-image

Context

The brief

A fast-growing logistics startup needed a delivery tracking interface that worked equally well for dispatchers on desktop and couriers on mobile, without a separate codebase.

Variant: --image-left

Image

Process

Mapping the journey

We mapped every touchpoint across the end-to-end delivery experience to identify friction points and prioritise redesign effort.

Variant: --image-right

Outcome

Final solution

A unified responsive interface that reduced dispatcher errors by 34% and cut courier training time in half.

Image

Anatomy

  1. bullets — Two-column bullet grid, no image
  2. no-image — Header col left (1fr), body right (2fr)
  3. image-left — 50/50 grid, image left
  4. image-right — 50/50 grid, image right

ACF Fields

  • layoutselectbullets / no-image / image-left / image-right
  • labeltext
  • headingtext
  • bodywysiwygRich text, supports lists + links
  • imageimageRequired for image-left/right
  • bullet_itemsrepeaterFor bullets layout
CSS
/* Four layout variants */
.acf-text-plus--bullets     { flex-direction: column; }
.acf-text-plus--no-image    { display: grid; grid-template-columns: 1fr 2fr; }
.acf-text-plus--image-left,
.acf-text-plus--image-right { display: grid; grid-template-columns: 1fr 1fr; }

Large Pull Quote

Full-bleed centred typographic statement. Used sparingly — once per case study — to mark a key finding or design principle. The text size itself communicates importance.

Good design is as little design as possible.

— Dieter Rams

Anatomy

  1. Quote text — text-5xl, fw-black, centered, primary colour
  2. Attribution — text-m, fw-semibold, uppercase, secondary colour

ACF Fields

  • quotetextThe quote text
  • attributiontextName / source
CSS
.acf-pull-quote__text {
  font-size: var(--text-5xl);
  font-weight: var(--fw-black);
  text-align: center;
  color: var(--text-on-dark-primary);
}

Flow Diagram

Alternating left/right task cards with JS-drawn right-angle SVG connector lines (8px radius corners). Visualises user journeys, service blueprints, or process flows.

Discovery

Define the problem space through stakeholder interviews and competitive analysis.

Definere

Synthesise research into opportunity areas and a clear design brief.

Levere

Ship tested, production-ready designs with full developer handoff documentation.

Anatomy

  1. Row — 2-column grid; left → col 1, right → col 2
  2. Card — 106px circle (image or number) + title + body
  3. Connector — JS-drawn SVG path, stroke: primary-30, 8px corners

ACF Fields

  • labeltext
  • headingtext
  • descriptiontextHalf-width intro description
  • stepsrepeaterstep_title, step_body, step_image, side (left/right)
CSS
/* JS draws connector SVG between adjacent cards */
.acf-flow__connector { position:absolute; overflow:visible; pointer-events:none; }
.acf-flow__connector path { fill:none; stroke:var(--surface-branding-primary-30); stroke-width:2; }

Table Block

Structured data table with optional row images and bullet lists per cell. Horizontally scrollable on mobile. Used for competitive analysis, feature matrices, and research data.

Feature That's Adam Competitor A Competitor B
Responsive design
Full Partial None
Dark mode
Token-driven None Manual
Designsystem
  • Figma source
  • CSS tokens
  • Living docs
Style guide only None

Note: first column header renders at text-xl in red; first column cells render in red, uppercase, semibold. Subsequent columns are grey.

Anatomy

  1. Column headers — text-l, fw-black, tertiary grey; first-child: text-xl, red secondary
  2. Row label (col 1) — semibold, red secondary, uppercase, 4px tracking; flex row with optional 150×150px image
  3. Data cells — text-m, tertiary; bullet lists use custom red square marker (no disc)
  4. table-layout: fixed — equal column widths enforced
  5. Mobile — overflow-x: auto, table-layout reverts to auto, min-width 300px per cell

ACF Fields

  • labeltext
  • headingtext
  • columnsrepeatercolumn_heading
  • rowsrepeaterrow_label, row_image, cells (sub-repeater: cell_content, cell_bullets)
CSS
.acf-table { width:100%; border-collapse:collapse; table-layout:fixed; }
.acf-table th, .acf-table td { padding:var(--space-l) var(--space-m); vertical-align:middle; border-bottom:1px solid var(--surface-branding-primary-30); }
.acf-table th { font-size:var(--text-l); font-weight:var(--fw-black); color:var(--text-on-dark-tertiary); border-bottom:2px solid var(--surface-branding-primary-30); }
.acf-table th:first-child { font-size:var(--text-xl); color:var(--text-on-dark-secondary); }
.acf-table td:first-child { font-weight:var(--fw-semibold); color:var(--text-on-dark-secondary); text-transform:uppercase; letter-spacing:4px; }
.acf-table__bullets li::before { content:''; display:block; width:8px; height:8px; background:var(--surface-branding-primary); margin-top:6px; }

Screen Mockups

Displays 1–4 screen images with blue drop-shadow glow. PNG exports with transparent backgrounds are required for the glow to work correctly. Supports captions and bullet annotations.

Final screens

Delivered solution

Screen

Dashboard view

Screen

Detail view

Anatomy

  1. Glow — filter: drop-shadow(0 0 24px var(--lightbox-img-shadow))
  2. Container — No overflow:hidden — glow must bleed outside bounds
  3. Images — object-fit: contain (not cover) to preserve frame shape

ACF Fields

  • labeltext
  • headingtext
  • layoutselectdefault / split-meta
  • imagesrepeaterimage, caption, bullets
CSS
.acf-screen-mockups__mockup img {
  filter: drop-shadow(0 0 24px var(--lightbox-img-shadow));
}
/* No overflow:hidden on parent */

User Interviews

Editorial full-width rows, one per participant. The quote is the typographic hero — extralight italic at clamp scale. Ghost sequence numbers are oversized and purely decorative.

SJ
Sarah Johnson Senior Product Manager
The handoff between design and development was always where things broke down — I needed a designer who understood both sides.

Insights

  • Cross-functional communication
  • Design-dev handoff pain
  • Need for process clarity

Anatomy

  1. Ghost number — absolute right:-0.05em; clamp(120px,22vw,220px); fw-black; red; opacity 0.07; z-index 0
  2. Photo — 240×240px; border-radius:12px; object-position:50% 20% (face-favoured); initials fallback: red fw-black clamp(2rem,5vw,4rem)
  3. Navn — `.heading-m` class; primary colour
  4. Role — text-m; fw-semibold; tertiary; uppercase; ls-label-xl (6px)
  5. Quote — clamp(text-xl,3.5vw,2.4rem); fw-extralight; italic; primary; max-width:78ch; ls-heading; lh-xl
  6. Insights label — fw-semibold; secondary red; uppercase; ls-label-xl
  7. Chips — column flex; pill border (surface-branding-primary-30, radius 100px); tertiary text; mobile: flex-wrap row

ACF Fields

  • labeltext
  • headingtext
  • descriptiontextHalf-width intro
  • interviewsrepeaterparticipant_name, participant_role, participant_photo, quote, insights (sub-repeater: insight_text)
CSS
.ui-entry__quote {
  font-size: clamp(var(--text-xl), 3.5vw, 2.4rem);
  font-weight: var(--fw-extralight);
  font-style: italic;
  max-width: 78ch;
}

User Stories

Spider/hub diagram. Desktop: 3-column grid, hub centred, stories left and right, JS-drawn bolt-animation lines connecting hub to cards. Mobile: flex column with hub top-left, vertical connector, horizontal tick lines per card.

As

As a visitor

I want to quickly understand what kind of designer Adam is, so I can decide if he fits my project.

User stories

As a recruiter

I want to see evidence of process, not just polished outputs.

Re
Cl

As a client

I want to contact Adam and get a clear sense of services and pricing.

Anatomy

  1. Neuron canvas — `<canvas class="acf-us-neurons">` — seeded organic node/axon pattern, radial fade to edges, z-index 0
  2. Hub circle — 240px, double box-shadow (outer blue glow + inset tint), grid-column:2, justify-self/align-self:center
  3. SVG lines — JS drawn from hub circumference to nearest card edge; base line: #7e1b42 + glow filter; bolt overlay: animated stroke-dashoffset; dot: leading spark
  4. Cards — 106px img-wrap (radius-xs), title: text-xl fw-black secondary, body: text-m tertiary; hover fires bolt animation + scale(1.04)
  5. Right cards — `.acf-us-spider__card--right { flex-direction:row-reverse }`

ACF Fields

  • labeltext
  • headingtext
  • descriptiontextareaoptional intro text under the heading
  • hub_labeltextcentre hub text, defaults to "User stories"
  • storiesrepeaterstory_title, story_body, story_image
CSS
/* Hub: centred in 3-col grid on desktop */
.acf-us-spider { display:grid; grid-template-columns:1fr 1fr 1fr; }
.acf-us-spider__hub { grid-column:2; min-width:240px; height:240px; border-radius:999px; }
.acf-us-description { font-size:var(--text-l); color:var(--text-on-dark-tertiary); margin-bottom:var(--space-2xl); }

Personas

Dossier-style cards with two rows. Row 1: full-width 1:1 photo column + bio column (name, glowing 2px divider, italic quote, thumb-icon list items, demographics). Row 2: bio rich text + placeholder squares. Multiple persona blocks alternate left/right via a global PHP counter.

MK

Marcus Klein

“I don't have time to decode a designer's portfolio — show me the impact fast.”

Interests: Startups, SaaS, scale-up culture, impact metrics

Tech frustrations: Designers who can't communicate trade-offs

Job: Head of Product, SaaS startup

Location: Copenhagen, Denmark

Age Group: 35–44

Bio:

Marcus has spent 8 years in product roles at scale-ups across the Nordics. He evaluates design partners primarily on communication quality and ability to translate user insight into shipping decisions.

Anatomy

  1. Photo col — full-width 1:1 image (object-fit:cover, 50% 30%) or placeholder with bold initials (clamp 3–6rem, red)
  2. Bio col — name (48px/900), glowing 2px divider, italic quote (32px/400)
  3. List items — inline SVG thumb-up icon (interests) + thumb-down icon (frustrations), 44px wide, red
  4. Demographics — indented 68px (44px icon + 24px gap) to align with list text
  5. Row 2 — bio rich text section + three placeholder squares (opacity fade)
  6. Alternating layout — even-numbered cards get .prs-card--flip via PHP global counter, reversing row direction

ACF Fields

  • labeltext
  • headingtext
  • persona_cardsrepeatername, tagline, photo, quote, bio (wysiwyg), goals (repeater → goal_text), frustrations (repeater → frustration_text), job, nationality, location, gender, age_group, relationship, kids
CSS
/* Card: two-row flex column */
.prs-card { display:flex; flex-direction:column; gap:64px; }

/* Row 1: photo col + bio col */
.prs-card__header-row { display:flex; flex-direction:row; align-items:flex-end; gap:64px; }
.prs-card--flip .prs-card__header-row { flex-direction:row-reverse; }

/* Photo: full-width square, border-radius 16px (not a circle) */
.prs-card__photo { width:100%; aspect-ratio:1/1; object-fit:cover; border-radius:16px; }

/* Glowing divider between name and quote */
.prs-card__divider { height:2px; background:var(--surface-branding-primary);
  box-shadow:0 0 30px 0 var(--shadow-glow); }

/* Quote: 32px regular italic */
.prs-card__quote { font-size:32px; line-height:56px; font-weight:400; font-style:italic; }

Image Full Width

Full-bleed image block. Optional label and heading above the image. 8px border-radius, full container width, optional alt text override via ACF field.

Final designs

Delivered solution

Full-width image — any aspect ratio

Anatomy

  1. Header (optional).acf-image-full__header: label + heading above image
  2. Image.acf-image-full__img — fills 100% container width, loading="lazy"
  3. Border radius — var(--radius-xs) 8px on the <img> tag

ACF Fields

  • labeltextOptional eyebrow label
  • headingtextOptional heading
  • imageimageRequired — the image to display
  • alt_texttextOptional override for image alt attribute
CSS
.acf-image-full { }
.acf-image-full__img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: var(--radius-xs);
}

Preference Testing

A/B test results visualisation. Donut chart via CSS-masked conic-gradient (no canvas/SVG). Screen mockup images with glow drop-shadow. Outcome panel highlights the winner with a left-border accent.

Visual preference test

Which layout do users prefer?

Homepage hero layout

Participants were shown two homepage hero variants and asked which felt more trustworthy.

  • Option A 68%
  • Option B 32%
Option A — Bold headline first
Screen
Option B — Image first
Screen

Outcome

Option A was chosen by 68% of participants. The bold headline first approach communicated credibility more quickly than leading with imagery.

Anatomy

  1. Donut chart — CSS mask: radial-gradient on conic-gradient background
  2. Legend — Colour dots (border-radius: 2px) + percentage labels
  3. Mockup — aspect-ratio 432/911, glow drop-shadow
  4. Outcome — background: primary-10, border-left: 3px solid primary

ACF Fields

  • labeltext
  • headingtext
  • testsrepeatertest_label, test_desc, options (sub-repeater: option_name, option_colour, option_percentage, option_mockup), outcome_text
CSS
/* Donut chart: no JS, no SVG */
.acf-pref-test__donut {
  width: 166px; height: 166px;
  background: conic-gradient(var(--a-color) 0% var(--a-pct), var(--b-color) var(--a-pct) 100%);
  mask: radial-gradient(transparent 40%, black 40%);
}