What we solved
Naval buyers, analysts, and enthusiasts juggle scattered PDFs, forum threads, and broker emails to compare warships, submarines, missiles, and instruments across the world’s navies. Specs sit in one place, listings in another, and field work often happens without reliable connectivity. The client needed one app that did the reference and the marketplace - and stayed useful when the signal dropped. Six years and multiple Flutter-version upgrades later, the app now covers 104+ countries across warships, naval aircraft, submarines, missiles, unmanned systems, equipment, books, and infographics.
The system at a glance
A Flutter app (iOS + Android) pairing a structured naval reference library with a second-hand buy/sell marketplace. Initial build shipped on Flutter 1.x; the codebase has been upgraded to the current Flutter release as part of long-running maintenance. Filters by country, vehicle category, and sub-type. Study tools (flip cards, quizzes) for learning. Pro users get offline access, side-by-side comparison, access to restricted listings, and deeper data via an in-app subscription. Firebase handles data, auth, and offline sync. GetX keeps the UI responsive.
What the user experiences
- Browse categories: warships, submarines (ballistic missile / guided missile / nuclear-powered / diesel-electric / midget / special mission), naval aircraft, patrol boats, missiles, unmanned systems, equipment.
- Filter by country (104+), specs, or condition.
- Open a listing: photos, specs, operational status, diagrams.
- Pro tier: open two listings side-by-side for comparison. Download offline. Access restricted items.
- Interactive infographics for in-depth vehicle analysis.
- Quiz mode: flip cards and multi-choice recognition practice.
- News, videos, and documents integrated alongside the core reference.
- Buy or sell a second-hand item through the marketplace flow.
- Pay for Pro inside the app.
How we built the pieces
Offline - Firebase persistence, not a custom sync layer
Firebase’s client libraries ship offline persistence for free. The app reads from the local cache when offline and reconciles on reconnect. Users on a ship, in a port, or in a dockyard without data still open the app and see the reference they were reading yesterday.
Marketplace - Firestore documents, no custom backend
Every listing is a Firestore document. Buy/sell flows write new documents; the marketplace feed is a live query. Firebase Storage holds the imagery. No custom server code.
Pro subscription - in-app purchase, gated reads
Pro unlocks: side-by-side comparison, restricted listings, full offline sync, and full-detail content. An in-app purchase plugin wraps App Store and Play Billing; the backend validates receipts and flips the user record. Gated documents return empty for free-tier clients; Pro reads the full record.
Reference + marketplace in one app
The trick is they share infrastructure. The reference library is Firestore documents tagged reference. The marketplace is Firestore documents tagged listing. Same auth, same offline sync, same search. A niche community gets both surfaces without running two apps.
Study mode - flip cards + quizzes
A Flutter widget stack renders flip-card interactions without a third-party animation library. Progress saves locally (Hive or GetStorage) and syncs to the user’s account when they’re online.
Continuous maintenance - Flutter version upgrades
The app shipped on Flutter 1.x in 2018. Across six years we have migrated it through successive Flutter releases - null safety, breaking plugin changes, Firebase SDK upgrades - without a rewrite. That is the case for Flutter on a specialist app: the language and framework pay compounding dividends on maintenance.
Offline-first is the real product
The interesting part is the combination - reference + marketplace + study mode + offline + subscription gate in one app, maintained for 6+ years across 104+ countries’ navies. Each piece alone is easy. Gluing them together on Firebase without a custom backend, and keeping it running across framework upgrades, is where the engineering sits.
Results
- Shipped to App Store + Google Play in 2018; live at navallibrary.com.
- Continuously updated through 2024+ (current website banner).
- Offline-usable reference across warships, submarines, aircraft, missiles, unmanned systems, documents.
- Marketplace working with buy/sell flows and secure payments.
- Pro subscription tier gating comparison, offline, and restricted listings.
- 104+ countries covered.
What an engineering team should take from this
If you are building a niche-community app that combines content, marketplace, and monetisation:
- Firestore + offline persistence is enough for read-heavy content apps - you don’t need a custom sync layer.
- Reference and marketplace can share the same data layer if you tag by type. Two apps is rarely the right answer.
- Pick a framework you can maintain for years. Flutter + Firebase will still be a going concern when your app is six years old; be deliberate about that choice up front.
Tech stack
- Mobile: Flutter (initial 1.x, currently latest - iOS + Android)
- State: GetX
- Data + auth + storage: Firebase (Firestore, Auth, Storage)
- Offline: Firebase client-side persistence
- Payments: in-app purchase plugin wrapping App Store + Play Billing
- Local cache: Hive or GetStorage (inferred)
Screens
