Projects
Things I've built for myself. All self-hosted. All running on my homelab. Not products — working tools I use every day.
#MihiContraMe
LiveSelf-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.
See the full breakdown →Daily Social Automation
LiveDaily 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.
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.
View on GitHub →ThriveWell
GitHubFastAPI 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.
View on GitHub →