TODO — Bojana Hair Studio
Per-project status doc for everything a script can't derive: facts from the client, human
approvals, and owner-executed actions. Pipeline progress itself is computed from artifacts —
run node <skill-dir>/scripts/project-status.mjs --project <this project> for the full picture.
Conventions:🔲open ·✅done · owner in brackets · every item keeps a stable[Tn]ID (new items take the next free number, IDs are never reused) — the dossier shows them so anyone can reply "T4 done, T2: …" from a phone. Keep items one-line and checkable.
Client items are questions a non-technical person can answer from their phone: plain words, a concrete example, no trade terms.
>
Status: lead — no contact with the business yet (2026-08-14). Nothing below has been asked.
Translate the client items into German before they go out.
Facts needed — [client]
Ordered by how much each one unblocks. [T17] is the biggest hole in the draft.
- ☐T17Your prices, service by service (e.g. "Damenschnitt inkl. Föhnen CHF 95, Balayage ab CHF 220"). The draft shows the price list with every number left blank on purpose — nothing was estimated. This single answer finishes the most important page.
- ☐T5Your own photos we may publish, and for any photo showing a person, their OK in writing. The draft currently uses 7 photos from your Google profile; two of your Google photos where faces are clearly recognisable were deliberately left out.
- ☐T4The official registered name of your business, exactly as registered, + your business ID number (UID/IDE, looks like CHE-123.456.789) if you have one. This can differ from the name on your sign — Swiss law requires the official one on the site's legal page.
- ☐T18The e-mail address the website's contact form should reach. There is no e-mail address for you anywhere public, so the form is switched off in the draft.
- ☐T1Your exact opening hours, day by day — including lunch breaks and holiday habits. (Google currently says Tue–Fri 9–18, Sat 9–16, closed Mon and Sun. Correct?)
- ☐T19How long does each service take, roughly? Useful so clients know what they are booking (e.g. "Balayage ca. 3 Stunden").
- ☐T20Do you have a rule for late arrivals or cancellations? In a one-chair studio a missed appointment is lost entirely, so it is worth saying.
- ☐T2Your trainings, diplomas or certifications, with their exact official names (we only publish what you can show a certificate for). Nothing is claimed in the draft.
- ☐T3How can clients pay (cash, TWINT, card…)? And can a person in a wheelchair get into your premises?
- ☐T6Which languages do you serve clients in? The site ships in German and English — is that right, and should another language be added?
- ☐T21Which colour and care products do you work with? Your photos show L'Oréal Professionnel capes, but we do not name a brand until you confirm it.
- ☐T22Do you also do men's cuts, children's cuts, extensions, or bridal styling? The draft leaves all four unanswered rather than guessing.
- ☐T23Which tram/bus stop do you tell clients to use, and is there parking nearby?
- ☐T24How long have you been a hairdresser, and since when at Berninastrasse? Not published in the draft — no dates were invented.
Positioning to confirm — [client]
- ☐T25The site leads with "Blond ist mein Fachgebiet" — blonde as your speciality, based on your former studio publicly calling you "eine fabelhafte Blondspezialistin". A specialist framing wins the right clients but turns away the "just a trim" walk-in. Is that how you want to be known?
- ☐T26The site says Sie, not du. Which do you use with your clients?
Visibility actions — [client executes, kits prepared]
- ☑T7Google Business Profile exists — place_id
ChIJ_YGBrn6hmkcRW6D2N0YIOIw, 5.0/5 from 19 ratings, dossier exported tocontent/sources/google-places.md. Nothing to create. - ☐T27Claim that Google Business Profile if it is not already in her own account — it carries all 19 reviews and is her only current visibility.
- ☐T8localsearch (local.ch + search.ch) / Apple / Bing per
deploy/listings-kit.md. Both localsearch rows came back genuinely missing — outside Google Maps she is invisible on the Swiss web.
Decisions — [operator]
- ☐T9Styleguide approval — review at https://bojana-hair-studio.pages.dev/_styleguide/
- ☐T10Final domain + email tier (
references/domain-email.md). Candidates:bojana-hairstudio.ch,bojanahairstudio.ch— availability not yet checked. - ☑T11Category-spec deviations confirmed — no Team page, no Book page (
build/category-mapping.md) - ☐T28Sign off the two deliberate distinctiveness warnings in
build/decisions.md§ D2 (graphite primary vs two dark-neutral portfolio primaries), or ask for a different primary. - ☐T29Approve the DE copy deck. A native speaker should read
content/copy/de/*.mdbefore go-live — machine phrasing survives review otherwise. - ☐T30Replace Caveat with her real logo as an SVG. Caveat is a lookalike stand-in for the handwriting on her awning; getting the actual file is a first-contact ask.
Phase 2 — [agent]
- ☑T12Copy deck, DE + EN, incl. Impressum + Datenschutz
- ☑T13Site build (tokens-driven) → token + distinctiveness gates → deployed preview
- ☐T14Publish for real: custom domain ·
DRAFT=falsebuild · clean preflight ·deploy/go-live.md. Blocked on the client facts above —publish-preflight.mjsrefuses while any[TBD:]remains, which is intended. - ☐T31Wire the contact form once
[T18]lands: pick a provider, add it to the privacy policy's processor list, remove the "not active" notice — in that order.
Later
- ☐T15Testimonials (real, consented, never invented) + reviews kickoff
- ☐T16Maintenance agreement decision →
deploy/maintenance.md+ registry flag - ☐T32Online booking, if she wants it. Nothing is in evidence today, so the draft is phone-first; a booking page returns the day she picks a tool.