Overview
Capstone Gallery is a full-stack image sharing and management application developed as the final project for CS50’s Web Programming with Python and JavaScript. The platform allows visitors to browse uploaded images, while registered users can upload content, assign descriptive tags, leave comments, like images and delete their own uploads.
The application uses Django’s built-in authentication system for registration, login and logout. Uploaded images are processed through Django forms and ImageField, stored in the application’s media directory and linked to database records containing titles, descriptions, uploaders and timestamps.
A relational database structure separates images, tags, comments and users. Tags use a many-to-many relationship, allowing each image to contain multiple tags and each tag to be shared across multiple images. Comments use a one-to-many relationship, while likes connect users and images through another many-to-many relationship. This structure supports title search, dedicated tag pages and efficient content navigation.
The like feature uses JavaScript’s Fetch API to send asynchronous POST requests to Django. The server updates the database and returns a JSON response, allowing the page to update the like state and count without a full reload. The application also includes pagination, responsive layouts using Bootstrap and ownership checks that prevent users from deleting content uploaded by other accounts.
Media lifecycle management was handled beyond basic database deletion. When an owner deletes an image post, the corresponding uploaded file is also removed from storage, preventing unused files from remaining on disk. The project integrates authentication, form validation, relational modelling, file handling, server-side rendering, asynchronous JavaScript and responsive design into a single application.
My role
Sole full-stack developer — designed the database schema, implemented the Django backend, authentication, image upload workflow, tag and comment systems, asynchronous likes, search, pagination, media