feat(deck): add central content/data model
Single source of truth for the pitch: brand, cost categories + line items, angel & contributor tiers, revenue streams, locations, roadmap. All figures are clearly-marked placeholders to swap for real numbers. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4a4b5498ec
commit
e73072318c
1 changed files with 304 additions and 0 deletions
304
src/deck/data.ts
Normal file
304
src/deck/data.ts
Normal file
|
|
@ -0,0 +1,304 @@
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Currency: all figures are USD unless noted.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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.',
|
||||||
|
subtagline:
|
||||||
|
'Two proof-of-concept launches. Open hardware, sovereign software, real revenue — a blueprint anyone can deploy anywhere.',
|
||||||
|
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,
|
||||||
|
nostrNpub: null as string | null,
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Big-picture framing for the vision slide. */
|
||||||
|
export const problem = {
|
||||||
|
headline: 'Connectivity, community, and ownership are centralizing.',
|
||||||
|
points: [
|
||||||
|
'Networks, payments, and platforms are owned by a handful of gatekeepers.',
|
||||||
|
'Local communities host the value but capture almost none of it.',
|
||||||
|
'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.',
|
||||||
|
}
|
||||||
|
|
||||||
|
/** The technology stack shown on the Tech slide. */
|
||||||
|
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.',
|
||||||
|
icon: 'Wifi',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Open hardware',
|
||||||
|
body: 'Servers, routers, exchange kiosks and NFC hardware from a documented, replicable bill of materials.',
|
||||||
|
icon: 'Cpu',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Sovereign software',
|
||||||
|
body: 'Self-hosted services on a stack you control — no platform lock-in, forkable by any future node.',
|
||||||
|
icon: 'Code',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Bitcoin & Lightning payments',
|
||||||
|
body: 'Instant, low-fee settlement at kiosks and NFC points. Value stays in the network, not the middleman.',
|
||||||
|
icon: 'Zap',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Nostr identity & comms',
|
||||||
|
body: 'Portable identity, messaging and social layer that travels with members across every node.',
|
||||||
|
icon: 'KeyRound',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Replicable blueprint',
|
||||||
|
body: 'Every node ships its own 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. */
|
||||||
|
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' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export type CostItem = { label: string; amount: number; note?: string }
|
||||||
|
export type CostCategory = {
|
||||||
|
id: string
|
||||||
|
title: string
|
||||||
|
subtitle: string
|
||||||
|
icon: string
|
||||||
|
items: CostItem[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The three investment cost categories. PLACEHOLDER amounts (USD).
|
||||||
|
* `total` is derived from items() below — edit line items, not totals.
|
||||||
|
*/
|
||||||
|
export const costCategories: CostCategory[] = [
|
||||||
|
{
|
||||||
|
id: 'core',
|
||||||
|
title: 'Base hardware & development',
|
||||||
|
subtitle: 'Servers, routers, exchange kiosks, NFC hardware + core dev salaries',
|
||||||
|
icon: 'Cpu',
|
||||||
|
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: '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',
|
||||||
|
icon: 'Building2',
|
||||||
|
items: [
|
||||||
|
{ label: 'Lease deposit & permits', amount: 60_000 },
|
||||||
|
{ label: 'Renovation & fit-out', amount: 260_000 },
|
||||||
|
{ label: 'AV, furniture & kitchen', amount: 120_000 },
|
||||||
|
{ label: 'On-site network install', amount: 40_000 },
|
||||||
|
{ label: 'Launch & working capital', amount: 40_000 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'farm',
|
||||||
|
title: 'Farm location build',
|
||||||
|
subtitle: 'Land, structures & off-grid infrastructure for the rural node',
|
||||||
|
icon: 'Trees',
|
||||||
|
items: [
|
||||||
|
{ label: 'Land improvements & access', amount: 90_000 },
|
||||||
|
{ label: 'Lodging & studio structures', amount: 300_000 },
|
||||||
|
{ label: 'Off-grid power & water', amount: 110_000 },
|
||||||
|
{ label: 'Alpacas & farm infrastructure', amount: 70_000 },
|
||||||
|
{ label: 'On-site mesh & launch', amount: 60_000 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export const categoryTotal = (c: CostCategory) => c.items.reduce((s, i) => s + i.amount, 0)
|
||||||
|
export const raiseTotal = costCategories.reduce((s, c) => s + categoryTotal(c), 0)
|
||||||
|
|
||||||
|
export type AngelTier = {
|
||||||
|
name: string
|
||||||
|
minAmount: number
|
||||||
|
equity: string
|
||||||
|
benefits: string[]
|
||||||
|
featured?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Angel investment — equity + benefits. PLACEHOLDER terms. */
|
||||||
|
export const angelTiers: AngelTier[] = [
|
||||||
|
{
|
||||||
|
name: 'Seed Angel',
|
||||||
|
minAmount: 50_000,
|
||||||
|
equity: 'Equity from a common SAFE',
|
||||||
|
benefits: [
|
||||||
|
'Pro-rata equity in the network',
|
||||||
|
'Founding-member access to both nodes',
|
||||||
|
'Quarterly investor updates',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Network Angel',
|
||||||
|
minAmount: 100_000,
|
||||||
|
equity: 'Priced equity + pro-rata rights',
|
||||||
|
featured: true,
|
||||||
|
benefits: [
|
||||||
|
'Everything in Seed, plus:',
|
||||||
|
'Advisory input on network direction',
|
||||||
|
'Complimentary retreat & residency weeks',
|
||||||
|
'Named node sponsor',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Founding Angel',
|
||||||
|
minAmount: 250_000,
|
||||||
|
equity: 'Priced equity + board observer seat',
|
||||||
|
benefits: [
|
||||||
|
'Everything in Network, plus:',
|
||||||
|
'Board observer seat',
|
||||||
|
'Naming rights on a flagship space',
|
||||||
|
'Lifetime network membership',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export type ContributorTier = {
|
||||||
|
name: string
|
||||||
|
amount: number
|
||||||
|
unit?: string
|
||||||
|
blurb: string
|
||||||
|
icon: string
|
||||||
|
featured?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Smaller backers — perks, not equity. PLACEHOLDER prices. */
|
||||||
|
export const contributorTiers: ContributorTier[] = [
|
||||||
|
{
|
||||||
|
name: 'Backer',
|
||||||
|
amount: 25,
|
||||||
|
blurb: 'Fund a member NFC card and get your name on the founders’ wall.',
|
||||||
|
icon: 'CreditCard',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Node Router',
|
||||||
|
amount: 150,
|
||||||
|
blurb: 'Put a community-owned router on the mesh. Adopt-a-node on the live map.',
|
||||||
|
icon: 'Router',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mesh Kit',
|
||||||
|
amount: 250,
|
||||||
|
blurb: 'Sponsor a full mesh kit that extends coverage across a location.',
|
||||||
|
icon: 'Wifi',
|
||||||
|
featured: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Sponsor an Alpaca',
|
||||||
|
amount: 500,
|
||||||
|
unit: '/yr',
|
||||||
|
blurb: 'Name & sponsor an alpaca at the farm. Photos, updates, and a visit.',
|
||||||
|
icon: 'Origami',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
/** Roadmap / replication story. */
|
||||||
|
export const roadmap = [
|
||||||
|
{
|
||||||
|
phase: 'Phase 0',
|
||||||
|
title: 'Raise & finalize',
|
||||||
|
when: 'Now',
|
||||||
|
body: 'Close the angel round, lock sites, finalize the open bill of materials.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
phase: 'Phase 1',
|
||||||
|
title: 'Build the two nodes',
|
||||||
|
when: '~6–9 mo',
|
||||||
|
body: 'Fit out the city node and the farm node in parallel; deploy the full stack.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
phase: 'Phase 2',
|
||||||
|
title: 'Operate & prove revenue',
|
||||||
|
when: '~9–18 mo',
|
||||||
|
body: 'Run events, 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.',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
/** Formatting helpers used across slides. */
|
||||||
|
export const fmtUsd = (n: number) =>
|
||||||
|
n >= 1000
|
||||||
|
? `$${(n / 1000).toLocaleString('en-US', { maximumFractionDigits: n % 1000 === 0 ? 0 : 1 })}k`
|
||||||
|
: `$${n.toLocaleString('en-US')}`
|
||||||
|
|
||||||
|
export const fmtUsdFull = (n: number) => `$${n.toLocaleString('en-US')}`
|
||||||
Loading…
Add table
Add a link
Reference in a new issue