A full-stack movie showcase web application featuring curated film posters, synopses, genre filtering, and detailed movie views.
Live Demo: https://sidroxx410.github.io/cinevault
cinevault/
│
├── index.html ← Frontend: Main HTML page structure
├── style.css ← Frontend: All visual styling
├── script.js ← Frontend: Interactivity & movie data
│
├── app.py ← Backend: Python Flask REST API server
├── database.sql ← Database: SQL schema + all movie data
│
└── README.md ← This file
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | HTML5 | Page structure and content |
| Frontend | CSS3 | Styling, animations, responsive layout |
| Frontend | JavaScript (Vanilla) | Interactivity, filtering, modal views |
| Backend | Python 3 + Flask | REST API server |
| Database | SQLite (SQL) | Stores movies, users, reviews, watchlist |
@media queries.filter() for genre filteringinnerHTMLBuilt with Python Flask — a lightweight web framework.
| Method | Route | Description |
|---|---|---|
| GET | /api/movies |
Get all movies |
| GET | /api/movies?genre=Drama |
Get movies by genre |
| GET | /api/movies/<id> |
Get one movie by ID |
| GET | /api/movies/search?q=dark |
Search movies by title |
| GET | /api/genres |
Get all unique genres |
| GET | /api/stats |
Get database statistics |
| POST | /api/movies |
Add a new movie |
| DELETE | /api/movies/<id> |
Delete a movie |
pip install flask flask-cors
python app.py
# Server runs at http://localhost:5000
Built with SQLite using standard SQL.
movies table| Column | Type | Description | |——–|——|————-| | id | INTEGER | Primary key, auto-incremented | | title | TEXT | Movie title | | year | INTEGER | Release year | | genre | TEXT | Genre category | | rating | REAL | Rating out of 10 | | director | TEXT | Director name | | duration | TEXT | Runtime | | synopsis | TEXT | Full movie synopsis | | poster | TEXT | Poster image URL | | emoji | TEXT | Fallback emoji icon | | created_at | TEXT | Timestamp |
users tableStores registered user accounts.
watchlist tableJunction table linking users to their saved movies (Many-to-Many relationship).
reviews tableStores user-written reviews and scores for movies.
CREATE TABLE with data types and constraintsPRIMARY KEY and AUTOINCREMENTFOREIGN KEY relationships between tablesCHECK constraints (rating must be 1–10)UNIQUE constraint on watchlist (no duplicate saves)INDEX for query performanceJOIN queries for relational dataGROUP BY and AVG() aggregate functions┌─────────────────────┐
│ User's Browser │
│ index.html │
│ style.css │ ←── GitHub Pages (live URL)
│ script.js │
└────────┬────────────┘
│ HTTP Requests (fetch API)
▼
┌─────────────────────┐
│ Flask Backend │
│ app.py │ ←── Python server (localhost:5000)
│ REST API │
└────────┬────────────┘
│ SQL Queries
▼
┌─────────────────────┐
│ SQLite Database │
│ database.sql │ ←── cinevault.db file
│ 4 tables │
└─────────────────────┘
Note: For this GitHub Pages deployment, the frontend uses hardcoded data in script.js since GitHub Pages cannot run a Python server. In a full deployment (e.g. on Render or Railway), the frontend would call the live Flask API instead.
SIDROXX410 — College Assignment Project