refactor(deck): 4-entity model — Archipelago backbone + 3 experiences
Restructure per the new framing: Archipelago is the shared backbone (the core stack / mycelium), with three experiences on top — SolLunar Punk Society (city), Pop-up Festivals (travelling; e.g. Solar Punk Summit) and Chateau du Faune (farm). Adds a 'layer' field + surfaceEntities helper, a 'rose' accent, an 'example' field, remaps the four cost categories 1:1 to the entities, and sets the umbrella/brand to Archipelago. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
85a42411de
commit
002c121e83
3 changed files with 84 additions and 67 deletions
135
src/deck/data.ts
135
src/deck/data.ts
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* SOLLUNAR PUNK SOCIETY — pitch deck content & figures.
|
||||
* ARCHIPELAGO — 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
|
||||
|
|
@ -7,11 +7,12 @@
|
|||
* 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)
|
||||
* • SolLunar Society — pop-up festivals (the ephemeral, travelling node)
|
||||
* • Chateau du Faune — regenerative farm center (the rural node)
|
||||
* Archipelago is the shared backbone — open hardware + sovereign software (the
|
||||
* "mycelium"). Three surface entities run on top of it and share the full core
|
||||
* stack, so members get the same experience anywhere:
|
||||
* • SolLunar Punk Society — city center (members' hub, built on Archipelago)
|
||||
* • Pop-up Festivals — travelling gatherings (e.g. Solar Punk Summit)
|
||||
* • Chateau du Faune — regenerative farm center
|
||||
*
|
||||
* Currency: all figures are USD unless noted.
|
||||
*/
|
||||
|
|
@ -19,13 +20,13 @@
|
|||
export const PLACEHOLDER = true
|
||||
|
||||
export const brand = {
|
||||
name: 'SolLunar Punk Society',
|
||||
short: 'SolLunar Punk',
|
||||
// solarpunk by day, lunarpunk by night — sovereign tech, regenerative culture.
|
||||
tagline: 'One sovereign network. Three ways to experience it.',
|
||||
name: 'Archipelago',
|
||||
short: 'Archipelago',
|
||||
// a connected network of islands — one backbone, many places.
|
||||
tagline: 'One network. Three ways to experience it.',
|
||||
subtagline:
|
||||
'A collaboration between Archipelago, SolLunar 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@sollunarpunk.example', // PLACEHOLDER
|
||||
'A collaboration between SolLunar Punk Society, Pop-up Festivals and Chateau du Faune — all running on Archipelago, the shared backbone, so the membership, the payments and the experience travel with you.',
|
||||
contactEmail: 'invest@archipelago.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,
|
||||
|
|
@ -41,10 +42,10 @@ export const problem = {
|
|||
'Every "smart" venue you can name is a walled garden that rents you access.',
|
||||
],
|
||||
thesis:
|
||||
'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.',
|
||||
'We build sovereign places that own their network, payments and data — a city hub, a travelling festival, and a farm — all on one shared backbone, each proving it can pay for itself.',
|
||||
}
|
||||
|
||||
export type Accent = 'pine' | 'indigo' | 'clay'
|
||||
export type Accent = 'pine' | 'indigo' | 'rose' | 'clay'
|
||||
|
||||
export type Entity = {
|
||||
id: string
|
||||
|
|
@ -52,6 +53,8 @@ export type Entity = {
|
|||
role: string // short label, e.g. "City center"
|
||||
kind: string
|
||||
accent: Accent
|
||||
layer: 'backbone' | 'surface'
|
||||
example?: string // for the generic festival entity
|
||||
blurb: string
|
||||
traits: string[] // what makes THIS entity unique
|
||||
spaces: string[]
|
||||
|
|
@ -59,33 +62,39 @@ export type Entity = {
|
|||
icon: string
|
||||
}
|
||||
|
||||
/** The three collaborating entities. PLACEHOLDER names & details. */
|
||||
/**
|
||||
* The entities. Archipelago is the backbone; the other three are the
|
||||
* experiences that run on it. PLACEHOLDER names & details.
|
||||
*/
|
||||
export const entities: Entity[] = [
|
||||
{
|
||||
id: 'archipelago',
|
||||
name: 'Archipelago',
|
||||
id: 'sollunar',
|
||||
name: 'SolLunar Punk Society',
|
||||
role: 'City center',
|
||||
kind: 'Hardware & software hub · urban event space',
|
||||
accent: 'pine',
|
||||
kind: 'Members’ hub · city',
|
||||
accent: 'indigo',
|
||||
layer: 'surface',
|
||||
blurb:
|
||||
'The tech backbone of the collaboration: a downtown flagship where the stack is built, demonstrated and run in front of thousands.',
|
||||
'The permanent city home: a members’ society and event space, built on Archipelago’s stack, where the community and the technology live year-round.',
|
||||
traits: [
|
||||
'Builds & maintains the core stack every node runs',
|
||||
'High-footfall public demonstration of the technology',
|
||||
'Anchors partnerships, brand and the developer community',
|
||||
'The permanent, city-based flagship',
|
||||
'Runs on Archipelago tech — public demonstration of the stack',
|
||||
'Anchors membership, partnerships 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'],
|
||||
revenue: ['Membership', 'Venue & desk hire', 'Events & workshops'],
|
||||
icon: 'Building2',
|
||||
},
|
||||
{
|
||||
id: 'solunar',
|
||||
name: 'SolLunar Society',
|
||||
role: 'Pop-up festivals',
|
||||
kind: 'Travelling · ephemeral gatherings',
|
||||
accent: 'indigo',
|
||||
id: 'festivals',
|
||||
name: 'Pop-up Festivals',
|
||||
role: 'Travelling gatherings',
|
||||
kind: 'Travelling · ephemeral',
|
||||
accent: 'rose',
|
||||
layer: 'surface',
|
||||
example: 'Solar Punk Summit',
|
||||
blurb:
|
||||
'The travelling node: solarpunk-by-day, lunarpunk-by-night festivals that deploy the entire stack anywhere for days at a time, then vanish.',
|
||||
'The travelling node: a repeatable festival format — like Solar Punk Summit — that deploys the entire stack anywhere for a few days, then packs down and moves on.',
|
||||
traits: [
|
||||
'Deploys the full stack from a mobile kit — anywhere',
|
||||
'Proves the network is portable, not tied to a building',
|
||||
|
|
@ -101,6 +110,7 @@ export const entities: Entity[] = [
|
|||
role: 'Farm center',
|
||||
kind: 'Off-grid · regenerative farm',
|
||||
accent: 'clay',
|
||||
layer: 'surface',
|
||||
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: [
|
||||
|
|
@ -112,9 +122,29 @@ export const entities: Entity[] = [
|
|||
revenue: ['Lodging & retreats', 'Residencies', 'Experiences & venue hire'],
|
||||
icon: 'Trees',
|
||||
},
|
||||
{
|
||||
id: 'archipelago',
|
||||
name: 'Archipelago',
|
||||
role: 'Shared backbone',
|
||||
kind: 'Open hardware & sovereign software',
|
||||
accent: 'pine',
|
||||
layer: 'backbone',
|
||||
blurb:
|
||||
'The invisible foundation every entity runs on: open hardware and self-hosted software — the mycelium beneath the whole network. Build it once, and every place plugs in.',
|
||||
traits: [
|
||||
'Powers all three entities from one shared stack',
|
||||
'Open bill of materials — replicable anywhere',
|
||||
'Forkable and sovereign — no platform lock-in',
|
||||
],
|
||||
spaces: ['Edge servers', 'Mesh routers', 'Exchange kiosks', 'NFC / membership', 'Self-hosted apps'],
|
||||
revenue: ['Network & kiosk fees', 'Payment fees', 'Replication licensing'],
|
||||
icon: 'Cpu',
|
||||
},
|
||||
]
|
||||
|
||||
export const entityById = (id: string) => entities.find((e) => e.id === id)!
|
||||
/** The three experiences (everything except the backbone). */
|
||||
export const surfaceEntities = entities.filter((e) => e.layer === 'surface')
|
||||
|
||||
/**
|
||||
* The user ecosystem every location shares — the "full experience regardless
|
||||
|
|
@ -123,7 +153,7 @@ export const entityById = (id: string) => entities.find((e) => e.id === id)!
|
|||
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.',
|
||||
body: 'A single NFC card is your identity, access and wallet everywhere — the society, a festival, the farm.',
|
||||
icon: 'CreditCard',
|
||||
},
|
||||
{
|
||||
|
|
@ -137,7 +167,7 @@ export const userEcosystem = [
|
|||
icon: 'Zap',
|
||||
},
|
||||
{
|
||||
title: 'The SolLunar app',
|
||||
title: 'The Archipelago app',
|
||||
body: 'Book spaces, buy tickets, find events and manage membership from one self-hosted app.',
|
||||
icon: 'Sparkles',
|
||||
},
|
||||
|
|
@ -153,7 +183,7 @@ export const userEcosystem = [
|
|||
},
|
||||
]
|
||||
|
||||
/** The underlying technology / core stack (the infrastructure pillars). */
|
||||
/** The Archipelago backbone / core stack (the infrastructure pillars). */
|
||||
export const tech = [
|
||||
{
|
||||
title: 'Decentralized mesh network',
|
||||
|
|
@ -189,11 +219,11 @@ export const tech = [
|
|||
|
||||
/** Revenue streams across the collaboration. */
|
||||
export const revenueStreams = [
|
||||
{ title: 'Tickets & festivals', note: 'SolLunar Society gatherings', icon: 'Ticket' },
|
||||
{ title: 'Tickets & festivals', note: 'Pop-up festival 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: 'Membership & venue hire', note: 'Society dues, event bookings', icon: 'PartyPopper' },
|
||||
{ title: 'Network services', note: 'Connectivity, kiosk & payment fees', icon: 'Router' },
|
||||
]
|
||||
|
||||
|
|
@ -203,21 +233,21 @@ export type CostCategory = {
|
|||
title: string
|
||||
subtitle: string
|
||||
icon: string
|
||||
accent: Accent | 'amber'
|
||||
accent: Accent
|
||||
items: CostItem[]
|
||||
}
|
||||
|
||||
/**
|
||||
* Investment cost categories. PLACEHOLDER amounts (USD).
|
||||
* One shared core stack + one build per entity.
|
||||
* Investment cost categories — one per entity. PLACEHOLDER amounts (USD).
|
||||
* The shared Archipelago backbone plus a launch for each experience.
|
||||
*/
|
||||
export const costCategories: CostCategory[] = [
|
||||
{
|
||||
id: 'core',
|
||||
title: 'Shared core stack & development',
|
||||
subtitle: 'Servers, routers, kiosks, NFC + core dev salaries — powers all three',
|
||||
id: 'archipelago',
|
||||
title: 'Archipelago · shared backbone',
|
||||
subtitle: 'Servers, routers, exchange kiosks, NFC + core dev — powers all three',
|
||||
icon: 'Cpu',
|
||||
accent: 'amber',
|
||||
accent: 'pine',
|
||||
items: [
|
||||
{ label: 'Edge servers & compute', amount: 60_000 },
|
||||
{ label: 'Mesh routers & networking', amount: 45_000 },
|
||||
|
|
@ -227,11 +257,11 @@ export const costCategories: CostCategory[] = [
|
|||
],
|
||||
},
|
||||
{
|
||||
id: 'archipelago',
|
||||
title: 'Archipelago · city center',
|
||||
subtitle: 'Fit-out & launch of the urban hub',
|
||||
id: 'sollunar',
|
||||
title: 'SolLunar Punk Society · city',
|
||||
subtitle: 'Fit-out & launch of the urban members’ hub',
|
||||
icon: 'Building2',
|
||||
accent: 'pine',
|
||||
accent: 'indigo',
|
||||
items: [
|
||||
{ label: 'Lease deposit & permits', amount: 60_000 },
|
||||
{ label: 'Renovation & fit-out', amount: 260_000 },
|
||||
|
|
@ -241,11 +271,11 @@ export const costCategories: CostCategory[] = [
|
|||
],
|
||||
},
|
||||
{
|
||||
id: 'solunar',
|
||||
title: 'SolLunar Society · festivals',
|
||||
id: 'festivals',
|
||||
title: 'Pop-up Festivals',
|
||||
subtitle: 'Mobile deployment kit + first-season production',
|
||||
icon: 'Tent',
|
||||
accent: 'indigo',
|
||||
accent: 'rose',
|
||||
items: [
|
||||
{ label: 'Mobile mesh & power rig', amount: 60_000 },
|
||||
{ label: 'Mobile exchange kiosk & POS', amount: 45_000 },
|
||||
|
|
@ -255,7 +285,7 @@ export const costCategories: CostCategory[] = [
|
|||
},
|
||||
{
|
||||
id: 'chateau',
|
||||
title: 'Chateau du Faune · farm center',
|
||||
title: 'Chateau du Faune · farm',
|
||||
subtitle: 'Land, structures & off-grid infrastructure',
|
||||
icon: 'Trees',
|
||||
accent: 'clay',
|
||||
|
|
@ -368,7 +398,7 @@ export const roadmap = [
|
|||
phase: 'Phase 1',
|
||||
title: 'Launch the three entities',
|
||||
when: '~6–9 mo',
|
||||
body: 'Fit out Archipelago and Chateau du Faune; stage the first SolLunar festival.',
|
||||
body: 'Open the SolLunar Punk Society city hub and Chateau du Faune; stage the first pop-up festival.',
|
||||
},
|
||||
{
|
||||
phase: 'Phase 2',
|
||||
|
|
@ -399,15 +429,18 @@ export const fmtUsdFull = (n: number) => `$${n.toLocaleString('en-US')}`
|
|||
export const accentText: Record<Accent, string> = {
|
||||
pine: 'text-pine-300',
|
||||
indigo: 'text-indigo-300',
|
||||
rose: 'text-rose-300',
|
||||
clay: 'text-clay-400',
|
||||
}
|
||||
export const accentDot: Record<Accent, string> = {
|
||||
pine: 'bg-pine-400',
|
||||
indigo: 'bg-indigo-400',
|
||||
rose: 'bg-rose-400',
|
||||
clay: 'bg-clay-400',
|
||||
}
|
||||
export const accentRing: Record<Accent, string> = {
|
||||
pine: 'border-pine-500/30 bg-pine-500/5',
|
||||
indigo: 'border-indigo-500/30 bg-indigo-500/5',
|
||||
rose: 'border-rose-500/30 bg-rose-500/5',
|
||||
clay: 'border-clay-400/30 bg-clay-400/5',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<script setup lang="ts">
|
||||
import EntityDetail from '../components/EntityDetail.vue'
|
||||
import { entityById } from '../data'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<EntityDetail :entity="entityById('archipelago')" />
|
||||
</template>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<script setup lang="ts">
|
||||
import EntityDetail from '../components/EntityDetail.vue'
|
||||
import { entityById } from '../data'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<EntityDetail :entity="entityById('solunar')" />
|
||||
</template>
|
||||
Loading…
Add table
Add a link
Reference in a new issue