#!/bin/bash set -euo pipefail # Archipelago Development Server Starter # Pure Archipelago implementation - NO StartOS set +e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" echo "๐Ÿš€ Archipelago Development Server Starter" echo "" # Use the workspace directory FRONTEND_DIR="$PROJECT_ROOT/neode-ui" BACKEND_DIR="$PROJECT_ROOT/core" # Verify the frontend directory exists if [ ! -d "$FRONTEND_DIR" ]; then echo "โŒ Frontend directory not found: $FRONTEND_DIR" exit 1 fi echo "Choose a development mode:" echo " 1) Mock backend (UI development only - fastest)" echo " 2) Full stack (Archipelago backend + frontend)" echo " 3) Setup mode (first-time user setup flow - mock)" echo " 4) Onboarding mode (onboarding flow - mock)" echo " 5) Existing user (login with password - mock)" echo " 6) Show manual instructions" echo "" read -p "Enter choice [1-6]: " choice case $choice in 1) echo "" echo "๐ŸŽจ Starting frontend with mock backend..." cd "$FRONTEND_DIR" # Kill any existing processes echo " ๐Ÿงน Cleaning up ports 5959 and 8100..." lsof -ti:5959 | xargs kill -9 2>/dev/null || true lsof -ti:8100 | xargs kill -9 2>/dev/null || true sleep 1 # Check dependencies if [ ! -d "node_modules" ]; then echo "โš ๏ธ Installing dependencies..." npm install fi echo " Running: npm run dev:mock" echo " (Press Ctrl+C to stop)" echo "" npm run dev:mock ;; 2) echo "" echo "๐Ÿ”ง Starting FULL STACK (Archipelago backend + frontend + Docker apps)..." # Kill ports echo " ๐Ÿงน Cleaning up ports 5959 and 8100..." lsof -ti:5959 | xargs kill -9 2>/dev/null || true lsof -ti:8100 | xargs kill -9 2>/dev/null || true sleep 1 # Mock backend simulates apps โ€” Docker containers optional echo "" echo " โ„น๏ธ Mock backend will simulate apps (Docker containers optional)" echo "" # Check if backend can build echo " ๐Ÿ”จ Checking backend build..." if [ ! -d "$BACKEND_DIR" ]; then echo "โŒ Backend directory not found: $BACKEND_DIR" exit 1 fi cd "$BACKEND_DIR" if ! cargo check --bin archipelago > /tmp/archipelago-backend-check.log 2>&1; then echo "โŒ Backend build check failed. See /tmp/archipelago-backend-check.log for details." echo " Falling back to mock backend for UI development." cd "$FRONTEND_DIR" if [ ! -d "node_modules" ]; then npm install fi npm run dev:mock exit 0 fi echo " ๐Ÿš€ Starting Archipelago backend..." # Set development environment variables export ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev export ARCHIPELAGO_DEV_DATA_DIR=/tmp/archipelago-dev export ARCHIPELAGO_DEV_MODE=true export ARCHIPELAGO_BIND=127.0.0.1:5959 export ARCHIPELAGO_LOG_LEVEL=debug export ARCHIPELAGO_PORT_OFFSET=10000 export ARCHIPELAGO_BITCOIN_SIMULATION=mock export ARCHIPELAGO_CONTAINER_RUNTIME=docker cargo run --bin archipelago > /tmp/archipelago-backend.log 2>&1 & BACKEND_PID=$! echo " Backend PID: $BACKEND_PID" echo " Logs: tail -f /tmp/archipelago-backend.log" # Wait for backend to start listening on port 5959 echo " โณ Waiting for backend to start on port 5959..." timeout=60 count=0 while ! lsof -ti:5959 > /dev/null 2>&1 && [ $count -lt $timeout ]; do sleep 1 count=$((count + 1)) done if ! lsof -ti:5959 > /dev/null 2>&1; then echo "โŒ Backend did not start on port 5959 within $timeout seconds." echo " Killing backend process $BACKEND_PID." kill $BACKEND_PID 2>/dev/null || true echo " Falling back to mock backend for UI development." cd "$FRONTEND_DIR" if [ ! -d "node_modules" ]; then npm install fi npm run dev:mock exit 0 fi echo " โœ… Backend is listening on port 5959" # Start frontend echo " ๐ŸŽจ Starting frontend..." cd "$FRONTEND_DIR" if [ ! -d "node_modules" ]; then echo " Installing frontend dependencies..." npm install fi # Trap to kill backend on exit (Docker containers keep running) trap "kill $BACKEND_PID 2>/dev/null" EXIT echo "" echo " (Press Ctrl+C to stop servers)" echo " ๐Ÿ’ก Docker containers will keep running. Use 'docker compose down' to stop them." echo "" npm run dev ;; 3) echo "" echo "๐Ÿ”ง Starting in SETUP mode (mock backend)..." cd "$FRONTEND_DIR" # Kill ports lsof -ti:5959 | xargs kill -9 2>/dev/null || true lsof -ti:8100 | xargs kill -9 2>/dev/null || true sleep 1 if [ ! -d "node_modules" ]; then npm install fi echo " Starting setup flow..." VITE_DEV_MODE=setup npm run dev:mock ;; 4) echo "" echo "๐Ÿ“š Starting in ONBOARDING mode (mock backend)..." cd "$FRONTEND_DIR" # Kill ports lsof -ti:5959 | xargs kill -9 2>/dev/null || true lsof -ti:8100 | xargs kill -9 2>/dev/null || true sleep 1 if [ ! -d "node_modules" ]; then npm install fi echo " Starting onboarding flow..." VITE_DEV_MODE=onboarding npm run dev:mock ;; 5) echo "" echo "๐Ÿ‘ค Starting as EXISTING USER (mock backend)..." cd "$FRONTEND_DIR" # Kill ports lsof -ti:5959 | xargs kill -9 2>/dev/null || true lsof -ti:8100 | xargs kill -9 2>/dev/null || true sleep 1 if [ ! -d "node_modules" ]; then npm install fi echo " Starting with login screen..." VITE_DEV_MODE=existing npm run dev:mock ;; 6) echo "" echo "๐Ÿ“‹ Manual Instructions:" echo "" echo "For UI development (mock backend):" echo " cd $FRONTEND_DIR" echo " npm run dev:mock" echo "" echo "For full stack (Docker apps + Archipelago backend + frontend):" echo " Terminal 1 (Docker Apps):" echo " cd $PROJECT_ROOT" echo " ./start-docker-apps.sh" echo "" echo " Terminal 2 (Backend):" echo " cd $BACKEND_DIR" echo " export ARCHIPELAGO_CONTAINER_RUNTIME=docker" echo " export ARCHIPELAGO_DEV_MODE=true" echo " cargo run --bin archipelago" echo "" echo " Terminal 3 (Frontend):" echo " cd $FRONTEND_DIR" echo " npm run dev" echo "" echo "Then open: http://localhost:8100" echo "" echo "To stop Docker apps:" echo " cd $PROJECT_ROOT" echo " ./stop-docker-apps.sh" echo "" echo "Mock backend dev modes:" echo " VITE_DEV_MODE=setup - First-time setup flow" echo " VITE_DEV_MODE=onboarding - Onboarding flow" echo " VITE_DEV_MODE=existing - Login screen" ;; *) echo "Invalid choice" exit 1 ;; esac