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,12 +2,12 @@
/**
* The core metaphor, as an animated SVG.
*
* Underground the mycelium = the shared core stack / custom software.
* Unseen, always working, connects every entity.
* Flowers the three entities people actually experience:
* Archipelago (city center) a permanent bloom
* SolLunar Society (pop-up fest.) ephemeral cluster
* Chateau du Faune (farm center) a permanent bloom
* Underground Archipelago = the shared backbone / custom software.
* Unseen, always working, connects every entity (the mycelium).
* Flowers the three experiences people actually engage with:
* SolLunar Punk Society (city center) a permanent bloom
* Pop-up Festivals (travelling) ephemeral cluster
* Chateau du Faune (farm center) a permanent bloom
* Ghost flowers once the mycelium runs, new locations & festivals sprout
* 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}`
}
const arch = entityById('archipelago')
const sol = entityById('solunar')
const cha = entityById('chateau')
const sol = entityById('sollunar') // city
const fest = entityById('festivals') // travelling
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 = [
{ x: 230, kind: 'bloom', color: 'var(--color-pine-400)', name: arch.name, tag: arch.role },
{ x: 500, kind: 'festival', color: 'var(--color-indigo-400)', name: sol.name, tag: sol.role },
{ x: 230, kind: 'bloom', 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: 100, kind: 'ghost' },
{ x: 900, kind: 'ghost' },
@ -274,15 +275,15 @@ const festivalCaps = [
<!-- captions -->
<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>
<div class="mt-6 grid gap-4 text-sm sm:grid-cols-2">
<div class="flex items-start gap-3">
<span class="mt-0.5 text-pine-300"><Icon name="Layers" class="size-5" /></span>
<p class="text-sand-dim">
<span class="font-medium text-sand">The mycelium is the product.</span>
One core stack runs unseen beneath every entity members feel it, they dont see it.
<span class="font-medium text-sand">Archipelago is the mycelium.</span>
One shared backbone runs unseen beneath every entity members feel it, they dont see it.
</p>
</div>
<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
* automatically no code changes, no manifest to edit:
*
* src/deck/gallery/city/ City (Archipelago)
* src/deck/gallery/farm/ Farm (Chateau du Faune)
* src/deck/gallery/festival/ Festival (SolLunar Society)
* src/deck/gallery/city/ City (SolLunar Punk Society)
* src/deck/gallery/farm/ Farm (Chateau du Faune)
* src/deck/gallery/festival/ Festival (Pop-up Festivals)
*
* 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
@ -58,8 +58,8 @@ export const gallerySections: GallerySection[] = [
{
id: 'city',
label: 'City',
entityName: entityById('archipelago').name,
accent: 'pine',
entityName: entityById('sollunar').name,
accent: 'indigo',
folder: 'src/deck/gallery/city/',
images: toImages(city),
},
@ -74,8 +74,8 @@ export const gallerySections: GallerySection[] = [
{
id: 'festival',
label: 'Festival',
entityName: entityById('solunar').name,
accent: 'indigo',
entityName: entityById('festivals').name,
accent: 'rose',
folder: 'src/deck/gallery/festival/',
images: toImages(festival),
},

View file

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