Skip to content
All work

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.

The Book Bazaar shown on a desktop monitor, laptop, tablet and phone: a yellow-and-black storefront with the slogan “Work smart, study hard” and a row of most-visited books.
Device mockupDevice mockup of real screens: the home page and most-visited books.

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

  1. 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.

  2. 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

Next case study 07 / 09

Next case study: The Banker

Personal project · open-source extension · 2023

An open-source Django banking app that I extended with money transfers, email and SMS alerts, PDF statements and live currency rates.

The Banker shown on a desktop monitor, laptop, tablet and phone: a purple dashboard of icon tiles for account, transactions, transfer money, deposit, withdraw, currency exchange, customer care and log in.

Have a project in mind? Let’s talk it through.

Tell me what you are building, what it needs to do and when you need it. I will reply with questions, an honest view of the options and the next steps.