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
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?