Home / About
- US 1
The landing page introduces the store, and the dedicated About screen explains its movie-browsing purpose.
Georgia Tech · CS 2340 Course Project · 2026
I built and deployed a Django storefront with authentication, a searchable movie catalog, a session cart, reviews, orders, and administrator tools.
Expanded technical stack

Overview
GT Movies Store is a server-rendered web application for browsing and purchasing movies. It brings the course's required customer and administrator workflows into one browser-accessible storefront, from account creation and title search through reviews, cart checkout, order history, and data management.
My contribution
I organized the application into home, movies, accounts, and cart Django apps; connected URL configurations to function-based views; modeled movies, reviews, orders, and line items with the Django ORM; and built the interface with Django templates and Bootstrap. I also added ownership checks for review editing and deletion, login protection for account-specific actions, session-backed cart state, and the report-review action.
Challenge
The application needed to turn 21 separate user stories into a coherent storefront while keeping account data, review ownership, cart state, and completed orders distinct.
Technical approach
I used Django authentication for registration and sessions, SQLite-backed ORM models for persistent records, per-app URL and view modules for feature boundaries, and server-rendered templates for each screen. Cart quantities stay in the session until purchase, when the application creates an Order and its Item records tied to the signed-in user.
Result / outcome
The completed application is publicly accessible on PythonAnywhere and covers the required home, account, catalog, search, detail, review, cart, order-history, reporting, responsive-interface, and administrator workflows. The feature map below ties each implemented screen directly to the assignment's story numbers.
Application / user stories
Each implemented screen groups the related assignment stories for quick review.
The landing page introduces the store, and the dedicated About screen explains its movie-browsing purpose.
A Django UserCreationForm creates accounts, while login and logout use Django authentication and connect each signed-in user to account-specific data.
The catalog lists available Movie records, supports case-insensitive title search, and links to detail screens with a poster, description, and price.
A session-backed cart accepts quantities from one to ten, shows the running total, and can be cleared. Authenticated checkout creates an order with line items; My Orders shows dates, totals, movies, prices, and quantities.
Movie pages list reviews. Signed-in users can write reviews; authors can edit or delete their own posts, while another authenticated user can report a comment, which removes that review from the page.
The WSGI application runs at a public PythonAnywhere URL. Bootstrap's responsive grid, collapsing navigation, and viewport configuration adapt the server-rendered interface across screen sizes.
Django's administrator interface manages users, while registered Movie, Review, Order, and Item models provide create, view, update, and delete operations for store data.
Development process
I developed the project feature by feature across four Django apps. URL modules route requests to function-based views, templates extend one shared layout, ORM migrations define Movie, Review, Order, and Item records, and Django's authentication and session middleware support signed-in and cart workflows.
I tested the application incrementally in the browser across navigation, title search, movie details, authentication-gated actions, cart totals, checkout, order history, reviews, and administrator registration. The repository's test modules remain empty stubs, so this project does not claim an automated test suite.
The git history records focused corrections for Python-version compatibility, movie-card proportions, and clearing an empty cart. The final cart fix normalizes session keys before querying the ORM, preventing an empty cart from being treated as populated.
I deployed the Django WSGI application to PythonAnywhere and verified the public Home, About, catalog, title-search, movie-detail, cart, login, signup, and administrator entry screens in a desktop browser. The checked-in project retains its SQLite development database and standard WSGI entry point.
Demo video