Portfolio
Projects and artifacts from real sessions. No vaporware — everything listed has at least one working commit.
Projects
Household Inventory Brain v0.1
In ProgressLocal SQLite app for tracking household items by room and category. Barcode scanning via phone camera. Running at home on a Raspberry Pi.
Daily Briefing Agent
ShippedScheduled Python script that aggregates weather, calendar events, and system stats — sends a Telegram message every morning at 7am.
LAN Recipe Manager
PausedRecipe storage and search app shared on home network. Paused at v0 — the search needed work and life got busy. Will revisit.
Artifacts
8 artifacts total — screenshots, snippets, notes, and demos from real sessions.
Screenshots

Inventory search: live filtering as you type
The search bar in the Household Inventory app. SQLite FTS5 powers it — results appear below 200ms on a Raspberry Pi 4 with ~800 items.

Telegram bot notification from Python agent
Daily briefing message arriving in Telegram from the local automation agent. Took about 40 minutes to set up end-to-end including bot token and chat ID.

App running on phone via LAN share
The recipe manager loading on a phone browser via the local IP. No tunnels, no ngrok, no cloud — just 0.0.0.0 binding and the LAN IP.

Day 1 checklist: what actually gets done
My completed Day 1 checklist from the inventory build. The goal was a working SQLite schema, one CRUD endpoint, and a form that submits. All three done by hour 6.
Demos

Automation agent log dashboard
Simple Jinja2 + Tailwind dashboard showing task history, last run time, and success/failure status. Built in about 3 hours on Day 2 of the agent build.
Code Snippets
FastAPI + SQLite CRUD boilerplate
A minimal FastAPI app with SQLite via aiosqlite. Includes a working /items endpoint with GET, POST, PATCH, DELETE. No ORM — raw SQL with parameter binding.
One-command Python dev environment setup
The Makefile target I use to set up a Python venv, install deps, and copy .env.example to .env.local in a single `make setup`. No more "it works on my machine" moments.
Build Notes
Why SQLite FTS5 is enough for local search
I spent an afternoon convinced I needed Elasticsearch for full-text search. Then I tried FTS5. It handles 10,000+ rows instantly, is included in Python's stdlib, and requires zero configuration. Stop sleeping on it.
Build log is live. This page updates whenever I add artifacts to /content/artifacts.json. No CMS, no database — just a JSON file and a git push.