Capstone · Kotlin and Android App Development
Capstone: a clinic appointment app, from first build to Play testing
The brief
Shanti Family Clinic in Nashik takes appointments by phone, and the receptionist's line is always busy. You build its Android app: patients see the doctors and their fees, pick a free slot, book with their name and phone, get a token number and a notification, and see their appointments, even offline. You test it at every layer, lint it, sign a release App Bundle and prepare it for Play internal testing.
Why it matters
Clinics, salons, tuition centres and service shops all over India need exactly this kind of booking app, so it is real freelance and product work. It is also a complete portfolio piece: an interviewer can install it, read clean MVVM code, see tests at three levels and talk with you about offline data, double bookings and permissions.
Skills you practise
- planning screens and data
- publishing a JSON API on GitHub Pages and reading it with Retrofit
- domain logic with unit tests
- Room with a unique index and DAO tests on a device
- an offline-first repository
- ViewModels with StateFlow and fakes (optionally Hilt)
- Compose screens with type-safe Navigation
- the notification permission
- Compose UI tests, lint and accessibility
- signing, App Bundles and Play internal testing
You need
- Android Studio (Ladybug or newer) with an emulator on Android 13 or newer (API 33+, for the notification permission), or an Android phone
- A free GitHub account (for the code and for GitHub Pages)
- curl and adb (or Android Studio's Terminal and Logcat windows)
- For the last step only: a Google Play Console developer account (one-time fee); without one, prepare everything up to the upload
What you will have at the end
A clinic appointment app on GitHub and on Play internal testing: Compose screens with type-safe navigation, MVVM, Room with a double-booking guard, a Retrofit-backed offline-first repository, notifications, unit, DAO and UI tests, a clean lint run and a signed release App Bundle, with a README an employer can follow.
How it is marked (rubric, 100 points)
| Complete and correctDoctors load online and offline, slots follow the rules, a slot can never be booked twice, tokens are right, and the app survives rotation and restarts. | 30 |
|---|---|
| Architecture and code qualityClear layers (UI, ViewModel, repository, Room/Retrofit), stateless composables, StateFlow, one database and one Retrofit instance, readable code. | 25 |
| TestingSlot rules and the ViewModel tested locally with a fake, the DAO and the booking screen tested on a device; all pass. | 20 |
| Release and Play readinessSigned AAB with R8, secrets out of Git, permission asked in context, privacy policy and data safety done, internal test running. | 15 |
| PresentationA README with screenshots, architecture notes and decisions (for example Hilt or a manual container) that you can walk an interviewer through. | 10 |
0/12 steps done
Step 1 of 12
Plan the app and create the project
A Compose project named Clinic (package com.example.clinic, minSdk 26) with all the course's libraries builds, and a README describes the screens and data.
Plan before you code. Write a README.md with the four screens (doctor list, doctor detail with slots, booking form with the token, my appointments), what each shows, and the data: doctors come from the clinic's JSON, appointments live only on the phone. Then create the Empty Activity project, set minSdk to 26 so java.time works, and add the libraries you used in the intermediate and expert projects plus the lines in build.gradle.kts here.
Add a small Application class that logs "App started" with the tag ClinicApp, and register it in the manifest with android:name=".ClinicApplication". Push the project to a new GitHub repository now and commit after every step.
$ ./gradlew assembleDebug && ls app/build/outputs/apk/debug/Also check yourself
Your notes: doctors.json, build.gradle.kts, Slots.kt, ClinicData.kt, BookingViewModel.kt, Notify.kt
Write down each command you ran. It goes into your project summary.