Screenshots
Click an image to enlarge it.
About the app
Going to the cinema is a one-off decision today: buy a ticket, queue up, plan ahead. Sinepia flips that around and aims to turn cinema into a habit. You have a monthly membership; morning, noon or evening, you sit down in front of the screen whenever you feel like it.
The membership works in two ways. On the unlimited plan a new entry credit unlocks roughly every four hours — so instead of counting a fixed quota across the month, your entitlement renews over time. Anyone who prefers flexibility can spend from a credit pack instead. Every format is covered, including IMAX, 4DX, ScreenX and Gold Class, and a membership can be shared by up to three people under a single plan.
Technically, the real design problem here is entitlement management. A credit that renews over time, a credit that gets consumed, and a shared plan all run at once; whichever of them covers an entry is the one that gets deducted. When a credit unlocks depends on server time, not the device clock — moving your phone's date forward does not earn you new credits. A second entry to the same screening, refunding an unused credit and abuse on a shared plan are all handled in this layer as well.
At the box office it works with a single-use QR code: you open the entry code in the app and have it scanned at the counter. Paperless, fast, contactless. On top of that there is a discount of up to 15% at the concession stand based on membership tier, used for popcorn and drinks before the screening.
Sinepia is currently preparing for launch; the cinema network will open together with founding partners. After cinema, the roadmap also includes theatre tickets.
Key features
- Unlimited membership: an entry credit that renews roughly every four hours
- Credit pack: a flexible pay-as-you-go option instead of a subscription
- All formats: including IMAX, 4DX, ScreenX and Gold Class
- Shared plan: up to three people under a single membership
- QR entry at the box office: paperless, single-use and contactless entry
- Concession discount: up to 15% based on membership tier
- Partner cinema and film discovery: finding the nearest venue and what is showing
- Server-time entitlement management: credit renewal independent of the device clock
- Roadmap: theatre tickets after cinema
Technologies used
105 technologies · 12 categoriesLanguages and Platform
- Dart
- Flutter
- Single codebase, two platforms
- iOS and Android releases
- Material and Cupertino design languages
- Handling platform differences
UI and Application Layer
- Widget tree architecture
- Stateless / Stateful widgets
- State management
- MediaQuery / LayoutBuilder
- Navigator and route management
- Theming and design system
- Virtualisation with ListView.builder
- Custom animations and transitions
Backend and Data
- Firebase Firestore
- Firebase Authentication
- Firebase Storage
- Cloud Functions
- Firestore security rules
- NoSQL data modelling
- Firestore transactions
- Composite index design
- Firestore offline cache
- Batch writes
- Cursor-based pagination
- Denormalisation
- Counter fields
- Cloud Functions triggers
- Scheduled jobs
Membership, Entitlements and QR Validation
- Server-time entitlement renewal
- Subscription state machine
- Credit balance ledger
- Shared plan authorisation
- Single-use QR generation
- Server-side QR validation
- Time-limited code validity
- Discount rules by membership tier
Payments and Revenue
- iyzico payment integration
- Subscription product configuration
- Server-side payment verification
- Renewal and cancellation handling
- Credit pack sales
- Authorisation based on subscription status
Discovery and Notifications
- Location services (Flutter plugin)
- Nearby venue queries
- Film and showtime listings
- Firebase Cloud Messaging
- APNs (iOS)
- Date, time and currency formatting
- Countdown and timer UI
Async and Architecture
- Future / async-await
- Stream and StreamBuilder
- Heavy work in Isolates
- MVVM
- Repository layer
- Service layer separation
- Error handling and retries
- Environment separation (dev / prod)
Networking and Data Transfer
- HTTP client
- JSON serialisation
- Retry and timeout handling
- Offline state handling
- Image caching
- File upload progress
- Connectivity state listening
Security and Privacy
- Secure local storage
- HTTPS
- Auth token management
- Session refresh
- Permission rationale strings
- Account deletion flow
- Server-side authorisation checks
UI States and Accessibility
- Dark theme (ThemeData)
- Text scaling
- SafeArea
- Empty / loading / error states
- Skeleton loading
- RefreshIndicator
- Keyboard and focus management
- Deep linking
- Accessibility with Semantics
Testing, Debugging and Profiling
- Widget Inspector
- Performance overlay
- Memory profiling
- Console and Logcat
- Testing on real devices
- Testing across screen sizes
Tooling and Release Process
- Flutter SDK
- Dart DevTools
- pub / pubspec dependency management
- Xcode (iOS builds and signing)
- Android Studio
- CocoaPods (iOS plugins)
- Gradle (Android builds)
- Git
- App Store Connect
- Google Play Console
- TestFlight
- Play Console internal testing
- flutter build ipa / appbundle
- Version and build numbering
- Signing and provisioning profiles
- App Store review process
- App Privacy / Data Safety form
- App store graphics and ASO copy
Idea, design, UI, code, app store release and post-release maintenance — I ran the entire process end to end on my own. No team, no agency, no outsourcing.
Development notes
- Languages and approachBuilt with Flutter and Dart, shipping to iOS and Android from a single codebase. I have been writing mobile apps since 2020; until then I wrote my apps natively and separately in Swift, Java and Kotlin. In 2026 I moved to a single codebase.
- StatusThe app is in app store review; development and release preparations are ongoing.
- DependenciesA large number of open-source packages from the Flutter plugin ecosystem are in use; dependencies are managed with pub, and the platform-side builds with CocoaPods and Gradle.
- Entitlement managementA credit that renews over time, a credit that gets consumed and a plan shared by up to three people all run at once; credit renewal looks at server time, not the device clock.
- Testing and debuggingTested on real devices, across different screen sizes and under poor network conditions.
- Release preparationApp Store Connect and Google Play Console setup, the privacy declaration, store graphics and the review process are all handled by me alone.
- Product ownershipIdea, design, development, brand identity, website and marketing — the entire process is mine.
Let's talk about Sinepia
I would be glad to walk you through the technical details, the problems I ran into and how I solved them.