# CLAUDE.md — Archipelago (Archy) ## Overview Archipelago is a **Bitcoin Node OS** — bootable, self-sovereign personal server. Flash to USB, install on hardware, manage via web UI. **Stack**: Rust backend + Vue 3 + TypeScript (strict) + Vite 7 + Tailwind + Pinia + Podman on Debian 12 **Version**: 1.3.0 | **Target**: x86_64 and ARM64 --- ## Beta Freeze (2026-03-18) **Phase 1: Feature Testing (internal) — WE ARE HERE** Feature set is LOCKED. Only: bug fixes, security hardening, ISO build fixes, UI polish, testing. No new features, no new apps, no new deps, no scope creep. Track: `docs/BETA-PROGRESS.md` | Checklist: `docs/BETA-RELEASE-CHECKLIST.md` --- ## Quick Reference ```bash cd neode-ui && npm start # Local dev (mock backend :5959, Vite :8100) cd neode-ui && npm run build # Build (outputs to web/dist/neode-ui/) ./scripts/deploy-to-target.sh --live # Deploy to live server (.228) ``` ## Infrastructure | What | Where | |------|-------| | Dev server | `192.168.1.228` (SSH key: `~/.ssh/archipelago-deploy`) | | Secondary | `192.168.1.198` | | Git remote | `git.tx1138.com` (remote name: `tx1138`) | | App registry | `80.71.235.15:3000/archipelago/` (HTTP, insecure) | | CI runner | act_runner on .228, workflow: `.gitea/workflows/build-iso.yml` | | ISO builds | FileBrowser at `http://192.168.1.228:8083` → Builds/ | | SSH creds | Gitignored `scripts/deploy-config.sh` | | Web password | `password123` | ## Architecture ``` Debian 12 ├── Podman (rootless, user archipelago) ├── Nginx (80/443 → backend, app proxies) ├── Rust Backend (core/) on 127.0.0.1:5678 │ ├── core/archipelago/ — Binary, RPC, auth, sessions │ └── core/container/ — PodmanClient, manifests, health └── Vue.js UI (neode-ui/) ├── src/api/rpc-client.ts — All backend communication ├── src/stores/ — Pinia state ├── src/views/ — Pages └── src/style.css — ALL styling (global classes only) ``` **Data paths**: `/var/lib/archipelago/{app-id}/` (data), `/opt/archipelago/web-ui/` (frontend), `/usr/local/bin/archipelago` (binary) ## Critical Rules 1. **Never build Rust on macOS** — deploy script handles cross-compilation via rsync + remote build 2. **Always deploy after changes** — `./scripts/deploy-to-target.sh --live` 3. **Frontend builds to `web/dist/neode-ui/`** — not `neode-ui/dist/` 4. **Container images**: `scripts/image-versions.sh` is the single source of truth. All scripts use `$*_IMAGE` variables, never hardcoded registry paths. 5. **Type-check before committing** — `cd neode-ui && npx vue-tsc -b --noEmit` ## Frontend - `