Ship It Lesson 13 of 34

Users Want to Upload Photos

The Story

Narrated

A user sends you a feature request: “Can I upload photos to my trips? I want to add inspiration pictures for places I want to visit.”

Sounds reasonable. You fire up Claude Code and tell it to add photo uploads. It works. Users pick a file, it gets saved, the photo shows up on their trip. On your laptop it works beautifully. You feel good.

Then the reports come in, and they’re strange. A user uploads five photos and an hour later three of them are broken squares. Another swears her photo was there when she saved the trip and gone when she showed it to her husband. You already know this failure. It’s the trips story from Lesson 12 all over again: the photos were being written to the short-lived disk of whichever serverless worker caught the upload, and that worker is already gone.

So you reach for the fix you already trust. The database saved your trips. Why not drop the photos in there too? Because images are big, and a database is built for small, structured records, not fat blobs of pixels. A JSON file with a hundred trips might be a few kilobytes. A hundred photos is hundreds of megabytes. Stuff those into Postgres and every query slows down, every backup balloons, and your free tier evaporates.

And an old-fashioned server with a disk that stays put wouldn’t save you either. It just changes how the story ends. Give the app a few thousand users, a few vacation photos each, and the disk quietly fills for months until the whole app goes down because someone uploaded one more high-resolution sunset in Santorini. Cloud servers keep modest disks on purpose. They’re designed to run code, not store files.

Your server is not a hard drive. It never was. You need somewhere else to put files.


This lesson continues with the full course

The story intro above is free to read. The full lesson (prompts, explanations, and adapt-it exercises) requires the Ship It ($69) tier or above.

New here? Lesson 1 is free and ends with a working app.

Already bought a lower tier? Log in, you'll only pay the difference to upgrade.