About
A collection of personal projects and a photography portfolio.
What this site is
This site is a curated home for personal work: photography series, gear notes, and a small music archive.
It is intentionally minimal and built for speed, clarity, and longevity.
How it is built
It runs on a lightweight Python WSGI server that renders simple HTML templates and serves static files.
Photo previews, video transcodes, and EXIF metadata are generated in the background, and music catalogs are built from a local library.
This project was built with a little help from ChatGPT Codex and Claude Code.
Technology & architecture
Pure HTML, CSS, and JavaScript with a small Python codebase. No frameworks, no databases, no trackers.
Everything is stored locally and configured from a single JSON file. Galleries, gear, and photo metadata live in plain CSV and JSON.
Changelog
| Date | Change |
|---|---|
| 2026-05-20 | Private gallery: click a date to collapse or expand that day |
| 2026-05-20 | For Sale items in gear list now link to the contact page |
| 2026-05-20 | Gallery lightbox: swipe to navigate on mobile |
| 2026-05-20 | Gallery lightbox now works on public galleries with prev/next navigation |
| 2026-05-20 | Fixed last restarted stat not updating on stats page |
| 2026-05-20 | Navigation dropdowns show page hints on hover |
| 2026-05-19 | Camera and lens in gallery image cards now link to the gear page |
| 2026-05-19 | Fixed scroll position when navigating from hero image to gear page |
| 2026-05-19 | Improved photo date detection from EXIF metadata |
| 2026-05-19 | Contact page now shows interactive 3D business card |
| 2026-05-19 | Added custom 404 page |
| 2026-05-19 | Additional hardening |
| 2026-05-19 | Added changelog to About page |
| 2026-05-19 | Hero page camera and lens now link to gear page |
| 2026-05-18 | Private gallery previews now download as JPEG |
| 2026-05-18 | Private gallery lightbox shows filename |
| 2026-05-15 | Improved startup logging with timing and progress |
| 2026-05-15 | Private gallery photos no longer appear on the gear page |
| 2026-05-15 | Hero image always fits the viewport without clipping the footer |
| 2026-05-12 | Added password-protected private gallery with timeline view |
| 2026-05-12 | Added support for HEIC images |
| 2026-05-11 | Front page now shows a daily rotating hero image |
| 2026-05-08 | Added gear table with expandable detail rows |
| 2026-05-08 | Added photo library pipeline with automatic WebP previews |
| 2026-05-08 | Added contact form |
| 2026-03-14 | Initial release |