Archipelago — open-source initial import

This commit is contained in:
Archipelago
2026-08-12 10:55:50 +00:00
commit b67e1527a2
2068 changed files with 472303 additions and 0 deletions
+341
View File
@@ -0,0 +1,341 @@
import type { GoalDefinition, GoalStep } from '@/types/goals'
/** Zeus (Olympus LSP) channel size limits, in sats */
export const ZEUS_CHANNEL_MIN_SATS = 150_000
export const ZEUS_CHANNEL_MAX_SATS = 1_500_000
export const ZEUS_ICON = '/assets/img/app-icons/zeus.webp'
/**
* Shared "fund the bitcoin wallet" step used by every Lightning goal. Gated on
* the blockchain being fully synced (IBD) — the wizard shows a live sync timer
* until then, and a "Fund Wallet" receive flow after.
*/
const FUND_WALLET_STEP: GoalStep = {
id: 'fund-wallet',
title: 'Fund Your Bitcoin Wallet',
description:
"Send bitcoin to your node's on-chain wallet so it can open a Lightning channel. Zeus channels: minimum 150,000 · maximum 1,500,000 on-chain sats required. Funding unlocks once your node finishes syncing the blockchain.",
action: 'fund',
isAutomatic: false,
icon: '/assets/img/app-icons/bitcoin-knots.webp',
}
export const GOALS: GoalDefinition[] = [
{
id: 'open-a-shop',
title: 'Open a Shop',
subtitle: 'Accept Bitcoin payments with your own online store',
icon: 'shop',
category: 'commerce',
requiredApps: ['bitcoin-knots', 'lnd', 'btcpay-server'],
steps: [
{
id: 'install-bitcoin',
title: 'Install Bitcoin Node',
description: 'Bitcoin Knots validates transactions and maintains the blockchain on your hardware. This is the foundation of your sovereign payment stack.',
appId: 'bitcoin-knots',
action: 'install',
isAutomatic: true,
},
{
id: 'install-lnd',
title: 'Install Lightning Network',
description: 'LND enables instant, low-fee Bitcoin payments through payment channels. Your customers can pay in seconds.',
appId: 'lnd',
action: 'install',
isAutomatic: true,
},
{ ...FUND_WALLET_STEP },
{
id: 'open-zeus-channel',
title: 'Open a Channel with Zeus',
description:
'Open a channel with Zeus Olympus node and start sending and receiving Lightning payments. Minimum 150,000 · maximum 1,500,000 on-chain sats required.',
action: 'configure',
isAutomatic: false,
icon: ZEUS_ICON,
ctaLabel: 'Open a channel',
},
{
id: 'install-btcpay',
title: 'Install BTCPay Server',
description: 'BTCPay Server is your self-hosted payment processor. Create invoices, manage your store, and accept payments — all without middlemen.',
appId: 'btcpay-server',
action: 'install',
isAutomatic: true,
},
{
id: 'configure-store',
title: 'Set Up Your Store',
description: 'Create your store, set your currency, and customize your payment page. BTCPay will open so you can configure everything.',
appId: 'btcpay-server',
action: 'configure',
isAutomatic: false,
},
],
estimatedTime: '~45 min + sync time',
difficulty: 'beginner',
},
{
id: 'accept-payments',
title: 'Accept Payments',
subtitle: 'Receive Bitcoin and Lightning payments directly',
icon: 'payments',
category: 'payments',
requiredApps: ['bitcoin-knots', 'lnd'],
steps: [
{
id: 'install-bitcoin',
title: 'Install Bitcoin Node',
description: 'Your own Bitcoin node verifies every transaction independently. No trust required.',
appId: 'bitcoin-knots',
action: 'install',
isAutomatic: true,
},
{
id: 'install-lnd',
title: 'Install Lightning Network',
description: 'Lightning enables instant payments with tiny fees. Perfect for everyday transactions.',
appId: 'lnd',
action: 'install',
isAutomatic: true,
},
{ ...FUND_WALLET_STEP },
{
id: 'open-channel',
title: 'Open a Channel with Zeus',
description:
'Open a channel with Zeus Olympus node and start sending and receiving Lightning payments. Minimum 150,000 · maximum 1,500,000 on-chain sats required.',
action: 'configure',
isAutomatic: false,
icon: ZEUS_ICON,
ctaLabel: 'Open a channel',
},
],
estimatedTime: '~30 min + sync time',
difficulty: 'beginner',
},
{
id: 'file-browser',
title: 'File Browser',
subtitle: 'Browse, upload, and manage files on your server',
icon: 'files',
category: 'storage',
requiredApps: ['filebrowser'],
steps: [
{
id: 'install-filebrowser',
title: 'Install FileBrowser',
description: 'FileBrowser is a lightweight web file manager. Upload, download, and organize files on your server from any browser.',
appId: 'filebrowser',
action: 'install',
isAutomatic: true,
},
{
id: 'configure-filebrowser',
title: 'Log In',
description: 'Open FileBrowser and log in. Change your password on first login, then start managing your files.',
appId: 'filebrowser',
action: 'configure',
isAutomatic: false,
},
],
estimatedTime: '~5 min',
difficulty: 'beginner',
},
{
id: 'store-files',
title: 'Store My Files',
subtitle: 'Personal cloud storage and file sync',
icon: 'files',
category: 'storage',
requiredApps: ['nextcloud'],
steps: [
{
id: 'install-nextcloud',
title: 'Install Cloud Storage',
description: 'Nextcloud gives you a full cloud storage platform — files, calendars, contacts, and more. Like Dropbox, but sovereign.',
appId: 'nextcloud',
action: 'install',
isAutomatic: true,
},
{
id: 'configure-nextcloud',
title: 'Set Up Your Cloud',
description: 'Create your admin account and configure storage. Nextcloud will open for you to complete setup.',
appId: 'nextcloud',
action: 'configure',
isAutomatic: false,
},
{
id: 'sync-setup',
title: 'Sync Your Devices',
description: 'Install the Nextcloud app on your phone and computer to keep your files in sync across all devices.',
action: 'info',
isAutomatic: false,
},
],
estimatedTime: '~20 min',
difficulty: 'beginner',
},
{
id: 'run-lightning-node',
title: 'Run a Lightning Node',
subtitle: 'Route payments and earn sats on the Lightning Network',
icon: 'lightning',
category: 'network',
requiredApps: ['bitcoin-knots', 'lnd'],
steps: [
{
id: 'install-bitcoin',
title: 'Install Bitcoin Node',
description: 'The Bitcoin blockchain is the settlement layer. Your node needs to sync the full chain before Lightning can start.',
appId: 'bitcoin-knots',
action: 'install',
isAutomatic: true,
},
{
id: 'install-lnd',
title: 'Install LND',
description: 'LND is a full Lightning Network node. You can route payments for others and earn routing fees.',
appId: 'lnd',
action: 'install',
isAutomatic: true,
},
{ ...FUND_WALLET_STEP },
{
id: 'open-channels',
title: 'Open Payment Channels',
description:
'Open channels with well-connected nodes to start routing payments. A great first channel is Zeus Olympus (minimum 150,000 · maximum 1,500,000 on-chain sats) — it also puts your node in your pocket. More channels means more routing opportunities.',
action: 'configure',
isAutomatic: false,
icon: ZEUS_ICON,
ctaLabel: 'Open a channel',
},
{
id: 'verify-routing',
title: 'Verify Node is Routing',
description: 'Check that your node is visible on the network and ready to route payments.',
action: 'verify',
isAutomatic: true,
},
],
estimatedTime: '~40 min + sync time',
difficulty: 'intermediate',
},
{
id: 'setup-fedimint',
title: 'Create a Community',
subtitle: 'Start a Fedimint federation for private, scalable Bitcoin',
icon: 'community',
category: 'community',
requiredApps: ['bitcoin-knots', 'fedimint'],
steps: [
{
id: 'install-bitcoin',
title: 'Install Bitcoin Node',
description: 'Bitcoin Knots provides the base layer that Fedimint connects to for on-chain transactions and consensus.',
appId: 'bitcoin-knots',
action: 'install',
isAutomatic: true,
},
{
id: 'install-fedimint',
title: 'Install Fedimint',
description: 'Fedimint is a federated Bitcoin mint. Guardians collectively manage funds using threshold signatures — no single point of failure.',
appId: 'fedimint',
action: 'install',
isAutomatic: true,
},
{
id: 'configure-guardian',
title: 'Set Up Guardian UI',
description: 'Open the Guardian UI (port 8175) to configure your federation name, set the guardian threshold, and initialize the mint.',
appId: 'fedimint',
action: 'configure',
isAutomatic: false,
},
{
id: 'share-invite',
title: 'Share Invite Code',
description: 'Generate and share your federation invite code with community members so they can join and start using ecash.',
action: 'info',
isAutomatic: false,
},
],
estimatedTime: '~30 min + sync time',
difficulty: 'intermediate',
},
{
id: 'create-identity',
title: 'Create My Identity',
subtitle: 'Sovereign digital identity with DID and Nostr',
icon: 'identity',
category: 'identity',
requiredApps: [],
steps: [
{
id: 'generate-did',
title: 'Generate Your Identity',
description: 'Your server creates a cryptographic identity (DID) that you own and control. No company can revoke it.',
action: 'verify',
isAutomatic: true,
},
{
id: 'setup-nostr',
title: 'Set Up Nostr Profile',
description: 'Publish your identity to the Nostr network. This lets you sign into Nostr-compatible apps directly from your server.',
action: 'configure',
isAutomatic: false,
},
{
id: 'export-identity',
title: 'Export Your Identity',
description: 'Save your identity credentials for backup. This is your portable sovereign identity — take it anywhere.',
action: 'info',
isAutomatic: false,
},
],
estimatedTime: '~5 min',
difficulty: 'beginner',
},
{
id: 'back-up-everything',
title: 'Back Up Everything',
subtitle: 'Encrypted backup of your entire node',
icon: 'backup',
category: 'backup',
requiredApps: [],
steps: [
{
id: 'create-passphrase',
title: 'Create a Passphrase',
description: 'Choose a strong passphrase to encrypt your backup. Without this passphrase, nobody can access your data — not even us.',
action: 'configure',
isAutomatic: false,
},
{
id: 'create-backup',
title: 'Create Encrypted Backup',
description: 'Your server will create a complete encrypted backup of all your data, keys, and configuration.',
action: 'verify',
isAutomatic: true,
},
{
id: 'save-backup',
title: 'Save Your Backup',
description: 'Download your encrypted backup file and store it somewhere safe. Consider keeping a copy on a USB drive and in the cloud.',
action: 'info',
isAutomatic: false,
},
],
estimatedTime: '~10 min',
difficulty: 'beginner',
},
]
export function getGoalById(id: string): GoalDefinition | undefined {
return GOALS.find((g) => g.id === id)
}
+149
View File
@@ -0,0 +1,149 @@
export interface HelpSection {
id: string
label: string
items: HelpItem[]
}
export interface HelpItem {
id: string
label: string
path?: string
content?: string
relatedPath?: string
}
export interface SearchableItem {
id: string
label: string
path?: string
type: 'navigate' | 'learn' | 'action' | 'goal'
section: string
content?: string
relatedPath?: string
}
export const helpTree: HelpSection[] = [
{
id: 'navigate',
label: 'Navigate',
items: [
{ id: 'home', label: 'Home', path: '/dashboard' },
{ id: 'apps', label: 'My Apps', path: '/dashboard/apps' },
{ id: 'marketplace', label: 'App Store', path: '/dashboard/marketplace' },
{ id: 'cloud', label: 'Cloud', path: '/dashboard/cloud' },
{ id: 'server', label: 'Network', path: '/dashboard/server' },
{ id: 'web5', label: 'Web5', path: '/dashboard/web5' },
{ id: 'settings', label: 'Settings', path: '/dashboard/settings' },
],
},
{
id: 'learn',
label: 'Learn',
items: [
{
id: 'getting-started',
label: 'Getting Started',
content: 'Welcome to Archipelago! To get started: 1) Flash the Archipelago ISO to a USB drive using Balena Etcher or dd. 2) Boot your hardware from the USB. 3) The installer partitions your disk, installs the OS, and reboots automatically. 4) On first boot, open a browser and navigate to your node\'s IP address. 5) Complete the onboarding wizard — set a password, create your first identity (DID), and choose your setup path. Your node is now ready to install apps, connect to Bitcoin, and join the sovereign web.',
relatedPath: '/dashboard',
},
{
id: 'bitcoin-basics',
label: 'Bitcoin Basics',
content: 'Bitcoin is a decentralized digital currency. Your node validates transactions and maintains the blockchain locally. Install Bitcoin Knots from the App Store to run a full node. Initial sync takes 2-3 days depending on hardware and internet speed. Once synced, your node independently verifies every transaction without trusting any third party.',
relatedPath: '/dashboard/server',
},
{
id: 'lightning-network',
label: 'Lightning Network',
content: 'Lightning enables instant, low-fee payments. Install LND from the App Store (requires Bitcoin Knots). After installation, open channels with other nodes to send and receive payments. Use the Lightning Channels view to manage channels, check inbound/outbound liquidity, and monitor your routing fees. Channels require an on-chain transaction to open and close.',
relatedPath: '/dashboard/apps',
},
{
id: 'app-store-guide',
label: 'Installing & Managing Apps',
content: 'Open the App Store (marketplace icon) to browse available apps. Click Install to download and start an app. Some apps have dependencies — Electrs requires Bitcoin, BTCPay requires LND, Mempool requires both Bitcoin and Electrs. The system handles these automatically. After installation, apps appear in My Apps. Click an app to open it in an overlay or new tab. Use the app detail page to start, stop, restart, or uninstall apps.',
relatedPath: '/dashboard/marketplace',
},
{
id: 'identity-guide',
label: 'Your Digital Identity (DIDs)',
content: 'Archipelago creates a sovereign digital identity (DID) during onboarding. DIDs are cryptographic keypairs that prove your identity without any company in the middle. You can create multiple identities for different purposes — Personal, Business, or Anonymous. Each identity can sign messages, issue verifiable credentials, and authenticate with services like Indeehub. Manage identities in the Web5 view.',
relatedPath: '/dashboard/web5',
},
{
id: 'networking-guide',
label: 'Connecting with Peers',
content: 'Archipelago nodes can discover and connect with each other over Tor. In Web5, set your node visibility to "Discoverable" to let other nodes find you via Nostr. Accept connection requests from peers you trust. Once connected, you can message peers, share content, and exchange ecash payments — all over encrypted Tor connections. Your .onion address is shown in Settings.',
relatedPath: '/dashboard/web5',
},
{
id: 'content-sharing',
label: 'Sharing Content',
content: 'Share files and media with connected peers through the Content section in Web5. Add content from your Cloud storage, set it as free or paid (ecash-gated), and connected peers can browse and access your catalog. For paid content, peers pay with ecash micropayments — the sats appear in your wallet instantly.',
relatedPath: '/dashboard/web5',
},
{
id: 'self-hosting',
label: 'Self-Hosting',
content: 'Archipelago runs your services locally. Your data stays on your hardware, giving you full control and privacy. No cloud subscriptions, no data harvesting, no service shutdowns. You own your node, your data, and your identity. Back up your node regularly using the backup feature in Settings.',
relatedPath: '/dashboard',
},
{
id: 'troubleshooting',
label: 'Troubleshooting FAQ',
content: 'Common issues: 1) App won\'t start — check disk space in Settings > Server. 2) Bitcoin not syncing — ensure port 8333 is reachable; check network diagnostics. 3) Can\'t connect to peers — verify Tor is running (Settings > Network). 4) UI is slow — some views load data from multiple sources; check server resources. 5) Lost password — use the backup recovery key created during onboarding. 6) Container errors — try stopping and restarting the app, or uninstall and reinstall.',
relatedPath: '/dashboard/settings',
},
],
},
{
id: 'actions',
label: 'Actions',
items: [
{ id: 'open-cli', label: 'Open CLI', path: '__cli__' },
{ id: 'install-app', label: 'Install an App', path: '/dashboard/marketplace' },
{ id: 'manage-apps', label: 'Manage My Apps', path: '/dashboard/apps' },
{ id: 'network-settings', label: 'Network Settings', path: '/dashboard/server' },
{ id: 'backup', label: 'Backup & Recovery', path: '/dashboard/settings' },
],
},
{
id: 'goals',
label: 'Quick Start Goals',
items: [
{ id: 'goal-shop', label: 'Open a Shop', path: '/dashboard/goals/open-a-shop' },
{ id: 'goal-payments', label: 'Accept Payments', path: '/dashboard/goals/accept-payments' },
{ id: 'goal-photos', label: 'Store My Photos', path: '/dashboard/goals/store-photos' },
{ id: 'goal-files', label: 'Store My Files', path: '/dashboard/goals/store-files' },
{ id: 'goal-lightning', label: 'Run a Lightning Node', path: '/dashboard/goals/run-lightning-node' },
{ id: 'goal-identity', label: 'Create My Identity', path: '/dashboard/goals/create-identity' },
{ id: 'goal-backup', label: 'Back Up Everything', path: '/dashboard/goals/back-up-everything' },
],
},
]
export function flattenForSearch(): SearchableItem[] {
const result: SearchableItem[] = []
for (const section of helpTree) {
const type =
section.id === 'navigate'
? 'navigate'
: section.id === 'learn'
? 'learn'
: section.id === 'goals'
? 'goal'
: 'action'
for (const item of section.items) {
result.push({
id: item.id,
label: item.label,
path: item.path,
type,
section: section.label,
content: item.content,
relatedPath: item.relatedPath,
})
}
}
return result
}