diff --git a/src/deck/components/LocationDetail.vue b/src/deck/components/LocationDetail.vue
deleted file mode 100644
index b75105e..0000000
--- a/src/deck/components/LocationDetail.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
{{ location.name }}
-
-
- {{ location.blurb }}
-
-
-
-
diff --git a/src/deck/data.ts b/src/deck/data.ts
index aa39b4e..be93a71 100644
--- a/src/deck/data.ts
+++ b/src/deck/data.ts
@@ -1,11 +1,17 @@
/**
- * ARCHIPELAGO — pitch deck content & figures.
+ * SOLUNAR PUNK SOCIETY — pitch deck content & figures.
*
* ⚠️ EVERYTHING IN THIS FILE IS A PLACEHOLDER.
* This is the single source of truth for the deck. To turn the deck into
* the real pitch, edit values here — no slide component hard-codes a number,
- * a tier price, or a location name. Search for `PLACEHOLDER` to find every
- * spot that needs your real data.
+ * a tier price, or an entity name. Search for `PLACEHOLDER` for every spot
+ * that needs your real data.
+ *
+ * The pitch is a collaboration between three entities, all running the same
+ * core stack + user ecosystem so members get the full experience anywhere:
+ * • Archipelago — hardware/software city center (the tech backbone)
+ * • Solunar Society — pop-up festivals (the ephemeral, travelling node)
+ * • Chateau du Faune — regenerative farm center (the rural node)
*
* Currency: all figures are USD unless noted.
*/
@@ -13,14 +19,13 @@
export const PLACEHOLDER = true
export const brand = {
- name: 'ARCHIPELAGO',
- fullName: 'The Archipelago Network',
- // archipelago = islands that look separate above the water but are joined
- // beneath it — the network of self-sustaining locations, connected below.
- tagline: 'A replicable network of decentralized, self-sustaining locations.',
+ name: 'Solunar Punk Society',
+ short: 'Solunar Punk',
+ // solarpunk by day, lunarpunk by night — sovereign tech, regenerative culture.
+ tagline: 'One sovereign network. Three ways to experience it.',
subtagline:
- 'Two proof-of-concept launches. Open hardware, sovereign software, real revenue — a blueprint anyone can deploy anywhere.',
- contactEmail: 'invest@archipelago.example', // PLACEHOLDER
+ 'A collaboration between Archipelago, Solunar Society and Chateau du Faune — every location runs the full core stack, so the membership, the payments and the experience travel with you.',
+ contactEmail: 'invest@solunarpunk.example', // PLACEHOLDER
// Seam for later: an LNbits instance + the founder's nostr npub power the
// "contribute" tiers. Left null until wired (see src/features/{lnbits,nostr}).
lnbitsBaseUrl: null as string | null,
@@ -36,14 +41,123 @@ export const problem = {
'Every "smart" venue you can name is a walled garden that rents you access.',
],
thesis:
- 'We build physical nodes that own their own network, payments, and data — and prove they can pay for themselves.',
+ 'We build sovereign places that own their network, payments and data — a city hub, a travelling festival, and a farm — all on one shared stack, each proving it can pay for itself.',
}
-/** The technology stack shown on the Tech slide. */
+export type Accent = 'pine' | 'indigo' | 'clay'
+
+export type Entity = {
+ id: string
+ name: string
+ role: string // short label, e.g. "City center"
+ kind: string
+ accent: Accent
+ blurb: string
+ traits: string[] // what makes THIS entity unique
+ spaces: string[]
+ revenue: string[] // how this entity earns
+ icon: string
+}
+
+/** The three collaborating entities. PLACEHOLDER names & details. */
+export const entities: Entity[] = [
+ {
+ id: 'archipelago',
+ name: 'Archipelago',
+ role: 'City center',
+ kind: 'Hardware & software hub · urban event space',
+ accent: 'pine',
+ blurb:
+ 'The tech backbone of the collaboration: a downtown flagship where the stack is built, demonstrated and run in front of thousands.',
+ traits: [
+ 'Builds & maintains the core stack every node runs',
+ 'High-footfall public demonstration of the technology',
+ 'Anchors partnerships, brand and the developer community',
+ ],
+ spaces: ['Event hall', 'Co-working floor', 'Exchange kiosk', 'Café & bar', 'Studio / lab'],
+ revenue: ['Venue & desk hire', 'Events & workshops', 'Network & kiosk fees'],
+ icon: 'Building2',
+ },
+ {
+ id: 'solunar',
+ name: 'Solunar Society',
+ role: 'Pop-up festivals',
+ kind: 'Travelling · ephemeral gatherings',
+ accent: 'indigo',
+ blurb:
+ 'The travelling node: solarpunk-by-day, lunarpunk-by-night festivals that deploy the entire stack anywhere for days at a time, then vanish.',
+ traits: [
+ 'Deploys the full stack from a mobile kit — anywhere',
+ 'Proves the network is portable, not tied to a building',
+ 'Turns every festival into a member-onboarding event',
+ ],
+ spaces: ['Main stage', 'Mobile exchange kiosk', 'Mesh & power rig', 'Camp & vendors', 'Workshop tents'],
+ revenue: ['Ticket sales', 'Vendor & bar revenue', 'Sponsorships'],
+ icon: 'Tent',
+ },
+ {
+ id: 'chateau',
+ name: 'Chateau du Faune',
+ role: 'Farm center',
+ kind: 'Off-grid · regenerative farm',
+ accent: 'clay',
+ blurb:
+ 'The rural node: an off-grid regenerative farm hosting retreats, artist & developer residencies, and the network’s living lab — home to the alpacas.',
+ traits: [
+ 'Proves the stack runs off-grid, anywhere',
+ 'Premium revenue from retreats & residencies',
+ 'Sponsor-an-alpaca connects small backers to the land',
+ ],
+ spaces: ['Retreat lodging', 'Residency studios', 'Event barn', 'Alpaca paddocks', 'Regenerative gardens'],
+ revenue: ['Lodging & retreats', 'Residencies', 'Experiences & venue hire'],
+ icon: 'Trees',
+ },
+]
+
+export const entityById = (id: string) => entities.find((e) => e.id === id)!
+
+/**
+ * The user ecosystem every location shares — the "full experience regardless
+ * of location" promise. This is what a member touches at any node.
+ */
+export const userEcosystem = [
+ {
+ title: 'One membership card',
+ body: 'A single NFC card is your identity, access and wallet at every node — city, festival or farm.',
+ icon: 'CreditCard',
+ },
+ {
+ title: 'Money exchange kiosk',
+ body: 'On-ramp cash to Bitcoin and back at any location. The same kiosk, everywhere.',
+ icon: 'Coins',
+ },
+ {
+ title: 'Pay by Lightning',
+ body: 'Tap to pay for drinks, tickets, rooms and experiences — instant, low-fee settlement.',
+ icon: 'Zap',
+ },
+ {
+ title: 'The Solunar app',
+ body: 'Book spaces, buy tickets, find events and manage membership from one self-hosted app.',
+ icon: 'Sparkles',
+ },
+ {
+ title: 'Portable identity',
+ body: 'Your nostr identity and social graph travel with you between every node and beyond.',
+ icon: 'KeyRound',
+ },
+ {
+ title: 'Member perks',
+ body: 'Access, discounts and priority booking that follow you across the whole network.',
+ icon: 'HeartHandshake',
+ },
+]
+
+/** The underlying technology / core stack (the infrastructure pillars). */
export const tech = [
{
title: 'Decentralized mesh network',
- body: 'Community-owned routers and mesh kits blanket each location — connectivity that no single provider can switch off.',
+ body: 'Community-owned routers and mesh kits blanket each location — connectivity no single provider can switch off.',
icon: 'Wifi',
},
{
@@ -53,11 +167,11 @@ export const tech = [
},
{
title: 'Sovereign software',
- body: 'Self-hosted services on a stack you control — no platform lock-in, forkable by any future node.',
+ body: 'Self-hosted services on a stack we control — no platform lock-in, forkable by any future node.',
icon: 'Code',
},
{
- title: 'Bitcoin & Lightning payments',
+ title: 'Bitcoin & Lightning',
body: 'Instant, low-fee settlement at kiosks and NFC points. Value stays in the network, not the middleman.',
icon: 'Zap',
},
@@ -68,61 +182,19 @@ export const tech = [
},
{
title: 'Replicable blueprint',
- body: 'Every node ships its own build docs. Proven once, the whole stack redeploys anywhere in the world.',
+ body: 'Every node ships its build docs. Proven once, the whole stack redeploys anywhere in the world.',
icon: 'Globe',
},
]
-export type Location = {
- id: string
- name: string
- kind: string
- blurb: string
- highlights: string[]
- spaces: string[]
- icon: string
-}
-
-/** The two proof-of-concept launches. PLACEHOLDER names & details. */
-export const locations: Record<'city' | 'farm', Location> = {
- city: {
- id: 'city',
- name: 'Isla Ciudad', // PLACEHOLDER — real city-node name
- kind: 'Urban node · event space',
- blurb:
- 'A downtown flagship: co-working, exchange kiosk, and a public-facing event venue that puts the technology in front of thousands.',
- highlights: [
- 'High-footfall demonstration of the full stack',
- 'Exchange kiosk + NFC payments live to the public',
- 'Anchors the network’s brand and partnerships',
- ],
- spaces: ['Event hall', 'Co-working floor', 'Exchange kiosk', 'Café & bar', 'Studio / podcast room'],
- icon: 'Building2',
- },
- farm: {
- id: 'farm',
- name: 'Isla Granja', // PLACEHOLDER — real farm-node name
- kind: 'Rural node · regenerative farm',
- blurb:
- 'An off-grid regenerative farm: retreats, artist & developer residencies, and the network’s living lab — home to the alpacas.',
- highlights: [
- 'Off-grid power + mesh proves the stack anywhere',
- 'Retreats & residencies generate premium revenue',
- 'Sponsor-an-alpaca connects small backers to the land',
- ],
- spaces: ['Retreat lodging', 'Residency studios', 'Event barn', 'Alpaca paddocks', 'Regenerative gardens'],
- icon: 'Trees',
- },
-}
-
-/** Revenue streams the operational event spaces generate. */
+/** Revenue streams across the collaboration. */
export const revenueStreams = [
- { title: 'Room & lodging rentals', note: 'Nightly stays across both nodes', icon: 'BedDouble' },
- { title: 'Experiences & workshops', note: 'Ticketed classes, tastings, tours', icon: 'Sparkles' },
- { title: 'Retreats', note: 'Multi-day hosted programs', icon: 'Mountain' },
- { title: 'Artist & developer residencies', note: 'Paid & sponsored residencies', icon: 'Palette' },
- { title: 'Event & venue hire', note: 'Weddings, launches, conferences', icon: 'PartyPopper' },
- { title: 'Network services', note: 'Connectivity, payments, kiosk fees', icon: 'Router' },
+ { title: 'Tickets & festivals', note: 'Solunar Society gatherings', icon: 'Ticket' },
+ { title: 'Room & lodging rentals', note: 'City & farm stays', icon: 'BedDouble' },
+ { title: 'Retreats & residencies', note: 'Hosted programs at the farm', icon: 'Mountain' },
+ { title: 'Experiences & workshops', note: 'Classes, tastings, tours', icon: 'Palette' },
+ { title: 'Venue & event hire', note: 'Weddings, launches, conferences', icon: 'PartyPopper' },
+ { title: 'Network services', note: 'Connectivity, kiosk & payment fees', icon: 'Router' },
]
export type CostItem = { label: string; amount: number; note?: string }
@@ -131,32 +203,35 @@ export type CostCategory = {
title: string
subtitle: string
icon: string
+ accent: Accent | 'amber'
items: CostItem[]
}
/**
- * The three investment cost categories. PLACEHOLDER amounts (USD).
- * `total` is derived from items() below — edit line items, not totals.
+ * Investment cost categories. PLACEHOLDER amounts (USD).
+ * One shared core stack + one build per entity.
*/
export const costCategories: CostCategory[] = [
{
id: 'core',
- title: 'Base hardware & development',
- subtitle: 'Servers, routers, exchange kiosks, NFC hardware + core dev salaries',
+ title: 'Shared core stack & development',
+ subtitle: 'Servers, routers, kiosks, NFC + core dev salaries — powers all three',
icon: 'Cpu',
+ accent: 'amber',
items: [
{ label: 'Edge servers & compute', amount: 60_000 },
{ label: 'Mesh routers & networking', amount: 45_000 },
{ label: 'Exchange kiosks', amount: 50_000, note: '2 units' },
- { label: 'NFC hardware & POS', amount: 25_000 },
+ { label: 'Membership-card & NFC systems', amount: 25_000 },
{ label: 'Core development salaries', amount: 300_000, note: '4 engineers · 12 mo' },
],
},
{
- id: 'city',
- title: 'City location build',
- subtitle: 'Fit-out & launch of the urban event node',
+ id: 'archipelago',
+ title: 'Archipelago · city center',
+ subtitle: 'Fit-out & launch of the urban hub',
icon: 'Building2',
+ accent: 'pine',
items: [
{ label: 'Lease deposit & permits', amount: 60_000 },
{ label: 'Renovation & fit-out', amount: 260_000 },
@@ -166,10 +241,24 @@ export const costCategories: CostCategory[] = [
],
},
{
- id: 'farm',
- title: 'Farm location build',
- subtitle: 'Land, structures & off-grid infrastructure for the rural node',
+ id: 'solunar',
+ title: 'Solunar Society · festivals',
+ subtitle: 'Mobile deployment kit + first-season production',
+ icon: 'Tent',
+ accent: 'indigo',
+ items: [
+ { label: 'Mobile mesh & power rig', amount: 60_000 },
+ { label: 'Mobile exchange kiosk & POS', amount: 45_000 },
+ { label: 'Stage, structures & staging gear', amount: 70_000 },
+ { label: 'First-season production & launch', amount: 45_000 },
+ ],
+ },
+ {
+ id: 'chateau',
+ title: 'Chateau du Faune · farm center',
+ subtitle: 'Land, structures & off-grid infrastructure',
icon: 'Trees',
+ accent: 'clay',
items: [
{ label: 'Land improvements & access', amount: 90_000 },
{ label: 'Lodging & studio structures', amount: 300_000 },
@@ -191,7 +280,7 @@ export type AngelTier = {
featured?: boolean
}
-/** Angel investment — equity + benefits. PLACEHOLDER terms. */
+/** Angel investment — equity + benefits across the collaboration. PLACEHOLDER terms. */
export const angelTiers: AngelTier[] = [
{
name: 'Seed Angel',
@@ -199,7 +288,7 @@ export const angelTiers: AngelTier[] = [
equity: 'Equity from a common SAFE',
benefits: [
'Pro-rata equity in the network',
- 'Founding-member access to both nodes',
+ 'Founding-member access to all three entities',
'Quarterly investor updates',
],
},
@@ -211,7 +300,7 @@ export const angelTiers: AngelTier[] = [
benefits: [
'Everything in Seed, plus:',
'Advisory input on network direction',
- 'Complimentary retreat & residency weeks',
+ 'Festival, retreat & residency weeks',
'Named node sponsor',
],
},
@@ -242,7 +331,7 @@ export const contributorTiers: ContributorTier[] = [
{
name: 'Backer',
amount: 25,
- blurb: 'Fund a member NFC card and get your name on the founders’ wall.',
+ blurb: 'Fund a member card and get your name on the founders’ wall.',
icon: 'CreditCard',
},
{
@@ -254,7 +343,7 @@ export const contributorTiers: ContributorTier[] = [
{
name: 'Mesh Kit',
amount: 250,
- blurb: 'Sponsor a full mesh kit that extends coverage across a location.',
+ blurb: 'Sponsor a full mesh kit that lights up a location — or a festival.',
icon: 'Wifi',
featured: true,
},
@@ -262,7 +351,7 @@ export const contributorTiers: ContributorTier[] = [
name: 'Sponsor an Alpaca',
amount: 500,
unit: '/yr',
- blurb: 'Name & sponsor an alpaca at the farm. Photos, updates, and a visit.',
+ blurb: 'Name & sponsor an alpaca at Chateau du Faune. Photos, updates, and a visit.',
icon: 'Origami',
},
]
@@ -277,21 +366,21 @@ export const roadmap = [
},
{
phase: 'Phase 1',
- title: 'Build the two nodes',
+ title: 'Launch the three entities',
when: '~6–9 mo',
- body: 'Fit out the city node and the farm node in parallel; deploy the full stack.',
+ body: 'Fit out Archipelago and Chateau du Faune; stage the first Solunar festival.',
},
{
phase: 'Phase 2',
title: 'Operate & prove revenue',
when: '~9–18 mo',
- body: 'Run events, retreats and residencies; validate the unit economics publicly.',
+ body: 'Run events, festivals, retreats and residencies; validate the unit economics publicly.',
},
{
phase: 'Phase 3',
title: 'Open the blueprint',
when: '18 mo+',
- body: 'Publish the replication kit; onboard new nodes worldwide on shared infrastructure.',
+ body: 'Publish the replication kit; onboard new nodes & festivals worldwide on shared infrastructure.',
},
]
@@ -302,3 +391,20 @@ export const fmtUsd = (n: number) =>
: `$${n.toLocaleString('en-US')}`
export const fmtUsdFull = (n: number) => `$${n.toLocaleString('en-US')}`
+
+/** Tailwind class helpers keyed by entity accent — keeps slides declarative. */
+export const accentText: Record = {
+ pine: 'text-pine-300',
+ indigo: 'text-indigo-300',
+ clay: 'text-clay-400',
+}
+export const accentDot: Record = {
+ pine: 'bg-pine-400',
+ indigo: 'bg-indigo-400',
+ clay: 'bg-clay-400',
+}
+export const accentRing: Record = {
+ pine: 'border-pine-500/30 bg-pine-500/5',
+ indigo: 'border-indigo-500/30 bg-indigo-500/5',
+ clay: 'border-clay-400/30 bg-clay-400/5',
+}
diff --git a/src/deck/slides/CitySlide.vue b/src/deck/slides/CitySlide.vue
deleted file mode 100644
index 91ad28e..0000000
--- a/src/deck/slides/CitySlide.vue
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
diff --git a/src/deck/slides/FarmSlide.vue b/src/deck/slides/FarmSlide.vue
deleted file mode 100644
index b11f62d..0000000
--- a/src/deck/slides/FarmSlide.vue
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
diff --git a/src/deck/slides/LocationsSlide.vue b/src/deck/slides/LocationsSlide.vue
deleted file mode 100644
index abf3ff3..0000000
--- a/src/deck/slides/LocationsSlide.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
{{ loc.blurb }}
-
-
-
- {{ s }}
-
-
-
-
-
-