feat(cg3): add costguard landing page

This commit is contained in:
Chris Christiansen 2026-05-27 18:35:25 +00:00
parent 82e9d9f469
commit 351bc8299b
2 changed files with 122 additions and 5 deletions

View File

@ -47,11 +47,81 @@ Medioteq og fremtidige kunder onboardes av deg selv via OPAX innenfra — ikke h
## AGENT-IDENTITET
| Identitet | E-post | Rolle |
|---|---|---|
| Eier / admin | `chris.christiansen@vauco.no` | `billing.admin` + `billing.viewer` |
| Agent (OPAX) | `jason.vauger@vauco.no` | `billing.viewer` |
| Fremtidig gruppe | `billing@vauco.no` | `billing.viewer` (Fase C) |
| Identitet | E-post | Rolle | Formål |
|---|---|---|---|
| Eier / admin | `chris.christiansen@vauco.no` | `billing.admin` + `billing.viewer` | Full kontroll |
| Agent (OPAX) | `jason.vauger@vauco.no` | `billing.viewer` | Hente og rapportere kostnadsdata autonomt |
| Fremtidig gruppe | `billing@vauco.no` | `billing.viewer` (Fase C) | Delt innboks for team og kunder |
**Agent-kapabiliteter med `billing.viewer`:**
- Svare på «Hva koster dette prosjektet denne måneden?»
- Sende ukentlig kostnadsrapport til chat-appen
- Reagere på Pub/Sub budget-alerts (via `10-cost-guard.sh`)
- **Ikke:** endre IAM, budsjetter eller koble prosjekter
---
## DNS / DOMENE-ARKITEKTUR
> **Arkitekturavgjørelse — 2026-05-26**
| Domene | Type | Teknologi | Fase |
|---|---|---|---|
| `opax.vauco.no` | Intern cockpit (kun Chris) | CNAME → Cloud Run (gratis) | B1 nå |
| `costguard.oss.vauco.no` | Standalone app | CNAME → osvauco-agent-357036551735.europe-west1.run.app | CG3 |
| `kunde1.vauco.no` / kundedomener | Kunde-instanser | LB + IAP (Terraform) | Fase C |
**Begrunnelse:**
- `opax.vauco.no` er et internt arbeidsverktøy for én bruker — Load Balancer ($18-20/mnd) er unødvendig overhead.
- Kundeinstanser provisjoneres via `vauco-bootstrap` Terraform-modul i Fase C. LB + IAP bakes inn i modulen én gang og kjøres automatisk per kunde med `terraform apply -var="customer_id=X"`.
- Terraform-modulen (Fase C) skal inkludere: Cloud Run, Cloud Build, IAP, LB, budsjett, SA, Dialogflow CX, ML state store.
---
## CLOUD SHELL QUICK-START (kopi-klipp)
> Bruk Cloud Shell: https://shell.cloud.google.com
```bash
# Steg 1: Klon og sett opp miljø
gcloud config set project propane-will-491900-m5
git clone https://github.com/chrischristiansen-glitch/OSVauco.git ~/OSVauco
cd ~/OSVauco
# Steg 2: Kopier og rediger .env
cp .env.example .env
nano .env
# Fyll ut: BILLING_ACCOUNT_ID, ALERT_EMAIL, GITHUB_APP_INSTALLATION_ID
# Steg 3: Installer Python-avhengigheter
pip install google-adk google-cloud-aiplatform>=1.111.0 --quiet
# Steg 4: Kjør i rekkefølge
source .env
bash infrastructure/00-authcheck.sh
bash infrastructure/01-setupenv.sh
bash infrastructure/07-rag-setup.sh
# *** Kopier RAG_CORPUS_NAME fra output inn i .env ***
nano .env && source .env
bash infrastructure/08-memorybank-setup.sh
# *** Kopier MEMORY_ENGINE_NAME fra output inn i .env ***
nano .env && source .env
gcloud run deploy osvauco-agent
--source . --region europe-west1
--project propane-will-491900-m5
--set-secrets RAG_CORPUS=rag-corpus-name:latest
--set-env-vars GOOGLE_GENAI_USE_VERTEXAI=1,GOOGLE_CLOUD_PROJECT=propane-will-491900-m5,GOOGLE_CLOUD_LOCATION=global,MEMORY_ENGINE_NAME=$MEMORY_ENGINE_NAME
--no-allow-unauthenticated
bash infrastructure/04-observability-setup.sh
bash infrastructure/11-billing-iam-hardening.sh
bash scripts/smoke-test.sh
# Om kvelden (OBLIGATORISK):
bash infrastructure/03-teardown.sh
```
---

47
static/costguard.html Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="no" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vauco OS · CostGuard</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300..700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
<style>
:root,[data-theme="dark"]{
--bg:#0f0e0d;--surface:#161513;--surface-2:#1c1a18;--surface-3:#232120;
--border:rgba(255,255,255,0.07);--border-h:rgba(255,255,255,0.14);
--text:#e8e6e2;--muted:#7a7874;--faint:#3f3d3a;
--primary:#4f98a3;--warn:#fdab43;--warn-bg:rgba(253,171,67,0.1);
--err:#dd6974;--err-bg:rgba(221,105,116,0.1);
--ok:#6daa45;--ok-bg:rgba(109,170,69,0.1);
--font:'Inter',sans-serif;--mono:'JetBrains Mono',monospace;
--r:8px;--tr:160ms cubic-bezier(0.16,1,0.3,1);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-font-smoothing:antialiased}
body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;min-height:100vh}
.main{padding:40px 20px;max-width:800px;margin:0 auto;display:flex;flex-direction:column;gap:24px;text-align:center;}
.button{display:inline-block;background:var(--primary);color:var(--bg);font-weight:600;font-size:16px;padding:12px 24px;border-radius:var(--r);text-decoration:none;transition:transform var(--tr);}
.button:hover{transform:scale(1.05);}
iframe{width:100%;height:600px;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);}
footer{padding:10px 20px 16px;font-size:11px;color:var(--faint);text-align:center}
</style>
</head>
<body>
<main class="main">
<div>
<h1>Vauco OS CostGuard</h1>
<p style="color:var(--muted); max-width: 500px; margin: 8px auto 24px;">Få full kontroll på dine GCP-kostnader med sanntids overvåkning og anomali-deteksjon.</p>
<a href="/auth/login?client_id=demo" class="button">Koble til GCP</a>
</div>
<iframe src="/static/billing-dashboard.html"></iframe>
</main>
<footer>Powered by Vauco OS · Vauco AS · 935 989 779</footer>
</body>
</html>