Case study 06 / 09
Personal project · 2022–2023
The Book Bazaar
A Django marketplace where students list the books they have finished, and buyers search, save and contact sellers.
- Role
- Sole developer
- Stack
- Python
- Django
- SQLite
- Django templates
- Bootstrap
- jQuery
- Swiper
- Jazzmin
Credit
The storefront styling was adapted in part from a public HTML/CSS bookstore template. The data model, back end and page logic are my own.

01
Overview
The Book Bazaar is a marketplace for second-hand books, built for students who want to sell the books they have read and for buyers looking for them at a lower price.
It began as a static prototype in July 2022, which I rebuilt as a full Django application between October 2022 and February 2023.
02
The brief
Sellers need a quick way to list a book and keep their listings up to date. Buyers need to find a specific title, or browse a subject, and then reach the seller directly.
Both need accounts, and someone needs to moderate listings and read messages without touching the database.
03
Role and scope
- Role
- Sole developer
- Scope
- Data model, Django back end, search, accounts and admin. The storefront styling started from a public HTML/CSS bookstore template.
04
Main features
Accounts and profiles
Registration, login and a profile with city, contact details and photo, plus password change and email-based reset.
Selling
A sell-a-book form for signed-in users and a “My books” page to edit or remove listings.
Search and browse
Search across title, author and description, category pages and pagination at twelve books per page.
Book pages
Seller contact details, a visit counter, comments and a slider of related books.
Wishlist
Saved books with a live count in the header.
Back office
A Jazzmin-themed Django admin for listings, categories and the contact inbox.
05
How it’s built
Six focused Django apps
Accounts, products, categories, comments, wishlist and contact each own their models, views and templates, so one feature can change without disturbing the others.
Search in the model layer
A custom model manager wraps the search query (Q lookups across title, author and description), keeping views thin and the behaviour reusable.
Shared partial templates
Header, footer and the wishlist badge are rendered as partials, so their data and markup stay consistent on every page.
A schema that grew with the product
The data model evolved through 26 migrations as listings, profiles, comments and wishlists were added.
Integrations
- SMTP email for password resets
- Jazzmin admin theme
06
Challenges and decisions
Searching the way people remember books
People often remember an author or a topic rather than an exact title. Matching title, author and description together means a partial name still finds the book.
Separating concerns early
Splitting the project into apps from the start kept the codebase manageable as comments, wishlists and the contact inbox were added later.
07
What was delivered
- A complete flow from listing a book to contacting its seller
- Search, categories, pagination and wishlists
- Accounts with profiles and password recovery
- An admin back office for listings and messages
