Kevin Rich

Software Engineering Leader

Building ai-driven, cloud-native applications — and the high-performing engineering teams that ship them.

Kevin Rich
All projects

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.

Go SvelteKit TypeScript SQLite Tailwind CSS Docker GitHub Actions Claude Code
updated today

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. Past the MVP it now runs an MCP server that hands the library to AI assistants, a “System Activity” panel for the indexing internals, and a first pass at enriching cast from external metadata providers into a provenance-tracked shadow layer — editing and writing that metadata back to the source files is what’s 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.

React TypeScript AWS CDK DynamoDB Hono Claude Code
v0.1.43 updated 2 days ago

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.

Visit blog