# FinLab — dashboard + console Claude Code (in-cluster) Deux usages, **une image**, un workspace partagé : - **Dashboard** (`finance.lab.local/`) — interface web : graphiques chandeliers (MM50/200 + volume), portefeuille (P&L, poids, secteurs), watchlists thématiques scannées, alertes du jour, actions (plan de trade R:R). Données finlab (Yahoo Finance) — **aucun LLM, aucune clé**. - **Console** (`finance.lab.local/console/`) — vraie session **Claude Code** dans un terminal web (`ttyd`), sur ton **abonnement** (login persisté), persona finance + outils finlab en MCP. > ⚠️ La console expose un **shell web** → tout est derrière **basicAuth Traefik**. Analyse et > aide à la décision uniquement : **aucun ordre réel** (paper trading Alpaca fictif seul). ## Image & code CI (`.github/workflows/build-finlab.yml`) build depuis `tools/finlab/` → `ghcr.io/alkatrazz24/funk-finlab`. Le **code** (package `finlab` + backend `dashboard`) vit dans l'image (`/opt/app`) et se met à jour avec elle. Les **configs éditables** (portefeuille/watchlists/alertes) + la persona + le login vivent dans le **workspace persistant** (`FINLAB_HOME=/home/finlab/workspace`, sur le PVC). ## Architecture du pod | Élément | Rôle | |---|---| | initContainer `seed` | Peuple le workspace depuis l'image (`cp -rn`), robuste au piège NFS (recrée le dossier si root/non-inscriptible). Tourne **avant** les conteneurs | | container `console` | `ttyd -b /console` → `claude` dans le workspace (port 7681) | | container `dashboard` | `uvicorn dashboard.server:app` (port 8800), lit `FINLAB_HOME` | | PVC `finlab-data` (5Gi NFS) | `/home/finlab` : `~/.claude` (login) + workspace (configs + `.cache`) | | Service `finlab` | `web:8800` + `console:7681` | | Middleware `finlab-auth` | basicAuth Traefik (secret htpasswd) | | IngressRoute | `/console` → 7681 · reste → 8800 (les deux derrière `finlab-auth`) | ## Pré-requis manuels (une fois) ### 1. Secret de pull GHCR (si absent du ns `ai`) ```bash kubectl -n ai create secret docker-registry ghcr-pull \ --docker-server=ghcr.io --docker-username=Alkatrazz24 \ --docker-password= ``` ### 2. Secret basicAuth `finlab-auth` ```bash kubectl -n ai create secret generic finlab-auth \ --from-literal=users="alkatrazz:$(openssl passwd -apr1 'MOT_DE_PASSE')" ``` ### 3. Premier boot — login Claude Code (pour la console) 1. Ouvrir **http://finance.lab.local/console/** (basicAuth), lancer `claude`, puis `/login`. 2. Le dashboard est sur **http://finance.lab.local/** (rien à configurer). > Configs éditables dans le workspace (`portfolio.yaml`…) : depuis la console, ou > `kubectl -n ai exec deploy/finlab -c console -- python -m finlab.cli digest`.