Skip to content
OnlyProjects
B.Sc · Information TechnologyFor educational purposes only
Code included

Maintenance Billing and Amenity Booking System for a 120-Flat Apartment Society (Flask + MySQL)

Monthly dues, receipts, penalty ageing and clubhouse slots for a residents' welfare association

Mapped to your syllabusBCU / Bangalore University SEP 2024 · Project Work · Semester 6

Overview

1 min read

SocietyDesk is a web application that digitises the daily administration of a mid-size apartment complex — the maintenance dues, receipts and amenity bookings that a residents' welfare association (RWA) otherwise tracks in paper ledgers, Excel sheets and WhatsApp groups. It is modelled on Greenfield Residency, a fictional 120-flat, three-block society in south Bengaluru, and can be adapted to any similar community.

Three roles use the system. The secretary (admin) maintains blocks, flats and member records, posts notices and runs the monthly billing. The accountant records payments, issues receipts and watches the dues-ageing report. Owners and residents log in to see their own bills and payment history, book the clubhouse or badminton court, and read notices.

Every month the billing engine generates one invoice per flat: carpet area × per-sq-ft rate + fixed charges + sinking-fund contribution. Payments are recorded against the invoice with mode and UPI reference; a bill left unpaid past its due date is flagged Overdue, attracts a penalty, and appears in the treasurer's ageing report split into 0–30, 31–60, 61–90 and 90+ day buckets. Amenity slots are booked inside a database transaction, so the clubhouse can never be double-booked.

The project is built with Python 3.12, Flask 3 and Jinja2 on MySQL 8, styled with Bootstrap 5 and tested with pytest. It demonstrates normalised relational design, role-based access control, server-side validation and report generation — a solid, viva-defensible B.Sc IT project for the Sem-6 slot.

Relevant for
Karnataka
Level
Intermediate · 14 weeks · team of 2
Common at
Bengaluru City University, Bangalore University, University of Mumbai
Updated
Nov 2026

Syllabus alignment

BCU / Bangalore University · SEP 2024

Project Work · Semester 6 · 4 credits · 100 (80 external + 20 internal)

Subjects this project applies
  • Python (DSCSC51)
  • DBMS (CS31T)
  • Web Programming (DSCS61)
How it is evaluated

See your department's project guidelines.

Also fits: Mumbai University B.Sc IT 2022-23 (autonomous-college mirror), University of Calcutta CCF 2022 (4-year), Delhi University UGCF 2022.

What's in the box

11 parts · 5 free · 2 previewed · 4 unlock for ₹2,000

Problem & synopsis

5 min read

Problem statement

A 120-flat residents' welfare association collects maintenance, records payments and manages shared amenities using paper ledgers, Excel sheets and WhatsApp. Because there is no central record, receipts get lost, part-payments are mis-posted, and old arrears stay invisible because nobody computes an ageing report. Penalty calculation by hand is inconsistent, which turns follow-up calls into arguments. Amenity bookings taken over the phone collide — two families arrive for the same clubhouse slot — and refundable deposits are tracked nowhere. Residents have no way to check their own balance without visiting the office, and the treasurer has no consolidated view for the annual general meeting.

There is a need for a secure, role-based web application that keeps one authoritative ledger of flats, members, invoices and payments, automates bill and penalty calculation, prevents double booking of amenities through database-level checks, and gives the secretary, the accountant and each resident exactly the views and actions their role allows.

Synopsis

Abstract

Apartment societies in India collect maintenance, pay common-area bills and manage shared amenities, but most associations still keep this work in paper ledgers and spreadsheets. Receipts are handwritten, dues follow-up happens through WhatsApp reminders, and the treasurer cannot easily say how much each flat owes or how old the arrears are. SocietyDesk is a role-based web application that centralises flat and member records, monthly maintenance billing, payment tracking, amenity booking and notices for a 120-flat society. It is implemented with Flask and Jinja2 on MySQL and follows a three-tier architecture.

Introduction

A residents' welfare association of 120 flats handles roughly ₹4–6 lakh of monthly collections. The treasurer must know which flats have paid, which are partial and which are in arrears; the secretary must publish notices and maintain records of owners and tenants; residents want a fair, first-come-first-served way to book the clubhouse or the badminton court. When this information lives in registers and Excel files, every answer needs a phone call, and every billing month needs a weekend of manual work.

Existing System

  • Maintenance dues are written in a ledger; receipts are handwritten counterfoils.
  • Payments arrive by cash, bank transfer or UPI and are reconciled against bank statements by hand.
  • Arrears are tracked by memory; there is no ageing analysis, so old dues go unnoticed.
  • Amenity bookings are taken on phone or in a WhatsApp poll, which leads to double bookings and disputes about deposits.
  • Limitations: no single source of truth, no audit trail, arithmetic errors in penalties, and no reports the association can act on.

Proposed System

  • A central MySQL database of blocks, flats, members, invoices, payments, amenities and bookings.
  • Automatic monthly billing: carpet area × per-sq-ft rate + fixed charges + sinking-fund contribution, with a configurable penalty for late payment.
  • Payment entry with mode (cash/NEFT/UPI) and reference number; statuses Paid, Partial, Due and Overdue computed from the ledger.
  • A dues-ageing report (0–30, 31–60, 61–90, 90+ days) that ranks defaulters for follow-up.
  • Transaction-safe amenity booking: overlapping slots for the same amenity are rejected inside the database transaction; refundable deposits are tracked per booking.
  • Notices posted by the secretary, visible to every resident; collection and utilisation reports exportable as CSV.
  • Role-based dashboards so each user sees only what they are entitled to see.

Feasibility Study

  • Technical: Flask and MySQL are open-source, run on any laptop with Python 3.12, and are covered by mature documentation. Nothing in the design needs cloud services, so the demo works offline during the viva.
  • Economic: Licence cost is zero; the association can host it on an existing office computer or a ₹200–500/month VPS — far below the cost of the staff hours it saves.
  • Operational: The interface is ordinary web forms on Bootstrap, readable on a phone. The secretary and accountant need one short training session; residents need none.

Objectives

  1. 01Design a normalised (3NF) MySQL schema for blocks, flats, members, maintenance bills, payments, amenities, bookings and notices.
  2. 02Implement authentication with hashed passwords and role-based access control for the secretary, accountant and owner roles.
  3. 03Automate the monthly maintenance bill: carpet area × per-sq-ft rate + fixed charges + sinking-fund contribution, with a configurable late-payment penalty.
  4. 04Record part and full payments with mode and reference number and compute Paid / Partial / Due / Overdue statuses automatically.
  5. 05Generate a dues-ageing report in 0–30, 31–60, 61–90 and 90+ day buckets with CSV export for the AGM.
  6. 06Provide transaction-safe amenity slot booking that rejects overlapping bookings and tracks refundable deposits.
  7. 07Publish notices and build a responsive Bootstrap interface that residents can use on their phones.

Scope

In scope

  • One society with multiple blocks and 100–200 flats; owners and tenants as members.
  • Three roles: secretary (admin), accountant, owner/resident.
  • Monthly maintenance billing with per-sq-ft rates, fixed charges, sinking fund and penalty rules configurable by the secretary.
  • Payment recording (cash / NEFT / UPI reference), receipts, and dues-ageing reports with CSV export.
  • Amenity master, slot booking with overlap prevention, deposits and cancellation.
  • Notices and a monthly collection summary dashboard.

Out of scope (v1)

  • Online payment gateway integration — payments are recorded manually with a UPI/bank reference.
  • Email/SMS/WhatsApp notification delivery; notices are shown inside the app.
  • Vendor, staff and asset (pumps, lifts, security) management modules.
  • Income-tax and audit-report generation for the association's chartered accountant.
  • Native mobile apps; the web UI is responsive instead.

Methodology

The project follows an Incremental SDLC model. A working core (auth, flats, members) exists by week 7, and each later increment adds a module that is designed, coded and tested as a unit — a good fit for the 14-week BCU Sem-6 window of 8 hours per week, because guide feedback can be absorbed between increments.

PhaseWeeksActivitiesDeliverable
Requirement analysis1–2Interview the association treasurer, study the ledger and bank statements, list functional and non-functional requirementsSRS document
System design3–4ER diagram, schema, DFDs, wireframes, penalty and ageing rulesDesign document
Increment 15–7Authentication, roles, blocks/flats/members, dashboards skeletonWorking core
Increment 28–10Billing engine, payment recording, ageing report, CSV exportBilling module
Increment 311–12Amenity master, transaction-safe booking, noticesFull feature set
Testing13pytest unit and integration tests; black-box test cases; UAT with six months of sample dataTest report
Documentation14Report, PPT, demo rehearsal, screenshotsFinal submission

Testing approach: unit tests for money rules (bill amount, penalty after due date, ageing bucket placement) using pytest; integration tests that call Flask routes with the test client against a throwaway MySQL database; and black-box test cases per screen recorded as ID / input / expected / actual / status. Booking tests explicitly race two overlapping reservations to prove only one survives.

Architecture & tech stack

3 diagrams · 7 technologies · 2 min read

  • Python 3.12
  • Flask 3
  • Jinja2
  • MySQL 8
  • PyMySQL
  • Bootstrap 5
  • pytest

SocietyDesk follows a three-tier architecture.

  1. Presentation tier — Jinja2 templates styled with Bootstrap 5 render every page server-side; the layout is responsive for phone use by residents.
  2. Application tier — Flask blueprints (auth, billing, payments, amenities, notices, reports) hold the business rules: bill computation, penalty application, ageing buckets and the role check that runs before every protected route. Server-side validation on every form; nothing is trusted from the browser.
  3. Data tier — MySQL 8 accessed through PyMySQL with parameterised queries only; the schema is in 3NF and InnoDB transactions protect the booking and payment paths.
flowchart LR
  B["Browser: Secretary / Accountant / Owner"] -->|"HTTPS session cookie"| F["Flask app: blueprints + Jinja2"]
  F --> G["login_required + role check"]
  G --> V["Server-side form validation"]
  V --> Q["PyMySQL parameterised queries"]
  Q --> DB[("MySQL 8, InnoDB")]
  G --> E["Billing engine / booking transaction"]
  E --> Q

ER diagram

erDiagram
  FLAT ||--o{ MEMBER : "houses"
  FLAT ||--o{ BILL : "is invoiced"
  BILL ||--o{ PAYMENT : "is settled by"
  MEMBER ||--o{ PAYMENT : makes
  AMENITY ||--o{ BOOKING : "is reserved as"
  MEMBER ||--o{ BOOKING : reserves
  MEMBER ||--o{ NOTICE : posts

  FLAT {
    int id PK
    string block
    string flat_no UK
    decimal area_sqft
    string occupancy
  }
  MEMBER {
    int id PK
    int flat_id FK
    string full_name
    string email UK
    string phone
    string password_hash
    string role
  }
  BILL {
    int id PK
    int flat_id FK
    string month
    decimal per_sqft_rate
    decimal fixed_charges
    decimal sinking_fund
    decimal amount
    date due_date
    decimal penalty
    string status
  }
  PAYMENT {
    int id PK
    int bill_id FK
    int member_id FK
    decimal amount
    string mode
    string reference
    datetime paid_on
  }
  AMENITY {
    int id PK
    string name
    int slot_minutes
    decimal deposit
  }
  BOOKING {
    int id PK
    int amenity_id FK
    int member_id FK
    datetime slot_start
    datetime slot_end
    string status
  }
  NOTICE {
    int id PK
    int member_id FK
    string title
    text body
    datetime posted_on
  }

DFD — Level 0 (context diagram)

flowchart LR
  SEC([Secretary]) -- "flats, rates, notices" --> SYS(("SocietyDesk"))
  SYS -- "collection and defaulter reports" --> SEC
  ACC([Accountant]) -- "payment entries" --> SYS
  SYS -- "receipts, ageing report" --> ACC
  OWN([Owner / Resident]) -- "login, booking request" --> SYS
  SYS -- "bills, notices, booking status" --> OWN

Modules

6 modules

  1. Module 01

    Authentication and Roles

    Email/password login with Werkzeug-scrypt-hashed passwords and server-side session cookies. A role check runs at the start of every protected route, so a resident who types an accountant URL gets a 403 page. Sessions carry the member id and role, never the password.

  2. Module 02

    Flat and Member Management

    The secretary maintains blocks, flats (with carpet area, which drives billing) and member records marked owner or tenant with email and phone. No government ID numbers are stored anywhere — members are identified by flat number and contact details. Flats can be marked vacant to suspend billing.

  3. Module 03

    Maintenance Billing Engine

    A monthly run creates one invoice per occupied flat: area × per-sq-ft rate + fixed charges + sinking-fund contribution, all rates editable by the secretary. Bills carry a due date; after it passes, the next run applies the configured penalty (2% of the outstanding, minimum ₹100) exactly once per month and flips the status to Overdue.

  4. Module 04

    Payments and Dues Ageing

    The accountant records part or full payments with mode (cash/NEFT/UPI) and reference, and can print a receipt. Bill status is recomputed from the payment ledger: Paid, Partial, Due or Overdue. The ageing report groups outstanding amounts into 0–30, 31–60, 61–90 and 90+ day buckets per flat and exports to CSV.

  5. Module 05

    Amenity Booking

    Amenities (clubhouse, badminton court) are defined with slot length, capacity and refundable deposit. A booking request runs inside a transaction that locks the amenity row, checks for overlapping active bookings, and inserts or rejects — two residents booking the same evening slot cannot both succeed. Cancellation releases the slot and flags the deposit for refund.

  6. Module 06

    Notices, Dashboards and Reports

    The secretary posts notices visible to all residents, newest first. Each role gets a dashboard: the accountant sees this month's collection percentage and the top defaulters; residents see their current bill, balance and next due date. Collection summary and amenity-utilisation reports export as CSV for the AGM.

Slides

12 slides · titles free · bullets, notes and the .pptx unlock

  1. Slide 1

    Maintenance Billing and Amenity Booking System (SocietyDesk)

  2. Slide 2

    Introduction

  3. Slide 3

    Problem Statement

  4. Slide 4

    Existing vs Proposed System

  5. Slide 5

    Objectives

  6. Slide 6

    Technology Stack

  7. Slide 7

    System Architecture

  8. Slide 8

    Database Design

  9. Slide 9

    Modules

  10. Slide 10

    Demo

  11. Slide 11

    Testing

  12. Slide 12

    Conclusion & Future Scope

Bullets, speaker notes and the .pptx · ₹2,000

The titles above are the real outline. The rest is what you present from.

Unlock for ₹2,000

Viva questions & answers

3 of 16 answered free · 13 unlock

Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.

  1. 01Concept

    Why did you choose Flask instead of Django for this project?

    The scope is six focused modules, and Flask keeps the whole request path visible — routes, validation and queries are code we wrote, which we can open and explain line by line in the viva. Django would have brought an admin site and an ORM we did not need, and would have hidden the SQL we wanted to demonstrate for the DBMS part of our syllabus.

  2. 02Concept

    Why MySQL and not SQLite or MongoDB?

    The data is strongly relational — flats, members, bills and payments reference each other — and we need InnoDB transactions and foreign keys so that a booking race or a partial payment can never corrupt the ledger. MySQL also gives us concurrent access from the office and residents at once, which SQLite's single-writer model does not handle well.

  3. 03Concept

    Explain normalisation and the normal form of your schema.

    Normalisation removes redundancy and update anomalies: 1NF gives atomic values, 2NF removes partial dependency on a composite key, 3NF removes transitive dependencies. Our schema is in 3NF — for example, the per-sq-ft rate lives in a settings table and each bill stores only the rate snapshot it was generated with, so changing next month's rate does not rewrite old invoices.

+13 more questions, with answers

Try the free ones out loud first. Your examiner will not accept “it's in the PPT”.

Source code & how to run

6 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

6 steps · source code zip

Prerequisites, install, seed data and tests, written for demo day. Plus the complete source.

Unlock for ₹2,000

READMEFIRST

244 words · unlocks with the project

What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.

Unlocks with the project · ₹2,000

244 words · ~1 min read

The checklist of things to rename, re-seed and re-think so the project reads as yours.

Unlock for ₹2,000

Instructions

298 words · unlocks with the project

How to study it, adapt it and walk your examiner through it, step by step.

Unlocks with the project · ₹2,000

298 words · ~1 min read

Report structure, formatting rules and the submission checklist your department will grade.

Unlock for ₹2,000

References

7 sources

  1. Flask Documentation (Pallets)
  2. MySQL 8.0 Reference Manual
  3. Werkzeug — WSGI Utility Library (password hashing, sessions)
  4. OWASP Top 10 — Web Application Security Risks
  5. Ramez Elmasri & Shamkant B. Navathe, Fundamentals of Database Systems, 7th ed., Pearson
  6. Ian Sommerville, Software Engineering, 10th ed., Pearson
  7. Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall

Cite this bundle

OnlyProjects. (2026). Maintenance Billing and Amenity Booking System for a 120-Flat Apartment Society (Flask + MySQL): B.Sc Information Technology project bundle [Educational resource]. https://onlyprojects.online/projects/bsc-it-apartment-maintenance-billing-amenity-booking

Future scope

1 min read

  • UPI payment gateway (e.g. a PSP's payment links) so residents pay from the app and the ledger reconciles automatically against the reference.
  • WhatsApp/email notification service for bill generation, due-date reminders and booking confirmations.
  • Gate-pass and visitor logging with daily vehicle entries for security staff.
  • Solar and common-area meter reading capture so electricity charges can join the monthly invoice.
  • Multi-society SaaS version with per-association branding for facility-management companies.
  • Analytics dashboard — collection trends, amenity-utilisation heat-map and predicted arrears from payment history.

Keep browsing

Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.