Menu
Public repository / 61d696907a4d9613ca203986774efb4c822c75ec
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