Append-only. grep "^## \[" docs/wiki/log.md for the timeline.
Dashboard meldde 30-structure.md ouder dan recent-bewerkte pagina's (mtime-check). Sitemap
gecontroleerd + bijgewerkt naar de huidige realiteit: per-locatie atelierpagina's (P-19)
toegevoegd onder Open dansateliers: Atelier Leon in de boom (zoals edities/ onder Mariage),
Atelier-rij in het content-model uitgebreid (eigen detailpagina per open atelier via slug,
kind van het overzicht) en Venue-rij (photo/photo_credit + Filament VenueResource).
Impact-omschrijving ongewijzigd geverifieerd (16/5-edit was copy, geen structuur). Re-save →
structureStale nu null; dashboard 200, 0 warnings/drift.
Frederik promoted 6 mature, multiply-used, render-verified patterns to WF 🟢: SP-01 nav · SP-02 footer · SP-04 subpage-top · SP-07 date-row · SP-08 agenda-list · SP-09 funder-wall (6/15; rest WF 🟠, UI 🔴). Registry + Dn-22 + index-blockquote bijgewerkt. Dn-26 closed (Frederik ruling): canonieke longevity-frasering = "16 jaar bezig, 5 jaar (als) vzw", nooit kaal "16 jaar" voor de organisatie. Toegepast op Home (hero + meta) en Impact (description + cijfers gesplitst in twee stats: 16 jaar samen dansen sinds 2010 binnen Ultima Vez · 5 jaar als vzw sinds 2021); Historiek + Over-index waren al eerlijk; P-02-getal blijft getrokken. Em-dashes in Impact §5-cijfers meteen opgeruimd. P-01/P-02 Top-gaps ge-pruned (ruling gemaakt; enkel feitelijke 2010-startjaar-confirm blijft). Telling: Closed 11 · Partly 4 · Open 11.
Concern-review met Frederik. Closed: Dn-09 (faseringsmodel beslist; kalenderdatum =
client-planning, geen design-vraag) · Dn-12 (editie-flows beslist + gebouwd, interest-only;
rest = QA + minors-form via Dn-03) · Dn-14 (vocabulaire vast + in gebruik; pagina's schrijven
hoort bij Dn-23) · Dn-03 (alle v1-formflows slaan niets op → geen design-GDPR-vraag meer;
de stored deelnemers-DB incl. minderjarigen valt buiten v1 en gradueert naar het Build-
register B-; newsletter blijft Dn-11). Dn-26 Open→Partly: P-02-getal getrokken,
Historiek + Over-index framen al eerlijk ("X jaar bezig, 5 jaar vzw" / vzw-2021-vs-werk-2010),
maar Home + Impact dragen de claim nog kaal — wacht op client-ruling. Telling nu
Closed 10 · Partly 5 · Open 11.
Dn-22: patronen-tabel kreeg een 2-traps pipeline (WF + UI) + legende, zoals de pagina's;
parser (BuildStatus::parsePatterns) + /build patronen-sectie + tests aangepast. 15/15 op
WF 🟠, UI 🔴 overal (Surface dicht); WF-🟢-kandidaten voorgesteld (SP-01/02/04/07/08/09) —
wacht op Frederiks pass (Wire-gate). Dashboard: 0 warnings, 0 drift.
Back teruggezet naar 🟠 (bezig): het lees-pad is live + test-covered, maar de admin
(AtelierResource/VenueResource) is gebouwd, niet uitgebouwd/getest tot sign-off — dus
het data-pad is niet "verified live" per de honesty-gate. Registry-rij + roll-up Back-regel
bijgewerkt. Los hiervan: "Schoenen mogen uit" ook van P-03 (atelier-leon §4) verwijderd
(niet geverifieerd; foto's tonen dansers mét schoenen).
Het seppe-circle-beeld (iemand in het midden, groep kijkt toe) ondermijnde de geruststelling
van de sectie. Vervangen door atelier-leon-pink-trousers-joy (iedereen danst vrij door elkaar,
gemengde leeftijden, niemand in het midden). studio-intergen-walk (binnen, alle leeftijden)
paste qua boodschap ook, maar is al P-03's hero — vermeden om herhaling.
Gemeten (Playwright): §"Waar en wanneer" linkerkolom 226px vs rechter 651px (witgat ~425px);
§"De eerste keer" op 80rem terwijl de andere 2-koloms sectie op 56rem zat (springende
rechterrand). Opgelost: (1) álle secties cappen op --max-content 56rem → beide 2-koloms
secties even breed op elke breakpoint; (2) buitenkant-foto van rechterkolom naar linkerkolom
bij het adres, kaart vult de rechterkolom (items-stretch) → kolommen even hoog (1440:
570/570 en 500/500); (3) §4-beeld md:h-full zodat het de tekstkolom volgt. Sub-zin "De dates
van deze {dag}groep…" geschrapt (vertaalkost, redundant met kop). Detail-suite 7/7; desktop +
mobiel geverifieerd.
De buitenkant-foto is functioneel (herkenning), geen sfeerbeeld. Verplaatst van full-width
banner bovenaan naar een kleine 4/3-foto bóven de kaart in de rechter "wayfinding"-kolom
van "Waar en wanneer" (foto + kaart samen = wat het is + waar het is); sectie-grid op
items-start. Enig sfeerbeeld blijft het dansbeeld in "De eerste keer hier". Ook "Schoenen
mogen uit" geschrapt (niet geverifieerd; foto toont dansers mét schoenen — staat nog op P-03).
Detail-suite 7/7 groen; desktop+mobiel geverifieerd.
/critique-sessie: de "eerstvolgende keer"-datum stond dubbel (§3 promo-regel + §4-lijst). §3
toont nu enkel de wekelijkse cadans; §4 "Eerstvolgende keren hier" is de enige thuis voor
concrete dates. §2 buitenkant-foto omgezet van SP-13 (natuurlijke hoogte) naar een
vaste-verhouding banner (16/9→21/9, object-cover) zodat staande uploads niet
ontsporen. Pianofabriek-foto geplaatst (Wikimedia CC BY-SA, staand → banner-crop). Detail-
suite 7/7 groen; render desktop+mobiel geverifieerd.
Pragmatische review van de dynamische content op de atelierpagina, met het oog op × 3
talen: beslist dat de pagina geen per-instance prose draagt. Doorgevoerd: vrije-tekst
"hoe geraak je er" geschrapt → OSM-route-deeplink (taalneutraal); begeleider-blok
conditioneel (verdwijnt als lead leeg, geen placeholder meer); §2 wordt een
buitenkant-foto per venue (venue.photo, niet per atelier-slug). Nieuwe velden:
venues.photo + photo_credit (migratie, publieke disk + storage:link). Filament:
AtelierResource (begeleider/slug/dag-uur/actief) + VenueResource (adres/coördinaten/
foto-upload) toegevoegd (v4 schema-split). Atelier::getRouteKeyName teruggedraaid →
publieke route bindt expliciet {atelier:slug} zodat Filament's record-binding (id) blijft
werken, ook voor de school-atelier zonder slug. Foto-zoektocht: Pianofabriek-kandidaat op
Wikimedia Commons (CC BY-SA 4.0, © Adacoco 2021); Maison des Cultures geen vrije foto
(heritage = © Gewest) → team-eigen foto aanbevolen; geen binaries gecommit (admin-upload).
Tests: AdminResourcesSmokeTest (2, Livewire form-build asserts lead+photo) + detail-suite
groen; volledige suite 82/83 (1 pre-existing EditionModelTest). Registry P-19 Conf 2→3,
Assets 🔴→🟠; brief content-model-sectie toegevoegd.
- Ran Phase 2 of the image-mapping playbook: mapped catalogued assets to per-page image
slots and wired them into the views +
public/img/. New slot map at 91-image-map-new-site.md; 90-image-map.md Phase-2 status flipped deferred → done. - ✅ wired: home §2 hero, dansateliers hub (hero + 2 section beelden + 3 cards), atelier-leon,
leon-op-school, opzetten (2 cards), impact §6, plus the 3 shared
SiteSections::work()cards (Atelier Leon, Leon op school, Mariage). Credits recorded; project-card/placeholder-div slots expose no credit field, so credits only render on photo-blocks. ⚠️ candidates needing a Surface decision: Mariage §2 (live Vimeo trailer vs. an SP-13 still) and historiek §6 (Mariage frame as lineage anchor; no Atelier Quartier 2017 / Birds frame exists).- ❌ honest gaps (top priority): per-editie Mariage hero photography (one frame per city/year), the mobiele dansstudio as a movable space (hub card + page + shared card), per-venue place-photos for atelier-detail, and team portraits (BG-3 keeps v1 text-only). Library is action, not place.
Page built end-to-end: slug op Atelier (migration + factory + seeder), nested route
dansateliers.atelier-leon.detail (open+actief only; school/inactief/onbekend → 404, bound
by slug), view dansateliers/atelier-detail.blade.php met echte NL-copy (header + praktisch
- OSM-kaart + eerstvolgende-hier + eerste-keer), nieuwe SP-17 Map block
(
partials/map.blade.php, Leaflet/OSM, grayscale, no-JS deep-link). Venue lat/lng geseed (approximatief, team bevestigt). Inbound links live: P-03 §4 "Waar en wanneer"-blokken linken nu door ("Bekijk deze plek →") en agenda open-atelier-rijen wijzen op de detailpagina. Een agent draaide een /critique-sessie → §4 ontdaan van redundante venue/titel per rij, eerstvolgende-datum naar boven, §5 aankomst-specifiek gemaakt (vult P-03 aan i.p.v. herhaalt). Tests: nieuweAtelierDetailPageTest(6, groen) +BuildStatusTest18→19 bijgesteld; suite 79/80 groen (1 pre-existing EditionModelTest-failure, los hiervan). Render desktop+mobiel visueel geverifieerd; Wire blijft 🟠 (Frederik-critique earns 🟢). Registry + roll-up + SP-17 bijgewerkt.
Live UX-planning speedrun w/ Frederik. New child-detail page-type under P-03: one page
per open Atelier instance (Pianofabriek-wo, Maison-za), nested URL
/dansateliers-performances/atelier-leon/{venue}, scope = open ateliers only, with a
Leaflet/OSM map (project's first). Serves the post-decision visitor: locatie-specifieke
logistiek + sfeer + eerstvolgende-hier + eerste-keer-geruststelling. Linked from P-03 §4
"Waar en wanneer" block + agenda date-row titles. Brief
42-briefs/19-atelier-detail (Conf 2/5, all build
stages 🔴 — needs slug on Atelier + route/view); registered P-19 in
40-skeleton registry + roll-up; index row added. Not
built.
Registry row (40-skeleton) updated after the redesign + critique
rounds: Type Util 3–5 → Mkt 3 (hub) (brief reclassification, orientation hub /
Mkt-register, 3 bands); Back ❓ → 🟠 (Mariage open-call chip reads Edition:: openInschrijving() live, render-verified — consistent with P-01). Held: Wire 🟠 (Claude
caps at 🟠; awaits Frederik's own 🟢 pass), Conf 3 (more asset-dependent now: 7 photo
gaps + consent-pending quotes + open Dn-26), Assets/UI/OK 🔴. Top gaps rewritten (7 foto's,
Schoemaker/Hadja consent, Dn-26 ruling, redesign-live note); roll-up Back-🟠 list += P-02.
Verified via BuildStatus::report(): row parses, no warnings, no unexpected drift.
Built the P-02 redesign from the 02-brief: beeldgedragen hero + two sporen (doe-zelf-mee / breng-Leon-naar-jouw-plek) with on-ramp cards, replacing the old 4-card utility index. Then three Frederik-led critique rounds refined it:
- Layout: asymmetric side-by-side hero (headline high, not banner-then-text); sporen
re-weighted — spoor 1 (P1) leads with the prominent image, spoor 2 (P3/P4) is a
lighter text-led band.
⚠️ Overrides the brief's D-3 "two equal sporen" — brief to follow. - On-ramps: bridged with lead-in lines + feeling-first card copy; Atelier Leon card
carries live weekly cadence from the
Ateliermodel (Wo Pianofabriek / Za Maison des Cultures), richer than the lighter Mariage pointer. - Quotes: voice-matched (deelnemer in spoor 1, coördinator Schoemaker in spoor 2), demoted to caption-weight; Schoemaker attribution now carries her role.
- Copy/facts: removed banned word traject; replaced vague "echte weg" with a concrete what-actually-happens line; pulled the "al 16 jaar" longevity claim from the hero (→ Dn-26, see below) for a verifiable present-tense line.
Renders desktop+mobile at https://leon.test/dansateliers-performances, em-dash-free public copy. Still Wire 🟠 — awaiting Frederik's own critique+refine pass before 🟢.
Dn-26 added (Open): the site-wide "sinds 2010 / 16 jaar" longevity frame conflates the practice lineage with Leon vzw (opgericht 2021) — needs a team/client ruling on what's honest; canonical home = Historiek. Number pulled from P-02; Home/Impact/Historiek still carry it pending the ruling. Readiness now Open 12 / Total 26.
Reduced the default reading path from ~159k to ~119k words (67 → 39 indexed files).
- Archived the 12 concluded Discovery files into
docs/wiki/_archive/discovery/— local-only (untracked +.git/info/exclude), out of the index, browse-on-demand. Keptdiscovery/21-organisation+discovery/12-client-kickoff-2026-05-19as live reference. Repointed inbound links from kept pages; fixed the 2 kept files' archived-sibling links. - Deleted the 16
42-briefs/XX-content.mdstrawman files — page copy now lives in the built Blade views. Stripped the sibling links from the 16 briefs +40-skeleton.md. - Slimmed
index.mdto one line per page (3028 → 924 words). Light de-journal of kept briefs + HOT pages (current-state over changelog). - CLAUDE.md gained: wiki reading-tier rule, "history → log/git not page annotations",
and "built pages keep copy in the Blade, no
-content.md". - Verified:
/builddashboard parses clean (warnings empty, 18 pages, 14 patterns, 24 concerns); link scan shows zero prune-caused dangling links (4 pre-existing typos + 8 historicallog.mdlinks remain, left untouched). - Follow-up (2026-05-29): the
_archivefiles had already been pushed to the public remote (in history, commit since rewritten away locally) before the archive decision. Rather than rewrite shared public history, the team accepted it as not sensitive enough. The files stay untracked on disk going forward (.git/info/exclude); the historical commits remain in the repo. Treat the content as already public from 2026-05-28.
Acted on a /critique of /dansateliers-performances/mariage (wireframe lens). Built the
sections the page was missing and added two things Frederik asked for: the Vimeo trailer and
a band that guides the public to a Mariage editie's closing voorstelling when it is near.
- §5 "Hoe een editie groeit" — proces · nazorg · continuïteit · evolutie (strawman, NL,
tone-checked: no
traject/creatie, no em-dash in running copy) with an embedded SP-12 quote (Hadja) between nazorg and continuïteit. - §6 "Mariage in jouw stad?" — the durable commission CTA
Plan een gesprek→/samenwerken/opzetten(P3/P4) + SP-09 variant C inline partner line (strawman, BG-6). - Vimeo trailer embedded in §2 (
player.vimeo.com/video/1074336504?dnt=1, 16:9, lazy).⚠️ shows a Vimeo "couldn't verify connection" notice in the headless/sandbox browser — verify in a real browser + check the video's Vimeo embed-domain setting (may be restricted to leon.dance). - New
partials/upcoming-performance-band.blade.php— conditional, self-removing; promotes the next public Mariage voorstelling only when ≤ 8 weeks out (recruitment band carries the editie while the group forms; this takes over as the show nears). Needs an SP-id (sibling to SP-16) — left for the pattern-owning pass to avoid racing concurrent edits to 41-patterns. - page-header gained optional
$eyebrowHref; Mariage eyebrow now links up to the dansateliers-performances index (orientation fix). Body copy capped tocontainer-text. - TDD:
tests/Feature/MariagePageTest.php(5 tests) — watch band shows ≤8wk / hidden far / hidden none / hidden non-public; page always offers the commission CTA + trailer. Green. - Pipeline: P-05 Assets 🔴→🟠 (trailer embedded; photos pending). Wire stays 🟠 per the Wire-🟢 gate (awaits Frederik's own critique pass). Roll-up Assets line + render-passed list updated.
⚠️ Unrelated red:EditieModelTest::test_seeder_creates_six_mariage_edities_with_luik_openfails (now 7 edities, molenbeek open) — stale vs. the concurrent editie-reseed; owned by that thread.
Frederik: the wireframes are not done — he still needs to critique + refine them himself, so a page must not be marked Wire 🟢 on Claude's render/tone check alone. Reverted P-01, P-02, P-08, P-13 from 🟢 back to 🟠 (the two prior entries below bumped them this session). The render + tone work those entries describe still stands and is real — em-dash sweep, banned-word removal (traject/werking), full-width mobile CTAs — the pages just sit at 🟠 "render+tone done, awaiting critique." Roll-up now states the gate explicitly. P-18 left at 🟢 (set by an earlier session, not this one) — flag to Frederik whether it should also drop pending his critique. Next step: a critique + refine pass (Frederik-led) is the path from 🟠 → 🟢.
Drove the three index pages to wireframe-complete (visually verified desktop 1440 + mobile 390).
All three are thin Util pages (page-header + list/card grid + footer wall) that rendered correctly;
the work was a tone pass on the shared App\Support\SiteSections copy that feeds them:
- P-08 Samenwerken: removed TOV-banned words from the link-list subs —
traject op maat→danstraject op maat,dagelijkse werking→het dagelijkse werk bij Leon; also dropped the→arrows inside the first sub (read as dev shorthand in body copy). - P-13 Over Leon: em-dash in the Historiek card desc → comma.
- P-02 Dansateliers: lede
begeleide trajecten→begeleide danstrajecten; its work-grid cards were already em-dash-fixed in the P-01 pass (shared array). - Verified: all three pages now 0 em-dashes + 0 banned words in rendered HTML; clean reflow on mobile (cards/rows stack 1-col).
- 40-skeleton: P-02 / P-08 / P-13 Wire 🟠→🟢; roll-up now 5 Wire-🟢 (P-01, P-02, P-08, P-13, P-18). Conf unchanged (Kristin content review still owed on all three).
Drove Home to wireframe-complete (visually verified desktop 1440 + mobile 390):
- Tone fix: removed em-dashes from the shared work-grid card copy (
App\Support\SiteSections::work()) — 3 descriptions reworked to comma/colon per TOV no-em-dash rule. Fixes Home §3 and the Dansateliers index (P-02), which share the array. - Mobile CTA: hero buttons now full-width stacked < 640 px, inline auto-width ≥ 640 px
(
flex-col sm:flex-row+w-full sm:w-auto) — the brief's "full-width on mobile" playbook rule (flex-wrap alone didn't trigger it at 390 px). Rebuilt assets (npm run build) so the newsm:utilities compile. - Verified: renders clean both viewports · running copy em-dash-free (only brand name "KANAL — Centre Pompidou" remains, in an alt attr) · no TOV-banned words · skip-link +
<main id="main-content">present. - 40-skeleton: P-01 Wire 🟠→🟢; roll-up now 2 Wire-🟢 (P-01 + P-18). Conf stays 3 (content review still owed by Kristin).
- Open a11y note (cross-cutting, not P-01-only):
.btn-*height is 2.25rem (36 px) < 44 px tap-target — a global SP-01 fix, deferred.
Unblocked the editie §5 signup: replaced the mailto: + "GDPR-flow geklaard" annotation
bridge with a working server-handled form. Same decouple-then-build move that resolved the
contact slice (2026-05-28-contact-form-design.md): the internal, stored participant
DB (deelnemers, incl. minors → consent capture) stays genuinely blocked under Dn-03, but a
low-friction interest form does not. The external newsletter / ESP is a separate
concern (Dn-11) — not part of Dn-03.
- POST
/inschrijving(throttle:5,1) →InschrijvingController@store·StoreInschrijvingRequest(naam req · email req · bericht nullable ·editieexists:edities,slug) · honeypotwebsitechecked in the controller (silent drop, no leaked error) ·InschrijvingRequestMail(subjectInschrijving — {project}: {editie}, replyTo submitter) →emails/inschrijving-request. - Editie context carried as the slug (hidden field), resolved server-side to the human label — no arbitrary text reaches the subject line.
partials/inschrijving-form.blade.php(SP-10) — no own h2 (lives under §5 "Inschrijving"); PRG success panel onsession('inschrijving_success'), error summary + old input on failure. Wired intodansateliers/mariage-editie.blade.phpopen-branch (replaces mailto + annotation).- Data-minimisation: emails the team only, stores nothing — no applications table/model. No special-category data; actual enrollment + parental consent for minors stays offline.
- TDD:
tests/Feature/InschrijvingFormTest.php(6 tests, written-failing-first) — valid send + PRG, missing naam/email, optional bericht, unknown editie rejected, honeypot drop, rate-limit. Full suite 51 pass / 1 skip. Browser-verified on Luik 2026: form renders + success state + mail logged (To hello@leon.dance, Reply-To submitter, subject "Inschrijving — Mariage: Luik 2026"). - Wiki: Dn-03 → inschrijving-interesse slice resolved; remaining Dn-03 blocker = the internal stored participant DB (minors consent). External newsletter ESP stays at Dn-11 (separated out — was wrongly bundled into Dn-03). · SP-10 🔴→🟠 built in 40-skeleton + 41-patterns (only 🔴 left = SP-08 deprecated) · P-06 Top-gaps dropped the GDPR-blocker note.
[2026-05-28] build | Pipeline reconcile — P-05/P-06 registry rows caught up to the Editie/open-call flow
The 2026-05-28 open-call wave updated 40-skeleton's patterns table + briefs but left the page-registry rows stale. Caught them up to shipped reality:
- P-05 Mariage: Wire 🔴→🟠 (view renders editie-grid + SP-16 band from the model — "nog niet
gerenderd" note was false) · Back ❓→🟠 (queries
Editie) · dropped[research]Editie-model gap. - P-06 Mariage editie: Conf 2→3 (template now data-backed by 6 seeded edities + Filament
admin) · dropped
[research]Editie-Eloquent-model gap. - Roll-up: Wire 🟠 15→16 (P-05 no longer 🔴) · Back-🟠 list +P-05 · ≤2-confidence set now P-11 only.
- Verified via
BuildStatus::report()—warnings+driftempty.
8-task build wave on feat/open-call-inschrijving. First Build-phase data model.
App\Models\EditieEloquent model + migration (create_edities_table). Inschrijving-control fields:inschrijving_open(bool toggle) +inschrijving_closes_at(nullable auto-close). Methods:status()·isInschrijvingOpen()·inschrijvingClosesSoon(). Scope:openInschrijving(). Relation:events().EditieSeeder— 6 Mariage edities seeded; Luik 2026 hasinschrijving_open = true(the live open call).- Route-model binding by slug — unknown editie slug → 404 (closes P-06 brief gap #8).
- Editie page (P-06) §5 refactored — inschrijving copy now driven by
isInschrijvingOpen()(team toggle), NOT by date-status. Three reading-modes: open · gesloten-niet-afgelopen · afgelopen. - SP-16 Open-call band (
resources/views/partials/open-call-band.blade.php) — conditional self-removing; variantshome(P-01, no section-budget slot) +project(P-05 Mariage, above §4 editie-grid). EyebrowNIEUWE EDITIE; CTAOntdek deze editie; closing-date line when near. - Open-call chip on shared work-grid SP-05 Mariage card — appears on P-01 §3 + P-02 §2 when
Editie::openInschrijving()->exists(). - Mariage page (P-05) §4 — editie cards now rendered from
Editiemodel with status chips (closes brief gap #8 on P-05). - Filament
EditieResource(app/Filament/Admin/Resources/Edities/) — UI for theinschrijving_opentoggle +inschrijving_closes_atdate. - GDPR boundary: flow only. Inschrijving form (SP-10, minors consent) still blocked by Dn-03 — editie §5 CTA remains
mailto:until Dn-03 clears. - Wiki updates: Dn-12 note advanced · Dn-22 bumped to v0.5 (12/14 patterns) · SP-16 spec added to 41-patterns · 40-skeleton patterns table + prose updated · BG-5 + BG-8 annotations in P-06 brief · gaps #1 + #8 resolved in P-06 brief · gap #8 resolved in P-05 brief · SP-16 conditional noted in P-01 + P-02 briefs · Editie + Inschrijving rows extended in 30-structure content model. Build-phase
B-register not yet created — pointer added in Design register.
Em-dash sweep completed. Removed every spaced em-dash from rendered public copy across
~25 Blade views (4 parallel agents, split by directory), per the rule logged below. Replaced
with comma / colon / period; page titles now use " · " instead of " — ". Left untouched by
design: the proper name "KANAL — Centre Pompidou", quote attributions (— naam),
empty-value '—' placeholders, bracketed wireframe placeholders, and code comments.
php artisan view:cache compiles clean.
Home hero reframed (P-01 §1). User's call: the old h1 "Een open uitnodiging om mee te dansen — met de mensen die het al doen." read as an offer-statement (mission-statement feel) and was long. New direction borrows Debateville's structure (title speaks to the reader, the paragraph explains and lands the emotional benefit) in Leon's quiet register:
- h1: "Dans een keer mee." (reader-addressed; "Dans" avoids the "Kom…/Kom langs" echo with the primary CTA)
- lede: "Bij Leon dans je wekelijks samen met andere Brusselaars: in een open atelier of op de scène van een grote voorstelling. Geen ervaring nodig. Je hoort er meteen bij."
- gewichtsregel: "In Brussel sinds 2010. Gratis, zonder inschrijving." (de-duped "wekelijks", now in the lede)
- Encoded the reader-addressed-title principle in TOV §Home (✓/✗ examples updated) and synced 42-briefs/01-home-content.md.
User flagged that the live copy is full of gespatieerde em-dashes (X — Y), the clearest
tell of AI/dossier writing (spotted on Home hero and Contact intro). Added the rule to
identity/10-tone-of-voice.md in three places: a Stijl &
ritme bullet (split the sentence, or use comma/colon/parentheses; only exception is
attribution after a quote), the Verboden in publieke copy list, and a new checklist
item #9 (was 8). Fixed the guide's own Home example, which used the banned em-dash. Mirrored
the rule into CLAUDE.md Content rules and bumped its "8-point" →
"9-point" reference. Not yet swept: ~150 em-dashes remain across the public Blade views
(historiek 20, mariage-editie 14, leon-op-school 14, …) — copy rewrite offered as follow-up.
Per user "Can you dispatch agents to already draft the skeleton and content (and
implement the code) for the other pages? Taking your best guess. No need to ask me
questions." — dispatched 15 parallel agents (general-purpose subagent), one per
remaining page (P-11 Doen skipped, blocked by Dn-19 Strategy work). Each agent ran the
full per-page playbook: read project context → write Skeleton brief at
42-briefs/NN-{slug}.md → write NL content strawman at NN-{slug}-content.md → rewrite
resources/views/{path}.blade.php → smoke-test HTTP 200. All 15 returned successful.
End-state: 17 of 18 pages at 🟠 first draft across all 5 stages (Brief · Wireframe ·
Content · Code; Approved still awaits client). Only P-11 stays 🔴 across the board.
- Pages delivered (15): P-02 Dansateliers index · P-03 Atelier Leon · P-04 Leon op school · P-06 Mariage editie (template) · P-07 Mobiele dansstudio · P-08 Samenwerken index · P-09 Opzetten · P-10 Uitnodigen · P-12 Agenda · P-13 Over Leon index · P-14 Missie & visie · P-15 Impact · P-16 Team · P-17 Historiek · P-18 Contact.
- Conf distribution: P-18 = 4 (snapshot data verified verbatim from current-site mirror). 15 pages at 3. P-06 = 2 (template — per-editie facts gap across 5 non-Brussels instances). Roll-up: avg 2.9 / 5 (was 2.6).
- Patterns library v0.4 — 11 / 13 at 🟠:
- SP-11 Contact pattern promoted 🔴 → 🟠 first draft (inline first uses on P-09
§8 + P-10 §6; lift to
partials/contact.blade.phpon 3rd caller). - SP-12 Quote/testimony now has a Blade partial —
resources/views/partials/quote.blade.phpcreated by the P-15 Impact agent (canonical implementation:$quote, $attribution, $context?, $variant?). Reused by P-09 / P-14; inline-rendered on P-04 / P-05 / P-06 / P-17 (lift to partial on next pass). - SP-08 Agenda preview strip DEPRECATED — superseded by direct SP-07 ×N usage in P-01 §4 and P-15 "In cijfers". Slot kept for ID stability; no spec planned.
- Only 🔴 remaining: SP-10 Inschrijving form (blocked by Dn-03 GDPR; on-page
stubs render
mailto:+ visible "form in voorbereiding" annotation).
- SP-11 Contact pattern promoted 🔴 → 🟠 first draft (inline first uses on P-09
§8 + P-10 §6; lift to
- Candidate patterns surfaced (not yet promoted):
- SP-14 text-link rows — 3 uses (P-01 §5 · P-08 §2 · P-18 §3); ready to promote on next pattern-pass.
- Person card (P-16 local SP-NEW-1) — defer until 2nd use.
- SP-15 map placeholder (P-18 only) — defer until Leaflet bootstraps in
app.js(per CLAUDE.md: OpenStreetMap + Leaflet.js only).
- Brief gaps closed by implementation: P-12 Agenda agent simplified the
routes/web.phpagenda route toRoute::view(self-contained@phpblock in the view handles filter logic + URL state). P-06 Mariage editie agent kept the live Event query and added a status-aware editie metadata map (hard-coded slug→title/period/ status until Editie Eloquent model lands — pending [research] gap). - Cross-page content gaps surfaced:
- Hadja quote re-used by design across P-05 Mariage + P-14 Missie & visie + P-15 Impact — single consent ask covers all three.
- "Sinds 2010" jaartal-frame used by P-01 Home + P-15 Impact + P-17 Historiek + P-13 Over Leon — single confirmation covers all four.
- Schoemaker quote re-used by P-04 Leon op school + P-09 Opzetten — single consent ask.
- "in voorbereiding" wording shared by P-08 (Doen card) + P-18 (Contact form note) — single editorial decision.
- Validation gates: all 15 reported 8/8 PASS (sections answer user question, single primary CTA per page, state inventory explicit, section budget respected, no either/or notes, patterns referenced by SP-id, canonical home for facts, mobile-first sketch).
design/40-skeleton.md: 15 page registry rows updated (Brief/Wireframe/Content/ Code 🔴 → 🟠 each, Conf updated, gap pointers refined with brief links). Roll-up refreshed: 17/18 pages at 🟠, avg conf 2.9. Patterns library section bumped to v0.4 with the deprecation + candidate notes.design/41-patterns.md: status snapshot v0.3 → v0.4. SP-11 promoted with first-use convention. SP-12 implementation pointer updated to the Blade partial. SP-08 re-classified as deprecated. New "Candidate patterns" subsection added below status snapshot.design/01-concerns.md: Dn-22 updated (11/13 drafted; SP-08 deprecated; only SP-10 🔴 blocker). Dn-23 updated (avg conf 2.6 → 2.9; 6 pages-at-≤2 → 2 pages-at-≤2). Phase-conclusion counts unchanged (no new concerns): 6 Closed · 6 Partly · 12 Open · 24 total.index.md: 15 rows added (one per new brief, with sibling content + conf + key decisions).- No git commit / no
git add(shared multi-thread tree — user commits). - Next sensible moves: (a) walk through the briefs for client/team review and
consent calls — many gaps are blocked on Kristin/Sam input; (b) close the SP-12
inline-render → partial migration pass (P-04/P-05/P-06/P-17 switch to
@include('partials.quote')); (c) promote SP-14 text-link rows to its own partial (3-use threshold met).
Per user "open the P-05 Mariage brief. And ask a little questions as possible. Follow your best guesses." — wrote the Mariage project page brief autonomously without brainstorming Q&A. All structural decisions documented inline as BG-1 … BG-7 best-guess calls (reversible on user review):
- BG-1 hero treatment: SP-04 variant B (text header + SP-13 photo as next sibling) — same pattern as home, consistent.
- BG-2 hero CTAs: none. Project-info-first; CTAs land in §6. Belonging dial per TOV §Dansateliers: "Inschrijven als laatste sectie, niet als sales-blok."
- BG-3 §4 Edities: all 6 chronological newest-first with status chips (aankomend · lopend · afgelopen). N=6 fits without pagination.
- BG-4 quote source: Hadja (67) verbatim from missie-visie current-site mirror — P1 belonging-dial voice (re-used per strategy/20-personas).
- BG-5 §5 sub-headings: 4 named beats Proces · Nazorg · Continuïteit · Evolutie matching the Project entity fields.
- BG-6 inline partner mention: SP-09 variant C prose line naming per-Mariage partners (KANAL · KVS · CAMPO · BRONKS · MUS-E + funder tier).
- BG-7 §6 CTA: "Plan een gesprek" →
/samenwerken/opzetten(verb-first per TOV).
- New page
design/42-briefs/05-mariage.md— full brief. 5-Kern · BG-1…BG-7 table · full-page ASCII (desktop + mobile) · 6 section specs · state inventory · patterns invoked table · canonical-home-for-facts · validation 8/8 PASS · 8 open gaps tagged + owner-assigned. Conf 2 → 3. - 3 new patterns first-drafted as side-effect:
- SP-06 Editie card (date-forward cousin of SP-05): title
{city} {year}+ status chip + period; whole-card link; variant A text-only / B with cover photo; states default · aankomend · lopend · afgelopen · overflow · hover. - SP-12 Quote / testimony: single voice — no carousels, no walls. Quote text + attribution + optional context; variants A inline frame / B standalone section / C pull-quote. No portrait photo by default (rights overhead).
- SP-09 variant C inline: prose line for per-project partners — verb-led framing ("komt tot stand met", "met steun van"), no logo grid. Documented full anatomy inside the existing SP-09 spec.
- SP-06 Editie card (date-forward cousin of SP-05): title
design/41-patterns.md— 3 new pattern specs appended; status snapshot bumped to v0.3 (10 / 13 at 🟠).design/40-skeleton.md— P-05 row updated (Brief 🔴 → 🟠, Wireframe 🔴 → 🟠, Conf 2 → 3, Top gaps refined). Pattern library status updated.design/01-concerns.md— Dn-22 Partly (8 → 10 patterns drafted; remaining 3 are SP-08 redundant / SP-10 GDPR-blocked / SP-11 contact-on-demand). Counts unchanged: 6 Closed · 6 Partly · 12 Open · 24 total.index.md—42-briefs/05-mariage.mdrow added above 01-home-content row.- No code changes yet. Brief approved → next pass renders code (per-page Content
- Code columns). The 6-page render is on the autonomous-dispatch wave below.
- No git commit / no
git add(shared multi-thread tree — user commits).
Third pass on P-01: moved Code column from 🔴 routable shell to 🟠 first draft —
strawman rendered. While the work was in progress, the user (separate thread) shipped
the Event entity backend (model + enum + migration + seeder + Builder scopes), which
let §4 wire to live data instead of seeded strawman. Brief gap #6 ([research]
Agenda backend feed) → CLOSED; brief gap #7 (public-only filter) → CLOSED in
implementation.
- 4 new Blade partials under
resources/views/partials/(canonical implementations of their respective SP-patterns):project-card.blade.php(SP-05) — accepts$title · $desc · $href · $image?; whole-card link, hover-tint, image slot collapses if absent.date-row.blade.php(SP-07) — accepts$date · $time · $type · $location · $href; mobile reflow viaflex-col md:flex-row;$typeslot accepts any display label.funder-wall.blade.php(SP-09, NEW) — accepts$variant('full'default /'featured'). Renders 4 tiers (Met steun van · Co-producenten · Speelplekken · In samenwerking met) with strawman partner data (real data pending SharePoint). Featured variant: larger tiles, more breathing, eyebrow h2 above.photo-block.blade.php(SP-13) — accepts$src · $alt · $credit? · $caption? · $variant?. Missing-asset = section collapses (Dn-20 guard). Ready for first asset; unused on home v0.1.
resources/views/partials/footer.blade.php— extracted inline wall into the newfunder-wallpartial; suppressed on home (@unless (Route::is('home'))) to avoid double-show when P-01 §6 renders the Featured variant.resources/views/home.blade.php— full rewrite per brief. 6 sections + NL strawman copy (per 42-briefs/01-home-content): §1 hero (eyebrow + h1 + lede + 2 CTAs + jury 1-line band) · §2 placeholder comment for photo block (collapsed) · §3 SP-05 × 4 with NL card copy · §4 live from Event model (top-3 upcoming public events, internal types excluded, NLdd D.MMdate format viaisoFormat('dd D.MM')+setLocale('nl'), empty state copy) · §5 3 text-link rows · §6 SP-09 Featured variant. Page-level<title>+ meta description set on@extends('layouts.app', [...]).- Live data wire-up authored by the user in @php block at top of home.blade.php:
\App\Models\Event::query()->where('is_public', true)->whereNotIn('type', [LWP, LRDT]) ->upcoming()->limit(3)->get()+ a$hrefForclosure that mapspractice_slug/project_slugto the right route. Closes gap #6 ([research] Agenda backend feed was open since brief v0.1 this morning). - Smoke-tested all 5 home-adjacent routes return 200; home/over-leon screenshots
captured at 1440×900 desktop + 390×844 mobile (Playwright). Verified:
- All 6 home sections render (with §2 correctly collapsed for missing photo).
- Funder wall shows exactly once on home (§6 Featured) and once on /over-leon (footer default) — suppression works as designed.
- §4 renders 3 live events from DB:
DI 2.06 · 13:30 Mariage in de klas — BRONKS,DI 2.06 · 15:30 Atelier Mariage x MUS-E — GBS Kameleon,WO 3.06 · 14:00 Atelier Mariage x Ketmet — Cultureghem. - Mobile: §3 cards stack 1-up, CTAs full-width, SP-09 2-col grid, SP-07 wraps date/time above title.
- One bug fixed mid-flight: Blade comment
{{-- ... --}}inside an@phpblock in the funder-wall partial caused a PHP parse error ("unexpected identifier 'partner'"). Replaced with//PHP comments. Lesson: Blade syntax doesn't apply inside@php. design/40-skeleton.md— P-01 Code 🔴 → 🟠; gap pointers refined (gap #6 removed). Pipeline lifecycle paragraph updated to document the partials-as-pattern- implementation convention.design/41-patterns.md— SP-05 / SP-07 / SP-09 / SP-13 implementation pointers updated from "no partial yet" to live file references.- Tasks #17–#21 completed. Brainstorming-skill arc for P-01 Home v0.1 fully closed: Brief 🟠 + Wireframe 🟠 (desktop + mobile) + Content 🟠 + Code 🟠 + (Approved still awaits client).
- No git commit / no
git add(shared multi-thread tree — user commits).
Cross-checked the Event entity in 30-structure.md against
the verbatim 65-entry transcription in 25-agenda.md. Two gaps
surfaced; both folded into the content-model table.
klasadded to thetypeenum. Real-world data: 21 / 65 entries (≈ 32 %) are school sessions (Leon in de klas,Mariage in de klas) — the second-most-common type afterAtelier Leon(13). The spec's enum had no slot for it; school events would have defaulted to a wrong type. Now: open atelier · klas · repetitie · try-out · voorstelling · Leons White Page · Leon rond de tafel. Sitemap filter list updated to match.lead+partnersadded as Event fields. Every transcribed entry carries a named facilitator (Lena, Stef, Seppe, Kristin/Adnane, Team Leon) and many carry one or more collaborators via thexgrammar (Atelier Mariage x MUS-E,Leon on tour x Opening De Loods). The Excel columns Kristin actually maintains are Date · Time · Activity · Lead · Venue — so the model now mirrors that.lead= free-text string;partners= free-text string ofx-collaborators (v1; promote to a Collaborator table later if needed — not the funder/partner wall, which stays its own entity).- Time + venue + visibility fields named explicitly. starts_at · ends_at · venue · is_public · notes. Venue stays a string for v1 (7 venues cover all 65 entries; cheap to normalise later if it earns its keep).
Dn- concern raised — this is a Structure-spec consistency lint, not a new
open question. The IA principles (one shared vocabulary; agenda 2-axis filter; internal
events shown by default with a 1-line explainer) all still hold; the type list inside
those rules just got one entry longer.
Files touched: docs/wiki/design/30-structure.md (content-model table row · sitemap
filter list · frontmatter updated: 2026-05-20 → 2026-05-27 + sources line). No
index.md change needed (the row's summary still describes the same entities). No
Concerns register change.
Second pass on P-01: closed brief gap #8 (mobile wireframe) — validation gate now 8 / 8 PASS, awaiting user review. Then advanced P-01 down the pipeline: Content column 🔴 → 🟠 with NL strawman copy aligned to identity/10-tone-of-voice §Home.
design/42-briefs/01-home.mdupdated — desktop wireframe sibling: full mobile ASCII (< 768 px), responsive notes (CTA full-width mobile, §3 grid 1↔2-col, SP-09 2↔3↔6-col, SP-07 wrap behaviour, no mobile-only content). Validation gate item 8 ticked. Status banner updated: brief 🟠 first draft (gate 8/8 PASS — awaiting review for 🟡 reviewed).design/42-briefs/01-home-content.md— NEW. Sibling to the brief; structure and content evolve independently. Per-section NL strawman copy with explicit TOV discipline applied:- Hero h1: TOV-approved "Een open uitnodiging om mee te dansen — met de mensen die het al doen."
- Lede: "Een wekelijks open atelier, en grotere voorstellingen waarin Brusselaars samen op de scène staan. Geen ervaring nodig om mee te doen."
- Jury 1-line band: "In Brussel sinds 2010. Wekelijks samen, gratis en zonder inschrijving." — uses the "16 jaar bezig"-frame (2026 − 16 = 2010 lineage point); jaartal te bevestigen door Sam/Kristin.
- §3 work cards (4): title + 1-line desc per card (Atelier Leon · Leon op school · Mariage · Mobiele dansstudio).
- §4 Agenda: template rows + empty-state copy ("Geen aankomende publieke events. Kijk gerust op de volledige agenda.").
- §5 Samenwerken: h2 + 1-zin intro + 3 verb-first link rows.
- §6 partners: tier captions per SP-09 spec.
<head>:<title>+ meta description strawman.- TOV-checklist 6/6 inline pass (uitnodigend · concreet · warm zonder zoetsappig · toonbaar i.p.v. prijzend · plain niet schools · één lezer per pagina).
- Per-gap movement on P-01:
- Gap #1 NL h1 + lede: open → 🟠 strawman
- Gap #3 jury band wording: open → 🟠 strawman
- Gap #7 public-only filter: open → 🟠 strawman (recommended + documented)
- Gap #8 mobile sketch: closed
- Gaps #2 (hero photo), #4 (partner data), #5 (card covers), #6 (Agenda backend) = unchanged; asset/client/research-blocked.
design/40-skeleton.md— P-01 row Content column 🔴 → 🟠; gap pointers refined. Roll-up note updated.design/01-concerns.mdDn-23 updated with the P-01 advance.index.md—42-briefs/01-home-content.mdrow added (above the brief row).- No code changes. Strawman is doc-only; Blade rendering = Code-column 🔴 → 🟠 transition in a downstream pass.
- Next step options: (a) Kristin review on the strawman to confirm jaartal + tone; (b) move P-01 Code column 🔴 → 🟠 by rendering the 6 sections with this strawman copy; (c) open P-05 Mariage brief.
- No git commit / no
git add(shared multi-thread tree — user commits).
Per user "open the first page brief", ran the brainstorming skill for P-01 Home —
the highest-leverage page + the load-bearing case for unblocking SP-03 hero. Visual
companion server enabled (http://localhost:54294, files under
.superpowers/brainstorm/). 4 user decisions taken Socratically (Claude proposes →
user reacts → next question):
- Dominant note → invitation-forward (per D-iv). P1 newcomer leads; jury rigor sits immediately below the line, not in it.
- Jury second-line signal → 1-line factual copy band (
.metastyle under CTAs). Reads as plain fact to a newcomer, as proof to a jury. Strawman: "Wekelijks in Brussel. Vier projecten lopend." - Hero treatment → text-only hero + photo as next sibling (SP-04 variant-B logic applied to home). Walker / Boris Charmatz discipline. Avoids the empty-void / fragile hero failure mode.
- Agenda preview → next-3 list (SP-07 ×3). Best P1 utility; density-as-proof job
stays on
/agenda. - §3 duplication fix. User flagged: the 4-card IA grid duplicated §4 Agenda + §5 Samenwerken. Resolved by replacing the grid with a 4-card work showcase (Atelier Leon · Leon op school · Mariage · Mobiele dansstudio) → each section now has a unique destination tier (§3 work · §4 utility · §5 commission · §6 proof).
- New page
design/42-briefs/01-home.md— full brief. 5-Kern · full-page ASCII wireframe · per-section spec (composition · pattern · CTAs · states · canonical-home- for-facts) · state inventory · patterns invoked table · validation gate (7 / 8 pass — mobile sketch owed) · 8 open gaps tagged + owner-assigned. Tagged gaps:[content]× 3 (NL hero copy / jury band wording / partner data),[asset]× 2 (hero photo / 4 card covers),[research]× 1 (Agenda backend feed),[strategy]× 1 (home-preview filter for internal types),[design]× 1 (mobile sketch). - 4 new patterns first-drafted as side-effect (the "drafted on first use" rule):
- SP-03 Hero — home (thin, page-specific — spec lives in the brief);
- SP-05 Project card (cover optional + title + 1-line desc + whole-card link; variants A photo / B text-only; used on P-01 §3, P-02, P-05, agenda);
- SP-07 Date-row (atomic agenda row: date · time · type · location; variants A condensed / B full; type enum from Glossary; used on P-01 §4, P-05, P-06, P-12);
- SP-13 Photo block (single editorial photo + credit + caption; variants A full-width / B contained / C inline; missing-asset = section collapses, Dn-20 anti-pattern guard).
- SP-08 Agenda preview strip flagged possibly redundant — P-01 §4 uses SP-07 ×3 directly without needing a wrapping pattern. Re-evaluate before opening P-13 Impact ("In cijfers" surface).
design/41-patterns.md— 4 new pattern specs appended; status snapshot bumped to v0.2 (8 / 13 at 🟠).design/40-skeleton.md— P-01 row updated (Brief 🔴 → 🟠, Wireframe 🔴 → 🟠, Conf 2 → 3, Top gaps refined). Pattern library table refreshed (4 → 8 at 🟠). Roll-up avg confidence 2.5 → 2.6.design/01-concerns.md— Dn-22 Partly (4 → 8 patterns drafted; remaining 5 are SP-06/08/10/11/12). Dn-23 Open → Partly (P-01 first page lifted off baseline). Counts: 6 Closed · 6 Partly · 12 Open · 24 total.index.md—42-briefs/01-home.mdrow added (above 41-patterns row).- Brainstorm artifacts preserved in
.superpowers/brainstorm/37841-1779915184/(5 HTML screens: welcome · hero-treatment · agenda-preview · section-list · fix-duplicate)..superpowers/already in.gitignore. - No code changes. Brief is the artifact; code stage runs later (P-01 Code column still 🔴 "routable shell exists" — moves to 🟠 when Blade renders the 6 sections with strawman copy).
- Next steps after user reviews the brief: mobile sketch (closes brief gap #8 → 🟢 Final); then either pick the next page brief (Mariage P-05 surfaces SP-06 + SP-11/SP-12) or move P-01 to the Content stage (write the NL strawman that closes gaps #1, #3, #7 enough to draft).
- No git commit / no
git add(shared multi-thread tree — user commits).
Per user instruction "proceed with shared patterns first", drafted the structural shell of the shared patterns library (site-level prerequisite for any per-page brief work, per playbook). 4 of 13 patterns moved from 🔴 stub → 🟠 first draft. Specs follow the convention: Purpose · Used on · Anatomy (ASCII) · Composition contract · Variants · States · Tokens · Deviations · Open decisions · Implementation pointer.
- New page
design/41-patterns.md— sibling to 40-skeleton, holds the full pattern specs. Index stays in 40-skeleton (linked per row). A pattern enters 41 the moment it leaves 🔴 stub. Self-documenting convention block at the bottom of 41 for promoting any remaining 🔴 pattern. - SP-01 Primary nav (🟠) — sticky top ·
h-16· wordmark left + 4 nav items + lang switcher right (NL · FR · EN, current = bold). No hamburger (Dn-20 anti-pattern): 4 items wrap visibly into a second row on mobile. Active state =font-medium, prefix-match. Border-bottom hairline; no shadow/blur (CLAUDE.md banned). Aligned with existingpartials/nav.blade.php— no implementation change needed. - SP-02 Footer (🟠) — 2 zones: SP-09 funder/partner wall (full composition, all 4
tiers) + bottom row (copyright/address · Contact + Over Leon + lang placeholder +
legal). Stacks vertically on mobile. No newsletter in footer v1 (blocked by Dn-03
GDPR + Dn-11 ESP, both Open). No sitemap link. Existing
partials/footer.blade.phprenders v0 with strawman single-tier wall — needs tiered upgrade once real partner data lands. - SP-04 Subpage top (🟠) — used on P-02 … P-18 (every non-home page). Default =
plain heading: optional eyebrow (uppercase meta, locates page in IA) + h1 (clamp
scale) + optional lede (max prose width). Variant B = SP-13 photo as next sibling
(NOT nested) — keeps heading crisp + avoids the empty-void-hero failure mode (Dn-20).
Variant C = index-only (h1 + 1-line intro). No breadcrumbs in v1 (IA is flat). Aligned
with existing
partials/page-header.blade.php. - SP-09 Funder/partner wall (🟠) — the distributed proof spine per Dn-16 / IA
principle 6 (no standalone "for funders" page). 4 tiers, fixed top-down order:
Met steun van · Co-producenten · Speelplekken · In samenwerking met — captions
visible (not tooltips). Within-tier order = alphabetical (no implied ranking).
Tile = uniform
h-16, aspect-flexible, 1px border,--radius. Grid responsive (2 → 3 → 6 cols). Wireframe = text placeholders; real logos render greyscale at Surface. 3 variants: Full (footer) · Featured (P-01 home below-fold, larger tiles) · Inline (P-05/P-06 per-project, prose line not grid). - Deliberately deferred:
- SP-03 Hero — home stays 🔴 stub — needs the 5-tension home synthesis session, not a derivative draft.
- SP-05 / SP-06 / SP-07 / SP-08 / SP-10 / SP-11 / SP-12 / SP-13 (project card · editie card · date-row · agenda strip · inschrijving form · contact pattern · quote block · photo block) stay 🔴 — drafted on first page-brief use to keep specs grounded in concrete usage, not speculative coverage.
design/40-skeleton.md§Shared patterns library — table updated: 4 rows to 🟠 first draft + spec links; preamble updated ("4 / 13 patterns at 🟠 first draft").design/01-concerns.md— Dn-22 Open → Partly (structural shell drafted; remainder = SP-03 + content/component patterns on demand). Phase-conclusion-readiness recount: 6 Closed · 5 Partly · 13 Open · 24 total.index.md—41-patterns.mdrow added above the 40-skeleton row.- No code changes. All four patterns are aligned with existing Blade partials — upgrades are deferred until real content (partner data) or new pages require them.
- No git commit / no
git add(shared multi-thread tree — user commits).
Opened the Skeleton phase (Garrett Plane 4) on the user's instruction, ahead of the pipeline step that will generate per-page briefs, wireframes, NL content, and Blade code. Read the full UX Planning playbook (Notion, 3 paginated block fetches, 277 blocks total — first complete re-read since Strategy/Scope opened) and distilled the Skeleton plane's rules into the new plane file. v1 scope = NL only (per user steer; aligns with the existing Build v0.1 NL-only routing). FR/EN routing model formally deferred to a Skeleton sub-decision (Dn-24 NEW).
- New page
design/40-skeleton.md— plane plan + page registry (the single source of pipeline status). Sections: Kern (5 decisions) · Pipeline lifecycle (5 statuses) · Confidence scoring (1–5 + tagged gap pointers) · Section budgets (anti-bloat ceiling) · State inventory checklist · Shared patterns library (SP-01 … SP-13, all 🔴 stub — site-level prerequisite per playbook: "page-level skeleton has a hard prerequisite — the site-level shared patterns library must exist first") · Page registry (18 NL v1 pages P-01 … P-18 — slug + type + 5-stage status columns + Conf 1–5 + Top gaps) · Validation gate · Open going into Surface · Cross-links. - Pipeline lifecycle (per page, per stage): 🔴 stub → 🟠 first draft → 🟡 reviewed → 🟢 final → ✅ approved. Five stages tracked independently: Brief (sections, states, CTAs) · Wireframe (ASCII mockup) · Content (NL copy) · Code (Blade) · Approved (client sign-off). Code stubs already exist (Build v0.1) — start as 🔴 "routable empty shell".
- Content-confidence scoring (per page, 1–5): scored against "could I write
high-quality NL copy for this page today?". 1 = vague brief, fundamental decisions
pending · 2 = brief drafted, key facts missing · 3 = could write strawman, needs team
review · 4 = could write near-final, minor verification · 5 = client-confirmed material,
could write final now. Top gaps = ≤3 short pointers per page, each tagged
[content](text from team) ·[strategy](Dn-/S- concern open) ·[asset](photo/ logo/data) ·[client](decision owed) ·[research](Frederik to investigate). - Baseline state (honest): every page row 🔴 across every stage; Code at 🔴 "routable empty shell". Avg content-confidence = 2.5/5, median 3. Seven pages at score ≤ 2 (P-01 home, P-04 Leon op school, P-05/P-06 Mariage + editie, P-09 opzetten, P-10 uitnodigen, P-15 Impact). Hard blocker: P-11 (Vrijwilligers/stage doen — Dn-19 Strategy work pending). Single biggest cross-page gap: SharePoint content extraction (photos, partner lists, quotes, team material).
- Shared patterns library scaffolded (13 entries, all 🔴 stub): SP-01 Primary nav · SP-02 Footer · SP-03 Hero home · SP-04 Subpage top · SP-05 Project card · SP-06 Editie card · SP-07 Date-row · SP-08 Agenda preview strip · SP-09 Funder/partner wall · SP-10 Inschrijving form · SP-11 Contact pattern · SP-12 Quote/testimony block · SP-13 Photo block. Discipline: no page brief may reference an undeclared pattern (per playbook).
- Section budgets baked in (anti-bloat): Utility/index/contact 3–5 + CTA · Marketing/ info/story 5–7 + CTA · Conversion/intake/home 6–8 + CTA. Declared at the top of every brief. Forces a cut decision while authoring.
- Validation gate (per playbook): sections answer a user question (not a content type) · one visually-dominant primary CTA + 1–2 secondary · state inventory explicit · section budget respected · no either/or notes survive · patterns referenced by SP-id · canonical home named for each load-bearing fact · mobile-first.
design/00-design-plan.md— Skeleton row "not started" → DRAFT v0.1 (2026-05-27).design/01-concerns.md— 3 new concerns: Dn-22 patterns library still stub (resolves as patterns land) · Dn-23 baseline content-confidence 2.5/5 + page-by-page resolution path · Dn-24 NL/FR/EN routing model deferred (decide after NL v1 reaches Final). Phase-conclusion-readiness recount: 6 Closed · 4 Partly · 14 Open · 24 total.index.md— Skeleton row added between Structure and Image Map.- No per-page briefs generated yet — registry is the v0.1 deliverable; per-page work
(one file per page in a future
42-briefs/subfolder) starts once the user signs off on the schema and we agree on order of attack (likely: home + Mariage project page first per 00-design-plan §Plane order, then shared patterns, then the rest by content-confidence tier). - No git commit / no
git add(shared multi-thread tree — user commits).
Opened the identity folder (previously empty) and filed its first page:
docs/wiki/identity/10-tone-of-voice.md — the working reference for every
webcopy string on the new site. Brainstormed shape via three structural
questions; user picked single voice + register-dial (one Leon-stem, not
twin profiles), Dutch prose, website-only scope.
- Source: Frederik's Notion playbook Playbook: Tone of voice guide (2026-03-28) for the template (TOV statement → voice attributes → style → terminology → channel adaptations); Frederik's own Impact Studio TOV guide for the quality bar (rhythm + openers + checklist sections added on top of the bare playbook).
- Built on:
strategy/40-value-proposition(the one substance, two registers idea + invitation-forward posture D-iv) ·glossary(gedeelde vocabulaire; the TOV page points at the glossary, does not duplicate it, and adds voice-specific toon-aanvullingen- a verboden in publieke copy list)
·
discovery/12-client-kickoff("Zeker in tone of voice en in beeld.") ·discovery/90-first-impression-review(subsidiedossiertaal-diagnose).
- a verboden in publieke copy list)
·
- Page shape: TOV-statement (24 woorden, NL) → Eén stem, twee registers
(the register-dial table P1/P4 vs P2/P3 vs P5) → 6 kenmerken with NL
✓/✗ pairs → stijl & ritme → openers/CTA's/afsluiters/empty-states/404 →
woordenlijst (toon-aanvullingen + verboden: duurzaam · laagdrempelig ·
inclusief · diversiteit · creatie in publieke copy · werking · traject
buiten funder-pagina · uniek · bekroond · vernieuwend · passie · empoweren
- clichés) → per-pagina dial-richting (home, project/editie, agenda, Over Leon, Samenwerken, Pers, 404/forms) → 7-puntenchecklist voor nieuwe webcopy → consolidated wat we vermijden.
- CLAUDE.md: added a "Tone of voice" pointer in the Build phase — Laravel top-of-section paragraph (next to Sitemap and Glossary) so anyone writing copy lands on it; also added a one-line reference in the Content rules block under Wireframing mode. The TOV is now the v1 reference for every webcopy string on the new site.
- Scope kept narrow: website only (flyers / press / dossiers / internal comms explicitly out of scope for v1 per user). The TOV will absorb those channels later if asked.
- Status:
⚠️ V1, working but not signed off. Sam & Kristin validate on the content-complete NL draft (S-02); changes after that land in this page. - No new concern raised — the TOV operationalises existing Strategy decisions (D-iv invitation-forward; one substance, two registers). S-02 already tracks the client-validation gate.
- Wiring:
index.md+1 row (Identity / Cross-cutting) right after the Glossary row. No git commit / nogit add(shared multi-thread tree — user commits).
Scaffolded the Laravel project at repo root and stubbed every page in the
Structure sitemap. Wiki tooling (package.json, node_modules) moved into
scripts/ so Laravel could own root-level npm.
- Stack: Laravel 13 · Blade · Tailwind 4 (Vite) · SQLite (dev). No Flux/Flux Pro per request — Filament/Livewire will arrive when admin is needed.
- Routes (18): all named, NL slugs, source =
design/30-structure.md. Four top-level groups:dansateliers-performances·samenwerken·agenda·over-leon. Mariage editie pages via{editie}param (strawman list of 6). - Layout:
layouts/app.blade.php+partials/{nav,footer,page-header}.blade.php. Skip-link,<main>, NL/FR/EN placeholder, tiered funder/partner wall stub. - Design tokens:
DESIGN.md+:rootinresources/css/app.css(grayscale, one radius, approved spacing, system-ui only,.section/.btn-*/ containers). - Banned-fonts cleanup: removed
bunny('Instrument Sans')fromvite.config.js(Instrument Sans is banned per Frontend-wireframe playbook). Built CSS now has zero Google/Bunny font imports; only the standardsystem-uifallback stack. CLAUDE.md: added "Build phase — Laravel" section (wireframing rules, tokens & conventions, banned patterns, directory shape).- Smoke test: all 18 routes return 200. Vite build clean (46 kB CSS).
- Carry-forward to Skeleton: FR/EN URL & language-switcher routing model (deferred per Structure); home interaction-design (5-tension piece); editie page shape; mariage editie list (currently hardcoded strawman → CMS-backed).
Client pushback on the 18-reference static-design library ("not a fan of these sites, let's see if we can find sites that feel like they're dancing"). Reframed: "dancing" isn't one thing — it splits into 4–5 motion registers. Pre-aligned which fit Leon:
- 🌬 Breathing · slow · cinematic — IN (phrasing, anticipation, follow-through; contemporary dance at slow tempo)
- 👆 Cursor-as-choreographer · scroll-as-phrasing — IN (user's motion through the page IS the dance; contact-improv energy; fits participatory ethos)
- Playful · bouncy · springy — OUT (Brand-of-Cuberto risk; lands commercial rather than dancing-bodies)
- Physics · WebGL · sculptural — OUT (art-tech-spectacle register, too far from Leon's warmth)
Curated 17 URLs under the two in-scope registers — 8 breathing, 9 cursor —
appended as new section § Kinetic references — sites that move in
docs/wiki/design/50-visual-inspiration.md. No screenshots, no full write-ups per
client steer: "just links are fine, I'll do the discovery myself." Each entry is
URL + one-line what to watch for pointer. Plus a 3-bullet kinetic-specific
anti-pattern guard (scroll-jacking, semantic-less cursor effects, motion-everywhere
syndrome).
Phase-conclusion-readiness updated: 6 Closed · 4 Partly · 11 Open · 21 total.
Dn-21 awaits client live-browsing feedback on the 17 URLs → register pick → Scope
amendment. Files touched: 50-visual-inspiration.md (+ kinetic section),
01-concerns.md (+ Dn-21 + counts), this log.
Pre-staged Surface (Garrett plane 5) ahead of Skeleton landing — user asked for visual design inspiration without formally opening Surface. Two sourcing methods chosen deliberately to avoid the local echo: (i) international dance peers, ethos-aligned with Leon (participatory · intergenerational · community-rooted · choreographer-led collective · nomadic) — explicit steer away from BE/NL same-subsector references (Rosas, P.A.R.T.S., Damaged Goods, Eastman, Peeping Tom, les ballets C de la B, Voetvolk, Needcompany, Kaaitheater, Beursschouwburg, KVS, deSingel, BOZAR, Viernulvier, KFDA, HF — all dropped); (ii) design-gallery "dance" sweep. Plus a small set of non-dance wildcards (multilingual / motion / editorial / solo-artist) and 3 cultural institutions (Serpentine · KW Berlin · Walker) — all international, none BE/NL.
Captured 18 references to docs/raw/assets/inspiration/ via Playwright (1440×900
desktop window, single PNG each, 4s settle, best-effort cookie dismiss): 8 dance peers
(Dance Exchange · Boris Charmatz · Akram Khan · Sasha Waltz · Käfig/Merzouki · Hofesh
Shechter · BTJ-AZ at NYLA · Studios Kabako); 3 institutions (Serpentine · KW · Walker);
4 wildcards (Pro Helvetia · Bureau Borsche · Are.na · Olafur Eliasson); 3 gallery picks
(William Forsythe · Festival d'Avignon · ImPulsTanz). Capture pipeline:
scripts/capture-inspiration.py — reusable, takes <slug> <url> pairs, handles common
cookie-banner patterns across EN/FR/NL/DE.
Format per entry (locked early after proof-of-format on Liz Lerman): thumbnail · URL
- capture date + tags · Why it's here (anchored to Strategy) · Observations
(verbatim, no interpretation) · Transferable to Leon (
⚠️ marks interpretations per CLAUDE.md rule, cross-linked to Strategy/Scope/Structure pages) · What NOT to copy.
8 north-stars elevated with rationale + theme synthesis: Boris Charmatz (photo discipline — THE primary reference for Leon's image-selection) · Liz Lerman / Dance Exchange (mission-on-photo register-pair in one frame) · Pro Helvetia (multilingual
- institutional-playful palette, CH 4-lang benchmark with multilingualism IN the wordmark) · KW Berlin (Plain Language as first-class option) · Walker (single hero image + name + date range template) · Festival d'Avignon (countdown + edition-number + bold single color) · ImPulsTanz (hand-drawn mark + intergenerational subject + magazine-cover composition) · Are.na (text-first discipline + maintainability ethic).
Cross-cutting themes (the take-home set): (1) photo selection IS positioning — Charmatz / ImPulsTanz / Lerman / Walker all spend their hero on a single photograph whose subject does the work; (2) multilingual surface as identity, not chrome — Pro Helvetia bakes Italian into wordmark, KW puts Plain-Language in language switcher; (3) calm wordmark vs. hot content — let the type stay quiet; (4) time-anchored content keeps site alive — visible timestamps signal living site not catalogue; (5) maintainability is a Surface concern, not just a Scope concern. Anti-patterns list as guardrail for Skeleton: autoplay-video hero (Hofesh demonstrated the fragility), empty void hero, hidden hamburger as primary nav, transactional Tickets register, maximalist single-color hero at daily-use scale.
New concern Dn-20 added (Surface section E — first concern in that bucket): visual direction not yet chosen; plane opens after Skeleton lands. Cross-check pending: screen image map against the Boris Charmatz / ImPulsTanz photo-discipline benchmark. Plain-NL question (KW's Einfache Sprache) to take to client
- Kristin. Phase-conclusion-readiness updated: 6 Closed · 4 Partly · 10 Open · 20 total. 00-design-plan.md Surface row updated: not-started → research-collecting. index.md entry added.
Files touched: docs/wiki/design/50-visual-inspiration.md (new), docs/wiki/design/ 00-design-plan.md (Surface row), docs/wiki/design/01-concerns.md (+ Dn-20 +
phase-readiness counts), docs/wiki/index.md (+ entry), scripts/capture-inspiration.py
(new — reusable capture script), docs/raw/assets/inspiration/*.png (18 captures).
Created the standalone LLM-wiki repo for the Leon engagement (frontend + possible backend
services), modelled on the kidicalmass docs/ instantiation. Decisions: standalone git repo
(no Leon codebase yet); Discovery-only phase structure for now (later phases YAGNI); live
CLAUDE.md schema at repo root (fixes the gap kidicalmass had where wiki rules were
spec-only). Discovery is run as a structured desk-research dossier — the user's "Desk research
voor website redesign" playbook (8 phases, 5 principles) was read from Notion and adapted into
the schema. Created: CLAUDE.md, docs/raw/ (+ research/, assets/), docs/wiki/index.md,
this log, docs/wiki/discovery/discovery-plan.md, and the design spec under
docs/superpowers/specs/.
Ran the Discovery desk-research playbook autonomously, pre-client. Crawled all 12 leon.dance
pages (Phase 1 → site-audit.md): platform is Squarespace (not Wix), key problems =
image-only agenda, no multilingual system, off-platform MS-Forms sign-up, no structured
content, thin IA, no owned socials. Per user redirect mid-run, de-scoped SEO (Phase 2) and
Best-practices (Phase 6) and reorganised output around the 5 "what we need to learn" buckets:
organisation.md (Leon vzw not found in Kunstendecreet 2023–27 werkingssubsidies offerings-audiences.md (6 offers; Mariage = participatory production; Apartheid Free Zone =
Palestine/Lebanon solidarity + BDS-aligned partnership review; 6 inferred audience segments),
ecosystem.md (peers: Ultima Vez/les ballets C de la B/kabinet k/fABULEUS; peers use
structured agenda+archive, real localisation, custom CMS), technical-context.md (needed
backend services, maintenance-capacity risk). Synthesised desk-research.md (overview: SWOT,
priorities, recommended structure, consolidated client questions). Updated index. All
interpretations
Ran an initial public web search on Leon before the structured discovery run. Key signal:
leon.dance = Leon vzw, the work structure around choreographer Seppe Baeyens —
nomadic participatory dance in Brussels (Atelier Leon weekly workshops; large intergenerational
works Birds / INVITED), funded by the Flemish government + VGC, operating EN/FR/NL. Raw
findings with citations saved to docs/raw/research/leon-initial-desk-research-2026-05-18.md;
synthesised into discovery/discovery-plan.md ("What we know so far"). Open: legal/funding
detail and jaarverslag, team/decision-makers, what "Apartheid Free Zone" and "Mariage" are,
current site stack, needed backend services.
Ingested the user's "Quick first impression review" Notion page (a cold, single-reviewer
walkthrough of leon.dance, written pre-client). Reclassified on read: it is a first-party
qualitative research source, not a method playbook. Raw saved verbatim to
docs/raw/research/quick-first-impression-review-2026-05-18.md (immutable). Synthesised into
discovery/first-impression-review.md with observation/site-audit.md / offerings-audiences.md / technical-context.md (Squarespace, image-only
agenda, weak audience-framing IA, no socials, trilingual = mixed-language weakness), with the
audience-framing gap being a notable independent corroboration. Net-new client questions
surfaced (who is the agenda for; is it hand-maintained / automate the backstage system;
trilingual = values vs. maintenance) folded into discovery-plan.md open questions (8–10).
Updated index.md. Still open: agenda audience.
User provided the client-side contacts: Sam De Wit (coordinator) is the primary
contact; he invited colleague Kristin Rogghe (communications) to the client meeting,
which is being arranged (date TBC). Filed into discovery-plan.md → "Who to talk to"
(was a TBD placeholder). Cross-link noted: a "Kristin Rogghe" already appears among the
~14 associated artists on /who-we-are-1 in site-audit.md —
Deeper desk research on how Leon is governed/staffed/funded/produced (user asked for more
elaborate methods). KBO Public Search on enterprise 0769.579.192 gave hard facts: Leon
vzw incorporated 10 Jun 2021; 6-person board (5 since 2023-12-04 + Sam De Wit since
2025-03-25); Seppe Baeyens not a statutory director; employer with social security only
since 1 Jan 2025 (freelance/project-based before). Demos field piece confirmed the
Ultima Vez → Leon lineage (Atelier Quartier 2017 = Atelier Leon template; Sam De Wit ex-Ultima
Vez community worker) and a deliberative/"searching", resource-tense working culture (discovery/organisation-operating-model.md (confidence-marked: [REG]/[SRC]/organisation.md (resolved prior team/governance index.md.
User browser-downloaded the Vlaams Subsidieregister CSV — closes the funding [GAP]. Filed
verbatim to docs/raw/research/subsidieregister-vlaanderen-leon-2026-05-18.md (immutable).
Confirmed: Leon's Flemish funding is project-based via Decreet Bovenlokale
Cultuurwerking 2018 (€84,250 awarded 2023; paid 75,825 + 8,425) and Polsslag Brussel
(€88,000 awarded 2023; €78,000 awarded 2025) — no Kunstendecreet line (corrects the
earlier organisation-operating-model.md (Funding [GAP]→[REG] +
organisation.md, updated index.md.
Still open: site-claimed VGC support (not in Flemish register — VGC separate); city/EU;
whether a Kunstendecreet/structural application is planned; annual accounts (NBB/griffie-gated).
User asked the foundational question: why would Leon have a website, what purpose does it
serve? Answered from the wiki and, on the user's go-ahead, filed the synthesis back as
discovery/website-purpose.md. Core framing (offerings-audiences.md (Implications) and desk-research.md (Framing); added to index.md.
No new facts — pure synthesis of existing pages.
User flagged the website-purpose claim as counterintuitive and asked to solidify it. Stress-
tested it four independent ways and wrote them into website-purpose.md as "How we know" +
"What would change our mind": (1) falsification — if the site were the participant funnel
we'd see X; site shows the opposite (image agenda, no atelier reg by design); (2) revealed
preference — Leon maintains legitimacy/proof artefacts, lets participant tooling rot;
(3) per-segment funnel map — site is decisive only for the non-core audiences;
(4) peer-site triangulation — new live web research on Ultima Vez / les ballets C de la B
/ kabinet k / fABULEUS. Key new finding: even Ultima Vez's Atelier Quartier (Leon's direct
analogue) is "free, weekly, no registration, just come" — a showcase page, not a sign-up
funnel; all four peers build production+calendar+archive showcases, participation never
enrolled via site. Honest refinement: peers don't run press-kit/funder portals either → a
Leon programmer/funder section is a differentiator, not catch-up. Core claim strengthened,
not overturned; named the disconfirming client questions. Cross-linked into ecosystem.md
(participation-section bullet refined) and index.md summary updated. Sources: the four peer
sites (live, 2026-05-18).
User supplied a structured browser-session dossier; filed verbatim to
docs/raw/research/leon-vzw-desk-research-browser-2026-05-18.md (immutable). Closes/strengthens
several items. Funding now confirmed: + VGC meerjarige werkingssubsidie 2023–2025 =
€14,840/yr (VGC PDF retrieved; site's VGC claim verified) on top of the subsidieregister
Bovenlokale Cultuurwerking + Polsslag Brussel; verified-negative on Kunstendecreet (full
werkingssubsidies 2023–27 table + projectsubsidies 2026 r1 scanned; Leon absent; 2022–25
project PDFs not opened line-by-line — strong not absolute). Scale benchmark added to
ecosystem.md (Ultima Vez €1,040,387/yr structural vs Leon project-only ≈ low six figures).
Production split clarified: Birds production stays Ultima Vez, Leon tour-direction from
2023; Mariage = Leon's own production (premiere 21.09.2024 MolenFest); Kosmos 2027 = Leon
co-produces with KANAL & KVS; Leon joined Circuit network 2022. Team correction: Emma
Ducheyne = comms (Mariage 2025), Isabelle Azaïs = production+scenography, Kristin Rogghe =
dramaturg (INVITED/Birds) + KVS city dramaturg — organisation-operating-model.md (funding [GAP]→[REG], people,
lineage/pipeline, snapshot, open Qs), organisation.md, ecosystem.md, offerings-audiences.md,
index.md. Board/governance already covered via KBO (this dossier still lists it as a gap).
Ran the website content-capture playbook. Built scripts/capture-site.mjs
(+ unit-tested scripts/capture/lib.mjs) and wrote a verbatim corpus to
docs/raw/current-site/ (pages, sitemap, images index, crawl-log, hand-curated
notes). Spec: docs/superpowers/specs/2026-05-18-current-site-content-capture-design.md.
Plan: docs/superpowers/plans/2026-05-18-current-site-content-capture.md.
Client question: what does the current Squarespace site cost Leon? Plan tier/billing are
not publicly observable (already an open client Q in site-audit.md). Filed a costed
estimate as new page discovery/current-site-cost.md: verified Squarespace + unused Cart
(no ecommerce tier needed) + .dance premium TLD; 2026 Squarespace pricing pulled (web,
official + Tooltester + Website Builder Expert). .dance domain ~€40–55/yr, all-in
≈ €230–€340/yr. Key takeaway recorded: migration case is capability-driven, not hosting
cost-saving. Cross-linked from + bumped technical-context.md (migration considerations,
sources, updated 2026-05-19); added index row.
Reorganised docs/wiki/discovery/ for navigability: 11 flat files → 9 tier-coded
numerically-prefixed files. Scheme: 0x method · 1x synthesis/front-door · 2x
evidence · 9x raw input.
- Renamed: discovery-plan→
00-discovery-plan, desk-research→10-desk-research, website-purpose→11-website-purpose, site-audit→20-site-audit, offerings-audiences→22-offerings-audiences, ecosystem→23-ecosystem, first-impression-review→90-first-impression-review. - Merged
organisation+organisation-operating-model→21-organisation.md(layered: summary spine + confidence-marked deep-dive; markers preserved). - Merged
technical-context+current-site-cost→24-technical-context.md(cost folded in as "Running cost (estimated)" + 3 ask-client items into open questions). - Relinked all cross-references, rebuilt
index.md, updatedCLAUDE.mdpath examples and added the tier-numbering convention to "Page conventions". - Earlier log entries intentionally still reference pre-restructure filenames (append-only).
Transcribed the image-only /agenda (7 Squarespace screenshots, 6 unique + 1 dup) into
a new evidence page discovery/25-agenda.md: 65 dated entries Mar–May 2026 as a
chronological table + venues key + source provenance. Method: downloaded the WebP files
(served as .png), converted, and read each as left/right half-crops at full resolution
(downscaled full image is unreadable).
- Findings (
⚠️ ): only ~2 public shows (Show Mariage10/04 & 26/04) among ~61 internal workshop/in-school entries — reinforces11-website-purpose.md; on-page image order is non-chronological; last image duplicated in markup; addresses are NL/FR hybrids with a De Loods street-name spelling inconsistency. - Corrected
20-site-audit.mdrow 7 (was "7 events" → 7 image files / 65 dated entries) and cross-linked it to the new page; addedindex.mdrow. - Open questions (ticketed vs free shows; who keeps the agenda current) flagged for
10-desk-research.md.
Answered "what can we infer about Leon's offer/work from the agenda" and filed it as a
new synthesis page discovery/26-agenda-analysis.md (per query workflow — valuable
analysis compounded back into the wiki).
- Activity mix from 65 entries: Mariage family ≈57% (37), recurring Atelier/à-l'école
≈43% (28), only 2/65 public (
Show Mariage). Confirms 4 of 6 offers with dated evidence; White Page / AFZ / rond de tafel absent in window. - Independently corroborates the weekly cadence (Wed Pianofabriek / Sat Maison des Cultures) and the partnership/co-production model; surfaces named partners (MUS-E, Ketmet, BRONKS, RITCS) and a delivery-team division of labour mapping every agenda lead to the associated-artist pool.
- Cross-linked per user request: added agenda-corroboration notes into
22-offerings-audiences.md(Implications) and21-organisation.md(Team and roles), plus links to11-website-purpose.md,24-technical-context.md,20-site-audit.md. Addedindex.mdrow; 6 open questions routed to10-desk-research.md.
User pointed at debateville.org (Brussels youth-debate vzw) as a reference: a well-made,
impact/traction-led site for an org with a similar funding stream. Ran a competitive/comparison
desk-research pass (live site + Open Collective + LinkedIn + Donors&partners page) and filed a
new evidence-tier page discovery/27-comparator-debateville.md.
- Key framing: Debateville is a funding-ecology + site-strategy comparator, not an artistic peer — near-identical money structure to Leon (project/foundation/public portfolio: King Baudouin Foundation, VGC, Flanders, Brussels City; no single structural line), beneficiary reached offline. So it is independent cross-sector corroboration of [11-website-purpose] — and, unlike the four dance peers, it does run the funder/press/ impact portal → upgrades that page's "honest refinement" from speculative differentiator to a proven move for a project-funded org.
- 7 transferable site patterns documented (homepage metric band, 3-tier evidence ladder,
audience-first "Voor wie…" IA, annual impact-report hub, tiered/captioned funder wall,
press+awards nav, owned mentor/co-creator funnels) + 6 scope ideas for Leon each mapped
to an existing finding.
⚠️ Steer (confirmed with user): adopt the structure, lead the proof qualitatively (artistic/relational), not a metrics dashboard — Leon's value doesn't reduce to survey %s the way a skills programme's does. - Cross-linked:
23-ecosystem.md(new cross-sector-comparator section + open Q1 sharpened),11-website-purpose.md(new triangulation angle #5; "four"→"five"; sources/updated bumped),10-desk-research.md(detail-pages list + audience-first-IA sharpening of the recommended structure; sources/updated bumped). Addedindex.mdrow. 4 open client questions surfaced (metrics-vs-qualitative; individual-donor audience?; report editorial capacity; funder overlap to confirm). Sources cited inline (no raw file —docs/raw/is read-only); site live 2026-05-19.
[2026-05-19] discovery | First client conversation — Sam & Kristin → 12-client-kickoff-2026-05-19.md
The pivotal discovery milestone: the first client meeting (Sam De Wit, coordinator;
Kristin Rogghe, comms). User supplied the transcript + 2 workshop-board photos in conversation
(not filed to docs/raw/ — that is the human's curation step; flagged to the user). Frederik
ran the covert actor-card + page-card workshop (per the agreed don't-present-findings style).
Synthesised into a new 1x-tier front-door page discovery/12-client-kickoff-2026-05-19.md
(client truth supersedes
- Headline new fact: Leon is bidding for Kunstendecreet structural funding 2028–2032 — dossier deadline 1 Dec 2026, jury ≈ Jan–Jul 2027; the website is its visitekaartje for that jury. Dates and hardens the previously-inferred legitimacy job; de-facto plan anchor = beleidsplan Dec 2026 / decisions ~Sept–Oct 2026.
- [11-website-purpose] confirmed + materially refined: hardest groups offline ("Nope") and funders/programmers/press confirmed; but the site must also convert potential new participants (post-offline-trigger moment-of-truth) and the client refuses a single primary audience (arts/funder + mission audience "evenwaardig"; rebalance away from subsidiedossiertaal). Added an internal (freelance) artists & staff audience.
- Closed across the wiki: no social media (principled — ethical + capacity); agenda = Excel→screenshot→paste by Kristin, audience = impact+participant+internal mix; trilingual = resource shortcut (new site → proper localisation); who built/maintains (Jeroen-built / Kristin-maintained, editorial-capacity risk confirmed real); Squarespace not a constraint (Frederik builds custom, free, ≈ current recurring cost); Mariage = first flagship "creatie" in a repeatable type; qualitative-led proof confirmed.
- Newly opened: participant DB/CRM + possible team backstage now firm wants; Notion-as-source-of-truth coupled to the site hypothesis to research; antenne concentration-vs-spread (undecided); GDPR/minors for the DB; passive social presence; which impact figures are safe given per-funder dossier framing; accessibility/brand still open.
- Open-question review (deliverable 2): swept every page's open-questions +
⚠️ assumptions and updated with client status —00-discovery-plan(Qs 1–10 mostly closed),10-desk-research(banner + consolidated-Qs map),11-website-purpose(validation banner- "what would change our mind" resolved),
20-site-audit(social closed, unknowns),21-organisation(Kunstendecreet bid confirmed; Kristin-comms resolved; open Qs 1/7/8),22-offerings-audiences(Qs 1–5; segments validated),23-ecosystem(Qs 1–2),24-technical-context(who-maintains resolved; backend scope firmed + Notion; Qs 1–10),25-agenda/26-agenda-analysis(provenance + cadence Qs),27-comparator-debateville(qualitative-led + capacity confirmed). Each touched page got theclient-meeting-2026-05-19source +updated: 2026-05-19. Addedindex.mdrow.
- "what would change our mind" resolved),
Per the user's explicit instruction (overriding the general docs/raw/ read-only schema
rule — the user is the curator and delegated the ingest step), filed the verbatim
auto-transcription of the 2026-05-19 client meeting to
docs/raw/research/client-meeting-2026-05-19.md (immutable, with the standard RAW-SOURCE
header; ASR errors/typos preserved). This makes the client-meeting-2026-05-19 source
shorthand cited across all 13 discovery pages resolve to a real raw file. The two
workshop-board photos were not filed (binary; described in 12-client-kickoff's §10).
Updated 12-client-kickoff-2026-05-19.md's source note (was "not filed" → now points at the
raw file; quotes flagged as lightly normalised vs. the authoritative raw ASR).
User asked for a central, per-phase Concerns register with explicit open/closed status,
replacing scattered per-doc open-question lists as the place to read status. Two design
choices confirmed via AskUserQuestion: (a) a dedicated 0x-tier file per phase; (b)
register rolls up, per-doc lists keep local detail, cross-referenced by concern ID.
- CLAUDE.md: added a new "## Concerns register (per phase)" section (one register per
phase =
docs/wiki/<phase>/0x-concerns.md; deduplicated concerns; stable phase-letter IDsD-/S-/Dn-/B-, never renumbered; statusOpen/Partly/Closedwith mandatory resolution+pointer; conclusion gate: no silentOpen). Wired into directory layout, Phased-approach, Filename-numbering (0xnow "method/agenda + Concerns register"), Running-discovery, Ingest workflow (new step 6), Lint workflow (reconcile register vs. per-doc detail). - New page
discovery/01-concerns.md: consolidated every open question/⚠️ /gap across all discovery pages into 46 deduplicated concerns (D-01–D-46), grouped A–F, each with status + detail page + resolution/pointer, plus a phase-conclusion-readiness band (19 Closed · 6 Partly · 21 Open). Verdict: Discovery can be concluded — remaining Open/Partly are client-input/Strategy items, none silently open; they become the seed of the Strategy register. - Cross-refs: added a "status is authoritative in the register (IDs …)" pointer to the
per-doc "Open questions" sections on
00,10,11,12,20,21,22,23,24,26,27(sections kept as local detail). Addedindex.mdrow.
Opened the Design phase on the user's instruction, run via the user's UX Planning
playbook (Notion — Garrett's five planes, bottom-up, Socratic). Read the full playbook
(3 paginated block fetches) + the strategic basis (11-website-purpose,
12-client-kickoff). Created docs/wiki/design/:
00-design-plan.md— phase front-door. Engagement = site-level custom rebuild replacing Squarespace. Strategy plane is owned by a separate STRATEGY thread (out of this thread); Scope traces to the interim strategy basis (discovery 11 + 12) until it lands. Defines a plane-aligned filename scheme for the design phase (00 plan · 01 concerns · 10 strategy[ext] · 20 scope · 30 structure · 40 skeleton · 50 surface — distinct from the discovery tier scheme, which is discovery-scoped). Parks a provisional principles-tuning (content/functionality = hybrid; maintainability gate + Won't-Have elevated; no-social = hard constraint) to reconcile with the Strategy thread.01-concerns.md— the Design Concerns register (schema-required; IDsDn-). Seeded 10 Open concerns from the Scope draft, grouped A (strategy dependency —→ Strategy thread), B (scope decisions for the interview), C (build/technical to research). Boundary rule: strategic concerns are consumed, not re-litigated here.20-scope.md— Scope (Plane 2) draft v0.1. Per-section confidence table (user request). Hybrid product-type framing (content-led public surface + functionality-led backstage); 14 functional requirements Kano-classified with phase + traceability; content- lifecycle table (ROT-audited); first-class Won't-Have list; 6 critical user flows; the playbook's 4 project-type checkpoints (form backend = custom server; agenda = the mixed-flow split into participant + impact surfaces; partner logo-band required); cut-pass applied (F10 reduced, F10–F12/F14 → Phase 2); Scope validation checklist (2 Partial on Strategy-traceability + content owners). Status: DRAFT — client interview pending.
Added 3 index.md rows (Phase = Design). Next: interview the user on the Open/[BLOCKER]
items, then finalise Scope and move up to Structure.
User flagged 01-concerns.md as hard to scan — the core job ("what still needs resolving")
was buried: 46 rows grouped by topic with Open/Closed interleaved and long resolution text
on closed items dominating. Reworked the page open-first:
- Centrepiece = the Unresolved list (27: 🔴 21 Open · 🟡 6 Partly), grouped by area with a terse "Needs (next step)" column (ask-client / design decision / Frederik-to-research).
Closed(19) demoted to an "audit trail" table at the bottom (kept for provenance/why).- Status markers 🔴/🟡/✅ for one-pass eye-filtering; tightened "At a glance" to a single verdict line (Discovery concludable; all unresolved = Strategy carry-forward = its seed).
- IDs unchanged (D-01–D-46) → per-doc pointers and the
index.mdrow still hold. - CLAUDE.md: added a durable "Layout = open-first" bullet to the Concerns-register rule so every future phase's register follows the same scannable shape.
Started the Strategy phase (Garrett Strategy plane) in docs/wiki/strategy/, mirroring
the discovery structure. Produced step-by-step with Frederik (analyse research → first
versions w/ confidence + rationale → Socratic interview → write-up).
- Pages:
00-strategy-brief(front door + locked decisions + confidence scheme),10-organisation-goals,20-personas,30-jobs-to-be-done,40-value-proposition,50-user-journey,01-concerns(Strategy register, IDsS-). - 5 locked strategic decisions (taken in-session): D-i G1/G2 resolved on the time axis (Kunstendecreet keystone = dated bar; newcomer = everyday front door; evenwaardig in tone+image kept as governing principle); D-ii one participant persona across journey stages (not 3); D-iii one qualitative proof ladder, three routed entries; D-iv invitation-forward positioning posture (G1 rigor below the line + deep proof-route as safeguard); D-v map 3 journeys (one per goal), note the rest.
- Confidence scheme: every element C: High/Med/Low + Basis + To-validate; the only validation gate is the client's reaction to the content-complete NL draft (no second meeting) + the incoming SharePoint material.
- Concerns register seeded: 10 strategy-bearing concerns (
S-01…S-10), 4 new in-session decisions (Partly, await gate) + 6 re-homed discovery carry-forwards (withD-pointers); Scope/Design carry-forwards deliberately left in the Discovery register, not dragged in. - Wiring:
index.md+7 rows (phase order: Discovery → Strategy → Design);CLAUDE.mdPhased-approach refreshed (Discovery concluded; Strategy & Design active), directory layout + strategy/design numbering + log-op enumeration added; forward link from12-client-kickoff. The separate Design thread (at Scope, blocked onDn-01/Dn-08awaiting Strategy) now has its input — Design must reconcile its Scope draft against this brief.
Ran the client interview (Frederik, in-thread) on the v0.1 Scope draft, then reconciled
Scope to the now-landed Strategy v1 (strategy/00–50, written by the separate thread).
Socratic per the UX Planning playbook (Claude proposes → user reacts → finalise).
- Interview decisions (locked): CRM / contact-management hard out — replaced by a light per-project application → screen → list → export → newsletter pipeline (no relational store, no follow-up, no on-the-spot artist entry). Ticketing/payments hard out. Media not a feed — existing photo/film archive + extra material reused site-wide as social proof (= the proof-ladder qualitative rung, D-iii); no participant uploads. Single all-in launch (no phased launch); the custom backstage tools are the first trim if time runs short (protected core = public legitimacy surface + application→newsletter). New project → edition content-model (overview aanbod → project page → participatory traject with named editions; each edition own page / name / cohort / typed dates rehearsal-class→show; simple creatie = single page). Application ≠ regular "in" participant; participant self-managed attendance under debate (not v1). Newsletter must leave Squarespace → select an ESP + migrate Squarespace contacts + embed its form; recurring-cost flag to the team.
20-scope.md→ v0.2 (rewrite). Every functional/content item now traces to Strategy v1 — G1–G5 · personas P1–P6,N · journeys J1/J2/J3 · proof-ladder D-iii · invitation-forward D-iv. 14 functional reqs Kano-classified with an explicit trim order; F7+F10 (quotes+media) merged into F3 (one proof ladder, capacity-safe); CRM/ticketing removed; content+lifecycle table; Won't-Have rewritten; flows = J1/J2/J3 + P4/P5/P6/N noted; project-type checkpoints updated (custom server form backend; agenda split; funder/partner logo-wall; edition mixed-flow to verify). Validation checklist: traceability Pass (was Partial); cut-pass Pass.glossary.md(new, cross-cutting, wiki-root). Provisional terminology index (aanbod / project / creatie / traject / editie / cohort / rehearsal / show / application vs. deelnemer / backstage / antenne …) with working labels + candidates + status; framed as a terminology card-sort for the next client session (suits the printed-card method).design/01-concerns.mdreconciled. 10 → 14 concerns: Closed Dn-01 (Strategy landed → Scope traces to it), Dn-05 (ticketing), Dn-06 (media); Partly Dn-07 (P6 light; attendance split out), Dn-09 (single-launch decided, date not pinned); Open Dn-02/03/04/08/10 + new Dn-11 (ESP choice/migration/cost, BLOCKER), Dn-12 (edition date-types & public flow — verify w/ team), Dn-13 (backstage attendance — verify), Dn-14 (terminology → glossary workshop). None silently Open; Design cannot conclude (Scope still DRAFT; gate = content-complete NL draft; Structure not started).- Wiring:
index.md— Design Plan / Concerns / Scope rows refreshed + new Glossary row (Cross-cutting). No git commit / nogit add(shared multi-thread tree).
User review of the Strategy brief flagged "the client refuses to subordinate / refuses a single primary audience" as stated too hard — it was dialogue, not a refusal, and noted a site legitimately carries several goals/audiences ("it doesn't, and probably can't, be that simple"). Wording-only pass, substance unchanged, applied for wiki consistency:
- Strategy:
00-strategy-brief(the spine reframed — multiplicity of goals/audiences is normal, two considerations shape it, the dated one is load-bearing by deadline not rank; D-i row),10-organisation-goals(G2 row, "how G1/G2 cohere", the resolution note). - Discovery (consistency — the strategy derived from these):
11-website-purpose(banner),12-client-kickoff(TL;DR §2, the §2 sub-heading, open-Q status line),01-concernsD-01,10-desk-research(banner + closed-by-kickoff line),22-offerings-audiences(open-Q1), and theindex.mdkickoff summary row. - Not touched: append-only
log.mdhistory (earlier entries keep their original wording by the append-only rule — this entry records the correction instead). - New behaviour-memory saved (
feedback-framing-restraint): don't dramatise client stances as hard refusals/binaries; attribute to the dialogue; multiplicity is fine. - The separate Design thread had already reconciled Scope v0.2 to Strategy v1; this is
a label softening only — its
D-i/D-ivtraces still hold.
Frederik walked the unresolved list and gave per-concern direction (voice notes) through the
website-engagement lens. Reconciled the register accordingly — no IDs renumbered, all
moves recorded with resolution + pointer (Frederik review 2026-05-19, with
→ 12-client-kickoff where the meeting was the substantive basis).
- 17 Closed: answered — D-11 (Sam = de-facto zakelijk leider), D-23 (free walk-in), D-37 (ticketing always via partner venues), D-26 (no donor/membership audience — grant/subsidy + project/consortium only), D-39 (accessibility = high/strict, all-ages, Frederik's call); out-of-website-scope — D-09 / D-12 / D-28 (won't-resolve), D-10 (small-team working model: Sam + Kristin, Seppe internal, not board-run), D-17 / D-21 / D-22 (no social feed / cart / dynamic media-recap), D-41 (domain price immaterial here); directional answer — D-05 (no booking automation → light "how the collaborative-funding constellation works" explainer; email entry kept), D-03 (de-emphasis agreed; folds into Vision/About, placement → design), D-36 (no full participant DB/CRM; lightweight backstage only; scoped in Strategy/Design), D-42 (newsletter+analytics free within Squarespace today → become separately-costed add-ons on the custom stack — recurring-cost watch-item).
- 8 refined (stay unresolved, now explicit Strategy/Design carry-forwards): D-13 (Ultima Vez — site heritage framing agreed: 16-yr history within UV → spun out, "their history, not went rogue"; remainder = Birds rights wording to clear with Ultima Vez), D-14 (funders-vs-partners classifiable from desk research, no client input; placement → skeleton), D-29 (network memberships — defer to design/skeleton), D-35 (Notion-as-source too vague to assess — needs an on-site co-working day; possible in-site admin alternative), D-33 (no fixed launch but expected during/just after summer 2026), D-38 (GDPR/minors only bites if the site has forms — design-in then), D-44 (antenne concentration vs spread = Leon's own decision, client-confirmed), D-45 (publishable impact figures — design/skeleton with client). D-24 / D-40 unchanged.
- Counts: 27 → 10 unresolved (🔴 2 Open · 🟡 8 Partly) · ✅ 19 → 36 Closed ·
46 total. Discovery still concludable; the 10 remain the seed for the Strategy/Design
registers. Added the review banner; rebuilt the Unresolved list + audit trail; fixed the
in-page anchor (
…-27→…-10).index.mdrow still accurate (no count in it). No git commit / nogit add(shared multi-thread tree).
User flagged the personas page as lightweight and asked to strengthen it without causing overlap with JTBD / value-prop / journey. Investigated all four + the raw sources; agreed two decisions with the user (ownership contract; labelled-field profile format).
- Anti-overlap ownership contract added as a one-line header on all four strategy
pages: 20 owns the person · 30 the job · 40 the promise · 50 the
sequence over time. Cross-link by stable ID (P1–P6, N); never restate.
"Needs from the site"deleted from personas (it was JTBD's job, duplicated). 20-personasrewritten to evidence-graded labelled-field profiles (context / trigger / motivation / anxiety / behaviour / representativeness / voice / evidence). Enriched now from the 793-line client transcript (line-cited) — confidently, since most personas don't need the survey: P2/P3/P5 are desk-ceiling (the survey can't reach a jury/programmer/press — stated, accepted); P1/P4 marked ⟶ survey will firm. Grading separates verbatim vs⚠️ -inference vs workshop-articulated (per [[feedback-framing-restraint]]).- Real participant/teacher voice folded in from the captured immutable mirror
docs/raw/current-site/pages/missie-visie-nl.md(the page the user pointed to): P1 gets real participant verbatim ("…I can be myself there and I meet people I would never have otherwise encountered."; FR "…être différent ensemble."); P4 gets a real leerkracht-deelnemer quote. Closes P1's voice gap; residual = the unfiltered voice- drop-off reasons (Leon-curation bias) — the survey's specific job.
- 30/40/50: ownership header only (they already cross-ref by ID — no persona-context
to trim).
S-07refined (personas now enriched; survey scoped to the unfiltered P1/P4 voice).index.mdpersonas row refreshed. - No git commit / no
git add(shared multi-thread tree — user commits).
To strengthen the thin Strategy artifacts, agreed (with the user) a prioritised desk-research bundle and ran 4 parallel research agents (research-only, isolated context): B1 Kunstendecreet structural-funding assessment framework + jury-advice landscape; B2 partner-org corpus + welfare/education gatekeeper decision-logic (P4); B3 press / recognition corpus (P5 + proof); A mining of already-held sources (current-site mirror, browser dossier, transcript 2nd pass).
- Saved per user instruction (raw + wiki):
- Raw (immutable):
docs/raw/research/desk-research-strategy-enrichment-2026-05-19.md— the 4 agent reports verbatim with all URLs/line-refs + a provenance header (created at user instruction; now read-only like other raw notes). - Wiki (synthesised):
docs/wiki/strategy/90-research-evidence-2026-05-19.md— evidence-graded distillation by persona/section + "how this feeds the artifacts" map + open follow-ups. Establishes the90= research-input tier for the Strategy phase (mirrors discovery's90); noted in00-strategy-brief(the numbering source-of-truth) andindex.md(+1 row).
- Raw (immutable):
- Headline findings: the Kunstendecreet participatie functie is defined and scored on 3 things (method-meerwaarde · process/aftercare/continuity · quality-evolution) and the decree itself names an org's own communication channels as proof — turns G1/P2 from inferred to rubric-grounded. Net-new: the mobiele dansstudio/bike = a bookable P3 offer with no digital surface; "antenne" = a constrained cross-sector cluster; citeable partner-voice quotes for P4; net-new EN/FR participant quotes for P1; Mariage has zero critic reviews (proof-ladder press-rung risk).
- Caveats recorded: 23–27 rubric ≠ 28–32 (Visienota not yet public — don't hard-wire aandachtspunten); analogue ≠ Leon (P4 single-trajectory depth); re-verify dynamoPROJECT.
- Next: synthesise into 20/30/40/50 (+ G1) and refine S-07/S-08 + add the Mariage-press
concern (task in progress). No git commit / no
git add(shared multi-thread tree).
Folded 90-research-evidence-2026-05-19 into
the Strategy artifacts (ownership contract preserved; evidence-graded; cite the 90 page
which carries granular sources).
- 20-personas: P2 rubric-grounded (Kunstendecreet participatie functie scored on method-meerwaarde · process/aftercare/continuity · quality-evolution; decree counts an org's own channels as proof; "16 not 5 years"); P3 +the bike (bookable, no digital surface) + Mariage-as-replicable-format + Kosmos/Birds; P4 antenne = constrained cross-sector cluster + institutional-not-artistic fear + partner-coordinator voice (Schoemaker/Dewin); P5 +press-angle + the open Mariage-press gap.
- 30-JTBD: P2 job = the rubric; P3 job +bike; new Forces section (push/pull/anxiety/habit incl. principled no-social → site absorbs the channel job); proof-job rungs now rubric-anchored + the Mariage-press caveat.
- 40-VP: RTBs hardened (P2 rubric-mapped; P3 bike/format; P4 partner-voice + institutional reassurance; P5 lineage-proxy + S-11).
- 50-journey: J2 future = deep proof-ladder read against the rubric; J3 +replicable format + bike-no-surface. 10-goals: G1 rubric-grounded.
- Concerns: S-07 (personas further enriched) + S-08 (rubric-anchored) refined; +S-11 (Mariage has no critic reviews → lineage-proxy; ask the team) +S-12 (research- freshness: 23–27≠28–32, re-verify dynamoPROJECT). Counts 10→12 (7 Open · 5 Partly).
- Mariage-press handling per the user: treated as open / ask-the-team (possible
missed press), not a baked-in proxy stance. index.md rows refreshed. No git
commit / no
git add(shared multi-thread tree — user commits).
Final enrichment pass: gave 30/40/50 the same structural depth the personas got, inside
the ownership contract (each page deepens only what it owns; cross-ref by ID; no
overlap), evidence-graded, citing the 90 research page.
- 30-JTBD → job profiles per persona: functional / emotional / social job · hired over what (the alternative/non-consumption) · done when (success signal — for P2 = the Kunstendecreet rubric) · dominant force. The global Forces section reframed as the system-level view (per-persona force now in each profile).
- 40-VP → promise profiles per persona: unique value · only-here differentiator (vs Ultima Vez/peers + Debateville; the decree-counts-the-site-as-proof lever) · RTB → concrete owned asset · register pair (same promise in institutional vs belonging words — the two-registers idea made concrete; linked from the rebalance section) · not promising (honest anti-scope).
- 50-journey → bounded staged arcs: J1/J2/J3 as Trigger→Land→Orient→★Decisive→Act→ After with what-happens&feels · current-friction · future-move(→VP link), plus the single make-or-break moment + entry/exit. Kept bounded (no service-blueprint); P4/P5 upgraded to a one-line "shape", still not arc-mapped (D-v / scope mandate).
- Concerns unchanged (structural deepening of the same evidence — S-07 already covers it);
index.md 30/40/50 rows refreshed. No git commit / no
git add(shared multi-thread tree — user commits).
Ran Phase 1 of the Notion image-mapping playbook ("catalogue what exists"). Leon has no
separate photo dump, so (per the user) the source set = the current-site mirror — the 85
image URLs in docs/raw/current-site/images.json. The
mirror only indexes URLs, so each was fetched from the Squarespace CDN at its largest
render (?format=2500w → WebP, long edge ≤ 2500 px), measured (sips), and viewed.
Applied the playbook exclusion criteria (no taste calls): 9 excluded — 6 /agenda
calendar screenshots + 3 third-party "Apartheid Free Zones" campaign banners (NL/FR/EN).
2 dropped as byte-identical duplicate downloads (074≡081, 063≡075). 74 accepted,
copied with kebab-case names into docs/raw/assets/: 70 photography/ (participatory
intergenerational dance — Atelier Leon, Mariage, à l'école, on Tour; ~10 photographers named
in filenames), 2 logos/ (low-res raster only posters/events/ (Mariage).
Per the user's two convention decisions: assets → docs/raw/assets/ (the layout's designated
bucket; the read-only rule binds the hand-curated research/, not this machine-organised
bucket); page filed the Leon way, not the playbook's flat image-map.md — as
design/90-image-map.md (a media-asset evidence appendix in the
90 research-input tier, mirroring strategy/90-…; plane files 20/30/40/50 stay clean).
The page carries the catalogue + excluded/dup tables + a gaps/"ask-the-client" list (no
brand kit, no team portraits, no venue/illustration, ~63/70 photos skew to /gallery+Mariage).
Concerns reconciled: Dn-10 (brand assets) gains an evidence pointer (current site has
only low-res raster, no vector); Dn-15 added (photo-archive reuse rights / credit
obligations uncatalogued — gates the photographic surface the Dn-06 social-proof decision
assumes). Register count 14→15 (Open 9→10). Phase 2 (per-slot map) deferred — it
needs Skeleton (40) image slots, which has not started; lands later as
design/91-image-map-new-site.md. Updated index.md (+image-map row, refreshed concerns
row). No git commit / no git add (shared multi-thread tree — user commits).
Concluded the Strategy phase (user-confirmed). The five artifacts + brief +
90-research-evidence + register are a complete, coherent, evidence-graded first version;
the Design thread is already consuming it.
- Conclusion gate (CLAUDE.md) satisfied: 12 unresolved (🔴 7 Open · 🟡 5 Partly), 0 silently Open — every S-01…S-12 carries an explicit disposition (validation-gate / ask-client / Scope-phase). Same pattern as Discovery's conclusion (carry-forwards, not unfinished work).
- Reconciled the register's "At a glance" from "not yet concludable" → ✅
concluded, with the explicit distinction "concluded" ≠ "client-validated" (the
content-complete-draft review + Kristin's P1/P4 survey are post-conclusion checkpoints,
not unfinished strategy work). Fixed the stale
…-10anchor →…-12. - Carry-forwards seed Scope: the unresolved S- rows + the Scope/Design Discovery carry-forwards feed the Scope phase (run in the Design thread, already at Scope and reconciled to Strategy v1).
- Wiring:
00-strategy-brief(+phase-status banner),index.md(concerns row),CLAUDE.md(Phased approach: Strategy → concluded). Open downstream item of record: S-11 (ask the team re possibly-missed Mariage press). No git commit / nogit add(shared multi-thread tree — user commits).
User asked for a decisive stab at the glossary: it was a list of too many candidate labels
with an open card-sort (a Dn-14 blocker). It shouldn't have been — the verbatim research
(live-site capture + kickoff) already contains Leon's own words for almost everything.
glossary.mdrewritten from "candidates + workshop card-sort" to an opinionated, evidence-cited lexicon. Every term carries Leon's own quote + source. New status scheme:proposed-strong(Leon's exact live word — e.g. "Previous editions:" on/mariage⇒ editie; creatie from kickoff §9; deelnemer/voorstelling/inschrijven/atelier from site verbatim) ·proposed·internal-only(frontstage/backstage, cohort, "Nope", application-pipeline — never site copy) ·→ Structure/→ Strategy.- Decisions made (no longer open): Mariage = the creatie (parent), each dated staging = an editie (closes the Scope F4 naming Q); the typed-date vocabulary = open atelier · repetitie · try-out · voorstelling (supplies Dn-12's naming half); group label = groep (site), cohort demoted to internal-only; the invented "rehearsal-class" umbrella dropped; "aanbod" rejected as a designer's word — the overview/root label is an IA/Structure decision, removed as a vocabulary blocker.
design/01-concerns.md: Dn-14 Open → Partly (proposed lexicon exists; only confirm-or-correct remains; not a blocker on the content-complete draft). Counts: Partly 2→3, Open 10→9. Dn-12 detail split (date-types settled · public-watch flow still Open). Prose + readiness table reconciled. Still none silently Open.- Wiring:
20-scope.md(framing line, Kern 3, F4 row, §4 line, Open-questions bullet — (gloss.) hedging dropped, lexicon adopted, F4 naming marked resolved);index.mdglossary row rewritten. No git commit / nogit add(shared multi-thread tree — user commits).
Reviewed the concluded + enriched Strategy (brief now ✅-concluded; 10 G1
rubric-grounded; 90-research-evidence appendix; +S-11/S-12) and the parallel
90-image-map ingest, then ran a second client interview and applied Scope v0.3.
- Impact assessment delivered first (talk-through before building): the enrichment changes Scope as content-spec sharpening + caveats, not a structural rework — the 14 F-items / creatie→editie model / no-CRM / single-launch spine all stand.
- Interview decisions (locked): (1) follow the Kunstendecreet participatie rubric loosely (S-12: 28–32 aandachtspunten not public — only the criteria structure is durable) and invisibly — the site reads as Leon's own story, never a jury checklist (new rubric-invisibility guardrail principle; the invisibility is the rebalance). (2) Press page → DECISION/conditional — Mariage has zero published critic reviews (S-11); a standalone "Pers" page only if substantial enough — check with the client; recognition (lineage-proxy + juried selection, no won prizes) folds into the proof ladder F3 regardless. (3) Photo credits/rights → deferred, per-asset where needed, not a Scope blocker (revises Dn-15's "gates the photographic surface"). (4) Donor/membership → Won't-Have v1 (audience question stays Strategy S-10). (5) Bookable surface = a contact request only — no booking section/paid-offers system (resolves S-05 for Design). (6) Validation gate now + Kristin's P1/P4 survey; F12 P4 path = Leon-initiated, partner-coordinator-framed, not an application/lead-gen; Mariage = replicable format corroborates F4.
20-scope.md→ v0.3 (rewrite). New "what changed v0.2→v0.3"; F2/F3 restructured to the rubric substance (method-meerwaarde · process/nazorg/continuity · quality+evolution) with the invisibility guardrail; F10 → DECISION; F11 = contact-request, S-05 resolved; donor Won't-Have; settled glossary lexicon adopted throughout (werking + creaties → traject/voortraject → editie/groep/deelnemer/toeschouwer/inschrijven; date-types open atelier·repetitie·try-out·voorstelling; "aanbod" is not a label → Structure); confidence summary + validation checklist + Open-questions refreshed.design/01-concerns.mdreconciled. 15 → 18 (5 Closed · 3 Partly · 10 Open): +Dn-16 (press substantial-enough → check client, ← S-11), +Dn-17 (donor/membership Won't-Have decided; audience Q stays Strategy S-10), +Dn-18 (booking=contact-request, ← S-05); Dn-04 rubric-anchored-but-loose-and-invisible; Dn-15 annotated deferred/non-blocking. None silently Open; Design still cannot conclude (gate = content-complete draft + Kristin survey).- Wiring:
index.mdConcerns + Scope rows → v0.3 / 18-concern counts. No git commit / nogit add(shared multi-thread tree — user commits).
User pushed back: the "opinionated proposed lexicon" leaned too much on the team's internal words and under-weighted the target audiences ("'creatie' isn't something they'd feel they can participate in"). Dispatched six parallel persona agents (P1 newcomer · P2 jury · P3 programmer · P4 partner-coordinator · P5 press/public · P6 internal) to debate every term. Unanimous, independent convergence:
- The method was circular. Grading a term
proposed-strongbecause "Leon already says it" sampled the current site — which is written in the subsidiedossiertaal the redesign exists to remove. Provenance ≠ audience fit. The earlier "not-a-blocker / confirm-or-correct" framing was an over-claim. - Fix = two layers. Layer A the internal content model (
creatie→editie→groep→ typed-dates) is correct and kept (CMS/backstage/IA; P6 disambiguation; P2 continuity evidence). Layer B the public surface label is chosen per register, not inherited — restoring Strategy's one substance, two registers that the old page silently collapsed. - Sharpest conflict —
editie: P3's "Previous editions" list is a speellijst (his single best booking signal); P1 reads "I missed it"; P5 "just a free show"; P6 the essential internal unit. Register-split, decided deliberately. creatie/traject/werkingfail P1/P4/P5 publicly (art-world / dossier register);voorstelling·deelnemer·publiek·atelier·typed-datesare the durable shared spine; internal-only fence (cohort/backstage/Nope/antenne) was correct.- Four
gapclusters the source-method could not surface (it never asked these audiences): process/decree (proces·toeleiding·nazorg·omkadering·continuïteit·duurzaam partnerschap), welfare (begeleid traject op maat·vrijblijvend·kennismaking), booking (productie/format·boekbare formule·technische fiche·coproductie·professional contact path), public-practical (the verbatim "gratis·zonder reservatie·datum·plaats·uur" triplet; "agenda" locked as anchor; a quotable press genre noun). glossary.mdrewritten to the two-layer model + per-register table + gaps. Dn-14 stays Partly but the remainder is substantial open design work (Layer B + gaps), carried into the content-complete draft & Structure — not a client formality (earlier over-claim corrected). Wiring:design/01-concerns.md(Dn-14 row + prose),index.mdglossary row,20-scope.md(framing line, Kern bullet, F4 conf, §4 line, Open-questions bullet, validation checklist — "lexicon settled" → "internal model settled, public labels per-register open"). No git commit / nogit add(shared multi-thread tree — user commits).
User feedback: the A/B (internal-model vs per-register public label) split is confusing in practice — "both of us in the frontend (the public site) and both of us in the backstage (the admin, and me in the code). Let's try to use the general terminology as much as possible." Frederik and the team work across both surfaces; a deliberately divergent vocabulary taxes the two people doing all the work. The persona debate's substance was right, but the structural remedy (two layers) was the wrong shape.
- User-steered tiebreaker (AskUserQuestion): "Plainest general word everywhere." One shared vocabulary, biased to the public, used identically in code, admin and site.
glossary.mdv3 — one shared vocabulary: project · editie · groep · deelnemer · publiek · voorstelling · inschrijving · open atelier · repetitie · try-out · atelier / Atelier Leon · mobiele dansstudio.creatie→**project** (the one consequential rename — general, understood by newcomer/partner/dev/admin; was the most P1/P4/P5- alienating word in the debate).werkingdropped as a label (recurring practices named individually: Atelier Leon · Leon op school · Leons White Page · Leon rond de tafel · Leon on tour).trajectdemoted to funder-page copy (not a system noun).toeschouwer→publiek. In-house jargon, never user-facing (small list, normal): cohort · frontstage/backstage · antenne · "Nope" · application pipeline · voortraject.- Debate substance preserved as page-level copy notes (P1 plain invite · P4 welfare framing · P2 proof content w/ traject/proces/nazorg/omkadering/continuïteit/duurzaam partnerschap · P3 booking content w/ productie/format/technische fiche/coproductie · P5 public-practical "gratis · zonder reservatie · datum · plaats · uur" + agenda anchor + a quotable press genre noun) — not a parallel naming system.
- Dn-14 stays Partly: vocabulary settled; remainder = ordinary content-complete- draft work + the IA root label at Structure. Over-claim of "Layer A settled / Layer B substantial-open" replaced with the simpler honest framing.
- Wiring:
20-scope.md~15 edits — framing line, Kern §3+§5, F4/F5/F7/F11 rows, P3 persona row, §4 row, content-types row, ROT row, technical line, journeys, open- questions bullet, validation checklist, link-to-next-plane — creatie→project, werking dropped, two-layer language removed;design/01-concerns.md(Dn-14 row + prose);index.mdGlossary + Scope rows. Memory note refined (the two-layer remedy itself was a misstep — prefer one ubiquitous vocab biased to the hardest public audience). No git commit / nogit add(shared multi-thread tree — user commits).
Cross-checked the Strategy register against the up-to-date Discovery register. Three Strategy concerns close because their Discovery anchor was already closed at the 2026-05-19 Frederik review:
- S-05 (paid offers / dedicated booking section appetite) → resolved via D-05: no booking automation, stays email-led; instead a light "how this collaborative-funding constellation works" explainer; no pricing detail. G3/J3 shape accordingly.
- S-06 (P6 / backstage scope boundary) → resolved via D-36: boundary holds; lightweight backstage only, no participant DB/CRM; re-examine only in Scope/Design if a site treatment genuinely depends on it.
- S-10 (individual-donor / membership audience) → resolved via D-26: none; funding is grant/subsidy + project-based; strategy stays grant + commission framed.
Counts: 12 → 9 unresolved (🔴 7 → 5 Open · 🟡 5 → 4 Partly) · ✅ 0 → 3 Closed.
Also fixed a stale anchor link (#unresolved--what-still-needs-resolving-27 →
-10) and lightly refreshed the parenthetical examples list of Scope/Design/Build
discovery carry-forwards (dropped items already closed in Discovery: governance,
staffing, accessibility, ticketing, AFZ placement, dynamic gallery; kept: Notion
feasibility, GDPR, network memberships, Birds rights wording, footer-partners
classification). No git commit / no git add (shared multi-thread tree — user commits).
Crystallised the Design Structure plane (30-structure.md) after a Socratic in-thread workshop with Frederik. The plane was run UX-Planning style: summarise what Scope/Strategy/Glossary already lock for IA, surface the genuinely-open forks, settle them iteratively, then produce the sitemap. Page-level layout (the home, the project-page) is deliberately deferred to Skeleton.
- Variant choice (audit trail). Three variants weighed: V1 full audience-first nav (Debateville pattern) → discarded (forces self-identification, rubric-visibility risk, fragments the work); V2 pure routed spine (content-first, all in-page routing) → discarded (cannot honour Glossary register-split for P3/P4/P2 on a shared page); V1B adopted — content-first primary nav + single audience-bridge (Samenwerken) whose children are intentional-action labels. Closest to Belgian art-org grammar, respects register-split where it matters, honours Kern 2 (invitation-forward home).
- The five top-level items: Dansateliers · Voorstellingen & projecten · Samenwerken · Agenda · Over Leon. Modal nav grammar named as a principle (some items by what, some by relation — each frame the one its audience naturally uses).
- Two load-bearing IA insights from the workshop:
- Trajectory, not product. Leon's offer is process, not catalogue. The bookable surfaces all use trajectory verbs (opzetten · uitnodigen · doen). There is no "book a finished show" path because Leon's economic model doesn't include one. Mariage is commissioned, not booked — so it routes through Participatief dansproject opzetten, not a separate "Een voorstelling programmeren" child (considered and dropped). This is a real Scope F11 amendment noted as a pending Scope reconciliation.
- Agenda has a dual job. With the team-confirmed "LWP + Leon rond de tafel are internal" combined with the user's "show everything by default + simple filters," the unfiltered Agenda becomes a visible proof-density signal for funders/jury (the rubric's continuïteit · process · evolution criteria visibly evidenced) while filters do the utility job for participants/freelancers. Same surface, two jobs, no rubric-language.
- Samenwerken's children = intentional-action labels (user direction): Participatief dansproject opzetten · Mobiele dansstudio uitnodigen · Vrijwilligerswerk of stage doen. Three trajectory verbs, register-clear children. P4 + P3 commissioners both land on opzetten (Mariage-shape, Kosmos-shape, Leon-op-school instances); the bike has its own child; vrijwilligers/stagiairs as a new audience surface the team flagged at the workshop (deserves a section — they receive recurring email enquiries).
- Recurring practices distribute by audience-fit (team-confirmed: LWP + Leon rond de tafel are internal). No "werking" umbrella, no overview root: Atelier Leon → Dansateliers; Leon op school → Samenwerken (as a concrete instance under opzetten); LWP + Leon rond de tafel → Agenda only (no dedicated landing page; event-label is the entire public surface — small content task to add a 1-line public explainer); Leon on tour → Agenda dates + Boekingen track-record. Resolves the IA root-label question Scope/Glossary deferred.
- Over Leon → slim (user direction: "what the team can pull off"). Sub-pages: Missie &
visie · Impact · Team · Historiek · Contact. Jaarverslag dropped (team doesn't
produce one). Standalone Pers page dropped (Dn-16 closes Won't-Have v1 — user: "Pers
gone for now"; recognition folds into Historiek). The deep proof rung (Scope F2/F3)
becomes distributed: a slim Impact page (method + proces/nazorg + qualitative evidence
- "In cijfers" auto-pulled from Agenda data — no manual %-dashboard) + per-project trajectory documentation on V&P pages + lineage on Historiek + the funder/partner wall in the site-wide footer + the Agenda's density signal. No standalone "for funders" page; rubric-invisibility strengthens.
- The label settled at Structure (was deferred by Scope): Voorstellingen & projecten (user choice; rejected Creaties because Glossary v3 makes "creatie" P1-bouncing — kept only as informal in-house speech).
- Persona/journey routing checked: J1 (P1) → Dansateliers ✓; J2 (P2) → Over Leon → Impact ✓ (load-bearing journey to test at validation); J3 (P3) → Samenwerken → opzetten / uitnodigen ✓; P4 → Samenwerken → opzetten ✓; P5 → Agenda + Historiek ✓; N → no path ✓; vrijwilliger/stagiair (new) → Samenwerken → doen (surface in place, persona pending).
- Concerns register reconciled (18 → 19):
- Closed: Dn-16 (Pers Won't-Have v1).
- Open → Partly: Dn-12 (editie flow shape resolved structurally — inschrijving + deelnemer practical-info on editie page; publiek via Agenda; team-verify remainder).
- NEW Open: Dn-19 vrijwilligers/stagiairs as a site audience — needs persona + JTBD + journey from Strategy thread; team to share email corpus as raw research input; a new S- concern to open on next Strategy sync.
- Pending Scope reconciliations recorded (not new Dn- IDs): Scope Kern 3 (no overview root; practices distribute), F10 (Pers → Won't-Have), F11 (trajectory-not-product amendment), F2/F3 (distributed proof). Touched on next Scope ingest.
- Counts: ✅ 5 → 6 · 🟡 3 → 4 · 🔴 10 → 9 · total 18 → 19. None silently Open.
- Wiring:
docs/wiki/design/30-structure.md(new);design/01-concerns.md(counts + Dn-12/14/16 rows + Dn-19 added + carry-forward note + new "Scope reconciliations pending" section);design/00-design-plan.md(plane status DRAFT 2026-05-20 + Skeleton-priority note);index.md(+1 row for 30-structure; Scope row unchanged). No git commit / nogit add(shared multi-thread tree — user commits). - Next: Skeleton (Plane 4). Highest-priority skeletons = the home (the 5-tension interaction-design piece Structure deferred) and the Voorstellingen & projecten project page (using Mariage as the test case).
[2026-05-20] design | Structure v0.2 — 4-item nav restructure + terse rewrite for downstream LLM use
Iterated Structure v0.1 → v0.2 (30-structure.md) after a
follow-on workshop and verification against the current /what-we-do mirror. The IA
restructure resolves a v0.1 gap (Leon op school + Leon on tour buried) and gives the file a
spec shape for downstream LLM consumption (Laravel scaffolding · Skeleton wireframes ·
per-section UX planning).
- Top-level merged: Dansateliers + Voorstellingen & projecten → Dansateliers & performances. 5 → 4 top-level items (Dansateliers & performances · Samenwerken · Agenda · Over Leon).
- Naming pattern named as an IA rule: Generic-first, brand-second —
<category>: <Leon's brand name>. Children: Open dansateliers: Atelier Leon · Ateliers op school: Leon op school · Participatieve performances: Mariage · Mobiele dansstudio. Visitor reads what it is + what Leon calls it in one scan. - Verified vs. /what-we-do mirror: the current site describes "Leon on tour" as the umbrella for participatieve performances ("…a large-scale performance like Mariage"), not as a peer recurring practice. Glossary v3 listed it as a peer — that was wrong. Lint applied: "Leon on tour" dropped from the recurring-practices line; Participatieve performances is the public category. Apartheid Free Zones placement clarified in the same glossary entry (→ Over Leon → Missie & visie, per Strategy S-03).
- Birds → Historiek (lineage). It's an Ultima Vez production Leon tour-directs since 2023 — best surfaced as the "16 not 5 years" trust signal (G1/P2), not on the same shelf as Mariage. Kosmos 2027 added under Participatieve performances only when ready (no advance placeholder).
- Mobiele dansstudio has its canonical page under Dansateliers & performances; Samenwerken → uitnodigen becomes an intake/routing page that links to it (same pattern as opzetten linking to Mariage / Leon op school / Kosmos in the container).
- Content model added to the doc (entities for Laravel scaffolding): Project (hasMany Editie) · Editie · RecurringPractice · Event · Page · Partner/Funder · Inschrijving. Public-vs-internal recurring-practice distinction made explicit (LWP + Leon rond de tafel = internal-only, no landing page, events only on Agenda).
- Terse rewrite (per user request — "less verbose, less reasoning, file used for downstream decisions"): file dropped from ~440 → ~190 lines. Cut: variant audit-trail (V1 / V2 / V1B history — now in this log entry), trade-off prose, "honest cost" framing, long IA-principle explanations. Kept: sitemap, IA principles as one-line rules, content model, per-section content tables, persona routing, Scope reconciliations, open Skeleton items, concerns moves, validation gate.
- Concerns unchanged at v0.2 (still 19; Dn-12 Partly, Dn-16 Closed, Dn-19 Open carried from v0.1).
- Wiring:
30-structure.md(rewrite);glossary.md(lint: recurring-practices row + AFZ placement note);01-concerns.md(status prose: Structure v0.1 → v0.2);00-design-plan.md(plane row → v0.2 + new summary);index.md(Structure row refreshed with v0.2 spec summary). No git commit / nogit add(shared multi-thread tree — user commits). - Next: Skeleton (Plane 4). The doc is now in shape for parallel-dispatch per-section Skeleton work (the home + each top-level branch can be picked up independently).
Decoupled Dn-03: built a server-handled contact form (POST /contact → ContactController →
ContactRequestMail, honeypot, no-JS PRG, email-only/no store) on a legitimate-interest basis.
Promoted SP-11 to partials/contact-form.blade.php; added /privacybeleid stub + footer link;
added form-control styles + danger/success tokens. Live on uitnodigen + contact page.
Dn-03 Open [BLOCKER] → Partly (inschrijving/minors + newsletter/ESP remain blocked).
Spec: docs/superpowers/specs/2026-05-28-contact-form-design.md.
Replaced the /privacybeleid placeholder with real NL AVG copy for the one data flow (the
contact form): controller identity, purpose, lawful basis (6.1.f/6.1.b), recipients,
retention, rights, and the GBA complaint route. Mail provider confirmed = Resend (US) →
§ "Met wie we ze delen" discloses the US transfer under EU-VS DPF + SCC's. No cookie banner
(one strictly-necessary functional cookie, disclosed). Added internal Art. 30 register
(gitignored) with a confirm-with-Leon checklist. Feature test (PrivacyPageTest) pins the
mandatory disclosures. Dn-03 stays Partly (inschrijving/minors + newsletter/ESP remain blocked).
Spec: docs/superpowers/specs/2026-05-28-privacy-page-design.md ·
Plan: docs/superpowers/plans/2026-05-28-privacy-page.md.
Added a 7th kenmerk + 8th checklist item to identity/10-tone-of-voice.md: write from the reader's intent, don't reference the site's own organisation ("daar hoort een eigen pagina bij", "in de sectie hieronder", "op onze website vind je") when you can just name the reader's action. Surfaced by a contact-page copy fix. CLAUDE.md "7-point" → "8-point" checklist in both citations.
Fixed the contact-page Leaflet map: corrected coords to Osseghemstraat 53 (50.8552, 4.3201,
verified via Nominatim — old coords ~700 m off), zoom 16 → 15, and turned the location label into
a permanent grayscale tooltip (was click-only popup). Made the "open atelier" block dynamic — it
now reads upcoming public open_atelier Events (limit 3, SP-07 date-row, agenda fallback) instead
of hardcoded weekly lines; no new model (reuses Event, same source as Agenda). 40-skeleton P-18
row: Wire 🟠→🟢, Back 🟠→🟢, Assets 🔴→⚪ (no assets needed); OSM-coords gap closed. Roll-up updated.
[2026-05-28] build | SP-08 Agenda list revived — extracted the duplicated agenda strip into one partial
The "Agenda preview strip" was deprecated in favour of using SP-07 date-row ×N directly — but the
inline skeleton (empty-state → bordered list → the Event→date-row mapping → trailing link) had
duplicated across four views (home §4, atelier-leon §4, contact §3, mariage-editie §6), so the
date format + venue ?? '—' fallback lived in four places. Built partials/agenda-list.blade.php
as a list-only @include partial (props: events, href closure, emptyText, linkLabel?, linkHref?);
each caller keeps its own query + heading. Refactored all four call sites; verified all render 200
with rows + empty states + correct trailing links (mariage keeps its bespoke "→ Naar Mariage" empty
link via the optional-link escape hatch). Minor intentional change: the "see all" link now renders
in both states (was inline in the empty sentence on atelier/contact); contact margin mt-4→mt-6. No
page-row stage changes (pure extraction). Docs: 41-patterns SP-08 row + new spec section + counts
(14/14, none 🔴); 40-skeleton SP-08 row + roll-up (v0.6); Dn-22 updated. Spec:
docs/superpowers/specs/2026-05-28-agenda-list-partial-design.md.
[2026-05-28] build | Mariage editions corrected to real data — fictional cities replaced, no stage change
The seeded edities (P-05/P-06) were fictional strawman (Brussel, Antwerpen, Rotterdam, Gent, Marseille, Luik). Replaced with the 6 real Mariage editions from the current-site mirror (docs/raw/current-site/pages/mariage.md "Previous editions"): MolenFest Molenbeek 2024 (21.09, première) + Week van de Verbeelding Gaasbeek (02.11.2024) · MolenFest Molenbeek 2025 (06.09) + Winterfeest GC De Platoo Koekelberg (19.12.2025) · Cultureghem Anderlecht (10.04.2026) + Volt FESTIVAL BRONKS Brussel (26.04.2026). Source typo noted: the page lists "26.04.2025" for the BRONKS show but the doe-mee page confirms 2026. Added one invented future editie (molenbeek-2026, MolenFest 06.09.2026, open call live) so the SP-10 sign-up flow is testable. EditieSeeder rewritten (idempotent prune) + EventSeeder voorstellingen retied to the real slugs/dates; mariage.blade lede + intro, open-call-band, historiek timeline, mariage-editie residency wording, and EditieForm example slug updated to match. Conceptual note: Mariage is a recurring participatory festival performance, not a city residency — residency fields (stadgenoot, groep_*, quote) left null. Verified: 7 edities, molenbeek-2026 = aankomend + open call, others afgelopen, each with 1 voorstelling; project + open editie pages render (signup form live). No stage change (Conf held at 3 per Frederik; editions sourced but per-editie prose still team-supplied); Top gaps + roll-up refreshed for P-05/P-06.
[2026-05-28] build | Event data model — Phase 1: Venue + Atelier models (Atelier Leon page now dynamic)
First slice of the full-normalization spec (spec ·
plan). New Venue model
(naam/gebied/adres + nullable lat/lng) and Atelier model (type: open|school, standing venue +
day/time; scopes open/school/active/ordered; dayLabel/timeRange/displayName) with an AtelierType
enum. events gains nullable atelier_id + venue_id FKs (additive — the legacy venue string
and the practice/project/editie slugs are untouched); Event gets an atelier() relation + a
forAtelierType scope. Seeders: VenueSeeder + AtelierSeeder (idempotent, wired into
DatabaseSeeder), EventSeeder populates the FKs. The Atelier Leon §4 "Waar en wanneer" block now
renders from Atelier::open() (verified live — identical to the old hardcode) and "Eerstvolgende"
from Event::forAtelierType(open). 6 commits on main; full suite green bar one pre-existing
unrelated failure. 40-skeleton P-03 Back ❓→🟢 (Wire held 🟠 per the self-promote gate). The
Event::venue() relation was deliberately NOT added (collides with the venue string column) —
deferred to Phase 2 along with the Project model + Editie→Edition rename + slug→FK cutover.
[2026-05-29] build | Event data model — Phase 2 complete: Project model + Editie→Edition + slug→FK cutover
Concludes the full-normalization spec (phase-2 plan).
New Project model; Editie→Edition (class/table editions/Filament EditionResource; the NL
label, route name, {editie} param + view file stay Dutch). FKs editions.project_id + events.edition_id;
repetities now attach to an editie; events.venue→venue_name + Event::venue() (+ venueLabel() fallback);
a school Atelier (nullable weekly-slot fields) parents klas events. agenda/home/mariage read events via
relationships (forProject → edition.project); the practice_slug/project_slug/editie_slug columns
(+ editions.project_slug) were dropped. An Event saving-guard enforces type↔parent (atelier | edition |
none). Verified: migrate:fresh --seed clean (14 events, no guard rejection), agenda + mariage + editie pages
render 200, dashboard no drift; suite green bar one pre-existing unrelated failure (EditionModelTest 7-vs-6).
Executed subagent-driven on main (commits 26f3a15…625b0b3), per the agreed "commit full coherent set"
strategy — bundling in-flight parallel inschrijving/copy work in the touched files. Concerns register left
untouched (parallel-hot); the model-normalization item can be marked concluded on the next lint.