Decisions — Bojana Hair Studio
Mode: draft-first, lead build. The business has not been contacted (2026-08-13/14). Per the
skill's lead rule, none of the choices below waited on a question: each is the option I would have
recommended, with the reasoning attached so the operator can override it in one edit.
---
Operator decisions (asked and answered, 2026-08-13)
| # | Question | Answer | Effect |
|---|---|---|---|
| O1 | Site languages | DE + EN | DE at / and canonical for local SEO, EN at /en/. Matches the suite default and the other Zürich salons in the portfolio. |
| O2 | Use her Google Business Profile photos in the draft | Yes, with a rights caution | 8 own-attribution photos ship; the third-party photo (Melissa Milani) was excluded before download. Rights work tracked in content/cautions.md + [T5]. |
| O3 | How far to take the lead build | Full lead pipeline | Styleguide → copy deck → build → private GitHub repo → Cloudflare draft preview (noindex + ribbon) → directory kit → registry + build report. |
---
D1 — Positioning: blonde specialist, and a person rather than a salon
The dossier's strongest asset is a 5★ review from Blonde Zurich GmbH, her former studio, calling
her "a fabulous blonde specialist". That is a third-party endorsement from a competitor-adjacent
business, which is worth more than any self-description we could write, and it is quotable verbatim.
Six of nine photos are blonde work.
The site therefore leads on blonde/colour work and speaks in first person singular. Every review
names Bojana; no photo shows a second chair. Writing "wir" would be the first false note a client
notices.
Risk, stated plainly: a specialist framing turns away the "just a trim" walk-in. For a
one-chair studio that is usually the right trade — a full head of balayage is worth several trims —
but it is her business decision, not ours. Flagged as the sixth question for first contact in
content/operator-notes.md.
D2 — Palette: eyedropped, and the one gate warning I am overriding
Every colour was sampled from her own photos with sample-colors.mjs; the audit trail is in
brand/styleguide.md § Where each colour comes from. Summary: graphite #2E3036 from the awning,
steel #4F6579 from the shopfront glazing and facade, clay-rose #B07A72 from the interior walls,
warm paper #FBF8F6 from the daylit ceiling.
check-distinctiveness.mjs initially warned four times. Two were fair and I fixed them: the accent
was the clay-rose, which sat 50 RGB units from rm-beauty-lounge and 58 from
institut-de-beaute — two warm mid-tones in the same portfolio. Moving the interactive colour to
the steel-blue cleared both, and improved the design: cool tone is literally what a blonde
specialist reaches for to kill warmth, so the accent now means something. The rose stays in the
palette as rose/blush doing decorative and field work, which is what a wall does.
Two warnings remain and are deliberate:
```
⚠ primary #2E3036 is within 39 RGB units of 'coiffeur-yanu-central' (#141A24)
⚠ primary #2E3036 is within 13 RGB units of 'silvia-jayet-reflexologie' (#2a302a)
```
#2E3036 is her awning. sample-colors.mjs returns #2C2E32 at 9.4 % of photo 02, with point
samples #272731/#353541. It is the one colour she actually paid a signmaker for. Every dark
neutral is within 60 RGB units of every other dark neutral, so the only way to clear this warning
is to stop using her signage colour — which is the opposite of what the checklist is for. I checked
the two flagged sites: coiffeur-yanu-central is a blue-black with an olive-gold accent and a
left-text-photo-right hero; silvia-jayet-reflexologie is a green-black with terracotta,
Cormorant Garamond, also left-text-photo-right. Nobody would confuse the three. Accent, fonts and
hero layout are all clear.
→ Logged as a suite lesson in the build report: the RGB-distance test cannot distinguish
dark-neutral *brands*, and near-neutral pairs (chroma below ~8 %) probably deserve a wider
threshold or a hue-aware comparison.
D3 — Light field, not the sixth dark salon
The category spec offers "moody dark" as one option and this portfolio has taken it six times
(andre-coiffeur, coiffeur-ali-barber, the-barber-shop-prilly, mad-the-barber-shop,
coiffure-bernina-gmbh, beauty-by-dilek). Her room is the opposite: one big window, white
ceiling, pale walls, daylight in every photo. A dark build would misrepresent the space *and*
converge with the portfolio. Graphite is used as banding — the awning — over a light photographic
field.
Secondary reason: the spec's most-repeated accessibility warning is that moody salon palettes fail
contrast. A light field makes that trap structurally impossible.
D4 — Typography: Instrument Serif + Schibsted Grotesk + Caveat
Neither of the first two appears anywhere in the 29-entry registry (which already contains Playfair
×2, Fraunces ×4, Jost ×2, Karla ×3). Instrument Serif is high-contrast and narrow — it carries a
display size without shouting, which is the "magazine typography" the category asks for. Schibsted
Grotesk is a Swiss-flavoured grotesque that stays out of the serif's way.
Caveat is used only for the wordmark, as the closest free match to the monoline handwriting on
her awning, and is flagged [TBD:] for replacement by her real logo as SVG ([T17]). Using a
lookalike script for a wordmark is a compromise, and it is marked as one rather than hidden.
D5 — Hero: awning-band-script-mark-photo-bleed-left
The registry's last five heroes are left-text-photo-right ×3, left-text-arch-photo-right,
centered-text-wide-arch-below. This build takes its structure from her actual facade instead: a
graphite band across the top carrying the script wordmark (the awning), a tall portrait photograph
bleeding off the left viewport edge (the window), and a narrow text column to its right, over a
graphite info strip (the second awning band). Photo-left is itself a deliberate inversion of the
portfolio's default.
D6 — Sitemap: no Team page, no Book page
Both dropped, with the reasoning in build/category-mapping.md. One stylist means a "Team" page
with one card, and no booking system exists to embed. Booking is phone-first (tap-to-call on her
mobile), with WhatsApp and a form as alternates. A booking page returns the day she picks a tool.
D7 — Prices: visible [TBD:] bands, not "Preis auf Anfrage"
No price list exists publicly — not on Google, not on a shopfront board. The category spec is
explicit that hidden pricing bounces clients fast, so hiding behind "Preis auf Anfrage" would be a
known-bad choice; inventing Zürich market rates would be worse. The draft ships the *structure* of a
price list with [TBD:] in each band, which doubles as the review prompt at first contact.
publish-preflight.mjs blocks these from production, which is the intended safety net.
D8 — Register: Sie, de-CH, no ß
Sie is the safe default for a solo professional serving an adult clientele in Zürich; switching to
du is one copy-deck pass if she prefers it. de-CH orthography throughout — Strasse, never ß.
D9 — Neighbour differentiation
coiffure-bernina-gmbh (already in this portfolio) is ~400 m away on the same tram corridor, same
postcode. Its build is black + wine, Gilda Display, dark-panel-text-left-no-photo. This build is
deliberately its opposite on every axis — light field, steel accent, Instrument Serif, photo-led
hero. Two salons this close must not look like the same agency's output.
D10 — Copy-deck section names
Agreed block names, consumed mechanically by the build (copy-deck.md asks for these to be pinned
here): hero, intro, specialty, services-teaser, gallery, quotes, visit, cta
(home); intro, approach, studio (about); bands, notes (prices); intro, groups
(services); intro, details, form (contact); items (faq); plus _shared.md for nav, footer
and button labels.
D11 — Draft-mode guards
noindex + a visible draft ribbon on every page while status: lead; the contact form has no live
delivery endpoint and says so; deployed to a preview Pages project, never a custom domain. The
aggregateRating schema is omitted deliberately (Google policy + preflight).