Infrastructure Overview¶
High-level map of the Liflode technical infrastructure. For connection strings and local service ports, see .claude/rules/ops-facts.md (internal crew reference).
Code & Deployment¶
| Service | Role |
|---|---|
| GitHub (github.com/Curious-Owl11) | Source control, CI/CD via GitHub Actions |
| Cloudflare Pages | Static hosting for site-base and proposals repos — auto-deploys on push to main |
| Cloudflare Workers | Serverless functions: email routing (liflode-email-workflows), webhooks, intake |
| Modal | Serverless burst compute for AI workloads (embeddings, proposal generator, context API) |
Data¶
| Service | Role |
|---|---|
| Neon | Canonical cloud Postgres — production data, accessed by Windmill / Modal / Cloudflare Workers |
| Local Postgres | Staging and ETL database (Docker, localhost:5432). Data is cleaned here before promotion to Neon |
| Neo4j | Graph database for relationships, knowledge graph, and Canon entity projections |
| Cloudflare R2 | Object storage for files, archives, backups, and unstructured data |
Data flow: local staging → dedup → standardise → enrich → push to Neon → project to Neo4j where relational.
Automation¶
| Service | Role |
|---|---|
| Windmill | Scheduled cron jobs and ETL pipelines (app.windmill.dev, workspace: liflode) |
| n8n | Event-driven webhooks and human-in-the-loop workflows (local Docker, optional profile) |
| GitHub Actions | CI/CD on push to main across all Curious-Owl11 repos |
| Windows Task Scheduler | Local daily jobs: Seek scraper, transcript indexer, Neon sync, Docker volume backup |
n8n vs Windmill: n8n handles reactive events (webhooks, Linear triggers). Windmill handles scheduled/code-first pipelines. Non-overlapping. See ADR-044.
Operations¶
| Service | Role |
|---|---|
| Infisical | Secrets management (eu.infisical.com). All API keys stored here — never in code |
| Cloudflare Access | Zero-trust auth for internal tools and dashboards |
| Restic + R2 | Backup system for local Docker volumes and Postgres |
| ntfy | Push notification alerts for monitoring events and cron job results |
Local Development Stack¶
Core services start with:
docker compose up -d
Add --profile optional for n8n, Grafana, Moodle, PlantUML, and other non-core services.
Live service status: http://tools.localhost (sourced from the Neon tools table).
Core local services¶
| Service | Purpose | Port / URL |
|---|---|---|
| PostgreSQL | Local staging database | localhost:5432 |
| Neo4j | Graph database | bolt://localhost:7687 |
| LiteLLM | LLM gateway / proxy | litellm:4000 |
| Traefik | Reverse proxy + .localhost routing |
— |
| Adminer | DB browser | localhost:8181 |
| Prometheus / Grafana | Metrics and dashboards | grafana.localhost |
| Loki | Log aggregation | — |
| ntfy | Push notifications | ntfy.localhost |
Dashboard verticals (optional profile)¶
All verticals are independently deployable PWAs. Ports 8100–8120+.
| Vertical | Port | Purpose |
|---|---|---|
| Dashboard Shell | 8090 | Main frame + directory |
| Transcripts | 8092 | 100K+ indexed session turns |
| Dashboards v2 | 8095 | Modular PWA frame |
| Atlas | 8180 | System map / workflow viewer |
| Routines | 8113 | Daily routine agent monitor |
| Innovation Portfolio | 8120 | IP module discovery + filter |
| Coaching API | 8122 | FastAPI coaching backend |
Email Routing¶
All automated email is processed by the liflode-email-workflows Cloudflare Worker — not Gmail.
| Address | Workflow |
|---|---|
it@liflode.com |
CI failure → Linear IT issue → auto-fix |
bill@liflode.com |
Bill/receipt → Xero draft invoice |
quinn@liflode.com |
Newsletter ingestion |
iris@liflode.com |
Inbound info (F5Bot, feeds, alerts) |
GitHub org notifications (Curious-Owl11) route to it@liflode.com. See ADR-129.