2 lines
9.2 KiB
JavaScript
2 lines
9.2 KiB
JavaScript
import{$ as v,r as A,z as k,j as S}from"./index-DnbYEqLr.js";const d=[{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:!0},{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:!0},{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:!0},{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.",action:"configure",isAutomatic:!1}],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:!0},{id:"install-lnd",title:"Install Lightning Network",description:"Lightning enables instant payments with tiny fees. Perfect for everyday transactions.",appId:"lnd",action:"install",isAutomatic:!0},{id:"open-channel",title:"Open a Lightning Channel",description:"Open your first payment channel to start sending and receiving Lightning payments. LND will guide you through it.",action:"configure",isAutomatic:!1}],estimatedTime:"~30 min + sync time",difficulty:"beginner"},{id:"store-photos",title:"Store My Photos",subtitle:"Private photo backup and gallery on your own hardware",icon:"photos",category:"storage",requiredApps:["immich"],steps:[{id:"install-immich",title:"Install Immich",description:"Immich is a self-hosted photo and video management solution. It looks and feels like Google Photos, but your data stays on your server.",appId:"immich",action:"install",isAutomatic:!0},{id:"configure-immich",title:"Create Your Account",description:"Set up your Immich account and configure your photo library. Quick and simple.",action:"configure",isAutomatic:!1},{id:"mobile-sync",title:"Connect Your Phone",description:"Download the Immich app on your phone and scan the QR code to start automatic photo backup.",action:"info",isAutomatic:!1}],estimatedTime:"~15 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:!0},{id:"configure-nextcloud",title:"Set Up Your Cloud",description:"Create your admin account and configure storage. Nextcloud will open for you to complete setup.",action:"configure",isAutomatic:!1},{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:!1}],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:!0},{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:!0},{id:"open-channels",title:"Open Payment Channels",description:"Open channels with well-connected nodes to start routing payments. More channels means more routing opportunities.",action:"configure",isAutomatic:!1},{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:!0}],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:!0},{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:!0},{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.",action:"configure",isAutomatic:!1},{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:!1}],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:!0},{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:!1},{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:!1}],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:!1},{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:!0},{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:!1}],estimatedTime:"~10 min",difficulty:"beginner"}];function C(e){return d.find(r=>r.id===e)}const y="archipelago-goal-progress",I={immich:["immich-server","immich-app","immich_server"],nextcloud:["nextcloud-aio","nextcloud-server"],"bitcoin-knots":["bitcoin","bitcoin-core"]};function p(e,r){if(e===r)return!0;const s=I[r];return s?s.includes(e):!1}const x=v("goals",()=>{const e=A({});function r(){try{const t=localStorage.getItem(y);t&&(e.value=JSON.parse(t))}catch{}}function s(){localStorage.setItem(y,JSON.stringify(e.value))}function m(t){const i=d.find(n=>n.id===t);if(!i)return"not-started";if(i.requiredApps.length===0)return e.value[t]?.status||"not-started";const a=k().packages;let c=!1;for(const n of i.steps)n.appId&&n.action==="install"&&Object.keys(a).some(u=>p(u,n.appId))&&(e.value[t]||(e.value[t]={goalId:t,status:"in-progress",currentStepIndex:0,completedSteps:[],startedAt:Date.now()},c=!0),e.value[t].completedSteps.includes(n.id)||(e.value[t].completedSteps.push(n.id),c=!0));return c&&s(),i.requiredApps.every(n=>Object.entries(a).some(([l,u])=>p(l,n)&&u.state==="running"))?"completed":i.requiredApps.some(n=>Object.keys(a).some(l=>p(l,n)))||e.value[t]?"in-progress":"not-started"}const f=S(()=>{const t={};for(const i of d)t[i.id]=m(i.id);return t});function h(t){e.value[t]={goalId:t,status:"in-progress",currentStepIndex:0,completedSteps:[],startedAt:Date.now()},s()}function g(t,i){const o=e.value[t];if(!o)return;o.completedSteps.includes(i)||o.completedSteps.push(i);const a=d.find(c=>c.id===t);a&&o.completedSteps.length>=a.steps.length?o.status="completed":o.currentStepIndex=Math.min(o.currentStepIndex+1,(a?.steps.length??1)-1),s()}function b(t){delete e.value[t],s()}return r(),{progress:e,goalStatuses:f,getGoalStatus:m,startGoal:h,completeStep:g,resetGoal:b}});export{d as G,C as g,x as u};
|