spb/tools-spboucher-ai
Public
1{2 "app": "tools-spboucher-ai",3 "label": "Tools · SPBoucher — curated tool encyclopedia (tools.spboucher.ai)",4 "domain": "tools.spboucher.ai",5 "port": 8540,6 "health_path": "/api/health",7 "dir": "~/apps/tools-spboucher-ai",8 "extra_paths": [],9 "sync_excludes": [10 ".git/",11 ".DS_Store",12 "node_modules/",13 ".next/",14 "backups/",15 "exports/*.json",16 "exports/*.csv",17 ".env",18 ".env.*",19 "test-results/",20 "playwright-report/",21 "tsconfig.tsbuildinfo",22 "docs/_a11y-results.json"23 ],24 "requires": {25 "runtimes": [26 "node",27 "pnpm",28 "pm2",29 "postgresql@17"30 ],31 "ram_gb": 3,32 "ports": [33 854034 ]35 },36 "ram_mb_observed": 600,37 "size_mb": 30,38 "placement": {39 "pin": "M2M32c",40 "prefer": "M2M32c",41 "avoid": [42 "M1M32"43 ],44 "reason": "Idle node (0 PM2 processes) with PostgreSQL 17.11 + pgvector 0.8.6 (DB tools_spboucher, roles tools_app/tools_reader), 417 GB SSD, wg1 10.67.0.20"45 },46 "processes": [47 {48 "name": "tools-web",49 "manager": "pm2",50 "script": "/opt/homebrew/bin/node",51 "args": [52 "node_modules/next/dist/bin/next",53 "start",54 "-p",55 "8540",56 "-H",57 "0.0.0.0"58 ],59 "interpreter": null,60 "cwd": "{{HOME}}/apps/tools-spboucher-ai",61 "env": {62 "NODE_ENV": "production",63 "PORT": "8540",64 "NEXT_TELEMETRY_DISABLED": "1"65 },66 "cron_restart": null,67 "autorestart": true,68 "max_memory_restart": "1500M"69 },70 {71 "name": "tools-worker",72 "manager": "pm2",73 "script": "/opt/homebrew/bin/node",74 "args": [75 "node_modules/tsx/dist/cli.mjs",76 "src/worker/index.ts"77 ],78 "interpreter": null,79 "cwd": "{{HOME}}/apps/tools-spboucher-ai",80 "env": {81 "NODE_ENV": "production",82 "NEXT_TELEMETRY_DISABLED": "1",83 "PATH": "/opt/homebrew/opt/postgresql@17/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"84 },85 "cron_restart": null,86 "autorestart": true,87 "max_memory_restart": "1G"88 }89 ],90 "ngrok": null,91 "launchd": [],92 "env_overrides": {},93 "hooks": {94 "post_sync": [95 "set -o pipefail; export PATH=\"/opt/homebrew/bin:$PATH\"; test -f .env || { echo 'ERREUR: .env absent (secrets) — copier ~/Desktop/Cluster/secrets/tools-spboucher-ai/.env'; exit 1; }; chmod 600 .env",96 "set -o pipefail; export PATH=\"/opt/homebrew/bin:$PATH\"; pnpm install --frozen-lockfile --silent && test -d node_modules/next && echo ' deps ok'",97 "set -o pipefail; export PATH=\"/opt/homebrew/opt/postgresql@17/bin:/opt/homebrew/bin:$PATH\"; set -a; . ./.env; set +a; pnpm db:migrate && pnpm content:import --publish > /dev/null && pnpm bootstrap && echo ' db ok'",98 "set -o pipefail; export PATH=\"/opt/homebrew/bin:$PATH\"; set -a; . ./.env; set +a; NEXT_TELEMETRY_DISABLED=1 pnpm build 2>&1 | tail -3 && test -f .next/BUILD_ID && echo ' build ok'",99 "mkdir -p ~/backups/tools-spboucher-ai && chmod 700 ~/backups/tools-spboucher-ai && echo ' backup dir ok'"100 ],101 "post_start": []102 },103 "ka_repo": false,104 "tunnel": {105 "domain": "tools.spboucher.ai",106 "gateway": "BHS64",107 "note": "DNS GoDaddy A tools.spboucher.ai → 51.161.112.61 vérifié le 2026-11-02 (enregistrement explicite préexistant) ; route Caddy posée par mld deploy"108 },109 "notes": "Next.js 16 + PostgreSQL 17/pgvector local (DB tools_spboucher ; rôles tools_app lecture/écriture, tools_reader lecture seule sur les vues publiques) + worker tsx (liens, fraîcheur, embeddings optionnels, sauvegardes chiffrées 04:20 → ~/backups + M3U96b). Secrets uniquement dans ~/apps/tools-spboucher-ai/.env (600) ; copie ~/Desktop/Cluster/secrets/tools-spboucher-ai/.env."110}111