Home Cooked Projects
Last updated: September 29, 2026
What Are These?
This is a repository of projects I built for myself. Most were coded with the assistance of Claude Code working as Mia, the assistant identity that carries my preferences and tolerances from one session to the next. They put the personal in "personal software."
They are not designed for mass consumption. They are not designed to be the next SaaS. They are not even for you, or your friend, or anyone else. They are posted to document what one person has created. May they inspire your projects, your flavors, and your preferences, so that you may cook yourself the perfect personal project.
The Stack
Nothing exotic. Nothing enterprise. Tools that get out of the way.
Python is the default, with uv managing every environment. TypeScript shows up when a project calls for it, and Bun runs it. Every project starts as a private GitHub repo. No code is complete without a companion test harness, and conclusions get validated with data before I trust them. Everything runs on Manjaro Linux under zsh, and anything that has to happen on a schedule is a user-level systemd timer. No Kubernetes. No microservices. No observability platform watching a cron job. If it runs on one machine and does what I need, it ships.
Security and privacy are foundational, not a phase at the end. Every project, whether a shell script, a web API, or a mobile app, passes the same gates before I run a line of it: semgrep for static analysis, gitleaks for secrets, ruff with the bandit rules turned on for Python, and npm audit for anything carrying a package.json. Data stays on hardware I own unless there is a reason for it to leave. 300 Findings, 7 That Mattered shows what those gates look like in practice.
For AI, I lean on Claude through Claude Code for the heavy lifting: reasoning, generation, and the kind of tasks that used to take an afternoon. Local inference runs through llama.cpp or Ollama when I don't want my prompts leaving the house or want to save some tokens. What every assistant remembers about my projects lives in Threadmark, listed below. Notifications and delivery almost always go through Telegram. It's the right tool for a user base of one who wants a message, not a dashboard.
Where PAI Went
Earlier versions of this page named PAI, now known as LifeOS, as the harness on top of Claude Code. I no longer run it. Its design evolved toward a content creator or self-employed individual who wants every aspect of their life in a single system. That is a legitimate objective. It isn't mine.
What I valued most from it I have since built or replaced. The status line became clean.status. The writing and art skills I use are my own, learned from PAI and other sources. Claude Code's remote functionality replaced the Telegram bridge I had built to reach Mia from my phone. Two posts cover the departure: If I See It, I Think About It on the status line, and Nothing Broke, So Nothing Got Fixed on the bot that quietly stopped running.
The Projects
Memory and Agents
Threadmark (private, headed to GitHub) A small self-hosted service, Python and SQLite, that holds decisions, facts, tasks, work logs, and session handoffs per project and serves them over MCP to Claude Code, claude.ai, ChatGPT, and Codex. Whichever assistant I open, it already knows where the project stands. The records get written as a side effect of the work, so nobody has to remember to write them. Post references: The Memory Is the Moat
memory (private, replaced by Threadmark) A git-backed store of markdown notes with a hot layer every session reads first, plus a nightly pass by a local model to keep it current. Built so I stop paying for the same mistake twice. Post references: My Memory System Almost Forgot Why It Existed
atrium (retired) A personal platform for custom agents and automations with a unified markdown context layer and a React management UI. It reached a working proof of concept and stopped there. User-level systemd timers turned out to be a suitable and simpler replacement for my needs.
pai-telegram (retired) A Telegram bot that put Mia in your pocket, responding to text and voice messages with tool-enabled, Claude-backed answers. Retired along with PAI. Claude Code's remote functionality does the job now. Post references: Nothing Broke, So Nothing Got Fixed, A Product in Spring, a Line Item in Summer
Media and Summarization
portal and portal app A media server and the Android app that pairs with it. Together they do roughly what Plex does inside your local network or tailnet: index video, music, and photos, then stream them to your phone. No subscription fees, no data collected by third parties. MIT licensed. Post references: Putting the Personal in Personal Software, Again
ytsummarizer Fetches your Watch Later playlist, downloads the audio, transcribes it with local Whisper, summarizes it with a local LLM, and sends the summary to Telegram. Post references: My Watch Later Playlist Was Out of Control
hndaily A personal Hacker News digest that scores stories against your interests, summarizes each one with a local LLM, and drops them in your Telegram every morning.
bitbrief (private) A local-only Linux desktop app that transcribes and summarizes video files using Whisper and a local LLM. Your content never leaves your machine, and you never pay for tokens to summarize that 60-minute conference talk you managed to download.
plume (private) A personal voice notes app that records audio, transcribes it with Whisper, cleans it up with a local LLM, and auto-tags it. Available as a web app and a mobile app.
Claude Code Tooling
clean.status A clean two-line status bar for Claude Code. Model. Directory. Context. Usage limits. Optional weather. Post references: If I See It, I Think About It
Small Tools
bulldozer (private) A high-performance file deduplication tool that uses BLAKE3 hashing and parallel processing to find and eliminate duplicate files fast.
resize-images Shrinks any image in the current directory to under 1 MB in place, using smart percentage scaling with retry logic. Requires ImageMagick.
d20-roller (private) A minimal, touch-friendly D20 dice roller built for the table. No accounts, no ads, roll.
kyukidocards (private) A flashcard app for drilling Kyukido martial arts forms, with hand positions and opening moves on the back of each card.
Learning
gdtv_speedy_saucer Speedy Saucer, the first game from GameDev.tv's Godot 4 course, built in Godot 4.7 with GDScript. A learning project in game development, kept public so the progress shows, mistakes included.