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. 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.

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

Audio narration