Kevin Rich
Building ai-driven, cloud-native applications — and the high-performing engineering teams that ship them.
Building ai-driven, cloud-native applications — and the high-performing engineering teams that ship them.
A self-hosted personal video media server that reads each file's own embedded metadata as the source of truth, built in Go with a SvelteKit frontend.
Most media servers make you bend your library to fit them — rename files to a scheme, maintain a database by hand, or hand your collection to an online service to scrape. Holodex takes the opposite stance: the metadata already embedded in your video files — titles, cast, genres, dates, written into the container’s iTunes atoms or Matroska tags — is the catalog. Point it at a folder, and it indexes everything with no naming conventions, no internet connection, and no telemetry.
Media is a long-running hobby of mine and my university minor, and I’ve built versions of this project for years. This time I paired with Claude Code and reached a working MVP in a few days — work that has taken me a few weeks in past attempts. I deliberately chose Go because I’d never used it before; in practice my approach left me little need to drop into the Go code by hand.
The backend is a single pure-Go binary: a layered exiftool + ffprobe extraction pipeline, SQLite with FTS5 full-text search (diacritic-folded, so amelie finds Amélie), and a chi REST API. Indexing is incremental — the scanner watches the filesystem and only re-reads files whose size or mtime changed, so rescanning an unchanged 10k-file library makes zero subprocess calls. Cover art is tiered: embedded poster art is pulled instantly at index time, while files without it get a throttled background frame thumbnail so a modest host never gets hammered. The frontend is a SvelteKit SPA on semantic design tokens that drive three fully switchable skins from a single header control, with no per-component restyling.
It’s built to be run, not hosted-for-you: the library mounts read-only, the index and config live in a named volume, and the whole thing ships as one multi-arch image (amd64 + arm64) for NAS and ARM home servers. What’s here today is the MVP — adding and editing tags and other metadata from the UI is coming next. Architecture decisions are tracked as a numbered ADR series in the repo.
A personal book-tracking app for managing reading lists and discovering new books. Built with React, Hono, and DynamoDB on AWS.
Bookshelf is a full-stack personal app for tracking what I’m reading, what I want to read, and what I’ve finished.
The frontend is a React 19 SPA built with Vite and Tailwind CSS. The backend is a Hono REST API running on AWS Lambda, backed by DynamoDB. Authentication uses Cognito with a PKCE flow. The entire infrastructure is defined as code with AWS CDK v2 and deployed via GitHub Actions with OIDC.
Key technical decisions: runtime config injection (no build-time env vars) so a single artifact can be promoted dev → prod; same-origin API routing through CloudFront to eliminate CORS; and a versioned S3 deployment layout that supports zero-downtime rollbacks.
Notes on engineering decisions, AWS, and things I've learned building.