{
  "version": 1,
  "generated_by": "https://github.com/BACON-AI-CLOUD/bacon-ai-central/blob/main/apps-registry.json",
  "tier_strategy_doc": "https://docs.app.bacon-ai.cloud/tier-strategie.html",
  "port_formula": "[Service][Project##][Tier]",
  "service_codes": {
    "3": "MCP servers / AI agents",
    "4": "REST APIs",
    "5": "Web frontends / SPAs",
    "6": "Monitoring / observability",
    "7": "WebSocket / real-time",
    "8": "Odoo ERP instances",
    "9": "Experimental / overflow"
  },
  "tier_codes": {
    "0": "production",
    "1": "hotfix",
    "2": "staging / UAT",
    "3": "QA / SIT",
    "4": "dev-A",
    "5": "dev-B",
    "6": "dev-C",
    "7": "dev-D",
    "8": "dev-E",
    "9": "sandbox"
  },
  "hosts": {
    "tnas": {
      "lan_ip": "192.168.188.162",
      "tailscale_name": "nato01",
      "ssh_port": 9222,
      "ssh_user": "TheBacons",
      "deploy_root": "/Volume2/TRAID-8TB-DATA/00_AI_Development/BACON-AI/dashboards",
      "use_for": "always-on internal dashboards, MCP-HTTP, household tools"
    },
    "hostinger": {
      "public_host": "srv906866.hstgr.cloud",
      "tailscale_name": "srv906866",
      "ssh_port": 22,
      "ssh_user": "bacon",
      "deploy_root": "/opt/bacon",
      "use_for": "public TLS apps, Odoo tier stack, customer-facing services"
    }
  },
  "apps": [
    {
      "id": "bacon-server-dashboard",
      "name": "Server Hardware + Shelly",
      "tier_port": 6160,
      "service_code": 6,
      "project_code": 16,
      "project_short": "SVRD",
      "tier": 0,
      "host": "tnas",
      "container": "bacon-server-dashboard",
      "lan_url": "http://192.168.188.162:6160",
      "tailscale_url": "http://nato01:6160",
      "public_url": null,
      "source_repo": "bacon-server-dashboard",
      "source_branch": "feat-005-shelly-dashboard",
      "owner": "colin",
      "status": "production",
      "description": "Live hardware metrics (CPU/RAM/disk) for every mesh machine + Shelly switch control. Polls via SSH using a single ed25519 key minted on TNAS.",
      "tags": ["monitoring", "dashboard", "internal", "shelly", "iot"]
    },
    {
      "id": "bacon-apps-catalog",
      "name": "BACON-AI App Catalog",
      "tier_port": 5190,
      "service_code": 5,
      "project_code": 19,
      "project_short": "ACAT",
      "tier": 0,
      "host": "tnas",
      "container": "bacon-apps-catalog",
      "lan_url": "http://192.168.188.162:5190",
      "tailscale_url": "http://nato01:5190",
      "public_url": "https://apps.bacon-ai.cloud",
      "source_repo": "bacon-ai-central",
      "source_branch": "main",
      "owner": "colin",
      "status": "production",
      "description": "Central registry of always-on BACON-AI services for both humans (HTML) and AI agents (JSON). Single source of truth: apps-registry.json.",
      "tags": ["catalog", "registry", "meta", "internal"]
    },
    {
      "id": "bacon-tax-viewer",
      "name": "Tax Document Browser (admin-tax)",
      "tier_port": 5150,
      "service_code": 5,
      "project_code": 15,
      "project_short": "TAXD",
      "tier": 0,
      "host": "tnas",
      "container": "bacon-tax-viewer",
      "lan_url": "http://192.168.188.162:5150",
      "tailscale_url": "http://nato01:5150",
      "public_url": null,
      "access": "tailscale+lan, basic_auth (colin/calvin/bacon/merrin)",
      "source_repo": "tax-uk-declarations",
      "source_branch": "main",
      "source_origin": "win11-pc (rsync'd, read-only)",
      "owner": "colin",
      "status": "production",
      "description": "Read-only browser for the tax declarations filed/ tree (DE + UK + NO + cross-cutting). Pure stdlib server. No public exposure (sensitive documents).",
      "tags": ["viewer", "tax", "internal", "sensitive"]
    },
    {
      "id": "bacon-scan",
      "name": "Mesh Document Scanner",
      "tier_port": 5200,
      "service_code": 5,
      "project_code": 20,
      "project_short": "SCAN",
      "tier": 0,
      "host": "tnas",
      "container": "bacon-scan",
      "lan_url": "http://192.168.188.162:5200",
      "tailscale_url": "http://nato01:5200",
      "public_url": null,
      "access": "tailscale+lan, basic_auth (colin/calvin/bacon/merrin)",
      "source_repo": "bacon-ai-scan-v4-two-tier",
      "source_branch": "main",
      "source_origin": "win11-pc (rsync'd, read-only)",
      "owner": "colin",
      "status": "production",
      "description": "Phone + browser webcam scanner (jscanify/OpenCV.js for perspective correction). Writes scans into shared tax-documents/ tree on TNAS. Browser webcam needs HTTPS (use Tailscale Serve for that).",
      "tags": ["scanner", "webcam", "phone", "ocr", "internal"]
    },
    {
      "id": "bacon-mobile-sensor",
      "name": "S23 Mobile Sensor Stream",
      "tier_port": 6180,
      "service_code": 6,
      "project_code": 18,
      "project_short": "MSEN",
      "tier": 0,
      "host": "tnas",
      "container": "bacon-mobile-sensor",
      "lan_url": "http://192.168.188.162:6180",
      "tailscale_url": "http://nato01:6180",
      "public_url": "https://mobile-sensor.apps.bacon-ai.cloud",
      "source_repo": "mobile-sensor-dashboard",
      "source_branch": "main",
      "owner": "colin",
      "status": "production",
      "description": "Real-time stream of 15+ sensors from a Samsung Galaxy S23 (accel, gyro, mag, GPS, battery, WiFi/cell, etc). Polls phone_server.py via LAN with Tailscale fallback. SQLite history.",
      "tags": ["monitoring", "dashboard", "iot", "phone", "termux"]
    }
  ],
  "reserved_project_numbers": {
    "17": "Vite default 5173 collision — never assign",
    "43": "PostgreSQL 5432 collision — never assign",
    "90": "VNC 5900 collision — never assign"
  }
}
