Skip to content
OnlyProjects
Diploma (Polytechnic) · Information TechnologyFor educational purposes only
Code included

City Bus Pass Renewal and Concession Management System (React + Spring Boot + MySQL)

Online pass applications, concession categories, QR-verified boarding and renewals for a tier-2 city transport corporation

Mapped to your syllabusDTE Karnataka C-20 · 20CS61P Internship / Project · Semester 6

Overview

1 min read

City Bus Pass Renewal and Concession Management System is a full-stack web application for a fictional tier-2 city transport corporation — we call it Kaveri City Transport — built for the situation every Indian commuter knows: joining the monthly queue at the pass counter, filling the same form again after the pass expires, and hoping the conductor believes the laminated card is still valid.

The system gives citizens a portal to register once, apply for a pass in a concession category (student, senior citizen, differently-abled or general), upload the supporting document, pay the fee by recording a UPI or counter-payment reference, and download a pass carrying a QR code. Counter clerks verify documents and approve or reject applications with a reason; conductors scan the QR on boarding and the system answers instantly whether the pass is valid — with every check logged. Renewal reuses the citizen's data: three clicks and a payment reference, no re-typing. Admins manage pass categories, concession percentages, routes and reports (passes issued, revenue by category and route, expiry due-lists).

The application is built exactly on the C-20 Full-Stack pathway: React 18 with TypeScript on the front end, Spring Boot 3 with Spring Data JPA serving a REST API, MySQL 8 as the database, JWT-based authentication with BCrypt-hashed passwords, and JUnit 5 and Postman covering the tests. It demonstrates role-based access control, transactional renewal logic, QR generation and audit logging — a viva-defensible slice of real public-transport administration.

Relevant for
Karnataka
Level
Intermediate · 16 weeks · team of 3
Common at
DTE Karnataka, MSBTE, SBTET AP
Updated
Oct 2026

Syllabus alignment

DTE Karnataka · C-20

20CS61P · Internship / Project · Semester 6 · 16 credits · CIE 240 + SEE 160

Subjects this project applies
  • 20CS52I Full-Stack specialisation pathway — React front end
  • 20CS52I Full-Stack specialisation pathway — Spring Boot REST APIs with MySQL
  • Java (Full-Stack pathway language)
  • Git, JUnit 5 and Postman (20CS52I pathway tools)
How it is evaluated

Team: 2–3 with individual accountability; cohort ≤ 20

Also fits: MSBTE K-scheme (I-scheme legacy), SBTET AP C-23.

What's in the box

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

Problem & synopsis

5 min read

Problem statement

A tier-2 city transport corporation issues thousands of monthly and quarterly bus passes, yet the process is almost entirely manual: paper forms, registers, hand-written receipts and a printed card whose validity the conductor cannot verify at the door. Citizens re-apply from scratch every cycle and queue at the counter; concession eligibility is judged from photocopies with no recorded decision; expired or tampered passes ride for free; and the office learns its own revenue only at month end, counted by hand. The corporation needs a secure, role-based web system that lets citizens apply and renew online, enforces configurable concession rules with an audit trail, gives conductors instant QR-based verification, records payments transactionally, and produces revenue and expiry reports on demand — without storing government ID numbers.

Synopsis

Abstract

City bus corporations sell thousands of passes a month, and in most tier-2 cities the work is still manual: paper forms, register entries, counter queues and passes whose validity a conductor can only guess at. This project delivers a role-based web system for pass applications, concession handling, QR-verified boarding, renewals and reporting, built with React, Spring Boot and MySQL following the C-20 Full-Stack pathway.

Introduction

A city transport corporation's pass office is its busiest public counter. The queue exists because the process is re-verification from scratch: the same citizen re-fills the same details every month or quarter, the clerk re-enters them into a register, concession eligibility is judged by eye from photocopies, and revenue reporting means counting pages at month end. Karnataka's larger corporations have digital passes; a smaller city corporation needs something simpler and cheaper that still covers applications, concessions, verification and renewals properly. That is the system we built.

Existing System

  • Applications are paper forms; details are re-entered into a register for every renewal.
  • Concession eligibility is checked from photocopied documents with no recorded decision trail.
  • The pass is a printed card; a conductor cannot reliably tell valid from expired or tampered at the door.
  • Payments are receipted by hand; revenue reports are compiled manually by category and route.
  • Limitations: repeated queues, no audit trail, concession leakage, no near-real-time reporting, and no way to remind citizens before expiry.

Proposed System

  • Citizen portal: one-time registration with mobile number, document upload, application tracking through approval, and expiry reminders on the dashboard.
  • Concession engine: concession percentages are admin-configurable rules, not hard-coded values; the clerk's approval is logged with their user id.
  • QR pass: each pass carries a QR encoding the pass number; the conductor's page resolves it against the server and shows validity and category, and every scan is logged.
  • Payments: payment is recorded with a channel (counter or UPI reference); a pass becomes Active only on confirmed payment, recorded transactionally.
  • Renewal: a renewal reuses stored citizen data, requires a fresh payment reference and (for students) a current bonafide, and issues the new pass in one transaction.
  • Reports: passes issued, revenue by category and route, expiry due-list and concession-leakage summary, exportable as CSV.
  • Privacy by design: the system stores no government ID numbers — identity is a phone number and the documents the corporation actually needs.

Feasibility Study

  • Technical: the entire stack — React, Spring Boot, Spring Data JPA, MySQL, JUnit, Postman — is the C-20 Full-Stack pathway toolset; QR generation uses the open-source ZXing library; everything runs on one lab PC or a small cloud instance.
  • Economic: zero licence cost; the corporation's existing office PC and internet connection are enough, and counter staff already handle worse software.
  • Operational: citizens need only a phone with a browser; clerks need a half-hour orientation; the conductor flow is a single scan-and-answer screen designed for one-handed use between stops.

Objectives

  1. 01Design a normalised MySQL schema (3NF) for citizens, pass categories, applications, passes, payments, verifications and office users, with foreign keys and uniqueness rules that prevent an active duplicate pass.
  2. 02Implement JWT-based authentication with BCrypt password hashing and role-based access control for Citizen, Clerk, Conductor and Admin roles.
  3. 03Build the application workflow — Submitted → Under Review → Approved/Rejected → Active — with document upload, clerk remarks and a complete audit trail.
  4. 04Implement admin-configurable concession categories and percentages so the concession engine needs no code change to add a scheme.
  5. 05Generate a QR-coded pass per approved application and provide a conductor verification endpoint that logs every scan with time, result and pass id.
  6. 06Record payments transactionally (counter or UPI reference) and activate a pass only on confirmed payment, keeping partial refund and rejection states consistent.
  7. 07Provide one-transaction renewal that reuses citizen data, refreshes student bonafide documents and issues the new pass with new validity.
  8. 08Build role-specific dashboards and CSV reports (revenue by category and route, expiry due-list, verification statistics) and cover the service layer with JUnit 5 tests plus a Postman collection for the API.

Scope

In scope

  • One fictional corporation (Kaveri City Transport) with multiple routes, pass categories, counter clerks, conductors and an administrator.
  • Citizen registration, application, document upload, approval workflow, payment recording, QR pass issue, conductor verification, renewal and reports.
  • Role-based access control, audit logging of approvals and scans, CSV exports, and JUnit/Postman test evidence.

Out of scope (v1)

  • No online payment gateway — payments are recorded with a UPI reference or counter receipt, which keeps the demo offline-safe.
  • No offline conductor verification (the v1 verification endpoint requires connectivity; a cached-validation PWA is future work).
  • No GPS tracking, route planning or ticketing for cash passengers; no SMS/email gateway (reminders are shown on the dashboard).
  • No biometric authentication and no storage of government ID numbers — by design, not omission.

Methodology

The project follows an iterative (incremental) SDLC model across the 16-week slot: three increments, each ending in a demonstrable system, with reviews mapped to the C-20 schedule.

PhaseWeeksActivitiesDeliverable
Requirement analysis1–2Study a real counter's workflow (observation + staff interview), list functional/non-functional requirements, model categories and concession rulesSRS document
System design3–4ER diagram, DFD level 0/1, REST endpoint table, UI wireframes, database schemaDesign document
Increment 15–7Spring Boot skeleton, JWT auth, roles, citizen registration, application submission with uploadWorking application workflow
Increment 28–10Clerk review queue, concession engine, payment recording, pass issue with QR, conductor verificationEnd-to-end pass lifecycle
Increment 311–12Renewal transaction, reminders, reports and CSV export, React polish for mobileComplete feature set
Testing13–14JUnit service tests, Postman collection run, black-box test cases per screen, UAT with classmates as citizensTest report
Documentation & rehearsal15–16Report, PPT, demo dry run, individual-contribution matrixSubmission set

Testing approach: JUnit 5 covers the service layer — concession calculation, renewal transaction consistency, payment-to-activation rule, duplicate-pass prevention. Postman exercises every REST endpoint including negative cases (expired token, wrong role, double payment). Each screen has a black-box test-case row (ID, input, expected, actual, status), and a user-acceptance round is run with classmates acting as citizens and a conductor, using the seeded demo data.

Architecture & tech stack

3 diagrams · 9 technologies · 2 min read

  • React 18 + TypeScript
  • Spring Boot 3 (Java 17)
  • Spring Data JPA
  • MySQL 8
  • Spring Security + JWT (industry-standard extra)
  • ZXing QR code generation
  • Maven
  • JUnit 5
  • Postman

The system is a classic three-tier full-stack application: a React single-page front end, a Spring Boot REST API, and a MySQL database, secured by a JWT-based stateless auth layer.

flowchart LR
  C["Citizen / Clerk / Admin browser"] -->|"HTTPS"| R["React 18 SPA (TypeScript)"]
  K["Conductor phone"] -->|"HTTPS"| R
  R -->|"REST + JWT header"| A["Spring Boot REST API"]
  A --> S["Spring Security filter chain"]
  S --> L["Service layer: concession rules, renewal, verification"]
  L --> J["Spring Data JPA"]
  J --> DB[("MySQL 8")]
  L --> Q["ZXing QR generator"]
  L --> AU["Audit log of approvals and scans"]
  DB --> RPT["CSV report export"]

Presentation tier. The React SPA renders role-specific dashboards, guards routes by role claim from the JWT, and keeps API calls in a typed client so a changed endpoint fails at compile time, not in the demo.

Application tier. The API exposes resources (citizens, applications, passes, payments, verifications, reports). The service layer owns the business rules: the concession engine reads percentages from the category table; activation and renewal run inside @Transactional methods so a payment and a pass state can never disagree; and every approval or QR scan is appended to the audit log with the acting user and timestamp.

Data tier. The schema is normalised to 3NF with the constraints that make wrong states impossible:

erDiagram
  CITIZEN ||--o{ APPLICATION : submits
  APPLICATION }o--|| PASS_CATEGORY : "belongs to"
  APPLICATION ||--o| PASS : "issued as"
  APPLICATION ||--o{ PAYMENT : "is paid by"
  PASS ||--o{ VERIFICATION_LOG : "generates"
  OFFICE_USER ||--o{ APPLICATION : reviews
  CITIZEN {
    int id PK
    string mobile UK
    string email
    string full_name
  }
  PASS_CATEGORY {
    int id PK
    string name
    int concession_percent
    boolean needs_bonafide
  }
  APPLICATION {
    int id PK
    int citizen_id FK
    int category_id FK
    string status
    datetime applied_at
  }
  PASS {
    int id PK
    int application_id FK
    string pass_no UK
    date valid_from
    date valid_to
  }
  PAYMENT {
    int id PK
    int application_id FK
    decimal amount
    string channel
    string reference
  }
  VERIFICATION_LOG {
    int id PK
    int pass_id FK
    datetime scanned_at
    string result
  }
  OFFICE_USER {
    int id PK
    string username UK
    string role
  }

Pass lifecycle. The state machine below is enforced in the service layer, so no pass can become Active without a confirmed payment, and a rejection always carries a reason:

flowchart TD
  A["Application submitted"] --> B["Under review (clerk)" ]
  B -->|"Approved"| C["Awaiting payment"]
  B -->|"Rejected with reason"| X["Closed"]
  C -->|"Payment recorded + confirmed"| D["Pass issued, QR generated, Active"]
  D -->|"Validity ends"| E["Expired — renewal reuses citizen data"]
  E -->|"Renewal approved + paid"| D

Why these choices. MySQL for relational integrity and the transactions the renewal logic depends on; Spring Boot for a testable, convention-driven API the pathway already teaches; JWT so the conductor's phone needs no server-side session; QR rather than NFC because every conductor already carries a phone camera and printed passes still work as a fallback.

Modules

6 modules

  1. Module 01

    Authentication & Role-Based Access (Member 1)

    Spring Security with a JWT filter chain, BCrypt-hashed passwords, and four roles (Citizen, Clerk, Conductor, Admin). Route guards on the React side mirror server-side checks, so a citizen calling a clerk endpoint with a stolen-but-expired token gets a 401 and a citizen token gets a 403 — enforcement is never in the UI alone.

  2. Module 02

    Citizen Registration & Application Workflow (Member 1)

    One-time citizen registration (mobile unique, email optional), application submission with category selection and document upload stored on the server, status tracking on the citizen dashboard, and the Submitted → Under Review → Approved/Rejected state machine with clerk remarks and audit entries.

  3. Module 03

    Concession Engine & Review Queue (Member 2)

    Admin-configurable categories with concession percent, validity length and a needs-bonafide flag; the clerk's review queue lists pending applications with documents side by side, computes the fee (base fare stage × category concession) and records the approving user — no percentage is hard-coded anywhere.

  4. Module 04

    Payments & Pass Issue with QR (Member 2)

    Payment recording with channel (counter/UPI) and reference, @Transactional activation that flips the application to Active and generates the pass number and ZXing QR image only on confirmed payment, plus rejection/refund states kept consistent in the same transaction boundary.

  5. Module 05

    Conductor Verification & Renewal (Member 3)

    A scan-first verification screen for phones that resolves a QR pass number server-side, answers valid/expired/wrong-route in one call, and writes every attempt to the verification log; and the one-transaction renewal that reuses citizen data, requires a fresh payment reference and current bonafide for students, and issues the new pass.

  6. Module 06

    Reports, Dashboards & Testing (Member 3, tests shared)

    Admin dashboards with revenue by category and route, expiry due-list and verification statistics, CSV export for office records; JUnit 5 tests for the concession, renewal and duplicate-pass rules; a Postman collection covering every endpoint including role-negative cases; and the seeded demo dataset for the viva demo.

Slides

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

  1. Slide 1

    City Bus Pass Renewal & Concession Management System

  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

    Pass Lifecycle & Concession Engine

  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 JWT authentication instead of server-side sessions?

    The API is stateless and the same token has to work from a citizen's laptop and a conductor's phone browser, possibly through a proxy. A JWT carries the user id and role inside a signed token, so any API instance can authorise a request without a session store, and the conductor's verification flow stays fast. We keep the token lifetime short and store it in memory on the client, and the signature check happens in the Spring Security filter chain on every request.

  2. 02Concept

    How does your design prevent a citizen from holding two active passes at once?

    The database enforces it, not the UI. An application can only transition to Active inside a transaction that first checks for an existing active, unexpired pass for the same citizen and category — a query with a unique constraint backing it — and rejects with a clear error if one exists. Renewal explicitly supersedes the old pass by ending its validity, so the invariant 'at most one active pass per citizen per category' holds at the data layer.

  3. 03Concept

    What is normalisation, and up to which normal form is your schema?

    Normalisation removes redundancy and update anomalies: 1NF gives atomic values, 2NF removes partial dependencies, and 3NF removes transitive ones. Our schema is in 3NF — for example, concession percentage lives only in PASS_CATEGORY, never repeated on applications, and route names live in the route table rather than on passes. Derived values like computed fees are not stored; they are calculated from the category and fare-stage data at approval time.

+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

7 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

7 steps · source code zip

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

Unlock for ₹2,000

READMEFIRST

304 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

304 words · ~2 min read

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

Unlock for ₹2,000

Instructions

393 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

393 words · ~2 min read

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

Unlock for ₹2,000

References

9 sources

  1. Spring Boot Reference Documentation
  2. Spring Data JPA Reference Documentation
  3. React Documentation
  4. MySQL 8.0 Reference Manual
  5. JUnit 5 User Guide
  6. OWASP Top 10 — Web Application Security Risks
  7. National Payments Corporation of India (NPCI) — UPI, the payment rail referenced in the design
  8. Craig Walls, Spring in Action, 6th ed., Manning Publications
  9. Roger S. Pressman and Bruce R. Maxim, Software Engineering: A Practitioner's Approach, 9th ed., McGraw-Hill

Cite this bundle

OnlyProjects. (2026). City Bus Pass Renewal and Concession Management System (React + Spring Boot + MySQL): Diploma (Polytechnic) Information Technology project bundle [Educational resource]. https://onlyprojects.online/projects/diploma-it-bus-pass-renewal-concession-system

Future scope

1 min read

  • Online payments through a UPI gateway with automatic reconciliation and receipts.
  • Offline-capable conductor verification (PWA with cached pass data and server sync) for routes with patchy connectivity.
  • SMS/WhatsApp expiry reminders and renewal links for citizens who do not revisit the portal.
  • Route-wise occupancy analytics from verification scans to help schedule extra buses on peak corridors.
  • Inspector mode with a fine workflow for invalid passes, closing the enforcement loop.
  • Multi-corporation (multi-tenant) deployment so smaller corporations can share one hosted instance.

Keep browsing

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