Portfolio

Work

What I've built and how it works. Architecture decisions, real numbers, and the patterns that transfer.

chris-os

Personal Infrastructure Monorepo — Production, 2026-present

PostgreSQLDockern8nTypeScriptPythonCloudflareAstroReact

Problem

Personal data scattered across dozens of services: messages on multiple platforms, health records in silos, calendar events with no unified view, no automation between systems. No single source of truth.

Approach

Treat a personal digital life as an operating system. One database as the source of truth. Proper role-based access control. Automated pipelines for every data source. AI orchestration for decision support and automation.

Result

36 containers in production on a Raspberry Pi 5. 1,593 automated tests. 227 database migrations. 76 workflows. Unified view of health, messages, calendar, location, and finances in a live dashboard.

Key Subsystems

Data Layer

PostgreSQL with 5 roles (superuser, app, readonly, scoped read-write, Home Assistant). Three-tier data classification enforced at the schema level. 227 sequential migrations tracked via a schema_migrations table. 3.7M+ health records ingested, 446K messages across 6 platforms.

AI Orchestration (Director Model)

Custom multi-agent framework: a Director session coordinates parallel worker agents, each with a declared scope and a result contract. Context budget management, 5-perspective decision council, structured handoff protocol. Not a chat wrapper.

Automation Engine

76 n8n workflows handling email classification, calendar sync, health nudges, voice pipeline routing, and system monitoring. Gmail Pub/Sub push notifications. Automated watch renewal. Parameterized SQL to prevent injection.

MCP Infrastructure

Custom MCP proxy layer with OAuth 2.1 via Cloudflare Workers. Dual auth: Worker OAuth for claude.ai, API key for Claude Desktop. Exposes database, n8n, memory, and Home Assistant via standard protocol. 89 Home Assistant tools.

Voice Pipeline

End-to-end: wake word detection on hardware satellite → GPU Whisper transcription → n8n routing → Ollama/Claude inference → custom TTS → Sonos playback. Under 2 seconds wake-to-response. All local inference.

Dashboard & API

React SPA with 19 pages, SSE for live data, write-back, and PWA support. Fastify BFF with 1,038 API tests. Authelia SSO with OIDC clients for Home Assistant and iOS app. Live at ataraxis.cloud (auth-gated, available on request).

By the Numbers

27,500x

query optimization (55s → 2ms)

1,300+

commits in ~35 days

3.7M+

health records ingested

446K

messages across 6 platforms

Technology by Layer

Data

PostgreSQL 16, pgvector, 227 sequential migrations

Compute

Docker Compose, Raspberry Pi 5, AMD 7900 XTX

Automation

n8n, cron, Pub/Sub webhooks

AI

Anthropic Claude, Ollama, MCP protocol, custom agents

Edge

Cloudflare Pages, Workers, R2, DNS

Auth

Caddy, Authelia SSO, OIDC, OAuth 2.1

Backend

Node.js, Fastify, TypeScript, Python

Frontend

React, Vite, TailwindCSS 4, shadcn/ui

Observability

System State Registry (234 properties), structured logging

Want the deeper technical detail?