feat(deck): mycelium + gallery reflect the 4-entity model

Mycelium flowers are now the three experiences (SolLunar indigo, Festivals
rose, Chateau clay) and the underground is named Archipelago, the shared
backbone. Gallery City/Farm/Festival sections repoint to the matching
entities and accents.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Patrick Mulligan 2026-07-31 18:06:44 +02:00
commit 10b3551668
3 changed files with 28 additions and 27 deletions

View file

@ -2,11 +2,11 @@
/** /**
* The core metaphor, as an animated SVG. * The core metaphor, as an animated SVG.
* *
* Underground the mycelium = the shared core stack / custom software. * Underground Archipelago = the shared backbone / custom software.
* Unseen, always working, connects every entity. * Unseen, always working, connects every entity (the mycelium).
* Flowers the three entities people actually experience: * Flowers the three experiences people actually engage with:
* Archipelago (city center) a permanent bloom * SolLunar Punk Society (city center) a permanent bloom
* SolLunar Society (pop-up fest.) ephemeral cluster * Pop-up Festivals (travelling) ephemeral cluster
* Chateau du Faune (farm center) a permanent bloom * Chateau du Faune (farm center) a permanent bloom
* Ghost flowers once the mycelium runs, new locations & festivals sprout * Ghost flowers once the mycelium runs, new locations & festivals sprout
* cheaply, anywhere in the world. * cheaply, anywhere in the world.
@ -72,14 +72,15 @@ function thread([a, b]: [number, number], i: number) {
return `M ${ax} ${ay} Q ${mx} ${my} ${bx} ${by}` return `M ${ax} ${ay} Q ${mx} ${my} ${bx} ${by}`
} }
const arch = entityById('archipelago') const sol = entityById('sollunar') // city
const sol = entityById('solunar') const fest = entityById('festivals') // travelling
const cha = entityById('chateau') const cha = entityById('chateau') // farm
// surface flowers: three entities + two faint "future" ones // surface flowers: the three experiences + two faint "future" ones.
// (Archipelago is the mycelium itself the network below, not a flower.)
const flowers = [ const flowers = [
{ x: 230, kind: 'bloom', color: 'var(--color-pine-400)', name: arch.name, tag: arch.role }, { x: 230, kind: 'bloom', color: 'var(--color-indigo-400)', name: sol.name, tag: sol.role },
{ x: 500, kind: 'festival', color: 'var(--color-indigo-400)', name: sol.name, tag: sol.role }, { x: 500, kind: 'festival', color: 'var(--color-rose-400)', name: fest.name, tag: fest.role },
{ x: 770, kind: 'bloom', color: 'var(--color-clay-400)', name: cha.name, tag: cha.role }, { x: 770, kind: 'bloom', color: 'var(--color-clay-400)', name: cha.name, tag: cha.role },
{ x: 100, kind: 'ghost' }, { x: 100, kind: 'ghost' },
{ x: 900, kind: 'ghost' }, { x: 900, kind: 'ghost' },
@ -274,15 +275,15 @@ const festivalCaps = [
<!-- captions --> <!-- captions -->
<text x="500" y="34" text-anchor="middle" class="myc-zone">ABOVE GROUND · WHAT PEOPLE EXPERIENCE</text> <text x="500" y="34" text-anchor="middle" class="myc-zone">ABOVE GROUND · WHAT PEOPLE EXPERIENCE</text>
<text x="500" y="588" text-anchor="middle" class="myc-zone">UNDERGROUND · THE SHARED CORE STACK THEY NEVER SEE</text> <text x="500" y="588" text-anchor="middle" class="myc-zone">ARCHIPELAGO · THE SHARED BACKBONE BENEATH EVERY NODE</text>
</svg> </svg>
<div class="mt-6 grid gap-4 text-sm sm:grid-cols-2"> <div class="mt-6 grid gap-4 text-sm sm:grid-cols-2">
<div class="flex items-start gap-3"> <div class="flex items-start gap-3">
<span class="mt-0.5 text-pine-300"><Icon name="Layers" class="size-5" /></span> <span class="mt-0.5 text-pine-300"><Icon name="Layers" class="size-5" /></span>
<p class="text-sand-dim"> <p class="text-sand-dim">
<span class="font-medium text-sand">The mycelium is the product.</span> <span class="font-medium text-sand">Archipelago is the mycelium.</span>
One core stack runs unseen beneath every entity members feel it, they dont see it. One shared backbone runs unseen beneath every entity members feel it, they dont see it.
</p> </p>
</div> </div>
<div class="flex items-start gap-3"> <div class="flex items-start gap-3">

View file

@ -4,9 +4,9 @@
* Drop image files into these folders and they appear in the deck gallery * Drop image files into these folders and they appear in the deck gallery
* automatically no code changes, no manifest to edit: * automatically no code changes, no manifest to edit:
* *
* src/deck/gallery/city/ City (Archipelago) * src/deck/gallery/city/ City (SolLunar Punk Society)
* src/deck/gallery/farm/ Farm (Chateau du Faune) * src/deck/gallery/farm/ Farm (Chateau du Faune)
* src/deck/gallery/festival/ Festival (SolLunar Society) * src/deck/gallery/festival/ Festival (Pop-up Festivals)
* *
* Supported: jpg jpeg png webp avif gif svg. Images show sorted by filename, * Supported: jpg jpeg png webp avif gif svg. Images show sorted by filename,
* so prefix with 01-, 02-, to control order. The seeded *-placeholder.svg * so prefix with 01-, 02-, to control order. The seeded *-placeholder.svg
@ -58,8 +58,8 @@ export const gallerySections: GallerySection[] = [
{ {
id: 'city', id: 'city',
label: 'City', label: 'City',
entityName: entityById('archipelago').name, entityName: entityById('sollunar').name,
accent: 'pine', accent: 'indigo',
folder: 'src/deck/gallery/city/', folder: 'src/deck/gallery/city/',
images: toImages(city), images: toImages(city),
}, },
@ -74,8 +74,8 @@ export const gallerySections: GallerySection[] = [
{ {
id: 'festival', id: 'festival',
label: 'Festival', label: 'Festival',
entityName: entityById('solunar').name, entityName: entityById('festivals').name,
accent: 'indigo', accent: 'rose',
folder: 'src/deck/gallery/festival/', folder: 'src/deck/gallery/festival/',
images: toImages(festival), images: toImages(festival),
}, },

View file

@ -4,10 +4,10 @@ Each subfolder feeds one section of the Gallery slide. **Drop image files in and
they appear automatically** — no code to touch. they appear automatically** — no code to touch.
| Folder | Section | Entity | | Folder | Section | Entity |
| ----------- | -------- | ----------------- | | ----------- | -------- | --------------------- |
| `city/` | City | Archipelago | | `city/` | City | SolLunar Punk Society |
| `farm/` | Farm | Chateau du Faune | | `farm/` | Farm | Chateau du Faune |
| `festival/` | Festival | SolLunar Society | | `festival/` | Festival | Pop-up Festivals |
- Supported formats: `jpg` `jpeg` `png` `webp` `avif` `gif` `svg`. - Supported formats: `jpg` `jpeg` `png` `webp` `avif` `gif` `svg`.
- Images display **sorted by filename** — prefix `01-`, `02-`, … to order them. - Images display **sorted by filename** — prefix `01-`, `02-`, … to order them.