Back to All Projects
Restaurant Management System
Self-Learning ProjectCompleted

Restaurant Management System

Menu, orders, and reservations in one simple system.

PythonFlaskSQLiteJinja2Bootstrap 5

Problem Statement

Small restaurants need a simple way to show their menu and keep track of customer orders and table bookings without a full enterprise system. This project explores how that workflow can be built end to end with a lightweight stack, keeping menu, order, and reservation data in one database.

Proposed Solution

A Flask application serves the menu and forms, records orders with automatically calculated totals, and stores reservations in SQLite. Jinja2 templates and Bootstrap provide a simple management interface, and the database is initialized and seeded with menu items on first run.

Key Features

  • Menu browsing grouped by category.
  • Order creation with customer name, item selection, quantity, and an automatically calculated total.
  • Order list with the option to delete any order.
  • Table reservations by table and date, with a list view and cancellation.
  • Input validation for orders and reservations.
  • Custom 404 error page.

System Architecture Flow

Browser (Jinja2 templates with Bootstrap) -> Flask routes (app.py) -> SQLite database (menu, orders, and reservations tables) -> Menu seeded on first run (database.py)

Engineering Challenges

  • Database setup was centralized in one module that creates the tables and seeds the menu once, so the app starts from a clean, consistent state.
  • Bad input such as empty names, missing items, invalid quantities, or incomplete reservations is rejected in the routes before anything is stored.
  • The management workflow was kept simple, with direct SQL queries and clear delete and cancel actions, which limited complexity.

Lessons Learned

  • Combining Flask routes, Jinja templates, and SQLite into a working full-stack app.
  • Implementing form validation and CRUD actions for orders and reservations.
  • Structuring a project so interface, styling, and database setup stay separate.

Results

Built as a self-learning project to practice full-stack fundamentals with Flask, SQLite, and Jinja2.