A personal project by rjrbio

Fokkelman Photo Vault

A private photo archive for my family: 3,600+ digitized photographs, searchable and organized, behind a secure login. The family photos are private — but you can try the real app with public sample photos.

What it does

  • Infinite-scroll gallery over 3,600+ photos, served through Cloudinary's CDN
  • Full-screen viewer with keyboard, swipe, favorites and original download
  • Signed direct-to-Cloudinary uploads with per-file progress
  • Search and collection filters, shareable via URL

How it's built

  • SvelteKit + TypeScript with server routes on Netlify
  • Cloudinary as the single source of truth: folders, tags and its Search API — no separate database
  • Server-side session auth: scrypt-hashed password, HMAC-signed HttpOnly cookie
  • Photo index cached server-side (5 min TTL) with stale-on-error fallback
  • Tested with Vitest (unit) and Playwright (end-to-end against a Cloudinary mock)

Why it's interesting

This is a full rewrite of my first project (static HTML + vanilla JS with client-side auth). The redesign moves every secret server-side, replaces Firebase with Cloudinary's own metadata, and turns a hand-generated JSON index into a live, cached one.