Faaji & Brew Palace
A full-stack Django reservation system for a West African fine-dining brand across Lagos and London.

Every restaurant hits the same wall eventually: a phone ringing off the hook during service, a paper reservation book nobody can read, and double-bookings that cost trust as much as revenue. Faaji & Brew Palace replaces that with a real booking system, not a contact form dressed up as one. Guests register, check live table availability, and create, view, edit or cancel an actual reservation, backed by a data model that makes a double-booking structurally impossible rather than hoping staff catch it in time.
What it does
- Account registration, login and logout via django-allauth, with custom-styled templates
- Full CRUD on reservations — book, view, edit and cancel a table, not just submit an enquiry
- A personal "My Bookings" dashboard showing each guest's reservations and their status
- A unique database constraint that blocks double-booking a table at the model level, not just in the UI
- A staff admin interface for managing every booking, table and the restaurant's public profile
- Custom branded 403, 404 and 500 error pages, and Django flash messages confirming every action
- A mobile-first Bootstrap 5 layout, tested at 375px, 768px and 1280px
Built with
Django 6.0 and Python 3.12 on the backend, PostgreSQL in production (hosted on Neon) with SQLite for local development, django-allauth for authentication, and Cloudinary for image hosting. The frontend is Bootstrap 5 with Crispy Forms for clean form rendering, Font Awesome for icons, and Google Fonts (Cormorant Garamond and Inter) for the fine-dining typography. Deployed on Heroku with Gunicorn and WhiteNoise.
Quality & testing
19 automated Django unit tests, all passing, plus 24 manual test cases covering authentication, CRUD, navigation and error scenarios. Zero errors on W3C HTML/CSS validation, PEP8-compliant Python, JSHint-checked JavaScript, Lighthouse performance audits, and cross-browser testing on Chrome, Edge and Firefox. This wasn't built to look finished, it was built and verified to actually be finished.
View live demo →View source on GitHub →
← Back to portfolio