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. 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.

React TypeScript AWS CDK DynamoDB Hono Claude Code
v0.1.43 updated yesterday

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