AkurAI Build
Menu

Public repository / 64c0dba2296e41722c261d7a9c4d804cb4fdc020

AkurAI-Framework / AKURAI_APPS.toml

Latest change 439f0dcabf5cdf2b120c7724be895cf1df30507f - OLI-151: register akurai-site in AKURAI_APPS.toml by Ólafur Búi Ólafsson

# AKURAI_APPS.toml — Single source of truth for every deployed AkurAI application.
#
# Every app, regardless of tech stack, must expose the same ops contract so
# RustAgent and the self-healing pipeline can operate uniformly.
#
# Ops contract (required):
#   GET /api/health → {"app":"<name>","version":"<semver>","status":"ok"}
#   scripts/validate.sh → exit 0 = healthy
#   scripts/validate.sh → non-zero = broken (rollback)
#
# For Framework-based apps, also include:
#   "framework": "AkurAI-Framework"
#   "framework_version": "<semver>"

# ── Root: AkurAI-Framework ──────────────────────────────────────────────
[framework]
repo = "olibuijr/AkurAI-Framework"
version_file = "VERSION"
binary = "akurai"
musl_target = "target/x86_64-unknown-linux-musl/release/akurai"
checkout = "/home/olafurbui/Projects/AkurAI-Framework"

# ── Framework-based apps (use Framework binary + path-deps) ─────────────

[[app]]
name = "akurai-platform"
repo = "olibuijr/AkurAI-Platform"
domain = "platform.olibuijr.com"
port = 8098
checkout = "/home/olafurbui/Projects/AkurAI-Platform"
health = "https://platform.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/AkurAI-Platform publish"
framework_based = true
hash_files = ["frontend/index.html", "backend/page.json"]

[[app]]
name = "akurai-notes"
repo = "olibuijr/AkurAI-Notes"
domain = "akurai-notes.olibuijr.com"
port = 8099
mcp_port = 8101
checkout = "/home/olafurbui/Projects/AkurAI-Notes"
health = "https://akurai-notes.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/AkurAI-Notes publish --yes"
framework_based = true
db_snapshot = "/var/lib/akurai-notes/notes.db"
db_snapshot_dir = "/var/backups/akurai-notes"
hash_files = ["crates/notes-api/src", "crates/notes-core/src", "site/frontend"]
health_format = "needs_fix"   # currently {"ok":true} — must be {app,framework,version,status}

[[app]]
name = "akurai-crm"
repo = "olibuijr/akurai-crm"
domain = "akurai-crm.olibuijr.com"
port = 8103
checkout = "/home/olafurbui/Projects/AkurAI-CRM"
health = "https://akurai-crm.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/AkurAI-CRM publish --yes"
framework_based = true
hash_files = ["crates/crm-api/src", "crates/crm-core/src", "site/frontend"]
health_format = "needs_fix"   # currently {"error":"invalid path"} — no /api/health endpoint

[[app]]
name = "akurai-passvault"
repo = "olibuijr/AkurAI-PassVault"
domain = "akurai-passvault.olibuijr.com"
port = 8102
checkout = "/home/olafurbui/Projects/AkurAI-PassVault"
health = "https://akurai-passvault.olibuijr.com/mcp"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/AkurAI-PassVault publish --yes"
framework_based = true
hash_files = ["crates/passvault-api/src", "crates/passvault-core/src"]
health_format = "needs_fix"   # no /api/health, only /mcp

[[app]]
name = "akurai-vpn-site"
repo = "olibuijr/AkurAI-VPNSite"
domain = "akurai-vpn.olibuijr.com"
port = 8097
checkout = "/home/olafurbui/Projects/AkurAI-VPNSite"
health = "https://akurai-vpn.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/AkurAI-VPNSite publish --yes"
framework_based = true
hash_files = ["site/frontend/index.html", "site/backend/page.json"]
health_format = "needs_fix"   # no JSON health endpoint

[[app]]
name = "akurai-site"
repo = "olibuijr/akurai-site"
domain = "akurai.olibuijr.com"
port = 8111
checkout = "/home/olafurbui/Projects/akurai-site"
health = "https://akurai.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/akurai-site publish --yes"
framework_based = true
hash_files = ["frontend/index.html", "backend/routes.json"]

[[app]]
name = "golfsetridak-rust"
repo = "olibuijr/golfsetridak-rust"
domain = "golfsetridak.is"
port = 8110
checkout = "/home/olafurbui/Projects/golfsetridak-rust"
health = "https://golfsetridak.is/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release -C /home/olafurbui/Projects/golfsetridak-rust publish --yes"
framework_based = true
hash_files = ["frontend/index.html", "backend/page.json"]

# ── Standalone Rust apps (not Framework-based but same ops contract) ───

[[app]]
name = "akurai-idp"
repo = "olibuijr/akurai-idp"
domain = "auth.olibuijr.com"
port = 3500
checkout = "/home/olafurbui/Projects/AkurAI-IDP"
health = "https://auth.olibuijr.com/health"
health_path = "/health"   # /health returns {ok,service}; /api/health was removed
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
db_snapshot = "/data/akurai-idp/idp.sqlite"
db_snapshot_dir = "/var/backups/akurai-idp"
health_format = "needs_fix"   # /health returns {ok,service} — must add /api/health with full contract

[[app]]
name = "akurai-router"
repo = "olibuijr/AkurAI-Router"
domain = "akurai-router.olibuijr.com"
port = 4219
checkout = "/home/olafurbui/Projects/AkurAI-Router"
health = "https://akurai-router.olibuijr.com/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # /health is plaintext — must add /api/health with JSON contract

[[app]]
name = "akurai-dns"
repo = "olibuijr/akurai-dns"
domain = "akurai-dns (port 53 only)"
port = 53
checkout = "/home/olafurbui/Projects/AkurAI-DNS"
health = "dns:53"
health_type = "dns"
dns_server = "3.94.46.219"
dns_name = "health.akurai-dns"
dns_expect = "ok"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # DNS-only, no HTTP health — needs HTTP listener or status page

[[app]]
name = "akurai-vpn-control"
repo = "olibuijr/AkurAI-VPN"
domain = "vpn.olibuijr.com"
port = 8104
checkout = "/home/olafurbui/Projects/AkurAI-VPN"
health = "https://vpn.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # no /api/health

[[app]]
name = "rust-monitor"
repo = "olibuijr/rust-monitor"
domain = "monitor.olibuijr.com"
port = 8800
checkout = "/home/olafurbui/Projects/AkurAI-Monitor"
health = "https://monitor.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # {"status":"ok"} — must add app + version fields

[[app]]
name = "akurai-mail-ui"   # EC2 systemd unit (Rust single-binary serving SvelteKit build); akurai-mail-api is a separate binary from olibuijr/AkurAI-MailAPI (OLI-130)
repo = "olibuijr/AkurAI-Mail"
domain = "mail.olibuijr.com"
port = 3000
checkout = "/home/olafurbui/Projects/AkurAI-Mail"
health = "https://mail.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # OLI-132: /api/health added in AkurAI-Mail 41b5d11; flip to ok after deploy + curl

[[app]]
name = "golfsetridak"
repo = "olibuijr/golfsetridak"
domain = "golfsetridak.is"
port = 3001
checkout = "/home/olafurbui/Projects/golfsetridak"
health = "https://golfsetridak.is/"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # Next.js — no /api/health
retired = true   # legacy Next.js retired 2026-07-17; golfsetridak.is now serves golfsetridak-rust

[[app]]
name = "akurai-drive-api"
repo = "olibuijr/AkurAI-Drive"
domain = "akurai-drive.olibuijr.com"
port = 8096
checkout = "/home/olafurbui/Projects/AkurAI-Drive"
health = "https://akurai-drive.olibuijr.com/api/health"
validate = "./scripts/validate.sh"
deploy = "akurai-ec2 release --mode publish --yes"
framework_based = false
health_format = "needs_fix"   # /api/health returns error