Projects

Things I've built for myself. All self-hosted. All running on my homelab. Not products — working tools I use every day.

Self-hosted AI training coach. Reads Strava and Apple Health, delivers a weekly coaching brief to Telegram.

Every Monday at 9am: n8n pulls a week of Strava activities and Apple Health metrics from PostgreSQL, feeds everything to GPT-4.1, and gets back a two-sentence coaching verdict — building, maintaining, or overreaching, plus one actionable tip. A FastAPI sidecar renders a visual summary card. Both land in Telegram. No app subscriptions. No cloud dependency. Just data and honest analysis.

n8n PostgreSQL GPT-4.1 FastAPI Strava API Apple Health Telegram Proxmox Docker
See the full breakdown →

Daily Social Automation

Live

Daily AI-generated WhatsApp status with matching DALL-E image. Runs at 8am, checks recent history to avoid repeats.

Claude Sonnet writes a sub-160-character mindfulness status — honest rather than cheerful, no hashtags, no poster tone. DALL-E 3 generates a matching ambient image. n8n posts both as a WhatsApp Story via WAHA and mirrors to Telegram. Status history is stored in an n8n DataTable so the model never echoes the last seven days.

n8n Claude Sonnet DALL-E 3 WAHA WhatsApp Telegram Proxmox

Reads your CV and certificates as PDFs, stores them in a vector store, then writes a tailored cover letter for any job description.

Drop PDFs into a watched folder — the app extracts and parses each one with GPT-4o-mini, builds a profile summary, then runs a similarity search against the job description requirements. LangChain orchestrates the generation loop: draft, improve, evaluate. Output is a structured cover letter with a fit score and improvement recommendations. Backed by PGVector for semantic search across all your documents.

Python LangChain LangGraph GPT-4o PGVector SQLModel
View on GitHub →

ThriveWell

GitHub

FastAPI wellness backend with a Telegram chatbot interface. Built as a modular, properly-tested alternative to an earlier prototype.

A clean rebuild of a wellness tracking app — same problem, different toolchain. FastAPI handles the REST layer with versioned routes; Alembic manages the schema; Telegram serves as the conversational UI. Structured around services, CRUD, and messenger adapters so adding new channels or data models doesn't require touching the core logic.

Python FastAPI Telegram SQLite Alembic pytest
View on GitHub →