refactor(deck): rename Archipelago → Lab 484 everywhere

Use the real name: the backbone/brand is Lab 484 (the tech co & 45%
operating partner). Replaces all display text, the internal entity id
('archipelago' → 'lab484'), the page title, and the style.css comment.
Fixes the phrasings the rename made redundant (e.g. "the Lab 484 backbone"
under the Lab 484 wordmark → "shared, open infrastructure"; drops the
"(Lab 484)" qualifier on Lab 484's own responsibilities).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Patrick Mulligan 2026-07-31 23:03:56 +02:00
commit 4eb7e88ea5
10 changed files with 39 additions and 39 deletions

View file

@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Archipelago — Investment Prospectus</title>
<title>Lab 484 — Investment Prospectus</title>
</head>
<body>
<div id="app"></div>

View file

@ -32,7 +32,7 @@ const slides = [
{ id: 'title', label: 'Title', component: TitleSlide },
{ id: 'vision', label: 'Vision', component: VisionSlide },
{ id: 'network', label: 'The network', component: NetworkSlide },
{ id: 'archipelago', label: 'Archipelago', component: TechSlide },
{ id: 'lab484', label: 'Lab 484', component: TechSlide },
{ id: 'entities', label: 'Three experiences', component: EntitiesSlide },
{ id: 'sollunar', label: 'SolLunar Society', component: SolLunarSlide },
{ id: 'partnership', label: 'Ownership', component: PartnershipSlide },

View file

@ -69,7 +69,7 @@ const a = props.entity.accent
</div>
<div class="flex items-center gap-2 rounded-2xl border border-line bg-surface px-4 py-3 text-xs text-fg-muted">
<Icon name="Layers" class="size-4 text-amber" />
Runs on Archipelago — same membership, kiosk &amp; app as every node.
Runs on Lab 484 — same membership, kiosk &amp; app as every node.
</div>
</div>
</div>

View file

@ -2,7 +2,7 @@
/**
* The core metaphor, as an animated SVG.
*
* Underground → Archipelago = the shared backbone / custom software.
* Underground → Lab 484 = 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
@ -21,7 +21,7 @@ const GROUND = 300
// underground mycelium nodes (below the ground line)
const nodes: [number, number][] = [
[230, 340], // root · Archipelago
[230, 340], // root · Lab 484
[500, 335], // root · SolLunar
[770, 340], // root · Chateau
[100, 340], // root · ghost
@ -77,7 +77,7 @@ const fest = entityById('festivals') // travelling
const cha = entityById('chateau') // farm
// surface flowers: the three experiences + two faint "future" ones.
// (Archipelago is the mycelium itself — the network below, not a flower.)
// (Lab 484 is the mycelium itself — the network below, not a flower.)
const flowers = [
{ x: 230, kind: 'bloom', color: 'var(--color-indigo)', name: sol.name, tag: sol.role },
{ x: 500, kind: 'festival', color: 'var(--color-rose)', name: fest.name, tag: fest.role },
@ -275,14 +275,14 @@ 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">ARCHIPELAGO · THE SHARED BACKBONE BENEATH EVERY NODE</text>
<text x="500" y="588" text-anchor="middle" class="myc-zone">LAB 484 · 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"><Icon name="Layers" class="size-5" /></span>
<p class="text-fg-muted">
<span class="font-medium text-fg">Archipelago is the mycelium.</span>
<span class="font-medium text-fg">Lab 484 is the mycelium.</span>
One shared backbone runs unseen beneath every entity — members feel it, they don’t see it.
</p>
</div>

View file

@ -1,15 +1,15 @@
/**
* ARCHIPELAGO — pitch deck content & figures.
* LAB 484 — pitch deck content & figures.
*
* Single source of truth for the deck — no slide hard-codes a number or name.
*
* The financials are REAL, from SolLunarSociety.md, and belong exclusively to
* the first node — SolLunar Society (Austin). Archipelago (Lab 484), Pop-up
* the first node — SolLunar Society (Austin). Lab 484, Pop-up
* Festivals and Chateau du Faune are narrative/vision only and have no
* standalone numbers. P&L totals are recomputed from line items; the doc's
* own summary totals didn't reconcile (kept in `pnlDocSummary`).
*
* Archipelago is the shared backbone — open hardware + sovereign software (the
* Lab 484 is the shared backbone — open hardware + sovereign software (the
* "mycelium"). Three surface entities run on top of it:
* • SolLunar Society — city members' club, Austin (the funded first node)
* • Pop-up Festivals — travelling gatherings (e.g. Solarpunk Summit)
@ -21,12 +21,12 @@
export const PLACEHOLDER = true
export const brand = {
name: 'Archipelago',
short: 'Archipelago',
// a connected network of islands — one backbone, many places.
name: 'Lab 484',
short: 'Lab 484',
// Lab 484 — the tech co / shared backbone (also the 45% operating partner).
tagline: 'One network. Three ways to experience it.',
subtagline:
'A sovereign network on the Archipelago backbone. The first node — SolLunar Society, a members’ club in Austin — is live, modeled and raising now; the festival and the farm are next.',
'A sovereign network on shared, open infrastructure. The first node — SolLunar Society, a members’ club in Austin — is live, modeled and raising now; the festival and the farm are next.',
firstNode: 'SolLunar Society · Austin, TX',
contactEmail: 'invest@sollunar.example', // PLACEHOLDER
// Seam for later: an LNbits instance + the founder's nostr npub power the
@ -65,7 +65,7 @@ export type Entity = {
}
/**
* The entities. Archipelago is the backbone; the other three are the
* The entities. Lab 484 is the backbone; the other three are the
* experiences that run on it. PLACEHOLDER names & details.
*/
export const entities: Entity[] = [
@ -77,7 +77,7 @@ export const entities: Entity[] = [
accent: 'indigo',
layer: 'surface',
blurb:
'The first node and the one we’re raising for: a members’ club in Austin where sovereignty-minded community — tenants, events, memberships and regenerative living — comes together year-round on the Archipelago stack.',
'The first node and the one we’re raising for: a members’ club in Austin where sovereignty-minded community — tenants, events, memberships and regenerative living — comes together year-round on the Lab 484 stack.',
traits: [
'Live, financially-modeled first node (real P&L)',
'Five founding tenants + a three-tier membership',
@ -125,8 +125,8 @@ export const entities: Entity[] = [
icon: 'Trees',
},
{
id: 'archipelago',
name: 'Archipelago',
id: 'lab484',
name: 'Lab 484',
role: 'Shared backbone',
kind: 'Open hardware & sovereign software',
accent: 'pine',
@ -169,7 +169,7 @@ export const userEcosystem = [
icon: 'Zap',
},
{
title: 'The Archipelago app',
title: 'The Lab 484 app',
body: 'Book spaces, buy tickets, find events and manage membership from one self-hosted app.',
icon: 'Sparkles',
},
@ -185,7 +185,7 @@ export const userEcosystem = [
},
]
/** The Archipelago backbone / core stack (the infrastructure pillars). */
/** The Lab 484 backbone / core stack (the infrastructure pillars). */
export const tech = [
{
title: 'Decentralized mesh network',
@ -222,7 +222,7 @@ export const tech = [
/* ─────────────────────────────────────────────────────────────
SolLunar Society — the first node's REAL business (from
SolLunarSociety.md). All figures below are SolLunar Society's
only; Archipelago (Lab 484), Festivals and Chateau have no
only; Lab 484, Festivals and Chateau have no
standalone numbers yet. Lab 484's economics appear here as
revenue lines INTO SolLunar (~$16k/mo) — don't double-count.
───────────────────────────────────────────────────────────── */
@ -262,11 +262,11 @@ export const partnership = {
role: 'Tech & operations',
responsibilities: [
'Operate the spaces & staff',
'All IT / infrastructure (Archipelago)',
'All IT / infrastructure',
'Inbound payments · bootcamps',
'Tenant & investor relations',
],
note: 'Builds & operates the Archipelago backbone — and is itself a tenant + event driver (~$16k/mo of the revenue below).',
note: 'Builds & operates the shared tech backbone — and is itself a tenant + event driver (~$16k/mo of the revenue below).',
},
{
name: 'Investors',
@ -482,7 +482,7 @@ export const roadmap = [
phase: 'Phase 1',
title: 'Operate & prove the model',
when: '~0–12 mo',
body: 'Run memberships, events and tenants in Austin; validate the P&L publicly on the Archipelago stack.',
body: 'Run memberships, events and tenants in Austin; validate the P&L publicly on the Lab 484 stack.',
},
{
phase: 'Phase 2',

View file

@ -53,7 +53,7 @@ const shares = investorAsk.scenarios.map((s) => ({ equity: s, annual: Math.round
</div>
<p class="mt-9 max-w-xl text-sm text-fg-muted">
Prove the model in Austin, then replicate it on Archipelago — the festival and the farm are next.
Prove the model in Austin, then replicate it on Lab 484 — the festival and the farm are next.
</p>
</SlideFrame>
</template>

View file

@ -3,14 +3,14 @@ import SlideFrame from '../components/SlideFrame.vue'
import Icon from '../components/Icon.vue'
import { surfaceEntities, entityById, accentText, accentRing } from '../data'
const archipelago = entityById('archipelago')
const backbone = entityById('lab484')
</script>
<template>
<SlideFrame
kicker="The collaboration"
title="Three experiences, one backbone"
subtitle="One is funded and opening now — SolLunar Society in Austin. The festival and the farm follow, on the same Archipelago stack."
subtitle="One is funded and opening now — SolLunar Society in Austin. The festival and the farm follow, on the same Lab 484 stack."
>
<div class="grid gap-5 md:grid-cols-3">
<div
@ -45,18 +45,18 @@ const archipelago = entityById('archipelago')
</div>
<!-- the shared backbone beneath all three -->
<div class="mt-5 flex items-center gap-4 rounded-2xl border p-5" :class="accentRing[archipelago.accent]">
<span class="grid size-11 shrink-0 place-items-center rounded-xl bg-surface-2" :class="accentText[archipelago.accent]">
<Icon :name="archipelago.icon" class="size-6" />
<div class="mt-5 flex items-center gap-4 rounded-2xl border p-5" :class="accentRing[backbone.accent]">
<span class="grid size-11 shrink-0 place-items-center rounded-xl bg-surface-2" :class="accentText[backbone.accent]">
<Icon :name="backbone.icon" class="size-6" />
</span>
<div class="min-w-0 flex-1">
<h3 class="font-display text-lg font-semibold text-fg">
{{ archipelago.name }}
<span class="ml-1 text-xs font-normal uppercase tracking-wider" :class="accentText[archipelago.accent]">
· {{ archipelago.role }}
{{ backbone.name }}
<span class="ml-1 text-xs font-normal uppercase tracking-wider" :class="accentText[backbone.accent]">
· {{ backbone.role }}
</span>
</h3>
<p class="text-sm text-fg-muted">{{ archipelago.blurb }}</p>
<p class="text-sm text-fg-muted">{{ backbone.blurb }}</p>
</div>
</div>
</SlideFrame>

View file

@ -34,7 +34,7 @@ const icons = ['Building2', 'BedDouble', 'Cpu']
</div>
<p class="mt-6 text-sm text-fg-muted">
The Yellow House data center makes SolLunar self-hosting — the Archipelago stack runs on-site,
The Yellow House data center makes SolLunar self-hosting — the Lab 484 stack runs on-site,
not in someone else's cloud.
</p>
</SlideFrame>

View file

@ -6,9 +6,9 @@ import { tech } from '../data'
<template>
<SlideFrame
kicker="Archipelago · the shared backbone"
kicker="Lab 484 · the shared backbone"
title="Open hardware, sovereign software"
subtitle="Archipelago is the stack under every entity — owned by the network, documented to be rebuilt anywhere. Build it once; every place plugs in."
subtitle="Lab 484 is the stack under every entity — owned by the network, documented to be rebuilt anywhere. Build it once; every place plugs in."
>
<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
<div

View file

@ -143,7 +143,7 @@
}
/* ─────────────────────────────────────────────────────────────
ARCHIPELAGO pitch-deck brand palette. Numbered accent scales are
LAB 484 pitch-deck brand palette. Numbered accent scales are
static SOLID fills (bars, dots, tinted panels) that read on both
light and dark; the flipping `--color-{accent}` above is for TEXT.
───────────────────────────────────────────────────────────── */