Case study

Keeping the memories

Milk & Henny started with a familiar request after a party: can you send me the photos? I wanted somewhere people could browse an album and get their pictures, alongside the writing and photography I wanted to keep.

Context
Milk & Henny / Engineer & photographer / 2025–26
Focus
Galleries, image processing, publishing, private transfers
Project
milkandhenny.com

I take photos on digital and film cameras, at parties and while travelling. Sending large batches repeatedly turns the same favour into admin. A gallery needs to be easy to browse, while private files need a different sharing path.

AreaWhat I built and why
Publish an album

Built draft albums, image processing, publishing, and downloads.

People can browse smaller previews and request a larger image when they want to keep it.

Send a private batch

Built expiring transfers, upload and download paths, previews, and separate deletion controls.

A recipient can get the files without turning them into a public gallery.

Keep the context

Built writing and media publishing alongside the albums.

Photos and the stories around them have a home beyond a temporary download link.

ChoiceWhy it matters
Separate source files from public previewsAlbum manifests and originals stay in private object storage. Publishing copies display variants into public delivery storage; original downloads go through a published-album check and a signed link.
Do image work before browsingProcessing creates responsive variants and social previews before an album is published. The gallery can serve prepared images rather than reprocess the source for each visitor.
Give a transfer its own lifetimeTransfer records use Redis expiry and private object storage. Recipient access and deletion authority are separate, so sharing a download does not also give away the sender’s deletion control.
From upload to published album
  1. Private draftUpload, process, and arrange the photos.
  2. Public previewsPublish prepared display images for browsing.
  3. Original downloadCheck publication, then issue a signed download link.

Public albums provide a repeatable place to browse and download photos. Transfers cover the private exchange, while writing keeps the context around the images. The archive remains part of Milk & Henny as the events and games grow.

A public album and a private transfer may contain the same kind of file, but they make different promises. Giving each a clear publishing and expiry model is more useful than treating everything as an upload with a link.