6.1 KiB
Foodlinkk Command Center — Platform A tot Z
Laatst bijgewerkt: juni 2026 · VM106 10.4.7.18
A. Architectuur
Proxmox 10.4.7.14 (Dell R340)
├── VM105 10.4.7.19 — Ollama, ChromaDB, Herman orchestrator :8090
└── VM106 10.4.7.18 — Command Center (Docker)
├── cockpit :8600
├── tools-api :8700
├── gitea :3001
├── email-agent :8801
├── browser-agent :7790
├── prometheus :9090
├── grafana :3002
└── PostgreSQL foodlinkk_db (host)
Dataflow: Browser → Cockpit → (proxy) Tools API → PostgreSQL / externe APIs
B. Bestandslocaties
| Pad | Inhoud |
|---|---|
/home/aissa/foodlinkk-command-center |
Volledige monorepo (live) |
/home/aissa/nas-clients |
Klant-NAS (gemount in cockpit) |
/tmp/sysops-daily.log |
SysOps cron log |
/tmp/herman-daily.log |
Herman briefing cron |
C. Cockpit — alle pagina's
| Route | Module |
|---|---|
/ |
Herman CEO dashboard |
/herman |
Herman chat (delegatie, packaging, foto's) |
/agents |
Souls, mesh, goedkeuringen, events |
/retail |
Retail 360 |
/marketing |
Social, reclame, RSS |
/clients |
CRM + supermarkten |
/products, /suppliers |
Assortiment & inkoop |
/projects |
Food-business projecten + NAS |
/packaging |
Packaging Studio |
/ops |
IT topology, SysOps verslag, Gitea |
/documents |
Documenten hub |
/settings |
Email, social, Herman permissions |
/studio |
ComfyUI |
/beurs |
Marktdata |
D. Database (PostgreSQL)
Migraties in migrations/:
| # | Onderwerp |
|---|---|
| 001 | agent_events, clients |
| 005–008 | email, browser, pgvector |
| 011–017 | retail 360, CRM |
| 016 | packaging agent, sysops soul |
| 018 | agent_action_requests (goedkeuringen) |
| 019 | cockpit_projects, project_assets |
| 021 | locale_preferences (i18n) |
| 022 | NAS-structuur per klant |
| 023 | sysops_activity log |
Kern-tabellen: agent_souls, agent_events, agent_action_requests, cockpit_projects, project_assets, packaging_outputs, config_backups, sysops_activity, clients, supermarkets, deals
E. Agents (16 + Herman)
| Key | Rol |
|---|---|
| herman | Co-CEO, briefing, orchestratie |
| sysops | IT, Gitea sync, maintenance |
| packaging | Verpakkingsontwerp |
| marketing | Social, campagnes |
| retail | Supermarkten 360 |
| research | Marktonderzoek |
| design | ComfyUI |
| … | bizdev, finance, sourcing, product, halal, knowledge, browser, hr, email |
Events: agent_events — zichtbaar op /agents, klikbaar per agent.
Goedkeuringen: SysOps vraagt vóór maintenance scan en optionele backup.
F. SysOps — Gitea & verslag
Automatische Gitea push
Bij elke deploy (deploy-all.sh):
- Rsync code naar VM106
- Docker rebuild
- SysOps pusht volledige repo naar Gitea
main(usersysops)
API: POST /ops/gitea/sync body {"reason":"manual"}
Goedgekeurde backup
Na CEO ✓ op approval config_backup → zelfde volledige repo-sync.
Activiteitenlog
Tabel sysops_activity:
gitea_sync— deploy, backupmaintenance_scan— na scan
Zichtbaar op IT Ops (/ops) → paneel "SysOps verslag".
Herman briefing
collect_briefing_data() leest:
sysops_activity_24hsysops_events_24h- Sectie "SysOps IT — laatste 24 uur" in dagrapport
Cron: 07:00 SysOps requests, 07:30 Herman briefing.
G. Gitea
- URL: http://10.4.7.18:3001
- Repo:
aissa/foodlinkk-command-center - SysOps user:
sysops(write, setup viascripts/setup_gitea_sysops.sh) - Documentatie staat in de repo onder
docs/
Clone op andere machine:
git clone http://10.4.7.18:3001/aissa/foodlinkk-command-center.git
H. Herman
- Chat:
/api/herman/chat - Briefing:
POST /api/herman/briefing - Orchestrator:
HERMAN_ORCHESTRATOR_URL→ VM105:8090 - Packaging opdracht:
maak verpakking: pouch 100×140 voor Product X project #5
I. Packaging
- UI:
/packaging— 6 types, brand, tekst, NAS-export - API: Tools API
/packaging/* - NAS:
{klant}/projects/{id}/packaging/*.svg|png|pdf|json - Herman:
packaging_agent.py→ generate + events
J. Projecten & NAS
Per klant: /home/aissa/nas-clients/{slug}/
Per project: projects/{id-naam}/photos|documents|packaging|exports|briefs/
API: /api/projects — create met ensure_nas: true
K. Deploy
# Vanaf dev machine met /tmp/foodlinkk-deploy of lokale clone:
bash deploy-all.sh
Stappen: rsync → migraties → docker build → health checks → Gitea sync → Herman briefing.
Omgevingsvariabelen: .env.example (niet committen).
L. i18n
cockpit/static/i18n/nl.json,en.json- Selector in topbar
- Uitgebreid: nav, clients, products, suppliers
M. Monitoring
- Prometheus
:9090, Grafana:3002 - IT Ops topology: Proxmox + services live
- Infra snapshots:
infra_snapshots
N. Email
- Settings → SMTP accounts
- Tools API
POST /emails/send - Packaging kan designs emailen met downloadlinks
O. Ontwikkeling
| Component | Tech |
|---|---|
| Cockpit | Python 3.11, FastAPI, Jinja2, Alpine.js |
| Tools API | FastAPI, psycopg2 |
| Viz | Chart.js, viz-engine.js |
| Packaging | svgwrite, python-barcode, Pillow, reportlab |
Tests: health curls in deploy-all.sh en docs/DEPLOY.md
P. Veiligheid
- SysOps: geen destructieve acties zonder goedkeuring
.envin.gitignore- Gitea: geen public registration
- Wachtwoorden in docker-compose op server (niet in git idealiter — gebruik
.env)
Q. Troubleshooting
| Probleem | Actie |
|---|---|
| Cockpit 502 | docker compose logs cockpit |
| Gitea push faalt | scripts/setup_gitea_sysops.sh, check collaborator |
| Briefing leeg | python3 scripts/herman_daily_digest.py |
| NAS map ontbreekt | Project → ensure-nas of opnieuw aanmaken |
R. Referenties
- ARCHITECTURE.md
- APPS.md
- API.md
- AGENTS.md
- DEPLOY.md
- CONTEXT.md — korte Cursor-context