Your personal movie companion
A Flutter movie and show tracking app with TMDB integration, Clean Architecture, BLoC/Cubit state management, and a 47-badge gamification system.






Saved, watching, done, and liked. Every movie has its place.
Unlock 47 badges as you track more movies and explore new genres.
Follow your favourite directors and actors to never miss their work.
The decisions behind Vishram that matter most: the ones that make it hold up, not just look good.
Watchlist, Watching, Watched and Favorites live on the device first, so your library is there even offline, and sync to Supabase when you're signed in. Signing in runs a last-write-wins merge between the two copies. Local data is namespaced per user, so guest mode and multiple accounts never mix libraries.
Every movie and person lookup goes through a single repository → data source path and comes back as Either<Failure, T>. An older parallel stack, with a second HTTP client and its own result types, was removed once it was confirmed unused. One way in keeps error handling predictable.
Sign-in, roles, session restore and account deletion come from multi_role_auth, a separate Flutter package HariPin maintains, rather than living inside the app. The next app gets the same auth without copy-paste.
Cubit handles state that's shared across screens (search results, region, theme, badge celebrations). Screens that own their state use plain StatefulWidget. Not everything needs a BLoC.
An app-wide haptics layer gives every tappable a light tap, with distinct patterns for toggles, marking something watched, success and errors, all behind a single Settings switch.
Status
Available on Google Play for Android. Regression tests guard the bugs that have been fixed once, and releases are documented in a changelog with plain-words Play Store notes.