your vit timetable on your phone.
vitty already exists and it's great. but it's centralized your timetable lives on their servers and the onboarding is a pain. Google OAuth, manual timetable upload, the whole thing.
better-vitty does it differently: it logs into VTOP directly from your phone, pulls your timetable, and saves it locally. that's it. nothing goes anywhere. no accounts, no servers, no middlemen.
enter your VTOP credentials once. every sync after that is automatic. new semester, dropped a course, added an elective, just tap sync and it picks it up.
- pulls your timetable straight from VTOP
- stores everything on-device (credentials go into Android's secure storage)
- home screen widget showing today's classes
- share your timetable as a QR code, friends can scan it in-app or import from gallery
- friends tab for keeping a bunch of saved timetables
- auto-handles new semesters and course changes
- phone home
- collect anything
- require an account
- exist on the Play Store
it's not on the Play Store on purpose. feel free to build it on you own and share it with your friends, feel free to modify it :D
you'll need Node.js, pnpm, and Android Studio (for the SDK and a connected device or emulator).
git clone https://github.com/thinkter/better-vitty
cd better-vitty
pnpm installdebug build (fastest way to get it running):
pnpm androidrelease APK (what you'd actually share):
cd android
./gradlew assembleReleasethe APK lands at android/app/build/outputs/apk/release/app-release.apk. send it to whoever.
if you want a signed APK (so Android doesn't complain about installing from unknown sources on every update), you'll need to set up a keystore. the Android docs cover it, or you can just resign each time, for sharing with a handful of people it doesn't really matter.
pnpm test
pnpm typechecksrc/
vtop/ VTOP client, login, timetable fetching
screens/ top-level screens
components/ UI components
storage/ local persistence (SQLite + secure store)
lib/ shared types and utilities
packages/
captcha-solver/ solves the VTOP login captcha locally
the app talks directly to vtop.vit.ac.in. no proxy layer. you can verify this by reading src/vtop/client.ts, it's a straightforward fetch wrapper with cookie handling.
open an issue or send a PR. the main things that could use work are iOS support and making the timetable parsing more resilient when VTOP inevitably changes its HTML again.
MIT


