Phase 6 / 90 days

Add media without making the app fragile.

Move images and previews out of the database, reserve dimensions in the UI, and teach why uploads need validation and storage decisions.

Support images, avatars, and previews safely.

This phase teaches why files are different from rows and why the app should store metadata in PostgreSQL while using object storage for media.

  • Image posts with upload validation.
  • User avatars and community icons.
  • Link preview metadata stored separately from posts.
  • Reserved media dimensions so feeds do not jump while loading.
  • Object storage.
  • File metadata and MIME types.
  • CDN basics.
  • Background image processing as a future need.

Expansion prompt

Add image posts and avatars.
Store files in object storage and metadata in PostgreSQL.
Validate file size and MIME type.
Keep the first version simple and do not add background image processing yet.
  • Image posts display correctly in feeds and detail pages.
  • Avatars and community icons have fallback states.
  • Large files and invalid types are rejected.
  • The learner understands why media can make a simple app run hot.