# VAUCO OS — MASTERPLAN **Eier:** Chris Christiansen · Vauco AS · Org.nr 935 989 779 **Sist oppdatert:** 2026-06-12 **Status:** 🟢 AUTORITATIV — én kilde til sannhet for hele Vauco-økosystemet > **Regel #1:** Denne filen er sannheten. Hvis en annen fil sier noe annet — denne vinner. > **Regel #2:** Endringer her krever eksplisitt `PLAN APPROVED` fra Chris. > **Regel #3:** Roadmap → seksjon 7. Sesjonsstatus → `docs/HANDOFF.md`. Ingen andre handoff-filer. --- ## Lessons Learned - Cloud Build smoke-tests require: hardcoded canonical BASE_URL, bare identity token (no --audiences), and explicit run.invoker IAM binding for the Cloud Build service account on every service. - **2026-06-10 — Absolutte filstier i Python:** Bruk alltid `Path(__file__).parent / "..."` for å referere til statiske filer og konfigurasjon i FastAPI/Cloud Run. Aldri relativ sti som `"static/file.html"` — dette bryter når WORKDIR avviker fra repo-rot (f.eks. i Docker). Regelen gjelder alle fremtidige tjenester og klientleveranser. - **2026-06-10 — Dockerfile COPY static/:** `static/`-mappen må eksplisitt kopieres inn i Docker-imaget via `COPY static/ ./static/`. Den kopieres ikke automatisk selv om build-konteksten er repo-roten. - **2026-06-10 — app.py mangler GET /:** FastAPI returnerer `{"detail":"Not Found"}` for alle ruter som ikke er definert. Sørg alltid for at rot-ruten er eksplisitt definert. - **2026-06-12 — Mappestruktur må verifiseres mot repo:** MASTERPLAN-dokumentasjon av mappestruktur må alltid verifiseres via GitHub API før bygging. Antakelser om struktur er ikke nok. --- ## 1. Plattformhierarki — sannheten i én modell ``` Vauco AS (selskap, eier alle merkevarer) │ ├── vauco.no (APEX — bedriftens salgs- og portalside; ansiktet utad) │ └── VAUCO OS (plattform) └── OPAX (engine — Cloud Run, RAG, agentic arkitektur, IAP) ├── Modul #1 · CostGuard (live på costguard.oss.vauco.no) ├── Modul #2 · Threadstone (landingsside live, app i bygg) └── Modul #3 · [navngis senere] Separat merkevare (parkert): └── Proof of Curiosity ``` | Nivå | Hva | Hvem ser det | |---|---|---| | **vauco.no (apex)** | Bedriftens salgsportal | Alle | | Vauco OS | Plattformen Chris bygger | Internt | | OPAX | Engine som driver modulene | Internt + utviklere | | Modul | Det kundene kjøper | Kunder | **Ikke selg Vauco OS. Ikke selg OPAX. De er interne verktøy.** --- ## 2. Registrerte domener — fasit **Aktive subdomener:** | Domene/subdomen | Teknologi | Status | |----------|-----------|--------| | `vauco.no` (apex) | GCS + LB + CDN | ✅ LIVE 2026-06-05 | | `opax.vauco.no` | LB + IAP → Cloud Run | ✅ Live (IP 34.98.77.173) | | `oss.vauco.no` | Staging | ✅ Aktiv | | `costguard.oss.vauco.no` | Cloud Run via IAP | ✅ Live | | `threadstone.vauco.no` | GitHub Pages | ✅ Live | | `app.threadstone.vauco.no` | GitHub Pages | ⚠️ CNAME satt, side mangler | | `os.vauco.no` | Prod-miljø | 🔮 Fase C | **Email-infra:** MX + SPF/DKIM/DMARC ✅ Live 2026-06-10 --- ## 3. Repo-struktur — fasit ### Aktive repos (5) | Repo | Formål | Synlighet | |------|--------|-----------| | `OSVauco` | Mono-repo: OPAX-engine, infra, Terraform, all dokumentasjon | Privat | | `vauco-bootstrap` | Terraform-modul for kunde-provisjonering | Privat | | `vauco-site` | `vauco.no` salgsportal | Public | | `threadstone-landing` | `threadstone.vauco.no` landingsside | Public | | `vauco-saas.github.io` | Threadstone-app frontend | Public | > **Regel:** Nytt repo krever eksplisitt `REPO APPROVED` fra Chris. --- ## 4. OSVauco — FAKTISK mappestruktur (verifisert 2026-06-12) > **VIKTIG:** Denne seksjonen er verifisert mot GitHub API. Ikke anta struktur — alltid verifiser. ``` OSVauco/ (root) ├── main.py (26 KB) ⭐ HOVUDAPPLIKASJON — FastAPI app + alle ruter ├── AGENTS.md ├── CLAUDE.md ← Kontekstfil for Claude-agenter ├── README.md ├── CNAME ├── cloudbuild.yaml ← CI/CD trigger ├── cloudbuild.base.yaml ├── requirements.txt ├── .env.example / .env.prefilled ├── dev-startup.sh / opax.sh │ ├── agents/ ← Agent-logikk (ikke hovudapp) ├── architecture/ ← Arkitekturdokumenter ├── auth/ ← Auth-logikk ├── data/ ├── dialogflow/ ← Dialogflow-integrasjon ├── docs/ ← All dokumentasjon │ ├── MASTERPLAN.md │ ├── ROADMAP.md │ ├── HANDOFF.md │ ├── AGENT_RULEBOOK.md │ ├── UNIVERSAL_BOOT_PROMPT.md │ ├── LEARNINGS.md │ ├── ARCHITECTURE.md │ ├── AGENTIC_CONTRACT_MCP_PROVISIONING.md │ ├── DNS-OG-INFRASTRUKTUR.md │ ├── SECRETS-SETUP.md │ ├── LEARNINGS_CICD_2026-06-10.md │ ├── GCP_Best_Practices.md │ └── gemma/ │ └── world.md ❌ MANGLER — blokkerer ML-3a/Emma-boot ├── infrastructure/ ├── master_hub/ ← Eksisterer — formål ikke klarlagt ├── ml/ ├── opax-mcp/ ← MCP-server (ikke agents/mcp_server/) ├── protocols/ ├── scripts/ └── static/ ├── opax.html ✅ CG4d prisingskalkulator ├── costguard-dashboard.html ✅ CG6 klient-dashboard ├── jason.html ├── billing-dashboard.html ├── costguard.html ├── command-hub.html └── admin.html ``` **Kritiske korreksjoner fra tidligere feil dokumentasjon:** - `main.py` (rot) er hovudapplikasjonen — IKKE `agents/core-logic/app.py` - MCP-server ligger i `opax-mcp/` — IKKE `agents/mcp_server/` - `master_hub/` og `dialogflow/` eksisterer — formål må kartlegges - Nye ruter/endepunkter legges i `main.py` — ikke i agents/ --- ## 4b. vauco.no — salgsportal | Versjon | Inneholder | Trigger | |---------|------------|---------| | V1 (MVP) ✅ | Hero + modul-grid + om-oss + kontakt | LIVE 2026-06-05 | | V2 | Sales-CTA + ROI-kalkulator | Etter første betalende kunde | | V3 | Blogg, kundereferanser | Når 3+ kunder | --- ## 5. Dokumenthierarki | Fil | Rolle | |-----|-------| | `docs/MASTERPLAN.md` | Autoritativ sannhet | | `docs/ROADMAP.md` | Faser og status | | `docs/HANDOFF.md` | Sesjonsstatus — overskrives hver sesjon | | `docs/AGENT_RULEBOOK.md` | Locked agent-regler | | `docs/UNIVERSAL_BOOT_PROMPT.md` | Boot-protokoll v1.4 | | `CLAUDE.md` | Kontekst for Claude-agenter (rot) | | `docs/gemma/world.md` | Emma sin kontekstpakke ❌ mangler | --- ## 6. AI-modell — tofase-strategi ### Fase 1 — Nå | Parameter | Verdi | |-----------|-------| | Intern stand-in | Perplexity (Sonnet 4.6) via GitHub MCP | | Kundemodell (Jason) | `gemini-2.5-flash` via Vertex AI | | Region | `us-central1` | ### Fase 2 — Gemma (trigger: kreditter < 20% eller første kunde) | Parameter | Verdi | |-----------|-------| | Emma (intern) | `gemma-4-12b-it` int4 · GCP `g2-standard-4` Spot VM | | Jason (kunder) | `gemini-2.5-flash` via Vertex — uendret | --- ## 7. Roadmap — kortversjon > Full status i `docs/ROADMAP.md`. ### 🔴 NOW - [x] CG4d — Prisingskalkulator i `static/opax.html` ✅ 2026-06-12 - [x] CG5a — Delivery layer: `POST /notify/webhook` ✅ live (commit 4a1e23e, Sonar) - [x] CG5b — E-postvarsler: `POST /notify/email` via SendGrid ✅ live - [x] CG6 — Klient-dashboard `static/costguard-dashboard.html` ✅ 2026-06-12 - [ ] len(agents)-bugfix i `/run/dag` 🔴 - [ ] CG5-onboard — Klient-onboarding flow 🔴 - [ ] CG5c — SMS-varsler: `POST /notify/sms` via Twilio [Guard+] ### 🟠 NEXT - CI1 — opax-mcp/ full CI/CD-kanal - ML-3a — GPU-VM for Emma + `docs/gemma/world.md` opprettes - C4 — Medioteq partnerstrategimøte --- ## 8. Agent-identitet | Identitet | E-post | Modell | Status | |-----------|--------|--------|--------| | Eier | `chris.christiansen@vauco.no` | — | ✅ Aktiv | | Jason Vauger | `jason.vauger@vauco.no` | `gemini-2.5-flash` | ✅ Live | | Emma Vauger | `emma.vauger@vauco.no` | `gemma-4-12b-it` | 🔮 ML-3a | **Forbudte kontoer:** `tinius.vauger`, `ccv` — aldri gi tilganger. --- ## 9. Cloud Run — live endepunkter **Service:** `osvauco-agent` · `us-central1` · `propane-will-491900-m5` **Public URL:** `https://opax.vauco.no` | Endepunkt | Fil | Status | |-----------|-----|--------| | `GET /` | `main.py` | ✅ Serverer opax.html | | `GET /health` | `main.py` | ✅ | | `POST /run` | `main.py` | ✅ | | `GET /static/jason.html` | `main.py` | ✅ | | `GET /billing/tokens/by-module` | `main.py` | ✅ | | `GET /billing/tokens/estimate` | `main.py` | ✅ | | `GET /billing/summary` | `main.py` | ✅ | | `GET /billing/anomalies` | `main.py` | ✅ | | `GET /billing/history` | `main.py` | ✅ | | `GET /billing/budget` | `main.py` | ✅ | | `POST /billing/budget` | `main.py` | ✅ | | `POST /notify/webhook` | `main.py` | ✅ CG5a live | | `POST /notify/email` | `main.py` | ✅ CG5b live | | `POST /notify/sms` | `main.py` | 🔴 CG5c | | `GET /notify/channels` | `main.py` | 🔴 OQ-29 | --- ## 10. Go-to-market ### CostGuard — prismodell v2 (godkjent 2026-06-12) > **Prinsipp:** Push-first — Jason finner kunden, ikke omvendt. > **Pitch:** *"Du trenger ikke lære et nytt verktøy. Jason finner deg."* | Tier | GCP-spend/mnd | Pris | Kjerneløfte | |------|--------------|------|-------------| | **Starter** | $0–$3k | $499/mnd | Synlighet | | **Guard** | $3k–$15k | $999/mnd | Kontroll | | **Shield** | $15k–$50k | $1.999/mnd | Automatisering | | **Enterprise** | >$50k | $3.500+/mnd | Platform | **Delivery layer:** ``` GCP-event → Jason → Delivery layer → Webhook (CG5a) / E-post (CG5b) / SMS (CG5c) ``` **Markedsposisjon:** | Konkurrent | Pris | CostGuard vinner på | |-----------|------|--------------------| | Kubecost Business | $199/mnd | GCP-native + Jason AI | | Apptio Cloudability | $1.930/mnd | Enklere, push-first | | CloudHealth | $5.400+/mnd | Pris + SMB-fokus | ### Medioteq — Joint Venture > Partnersamarbeid, ikke SaaS-kunde. C4 = partnerstrategimøte. --- ## 11. Kjente hull | ID | Problem | Prioritet | |----|---------|----------| | OQ-15 | BQ billing_export tabell | Medium | | OQ-17 | `github-token` secret mangler | Medium | | OQ-18 | VM alltid-på kostnad | Høy | | OQ-21 | `app.threadstone.vauco.no` CNAME uten side | Lav | | OQ-26 | `docs/gemma/world.md` mangler | Høy (ML-3a blokkert) | | OQ-27 | `master_hub/` formål ikke dokumentert | Medium | | OQ-28 | `dialogflow/` formål ikke dokumentert | Medium | | OQ-29 | `GET /notify/channels` mangler i `main.py` — CG6 faller tilbake på defaults | Lav | --- ## 12. OPAX — status **Ferdig:** - ✅ opax.html LIVE via `GET /` (main.py) - ✅ Jason-chat LIVE - ✅ Billing dashboard + Chart.js donut (CG4b) - ✅ Token Intelligence endepunkter - ✅ CI5+CI6 — opax-mcp live - ✅ CG4d — Prisingskalkulator i opax.html - ✅ CG5a — POST /notify/webhook live - ✅ CG5b — POST /notify/email live - ✅ CG6 — Klient-dashboard costguard-dashboard.html **Gjenstår:** len(agents)-bugfix i /run/dag · CG5-onboard · CG5c · CI1 · ML-3a --- *OSVauco | propane-will-491900-m5 | us-central1 | Autoritativ fra 2026-05-31 | Oppdatert 2026-06-12* --- ## 13. Telefoni & AI-agent Plan — Phase E tillegg ### Konsept: Twilio som kommunikasjonsryggrad Et Twilio-nummer er grunnmuren for SMS, tale og AI-agent telefoni. Alt bygger på samme konto og nummer. --- ### Lag 1 — Grunnmur (gjøres NÅ, Phase D) Allerede planlagt: - Twilio-konto opprettet - TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_FROM_NUMBER lagret i Secret Manager - send_sms fungerer via opax-mcp --- ### Lag 2 — Inngående AI-telefonsvarer (Phase E, Uke 3-4) #### Konsept Kunder/kontakter ringer Twilio-nummeret. Emma-agenten tar samtalen, transkriberer og svarer med tale. #### Teknisk stack - Twilio Programmable Voice + Conversation Relay (WebSocket) - Ollama (emma modell) på osvauco-dev-vm som LLM - Whisper eller Twilio Speech Recognition for STT - Twilio TTS (eller Google TTS) for tale tilbake #### Flyt Innringer → Twilio → WebSocket → opax-mcp → Ollama (Emma) Emma svarer → TTS → Twilio → Innringer #### Hva Emma kan gjøre under samtalen - Svare på spørsmål om OSVauco-tjenester - Slå opp kundedata i backend - Booke møter og sende SMS-bekreftelse - Si "ett øyeblikk" og hente live data via MCP-tools - Eskalere til Chris eller Jason med full samtale-kontekst #### Implementasjon 1. Legg til /voice webhook-endepunkt i opax-mcp 2. Konfigurer Twilio Voice URL til opax-mcp Cloud Run 3. Bygg ConversationRelay WebSocket-handler 4. Koble til Ollama via eksisterende MCP-infrastruktur 5. Definer Emma sin persona og instrukser for telefon 6. Test med internt nummer først --- ### Lag 3 — Utgående AI-anrop (Phase E, Uke 5-6) #### Konsept Emma ringer proaktivt — f.eks. kostnadsvarsler, møtepåminnelser, oppfølging av kunder. #### Flyt Trigger (kostnadsspike / planlagt tid) → Emma initierer anrop via Twilio Outbound API → Samme ConversationRelay-stack som inngående #### Bruksområder - "Hei, jeg ringer fra Vauco — dere nærmer dere budsjettgrensen på GCP denne måneden" - Møtepåminnelse dagen før - Oppfølging etter demo --- ### Lag 4 — Multikanal-orkestrering (Phase F) #### Konsept Emma bestemmer selv hvilken kanal som passer: - Lav prioritet → SMS - Medium → E-post (Gmail API, allerede oppe) - Høy prioritet → Telefonanrop - Intern → Google Chat webhook #### Implementasjon Legg til kanalvalg-logikk i Emma sin system-prompt: "Velg kanal basert på hastegrad og brukerpreferanse" --- ### Personas per kanal | Kanal | Avsender | Persona | |---|---|---| | SMS | +47-Twilio-nummer | Nøytral, kort | | E-post | jason.vauger@vauco.no | Profesjonell | | Telefon inngående | Emma | Vennlig, hjelpsom | | Telefon utgående | Emma | Proaktiv, konsis | --- ### Kostnadsestimat Twilio | Tjeneste | Kostnad | |---|---| | Telefonnummer | ~$1/mnd | | SMS utgående (NO) | ~$0.07/SMS | | Voice inngående | ~$0.0085/min | | Voice utgående | ~$0.014/min | | Trial credits | $15 gratis ved oppstart |