System Architecture Overview¶
Liflode's infrastructure follows a three-layer architecture: Infrastructure, Automation, and Product.
Infrastructure Layer¶
- Local Docker stack — development and staging services (Postgres, Neo4j, n8n, dashboards). Start with
docker compose up -d. - Cloudflare — edge network, DNS, tunnels, Workers, Pages, R2 storage, Access auth. Tunnel config:
~/.cloudflared/config.yml. - Neon — canonical cloud Postgres (production data). All clean/normalised data lands here.
- Neo4j Aura — cloud graph database (relationships, knowledge graph). Local Neo4j = staging.
Automation Layer¶
- Windmill — scheduled cron jobs and ETL pipelines (
app.windmill.dev, workspace:liflode). See ADR-043, ADR-062. - n8n — event-driven webhooks and reactive automation (local Docker, internal/crew only). See ADR-044.
- Modal — serverless burst compute for AI workloads (embeddings, LLM inference at scale).
- GitHub Actions — CI/CD for all repos under
github.com/Curious-Owl11.
Product Layer¶
- Claude (Anthropic) — AI intelligence layer across all products. Agent SDK for quota usage; never raw API keys for internal data.
- Cloudflare Pages — static site hosting (
site-baseAstro template,proposalsrepo). - Dashboards — internal PWA cockpit (
dashboards.localhost). Each vertical is independently deployable.
Key Design Decisions¶
Architecture decisions are recorded as ADRs in adr/ at the repo root. The most important for contractors:
| ADR | Decision |
|---|---|
| ADR-134 | Machinery standardisation — industry-standard IT/PM conventions throughout |
| ADR-044 | n8n vs Windmill boundary — n8n for events, Windmill for scheduled/code-first |
| ADR-061 | Three-tier contacts architecture (Neon archive / Attio B2B / Brevo B2C) |
| ADR-128 | LLM routing by data sensitivity — Claude only for internal data |
| ADR-129 | Email routing patterns — CF Worker handles all machine-generated email |
See the ADR index for the complete list.
Data Flow¶
The standard pipeline for all data domains:
collect → stage (local Postgres) → clean/dedup → canonicalise (Neon) → relate (Neo4j)
R2 is used for unstructured storage (files, exports, backups). Every pipeline reuses this pattern — jobs, courses, events, contacts, and content all follow it.
Secrets¶
All secrets in Infisical EU (eu.infisical.com). Scripts access secrets via infisical run --. ANTHROPIC_API_KEY must never be in the shell environment directly.
Repos¶
| Repo | Purpose |
|---|---|
liflode-scripts |
PowerShell, Python scripts, config, brand tokens |
liflode-docs |
ADRs, guides, documentation, Neo4j schemas |
site-base |
Astro + Tailwind + HTMX base template — Cloudflare Pages |
proposals |
Bespoke client proposals — multi-brand Astro |
liflode-modal-apps |
Modal deployments (context-api, proposal-generator) |
All repos live at C:\Users\accou\repos and are under github.com/Curious-Owl11.