# Jarvis v2 β€” Fase 1 Β· Operator Cockpit Donker, clean, Nederlands, mobile-first dashboard voor Jorick's Agentic OS. Draait op **poort 4003** onder PM2-naam **`jarvis-v2`**. Schone rebuild β€” geen koppeling met het oude `jarvis-dashboard` (poort 4000). ## Functionaliteit | Module | Wat het doet | |---|---| | **Command-console** | Chat met de OpenClaw-gateway (`openclaw/default`) via streaming SSE. Spraakinvoer πŸŽ™ via Web Speech API (nl-NL, Chrome). Optionele TTS πŸ”Š voorlezing van antwoorden via `speechSynthesis`. | | **HSEQ-taakinzet** | Formulier (RI&E / TRA / audit / PGS15-scan / overig, locatie, deadline, beschrijving, optionele bijlage). Taak wordt lokaal opgeslagen mΓ©t status **nieuw β†’ onderweg β†’ klaar** Γ©n automatisch als bericht afgeleverd in gateway-sessie `jarvis-v2-hseq-inbox`. Bijlage komt op de server in `data/uploads/`. | | **Projectmonitor** | Scan van `/root/projects/jg/`: naam, laatste wijziging, deliverables-count, git-status (branch + dirty count), voortgangslog (recentste bestanden + PROGRESS/VOORTGANG/STATUS/README.md). Ververs elke 30 min + handmatig, met wijzigingsnotificatie (browser Notification + in-app feed). | | **Auth** | Sterk wachtwoord via env `JARVIS_V2_PASSWORD`; httpOnly sessie-cookie (7 dagen geldig); rate-limiting op login (5 pogingen/minuut). | ## Opstarten ```bash cd /root/projects/jg/jarvis-v2 pm2 start ecosystem.config.js # of: pm2 restart jarvis-v2 pm2 save ``` Config staat in `.env` (alleen leesbaar door root, `chmod 600`): ``` PORT=4003 JARVIS_V2_PASSWORD= OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789 OPENCLAW_GATEWAY_TOKEN= JARVIS_PROJECTS_DIR=/root/projects/jg ``` **Wachtwoord wijzigen:** pas `JARVIS_V2_PASSWORD` in `.env` aan β†’ `pm2 restart jarvis-v2`. Sessies zitten in geheugen, dus na een herstart moet iedereen opnieuw inloggen. ## Vereisten aan de gateway-zijde - Gateway draait op `127.0.0.1:18789` met `auth.mode: "token"` (staat in `openclaw.json`). - `gateway.http.endpoints.chatCompletions.enabled: true` moet aanstaan (`/v1/chat/completions`) β€” dit is eenmalig geactiveerd tijdens de build. ## Toegang - PC (Chrome): `http://:4003` - Telefoon: zelfde URL; mobile-first layout; spraakinvoer werkt in Chrome (Android/iOS). ## Gegevens - `data/hseq-tasks.json` β€” HSEQ-taken + gateway-leverstatus - `data/uploads/` β€” bijlagen - `data/projects-snapshot.json` β€” vingerafdrukken voor wijzigingsdetectie (wijzigingen worden gemeld t.o.v. vorige scan) ## Structuur ``` jarvis-v2/ β”œβ”€β”€ server.js # complete backend, geen npm-dependencies β”œβ”€β”€ ecosystem.config.js # PM2-config β”œβ”€β”€ .env # wachtwoord + gateway-token (root-only) β”œβ”€β”€ public/ # index.html, style.css, app.js └── data/ # taken, uploads, snapshots ``` ## Fase 2-ideeΓ«n (niet in scope) - Meerdere gebruikers met eigen scopes - Push-notificaties via Telegram i.p.v. alleen browser - Directe koppeling HSEQ-taakstatus ↔ antwoord van Kas ## Fase 2 β€” Mail-copiloot (toegevoegd 17 aug 2026) Mail-tab: 3 IMAP-accounts (Gmail, Hotmail, Lions-Outlook), automatische poll elke 15 min + handmatige knop (max 1x/30s), AI-samenvatting + antwoordsuggestie per bericht via de gateway (retry bij provider-overload), 'kopieer suggestie' en 'markeer afgehandeld'. ### Accounts configureren (.env, chmod 600) ``` MAIL_ACCOUNTS=[{"label":"PrivΓ© Gmail","host":"imap.gmail.com","port":993,"user":"jouw@gmail.com","pass":"app-wachtwoord"},{"label":"Hotmail","host":"outlook.office365.com","port":993,"user":"jouw@hotmail.com","pass":"app-wachtwoord"},{"label":"Lions Outlook","host":"outlook.office365.com","port":993,"user":"lions@outlook.com","pass":"app-wachtwoord"}] ``` Daarna: `pm2 restart jarvis-v2` en in de UI op "↻ Haal mail op" drukken. Credentials verlaten de server nooit (alleen /api/mail/* zonder credentials, achter sessie-auth).