Display preferences

Bloblet

A self-hosted product for sharing images, GIFs and clips, from upload to recoverable deletion.

Bloblet — live public upload page with an empty recent-drops section

Actual public interface captured on 28 October 2026; anonymous session, no uploaded media

Stack · TypeScript · TanStack Start · Postgres · S3-compatible storage · FFmpeg

Problem & context

Sharing media involves more than an upload form: large transfers can fail, files need browser-ready versions and an accidental deletion should be recoverable.

My contribution

Built the upload, conversion, sharing and recovery workflow. Browsers upload directly to object storage; the application verifies completion before queuing a separate conversion worker. Management actions use a protected session, while media and albums have separate sharing links.

Decisions & tradeoffs

Keep large transfers separate from web processing.

Reserve uploads and verify their completion before queuing conversion; let a separate worker handle media processing and recovery.

Make deletion recoverable while keeping original files separate from display versions.

Use a seven-day trash period and strip metadata from generated derivatives. Original files and unlisted sharing links retain their own privacy limits.

Outcome

An implemented media workflow covering direct upload, conversion, link sharing and recovery from accidental deletion.

Selected work / of 12