Case study

Running four live mobile apps on one shared foundation

Built one shared .NET MAUI base for navigation, dependency injection, offline sync, storage, and theming under four live apps, cutting new-app setup from weeks to days.

Stack
  • .NET MAUI
  • .NET 10
  • SQLite
  • iOS & Android
  1. Situation

    As a solo developer shipping several iOS and Android apps, I was re-solving navigation, storage, sync, and theming in each one. Every round cost weeks, and the separate answers drifted apart from app to app.

  2. Constraints

    One developer maintains every app on both platforms, so each fix and each OS or SDK update has to reach all of them. Each app still had to keep its own identity, store identifiers, palette, and product features, from a map-first geocaching app to a print-shop organizer.

  3. Decision

    Build one shared .NET MAUI base that carries Shell navigation, dependency injection, offline sync, SQLite storage on the device, and theming built on shared semantic colors, and start every app from it. Each app supplies its own screens, data model, palette, and features. OS and SDK updates are made once in the base, then rolled to each app.

  4. Tradeoff

    The hard part is deciding what belongs in the base and what stays in each app. Put too little in the base and every app re-solves the same plumbing; put too much in and one app's needs leak into all four.

  5. Outcome

    New apps start with working navigation, storage, sync, and theming on day one, and new-app setup went from weeks to days. A fix made in the base is rolled out to every app, and OS and SDK updates are done once and rolled out, which keeps four apps current on the App Store and Google Play with one developer.

  6. Retrospective

    The line between base and app is still drawn feature by feature. Moving 3DCDesign onto the current base showed the cost of drawing it late: fitness-app names and assets had to be cleared out, while its PDF viewer stayed an app-only feature. Each app still carries its own copy of the base, so the next step is consolidating it into one shared package that all four apps reference.

Detail

The base is plumbing, not product. Adventure Cache, Your Whey Fitness, 3DCDesign, and Cache Creature are all .NET MAUI apps on .NET 10 for iOS and Android, with Shell navigation and a SQLite store on the device. What differs between them is the part a user sees: the screens, the data, the palette, and the store identity.

The shared base, and the four apps that start from it.
Diagram as text

Parts

  • Fixes, OS and SDK updates
  • Shared .NET MAUI base: Shell navigation, dependency injection, offline sync, SQLite storage, theming on shared semantic colors
  • Four live apps
    • Adventure Cache
    • Your Whey Fitness
    • 3DCDesign
    • Cache Creature

Connections

  • Fixes, OS and SDK updates to Shared .NET MAUI base (made once)
  • Shared .NET MAUI base to Adventure Cache
  • Shared .NET MAUI base to Your Whey Fitness
  • Shared .NET MAUI base to 3DCDesign
  • Shared .NET MAUI base to Cache Creature
The River Marker Cache screen on an iPhone: a Cache Objective card for a traditional cache with one visit, item, hint and question, above a Next Move panel reading “Start with the active clue question, then head to the map.”, Seeker view, one active question and one hint, one visit and one item, and Open Directions and Check Weather buttons. The Your Whey Fitness home screen on an iPhone: a Welcome back card with workout, session, goal and check-in counts and a training score of 109, above a Next Best Step card with an Open Workouts button. The 3DCDesign home screen on an iPhone: a “3DCDesign Studio | Maker” card reading “Plan, track, and finish prints locally.” with a maker score of 16 and counts of one printer, no jobs and one material, above a Label Customer Work tip, an Achievements card with 4 of 40 unlocked, and Printer, Log Job and Material buttons.

Adventure Cache, Your Whey Fitness, and 3DCDesign: three of the four apps on the shared foundation.

For 3DCDesign (external) , joining the base meant aligning its target frameworks, supported OS versions, and shared package versions while keeping its identity, store identifiers, and 3D-printing features intact. Adventure Cache reached .NET MAUI through a full rebuild from Xamarin.Forms, written up in its own case study, and Your Whey Fitness shows how far one app can grow on top of the same base.

Next case study: Turning one product’s knowledge into answers for product, QA, and developers