Ship It Lesson 10 of 27

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. You feel good.

Then your app goes down.

You check the logs. “Disk full.” Your server has a small hard drive — most cloud servers do, because they’re designed to run code, not store files. Fifty users uploaded a few vacation photos each, and that was enough to fill it up. Your entire application crashed because someone uploaded a high-resolution sunset in Santorini.

You fix it by deleting the uploads and restarting the server. But then the next deploy happens. Your hosting platform ships a fresh copy of your code to a new server instance. That fresh copy doesn’t include the uploads folder. Every photo is gone. Again.

This is the same lesson you learned with data in the JSON file — your server’s disk is temporary. But this time it’s worse, because images are big. A JSON file with a hundred trips might be a few kilobytes. A hundred photos is hundreds of megabytes.

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.

Audio narration coming soon