--- status: active owner: platform last_reviewed: 2026-09-29 supersedes: [] --- # System inventory — Venture Studio (production) Canonical machine-readable registry: **`products/registry.yaml`**. Living track views: **`docs/archive/studio-products/TECH_STACK.md`**, **`docs/archive/studio-infra/TECH_STACK.md`**. **Host:** Oracle VM · **Public:** `https://studio-venky.duckdns.org` ## Products & URLs (from registry + runtime) | Product | UI path | API | UI | systemd / Docker | |---------|---------|-----|-----|------------------| | Venture Studio Launcher | `/studio/` | 8000 | 3003 | `studio-frontend`, `fastapi` | | Astra AI-CoS | `/astra/` | 8001 | 3101 | `astra-frontend`; Docker backend | | CareerOS | `/careeros/` | 8002 | 3102 | `careeros-frontend` | | Legal Copilot | `/legal/` | 8001 | 3104 | shares Astra API | | Deal Finder | `/deals/` | 8005 | 3105 | `deal-finder-*` | | CaseVault | `/casevault/` | 8015 | 3015 | `casevault-backend`, `casevault-frontend`, `casevault-worker` | | PropHunt | `/prophunt/` | 8003 | 3103 | `prophunt-api`, `prophunt-frontend` | | Nous | `/utilities/nous/` | 8019 | 3017 | `nous-backend`, `nous-frontend` | | Blueprint | `/utilities/blueprint/` | 8000 | 3209 | `blueprint-frontend` | | Athena | `/utilities/athena/` | 8017 | 3217 | `athena-*` | | LLM Config | `/utilities/llm-config/` | 8025 | 3225 | `llm-config-backend` | ## Runtime infra (not registry products) | Service | Port(s) | Evidence | |---------|---------|----------| | OpenHands | `127.0.0.1:3009` | Docker `studio-openhands` (0.38) | | n8n | `127.0.0.1:5678` | Docker `studio-n8n` | | LiteLLM | `:4000` | Docker `studio-litellm` | | Ollama | `127.0.0.1:11434` | Docker `ollama-arm64-speed` — models: qwen2.5*, qwen3*, bge-m3 | | Qdrant | `127.0.0.1:6333` | Docker `studio-qdrant` | | Redis | `127.0.0.1:6379` | Docker `studio-redis` | | Studio Postgres | `127.0.0.1:5432` | Timescale `studio-postgres` | | Astra Postgres | `127.0.0.1:5433` | pgvector | Health probes: `products/registry.yaml`. Re-audit: `bash scripts/audit-docs-vs-runtime.sh`. ## Dev vs prod (same VM) Prod uses **systemd + canonical ports** behind nginx. Dev uses **manual stacks on alternate ports** — start only while developing; stop when idle to save RAM. | Component | Prod | Dev | |-----------|------|-----| | LiteLLM | `:4000` (`studio-litellm`) | same `:4000` + `LITELLM_KEY_DEV` (no second container; see `LITELLM_ONE_GATEWAY.md`) | | IB Gateway paper | `:4002` (`ibgateway.service`) | API socket for compact-density IBKR — do not bind LiteLLM here | | Astra Postgres | `:5433` (prod) | `:5434` (`studio-dev-postgres-astra`; Astra/Athena only) | | Studio Postgres | `:5432` | same `:5432` (platform schemas; not a separate dev container) | | Studio dashboard | `:3003` (`studio-frontend`) | `:4003` (`scripts/run-product-dev.sh studio`) | | Astra UI | `:3101` | `:4101` | | CareerOS UI | `:3102` | `:4102` | | Legal UI | `:3104` | `:4104` | | Deal Finder | `:8005` / `:3105` | `:9105` / `:4105` | | compact-density API / UI | `:8007` / `:3107` | `:9107` / `:4107` | | Studio API | `:8000` | `:9003` | | Astra/Legal API | `:8001` | `:9101` (`run-astra-dev-api.sh`; fallback `:8001` if `STUDIO_DEV_FALLBACK_PROD_API=1`) | | CareerOS API | `:8002` | `:9102` | | Athena API | `:8017` | `:9217` | **Port mental map:** `docs/operations/PORT_SCHEME.md` (dev UI `4Hxx`; prod UI unchanged). | Redis | db `0` | db `1` (dev overlay) | | Git deploy target | `main` (post-PR) → `make test-gate` → `promote-product.sh` | integrate on `develop`; promote from `main` | **Env files (gitignored):** | File | Purpose | |------|---------| | `studio/.env` | Active studio-wide runtime (prod) | | `studio/.env.prod` | Frozen prod snapshot (Phase 0 backup) | | `studio/.env.dev` | Dev overlay (copy from `.env.dev.example`) | | `products/saas/astra-ai-cos/.env` | Active Astra product runtime | | `products/saas/astra-ai-cos/.env.prod` | Frozen Astra prod snapshot | | `products/saas.devops/retired.production.env` | compact-density prod workers | | `products/saas.devops/retired.development.env` | compact-density dev stack | **Promotion rule:** PR `develop`→`main` (CI green) → `bash scripts/promote-product.sh ` (syncs `main` → test-gate → deploy). Do not edit prod ports directly. Emergency non-main: `ALLOW_PROD_DEPLOY=1`. **Branches (Phase 1):** `develop` is the integration branch; `snapshot/prod-YYYYMMDD` captures prod-critical code before refactors. ## Framework baseline (living) **Truth:** `docs/archive/studio-design/TECH_STACK.md` + `platform/VERSION` (**2.4.4**). | App class | Observed stack | |-----------|----------------| | Majority (dashboard, Astra, CareerOS, CaseVault, PropHunt, Deal Finder, Nous, Blueprint) | Next **15.5.25** / React **19.3.0** | | Shared UI | `@studio/ui` **2.4.4** in `platform/ui/` | ## Venture factory shell (Phase 3c) **Decision:** composable shell slots + Next.js route groups for simpler products. | Piece | Location | Purpose | |-------|----------|---------| | `VentureProductShell` | `platform/shell/` | VentureRail + `topbar` / `banner` / `ambient` slots + main region; `mainFrame={false}` for workspace adapters | | Slot adapters | Legal (`LegalProductLayout`) | Custom inner chrome under `VentureProductShell`; Legal keeps `/login` public | | Worker packaging | `platform/jobs/handlers/` + `registry.py` | Typed handlers per product; `use_product_backend()` import isolation | | Unified test | `Makefile` + `scripts/validate-test.sh` | `make test` (fast) · `make test-gate` (pre-deploy) · `make test-e2e` (pipeline) | | Gate | `scripts/validate-phase3c.sh` | Shell scaffold + route groups + slot adapters + worker packaging + builds | Phase 3c complete. Optional: DB schema migrations for remaining products. | CareerOS DB | `careeros` schema in shared `studio` Postgres | `database/schema.sql` + startup migration from `public.careeros_*` | | Deal Finder DB | `deal_finder` schema in shared `studio` Postgres | `database/schema.sql` + hunts/offers/best-price ledger | | compact-density DB | `retired` schema in shared `studio` Postgres | `database/schema.sql` + SQL migrations (Timescale optional) | ## Platform UI & ops polish (Phase 4) | Piece | Location | Purpose | |-------|----------|---------| | `@studio/ui` Storybook | `platform/ui/` + `make storybook` | Component catalog; gate `scripts/validate-ui-storybook.sh` | | Design-system contract | `docs/product-kit/design-system-contract.md` | Enforced Kit/UI rules; gate `scripts/validate-design-system-contract.sh` (`make design-system-gate`) | | Product contracts | `docs/products/contracts/` | One canonical contract per registry id; gate `scripts/validate-product-contracts.sh` | | Auth contract | `docs/platform/AUTH_CONTRACT.md` | Shared AuthProvider + fetchMe; gate `scripts/validate-auth-contract.sh` | | Dashboard utility chrome | `dashboard/components/utilities/` | `UtilityPageFrame`, `UtilityCard`, shared utilities layout | | Pre-deploy promotion | `scripts/promote-product.sh` | `git pull` → `make test-gate` → `deploy-product.sh` | Phase 4 complete on `develop`. Deal Finder schema isolation (`deal_finder.*`) complete. ## Shared infrastructure | Component | Typical port / path | Notes | |-----------|---------------------|--------| | Nginx | 443 / 80 | TLS termination; routes to Next apps + `/api` | | Astra Postgres | 5433 (host) | DB `astra`, user `astra_user`; container name varies (`astra-ai-cos-postgres-1`, etc.) | | Studio Postgres | 5432 | DB `studio`; container `studio-postgres` | | Redis | 6379 | Platform jobs, caching | | LiteLLM gateway | env-specific | See `litellm_config.yaml`, `docs/platform/LLM_PRODUCTION_RUNBOOK.md` | | LiteLLM budget pools | Phase 3a | `scripts/setup-litellm-budget-pools.sh` → `LITELLM_KEY_*` env vars | | Phase 3a deploy gate | Before LLM/UI prod deploy | `scripts/validate-phase3a.sh` (add `--public`; `--e2e` optional) | | Gotify (optional) | 8080 | Push notifications for Astra digest | ## Key paths on the VM | Path | Purpose | |------|---------| | `/home/ubuntu/studio` | Git clone (monorepo) | | `/home/ubuntu/studio/.env` | Studio-wide env (gitignored) | | `products/saas/astra-ai-cos/.env` | Astra backend secrets (gitignored) | | `products/saas/astra-ai-cos/frontend/.env.local` | Next server-side rewrites (gitignored) | | `/etc/nginx/sites-enabled/` | Live nginx (canonical: `dashboard/.devops/nginx-studio-venky.conf`) | | `/home/ubuntu/backup.log` | Nightly backup cron log | | `/etc/letsencrypt/` | TLS certificates (not in git) | ## Docker container names (may vary) After `docker compose up`, names depend on project directory. Discover with: ```bash docker ps --format '{{.Names}}\t{{.Ports}}' | sort ``` Common patterns: - `astra-cos-deploy-backend-1` or `astra-ai-cos-v2-backend-1` — Astra API - `astra-ai-cos-postgres-1` — Astra database - `careeros-backend` — CareerOS API Update smoke scripts and restore commands if compose project names change. ## Verification commands ```bash cd ~/studio ./scripts/status-venture-stack.sh python3 api/product_registry.py health curl -sS -o /dev/null -w '%{http_code}\n' https://studio-venky.duckdns.org/astra/ ``` See [DEPLOYMENT.md](./DEPLOYMENT.md) for full deploy smoke gates.