-
-
The NoCheck app icon.
-
Dashboard: what's overdue, what's due soon and what's next across all your vehicles, in miles or engine hours.
-
The garage: a car, a boat and a motorcycle side by side (20 vehicle types in all), each showing what needs attention next.
-
One vehicle at a glance: the odometer, its reading history and every maintenance item with a clear status.
-
One maintenance item: due in 300 miles, reminded every 5,000 mi or 12 months, with its full service history.
-
Logging a visit: tick everything that was done, confirm the date and the odometer, and save it all at once.
-
Adding maintenance from the built-in list: recommended intervals are already filled in. Dark mode included.
-
History: every service and odometer update across all your vehicles, grouped by time and searchable.
Inspiration
I own a car, and it does not tell me when the oil is due. Nothing does. I kept forgetting what needed servicing and when — and worse, there was a whole category of things I did not know needed servicing at all. Brake fluid has a shelf life. Spark plugs wear out — I had quietly assumed spark plugs were a lifetime part, fitted at the factory and replaced never, and I would still believe that today if someone I know at a service shop hadn't mentioned in passing that they want changing every ~50,000 km. Nobody tells you this stuff; you find out when something goes wrong, or when a mechanic tells you it should have been done two years ago.
So the first goal was modest: one place where an ordinary owner can see what should be serviced and roughly when, without having to already know the answer. Not a spreadsheet that assumes you know your car's service schedule — a starting point that gives it to you, per vehicle type, and then tracks it.
The second goal came from the other end of the same problem. People who own several vehicles — a car and a motorcycle, plus a boat, sometimes a small single-engine aircraft — or who look after a whole garage, have the same need multiplied, and no consistent way to see all of it at once. Three of those four don't even measure their lives in kilometres; they measure it in engine hours. Every app I tried modelled a car's odometer and bolted everything else on as a special case, if at all.
NoCheck starts from the other end. A vehicle is anything with a meter and a service schedule — 20 types, from a bicycle to a jet ski to an aircraft — and a maintenance item is due when whichever of its meters crosses first: distance, engine hours, or the calendar. One garage, one way of looking at all of it.
What it does
- Every vehicle in one garage. 20 types, from a bicycle to a boat to a small plane. Pick the make and model from a catalog of about 850 makes and nearly 16,000 models, or type your own.
- Knows what to service. Each vehicle is offered the services for its type and fuel, with sensible intervals already set: an electric car gets no oil change, a boat gets its impeller and anodes.
- Due by whatever comes first — distance, engine hours or time. A fully tested due engine ranks every item as ok, due soon or overdue, and real local notifications are scheduled from the same answer.
- Scans the odometer. On-device OCR, no network and no photo stored. The vehicle's own history rules out implausible readings, so the worst case is silence, never a wrong number.
- Log a service, and the reminder starts over. Every service and reading lands in one history across all your vehicles, filterable in a tap.
- On the home screen and in the car. Native widgets on Android and iOS, and a nudge for the odometer reading about 30 seconds after the phone connects to the car.
- Offline first. Everything lives on the device and works with no signal.
- Free for your first vehicle. Premium covers up to 25 and adds cloud backup and your own maintenance types — monthly, yearly or lifetime, through the App Store, Google Play or the Galaxy Store.
- 21 languages, Arabic and Hebrew right to left.
How I built it
The app
- Flutter & Dart — one codebase for both the iPhone and the Android app.
- Riverpod — keeps every screen in step with the data behind it.
- go_router — navigation between the four tabs and every screen inside them.
- Drift over SQLite — the database on the phone, so the whole garage works offline.
- Google ML Kit — reads the odometer through the camera, right on the device.
- Local notifications — service reminders, scheduled by the phone itself.
- home_widget, with Jetpack Glance and WidgetKit — the home-screen widgets on Android and iPhone.
- Material Design 3 & Material Symbols — the base of NoCheck's own design system, in light and dark.
- Widgetbook — a catalog of every design-system component, to build and review each one on its own.
Payments
- RevenueCat — the subscriptions and the lifetime purchase on the App Store, Google Play and the Galaxy Store, with one Premium across all three.
Backend and services
- Firebase Authentication — sign-in with Google, Apple, or a link sent by email.
- Cloud Firestore & Cloud Storage — the Premium cloud backup of the garage and its vehicle photos.
- Cloud Functions (TypeScript on Node.js) — the little server logic there is: the sign-in email, the cloud backup, and hearing from RevenueCat who is Premium.
- Resend — delivers the branded sign-in email.
- Firebase App Check — lets only the real app talk to the backend.
- Remote Config & Firebase Hosting — deliver catalog updates without a new app release, and host the website.
- Crashlytics — crash reports, so problems are found before users have to report them.
Website and shipping
- Astro — nocheck.app, a fast static site in all 21 languages.
- GitHub Actions & release-please — test every change, and upload every release to the App Store and Google Play by themselves.
Challenges I ran into
- A world car catalog didn't exist. The best free catalog of makes and models is the American one, and it only knows vehicles sold in the US, so it has never heard of Škoda, one of Europe's most popular brands. I merged catalogs from several markets and cleaned out the duplicates and junk. Now a script rebuilds it every month, and all I do is review what changed.
- Manufacturer schedules are written for the brochure. They assume perfect fuel and perfect roads, and "lifetime" gearbox oil usually means the life of the warranty. So every built-in interval comes from owner forums and independent shops instead, set for real-world conditions.
- RevenueCat couldn't bill through Samsung from Flutter, the framework NoCheck is built on. I extended RevenueCat's Flutter package, which only covered Apple and Google, to the Galaxy Store as well, and tested the purchases end to end.
- Neither store prices by purchasing power. Apple and Google convert one price into every currency, so a subscription costs the same in dollars whatever people earn. I built my own affordability index, sorted every country into one of five price tiers, and a script sets the local prices on both stores, in 170+ markets each.
Accomplishments that I'm proud of
- A design system that is actually reusable — one examples file per component feeding both the storybook and the golden masters, so the documented component and the tested component can't drift, and a guard test that makes hardcoded values un-mergeable.
- A vehicle catalog that knows the whole world. About 850 makes and nearly 16,000 models — cars, motorcycles, boats, tractors and aircraft, Škoda included — merged from four sources, cleaned of duplicates and junk, and refreshed every month.
- Maintenance advice worth following. Every vehicle type is offered its own services, with intervals drawn from owners and independent shops rather than the brochure. Every interval stays editable, and Premium users can create maintenance types of their own.
- A reminder at the one moment you can act on it. Beyond the usual scheduled notifications: when you get into your car and the phone connects to it over Bluetooth, NoCheck can ask for the odometer reading about 30 seconds later — while the engine warms up. On Android it listens for the system's own connection broadcast; on iOS, a Shortcuts automation the app walks you through does the same.
- Prices that fit the country. Premium is priced per market by purchasing power rather than by converting a US price — five tiers across 171 Google Play regions and 173 App Store territories — so it stays within reach wherever you live.
- Native home-screen widgets — three on Android (Jetpack Glance), three on iOS (WidgetKit) — so what is due next is visible without opening the app, mirrored for right-to-left languages.
- 21 languages shipped across nine surfaces each, two of them right to left, verified by fail-closed guards and a content-hash staleness ledger rather than by anyone remembering.
- Zero-touch releases. Merging a release PR builds and uploads the App Store and Google Play apps with no manual steps; the Galaxy Store build ships the same version from the same code, and its upload is the one step still done by hand.
What I learned
I'm a front-end developer — web, to be precise. That is the one job I actually knew. This Shipaton made me do every other one as well:
- Business owner — who only just managed to pull it all together into a proper technical spec and a set of requirements someone (also me) could build from.
- Designer — building one design system, tokens and components and a dark theme, so that the finished app looks like one product rather than a pile of screens.
- Content maker — working through App Store Connect, the Google Play Console and Samsung's Seller Portal: everything a seller account asks for, then every listing field and every screenshot, three stores over.
- Mobile developer — in Flutter, a stack completely new to me (my only mobile experience before was React Native), with an app that has to behave properly on two different operating systems, right down to native home-screen widgets on each.
- Headless back-end developer — wiring Firebase, Resend and RevenueCat together: sign-in, the branded sign-in email, the purchase webhook, cloud backup, with no server of my own to lean on.
- SEO/ASO specialist — getting the metadata right so the app turns up where people look: in search results, for the crawlers behind LLM assistants, and inside the stores themselves.
- Video maker — and finally, for this demo: the script, the voice, the edit and the sound.
So yes — this Shipaton taught me a great deal, most of it well outside the job I came in with.
What's next for NoCheck
- Attachments and receipt photos on a service log.
- Expense tracking, so the history doubles as a cost-of-ownership record.
- iPad and foldable phones, done properly. Landscape and any window width, not a stretched phone layout — and I'm already working on foldables, because that's where phones are heading.
- The rest of the localization plan, taking the app from 21 languages to 33.
Credits
- Car chime sound: "Car Chime #1" by EggoJRs, licensed under CC BY 3.0; trimmed and level-matched for the video.
- Other warning sounds: "door chime kia.flac" by vacuumfan7072 and "sfx_seatbelt warning_auto.wav" by bajko, both CC0.
- Voice-over and music: AI-generated with ElevenLabs (a library voice and Eleven Music).
- App Store is a service mark of Apple Inc., Google Play is a trademark of Google LLC, and Galaxy Store is a trademark of Samsung Electronics Co., Ltd. Vehicle makes and models are trademarks of their respective owners.
Built With
- app-check
- astro
- cloud-firestore
- cloud-functions
- crashlytics
- dart
- drift
- firebase
- firebase-auth
- flutter
- github-actions
- go-router
- google-ml-kit
- material-design
- node.js
- remote-config
- resend
- revenuecat
- riverpod
- sqlite
- typescript
- widgetbook

Log in or sign up for Devpost to join the conversation.