media-management-system is a full digital asset management system built with Next.js and Express. It’s currently running production instances for three platforms and handles images, social posts, and video reels with a single unified interface.

The problem it solves
Managing media across multiple projects means dealing with the same recurring problems: where is the canonical version of this asset, who has permission to delete it, how do you browse 10,000 images without a spreadsheet. The system is purpose-built around those problems rather than adapted from a general-purpose CMS.
Architecture
The frontend is Next.js with React. The backend is Express handling API operations and database management. Storage is abstraction-based — you can run against local filesystem storage or AWS S3 without changing application code. Switching between them is a configuration change.
Three card types map to three media categories: Image, Social Post, and Reel. Each has its own metadata schema and display format. The card list supports advanced filtering and infinite scroll.
Access control
Role-based access control with anonymous browsing support. Admins can upload, edit, and delete media. The deletion system is soft-delete with trash management — assets are recoverable before permanent deletion. User management and password reset (via SendGrid or Mailgun) are built in.
Deployment
Docker, Vercel, AWS, Azure, and traditional VPS deployments are all documented. The production instances run on VPS. The system includes structured error handling with correlation ID tracking and Winston-based logging throughout, which makes debugging multi-step operations straightforward.
Extensibility
New media types can be added through defined interfaces and component factories without modifying the core. The README covers the extension pattern in detail.
The code is on GitHub: kshartman/media-management-system.