Skip to content

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-base Astro template, proposals repo).
  • 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.