Built to order

Offline Bus Pass Renewal Android App with Digital Pass Wallet and Expiry Reminders

PassWallet is an offline-first Android app that stores bus passes in a digital wallet with a scannable pass code, renews them in four steps with live fee calculation, and fires expiry reminders scheduled on-device with WorkManager and AlarmManager. All records live in a local Room (SQLite) database, so the wallet works fully offline and no commuter data ever leaves the phone. Every renewal re-arms the reminders automatically, including after a device reboot. Suitable for B.E./B.Tech final-year projects in Computer Science, IT and Mobile Application Development.

Android SQLiteKotlinCoroutines · FlowMaterial Design 3WorkManager · AlarmManagerJetpack · Room databaseJetpack ComposeAndroid Studio · GradleSoftware
Offline Bus Pass Renewal Android App with Digital Pass Wallet and Expiry Reminders — project thumbnail preview
More project photos (2)

The problem

Commuters who buy monthly, quarterly or annual bus passes still renew them the old way: a visit to the pass counter or an authorized outlet with the old pass, an ID card and cash, usually during working hours. The paper pass itself is fragile — it tears, fades and is easy to lose — and the printed expiry date is rarely checked until a conductor asks for it, which is when the penalty fare lands. Transport apps cover live tracking and single-journey tickets, but few combine renewal, an offline-readable digital wallet and proactive expiry reminders in one place. PassWallet fills that gap as an offline-first Android application: the pass lives in a digital wallet on the phone with a scannable pass code, renewal is a four-step flow inside the app, and reminders are scheduled on the device itself with WorkManager and AlarmManager, so they fire even without internet. All records stay in a local Room database — no account, no server, no data leaving the phone.

SYSTEM FLOW

3 components 4 connections

Live flow
Drag to explore
100%
userCommuter

Creates a local profile, renews passes, and receives expiry reminders on the device.

Follow the working sequence

How it works

  1. On first launch the commuter creates a local profile (name, city, ID type) stored in the Room database — no account signup.
  2. The renewal flow issues the first pass: type, duration, fee confirmation and payment generate a pass with a fresh 12-character alphanumeric pass ID and QR-style code.
  3. The wallet screen shows the active pass with validity and days-left countdown; expiring passes move to an "Expiring soon" section with a Renew action.
  4. Every renewal schedules three reminders — 7 days before, 1 day before, and an exact 8:00 AM alarm on expiry morning — via WorkManager and AlarmManager.
  5. Reminders arrive as notification-channel notifications that deep-link straight back into the wallet on tap, even with no internet.
  6. A BOOT_COMPLETED receiver re-enqueues all pending reminders after a restart, covered by the test plan.
  7. The optional encrypted backup keeps a copy of the pass database on the device for reinstall recovery.

Tech stack:

  • Kotlin, Android Jetpack
  • Room (SQLite) · Coroutines · Flow
  • WorkManager · AlarmManager · NotificationCompat
  • Jetpack Compose · Material Design 3
  • PendingIntent deep links · BroadcastReceiver
  • Gradle · Android Studio
  • JUnit · Espresso (tests)
  • minSdk 26 · targetSdk 34
Parameter Value
Minimum Android version API 26 (Android 8.0), design target
Target SDK API 34, design target
Local storage Room over SQLite, schema v3 (design target)
Pass ID format 12-character alphanumeric (design)
Reminder mechanism WorkManager one-time work + AlarmManager exact alarms
Reminder lead options 3, 7 or 14 days before expiry (configurable)
APK size Approximately 6 MB (design target)
Offline coverage 100% of wallet reads and scheduled reminders (by design)

Project features

  • [Digital pass wallet] Active pass shown as a card with route, validity, days-left countdown and a scannable QR-style pass code; expiring-soon and expired passes list below with one-tap renew actions.
  • [Four-step renewal flow] Pass-type chips (Student, General, Concession), duration cards (30, 90, 365 days), a live fee-summary panel and payment-method choice (UPI, Card, NetBanking).
  • [Live fee calculation] The fee panel recalculates instantly from a fare table as type and duration change, showing base fare, duration and total payable before confirmation.
  • [On-device expiry reminders] WorkManager schedules lead-time reminders (7 days and 1 day before) and AlarmManager sets an exact expiry-morning alarm — all fire offline.
  • [Fully offline wallet] Passes, renewals and reminder schedules live in a Room (SQLite) database on the device; the wallet is readable in airplane mode.
  • [Reboot-safe scheduling] A boot receiver re-registers every pending reminder after a device restart, so nothing is silently lost.
  • [Reminder settings] Configurable reminder time, renewal lead time (3, 7 or 14 days), quiet hours (10 PM–7 AM) and an encrypted on-device backup toggle.

What is included

  • Complete Android Studio project source (Kotlin, Jetpack Compose)
  • Room database schema and DAO layer with migration notes
  • Reminder scheduling module (WorkManager + AlarmManager + boot receiver)
  • Fare table: Student / General / Concession × 30 / 90 / 365 days
  • Debug APK for on-device testing
  • Project report PDF (requirements, design, database schema, test results)
  • PPT presentation for final review
  • Viva Q&A preparation document (Room, WorkManager vs AlarmManager, notifications, offline-first design)

Limitations & prerequisites

  • The demo fare table is illustrative; connecting to a real transport-undertaking pass-issuing API is future scope, not included.
  • Payment is a mock selection flow — no real payment-gateway integration is shipped.
  • Reminder delivery ultimately depends on the device's battery-optimization settings; aggressive OEM power savers can delay WorkManager jobs (mitigations documented in the report).
  • Pass codes are generated in-app; conductor-side validation hardware is out of scope.
  • The app targets phones; tablets and foldables get no dedicated layouts in this build.
  • Exact-alarm scheduling needs the SCHEDULE_EXACT_ALARM permission, which the user must grant on Android 12 and above.

Frequently Asked Questions

How does the app work without internet?

Every pass, renewal and reminder schedule is stored in a Room (SQLite) database on the phone, and reminders are fired by the OS schedulers (WorkManager, AlarmManager) — neither needs a network. The wallet is readable in airplane mode; the only thing you cannot do offline is a real payment, which the mock flow represents.

Why both WorkManager and AlarmManager for reminders?

WorkManager handles the deferrable lead-time reminders (7 days, 1 day before) with battery-aware batching, while AlarmManager sets the exact expiry-morning alarm where timing matters. The viva Q&A explains the trade-off: exactness costs battery, deferrability saves it.

Where is my pass data stored?

On the device only, in the app's private Room database. There is no account, no server and no analytics upload in this build. An optional encrypted backup keeps a local copy for reinstall recovery.

Do reminders survive a phone restart?

Yes. A BOOT_COMPLETED broadcast receiver re-registers every pending reminder when the device boots, and the test plan verifies this on a real device.

Is this project suitable for a final-year project?

Yes — for Computer Science, IT and mobile-application programs. It demonstrates offline-first architecture, local persistence with Room, background scheduling with WorkManager and AlarmManager, and a complete, testable everyday use case.

Components & software requirements
  • Kotlin, Android Jetpack
  • Room (SQLite) · Coroutines · Flow
  • WorkManager · AlarmManager · NotificationCompat
  • Jetpack Compose · Material Design 3
  • PendingIntent deep links · BroadcastReceiver
  • Gradle · Android Studio
  • JUnit · Espresso (tests)
  • minSdk 26 · targetSdk 34
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download free synopsis (PDF)

Enter your name and email — the synopsis PDF downloads immediately. We may send occasional project updates; no spam, unsubscribe anytime.

Get a quotation