Skip to the sites
Crown Media Service

Portfolio · One questionnaire each

Your website should look like your business, not like our last one.

Every site below was built from that client’s completed questionnaire — their audience, their differentiator, and the answer to “what should this not look like,” which was treated as binding. Photography is credited and licensed on the credits page.

Every site is live. Click any tile and you are on the real thing, not a mockup.

businesses so far, each with its own palette and typefaces
53businesses so far, each with its own palette and typefaces
named visual styles, from editorial to neubrutalist to bento
8named visual styles, from editorial to neubrutalist to bento
photographs, each credited and licensed on /credits
54photographs, each credited and licensed on /credits
contrast checks passing on every theme
9/9contrast checks passing on every theme

Each tile is painted in that client’s own palette.

Which is the fastest way to show what a shared design system does when it is themed properly rather than reskinned. Search by business or town, or filter by the accent colour a client chose.

Filter by accent colour
Filter by design style
Filter by whether the site uses photography

Showing 1–12 of 53 sites

Screens

Every page, at any width you like.

This is the real client site in a frame, not a screenshot of one. Drag the slider or pick a width, and the page below re-lays itself exactly as it would on the device.

Width

375px · phone

The width most of these are read at.

One per layout archetype — a document, an index and a poster do different things to a narrow screen, and one of each is the only honest sample.

Live page, loaded from the same address the tile links to. Open Harbor & Pine full size.

One system, a theme per client.

Every colour, radius, and typeface for a site comes from a single object. It drives our tokens and the shadcn/ui contract together, so any component inherits that client’s palette with no per-site overrides.

Stack
Next.js 16 App Router, React 19, TypeScript, Tailwind v4, shadcn/ui on Radix. No CMS and no client-side data fetching — every route is static HTML.
Colour
Palettes authored in OKLCH so lightness steps stay even, then checked by a script that converts each token to sRGB and asserts the WCAG floor.
Performance
Fonts self-hosted and subset, emitted only on the routes that use them. No animation library reaches the browser — entrances are CSS behind one IntersectionObserver.
Accessibility
Landmarks, one h1 per page, visible focus rings, labelled inputs, real table headers, and reduced-motion honoured. Nothing is hidden waiting on JavaScript.
What is not here
No stock photography, no gradient blobs, no icon-card rows. No site asserts a certification, licence number, award, or client name.

The other kind of page

Three internal dashboards, where nobody is being persuaded of anything.

A dispatch board ranked by consequence rather than by the time a call came in. A weekly grocery review sorted by what each department did to gross margin. A storage rate sheet that refuses to print an occupancy figure on its own — and recommends three cuts. Each was built from its own brief, and each carries a permanent stamp saying the figures are sample data.

See the dashboards

The source material

Every site started as a filled-in questionnaire. You can read all 53.

Each client’s completed form is downloadable next to the answers that decided the design — including the “what should this not look like” answer, which was treated as binding rather than as a preference.

Read every questionnaire
  • Harbor & PineQuestionnaire, PDF
  • RidgeLineQuestionnaire, PDF
  • ClearDermQuestionnaire, PDF
  • North & BloomQuestionnaire, PDF
  • SunCoastQuestionnaire, PDF
  • …and 48 more