Mobify · Flutter agency portfolio

A Flutter team, shipping production apps.

Mobify is a Flutter-focused agency of engineers, designers, and QA specialists. Our team designs, builds, and ships Flutter apps for iOS and Android, from greenfield architectures to evolving production codebases. This page details how the Mobify team works with Flutter and showcases real apps currently in users' hands.

2-10
Team size, scaled per project
7+
Production Flutter apps
130K+
End users reached
iOS + Android
Always both stores

The Mobify team

A focused Flutter-first squad. Senior mobile engineers, product designers, backend specialists, and QA / release managers collaborate on every project, scaled from 2 to 10 people based on scope.

Senior Flutter engineers

Architecture, feature delivery, performance, and complex UI on top of Riverpod 3, go_router, and Clean Architecture.

Product & UI designers

Information architecture, design systems, and high-fidelity prototypes that ship 1:1 in Flutter.

Backend engineers

Supabase, Firebase, REST APIs, and integrations like Stripe Connect, RevenueCat, and Google Maps.

QA & release management

Test planning on TestFlight and Play internal tracks, store submission, and post-release triage with Sentry.

Product management

Discovery, scoping, milestone planning, and ongoing product iteration based on real usage data.

Tech lead & architecture

Architectural reviews, code quality gates, and continuity across the lifetime of each project.

Featured Flutter projects

Each project below ships on iOS and Android, with concrete metrics from production. Linked case studies dive deeper into the engineering decisions.

🛠️
Shly
Live demo available on request
🛠️

Shly

On-demand marketplace connecting clients with home-service professionals

Mobify team · Architecture, full app build, CI / release

iOSAndroid
Stack
Flutter 3.x (FVM)Riverpod 3 (codegen)go_router 17Supabase (Auth + Postgres + Storage + Edge Fns)Stripe ConnectRevenueCatFirebase MessagingSentryFreezed + json_serializableslang (i18n)Google Mapsmocktail
  • 12 feature-first modules with strict data / domain / presentation separation
  • 15+ repositories composing API + Storage + Messaging services
  • 7 composable navigation guards (auth, role, onboarding, document verification)
  • Ordered service initialization via a custom OnStartService interface
  • Multi-method auth (email, Google, Apple) with sealed User union types
  • Real-time messaging, geolocation matching, ratings, and Stripe Connect onboarding
Production · iOS + Android
Livroux — Flutter app screenshot
🍔

Livroux

Uber Eats-style food delivery platform with multi-role apps

Mobify team · Feature ownership, architecture evolution

iOSAndroidWeb dashboard
Stack
FlutterRiverpodFirebaseStripeReal-time order tracking
  • Multi-role app (customer, restaurant, courier, regional sub-admin)
  • Designed and shipped a regional sub-administrator system on top of an existing Flutter codebase
  • Live order tracking and dispatch flow
+100K orders deliveredRead full case study
Protected — Flutter app screenshot
🔒

Protected

Privacy-first mobile app helping users protect their online life

Mobify team · App build, store releases, ongoing maintenance

iOSAndroid
Stack
FlutterNative platform channelsSecure storage
  • Shipped to App Store and Play Store
  • Ongoing release cycle with iterative feature delivery
  • Privacy-sensitive UX with secure local storage
+10K protected usersRead full case study
Coloris — Flutter app screenshot
🎨

Coloris

Internal product catalog management for a paint distributor

Mobify team · Mobile app + admin dashboard integration

iOSAndroidDashboard
Stack
FlutterREST APIsOffline-friendly cachingCustom design system
  • Drives an internal sales process used to manage a 19.8M€/year catalog
  • Tightly integrated with the company ERP / dashboard
  • Search-heavy UI with large datasets and offline tolerance
+19.8M€ annual sales managedRead full case study
Kontacteo — Flutter app screenshot
📇

Kontacteo

Professional contact management with smart organization

Mobify team · End-to-end build and store releases

iOSAndroid
Stack
FlutterRiverpodLocal persistenceCloud sync
  • Full CRUD with offline-first sync model
  • Tag-based organization, search, and rich contact metadata
  • Shipped on both stores
+20K contacts managedRead full case study
Recolinks — Flutter app screenshot
🎁

Recolinks

Referral & loyalty platform — mobile app + web app

Mobify team · Mobile app, shared business logic with web

iOSAndroidWeb
Stack
FlutterShared model layerREST integration
  • Cross-platform Flutter app paired with a web client
  • Recommendation tracking and reward distribution flows
+400 recommendations / partner business
DépanneVélo — Flutter app screenshot
🚲

DépanneVélo

On-demand bike repair with live technician tracking

Mobify team · Mobile app + admin dashboard integration

iOSAndroid
Stack
FlutterMaps SDKReal-time locationPush notifications
  • Live ETA tracking of the technician on a map
  • Dispatch logic with a referenced technician network
+100 technicians referenced

How our team works with Flutter

Our production stack is opinionated and stable across projects. The same architectural primitives scale from a focused MVP to a multi-role marketplace with payments, geolocation, and real-time messaging.

Architecture & code organization

  • Feature-first modular architecture — each module owns its api/, repositories/, providers/, models/, and ui/.
  • Clean separation of layers: Presentation → State (Riverpod) → Repository → API → Entity.
  • Sealed union types via Freezed for domain modeling (e.g. User = Authenticated | Anonymous | Loading) and Dart 3 pattern matching.
  • Repositories compose multiple services (API + Storage + Messaging) and orchestrate transactional flows like "create mission + parallel photo upload + open conversation".
  • Centralized enums for backend identifiers (tables, RPCs, buckets, edge functions) — a single source of truth.

State management — Riverpod 3

  • Riverpod 3.x with @Riverpod annotation and code generation (riverpod_generator + build_runner).
  • Strict separation between persistent providers (keepAlive: true) and ephemeral ones, scoped per feature.
  • Custom OnStartService interface to orchestrate ordered service initialization at boot (SharedPrefs → Locale → UserState → UserInfos → Documents → Stripe → Notifications).
  • Notifiers expose typed state (List<T>, sealed unions, AppLocale) and explicit imperative methods (load, create, update, delete).
  • Provider composition with ref.watch / ref.read / ref.listen and inter-module dependencies.

Navigation & routing

  • go_router 17 declared inside a Riverpod Provider, so routes can react to authentication state.
  • Seven composable navigation guards: GuardAuth, GuardNotAuth, GuardAuthUserRole, GuardUserRole, GuardUserInfos, GuardOnboarding, GuardDocumentsVerified.
  • Typed AppPage enum with .routePath and .routeName — no hardcoded strings.
  • Deep linking via app_links and Supabase auth callback handling.

Testing strategy

  • Unit tests for domain models (Email, Password validators), repositories (with mocktail), and notifier business logic.
  • Module-level test aggregators that compose smaller test files into a single entry point per module.
  • Tests run on every refactor: catching regressions on validation chains, deduplication, and exception mapping.
  • flutter_test + mocktail; clean separation of fakes/mocks per repository under test/modules/<feature>/.

Design system & theming

  • Centralized design system in lib/style/ with 15 dedicated style files (colors, typography, buttons, forms, cards, sheets, dialogs, pickers, selectors, sizes, layout, indicators, toasts, snackbars).
  • AppThemeColors abstraction with full light/dark theme parity.
  • 28 reusable widgets in widgets_lib/ (buttons, cards, forms, navbar, pickers, sheets, image grids, star rating, photo editor, video player, camera, …).
  • Animations and accessibility considered as part of the system, not an afterthought.

Internationalization

  • slang + slang_flutter for type-safe i18n with code-generated AppLocale.
  • Two languages shipped (English, French), hot-switchable from a Riverpod LocaleNotifier.
  • User locale persisted across launches via SharedPreferences.

Backend & integrations

  • Supabase (Postgres + Auth + Storage + Edge Functions) as the primary backend.
  • Stripe Connect onboarding via WebView for professional accounts; RevenueCat for subscriptions.
  • Firebase Messaging for push, flutter_local_notifications for local scheduling.
  • Custom Dio HttpClient with bearer-token interceptor; google_sign_in and sign_in_with_apple for native auth.
  • Sentry for crash reporting; structured logging with the logger package.

Code quality & tooling

  • flutter_lints with a strict analysis_options.yaml.
  • FVM for reproducible Flutter SDK versions across machines.
  • build_runner pipeline for Freezed, json_serializable, and riverpod_generator.
  • Permission handling, secure storage (flutter_secure_storage), and crypto for sensitive data.
Technical deep diveShly

Architecture in practice — Shly

A two-sided marketplace connecting clients with home-service professionals. The codebase exemplifies how our team structures Flutter apps that need to scale across many features without becoming a tangled monolith.

Module map

12 feature-first modules under lib/modules/, each self-contained with its own api / repositories / providers / models / ui.

authenticationuser_infosprofessional_servicesmissionsaddressespayment_methodstripe_connectmessagingnotificationsratingsblocked_usersmap
Layered data flow

Strict, predictable layering — every feature follows the same path.

UI Screen (presentation/)
   ↓ ref.watch / ref.read
Notifier (modules/<feature>/providers/)
   ↓
Repository (modules/<feature>/repositories/)
   ↓
API client (modules/<feature>/api/)
   ↓
Entity → Model (Freezed)
Representative provider — keepAlive + ordered init
@Riverpod(keepAlive: true)
class UserStateNotifier extends _$UserStateNotifier
    implements OnStartService {
  @override
  UserState build() => const UserState(user: User.loading());

  @override
  Future<void> init() async {
    try {
      await _loadState();
    } catch (e, stack) {
      _logger.e(e, stackTrace: stack);
      rethrow;
    }
  }

  Future<void> onSignin()       async { /* ... */ }
  Future<void> onLogout()       async { /* ... */ }
  Future<void> deleteAccount()  async { /* ... */ }
}

The OnStartService interface lets the app boot a deterministic chain of providers (SharedPreferences → Locale → UserState → UserInfos → Documents → Stripe → Notifications) before the first frame, instead of relying on implicit lazy loading.

Composable navigation guards
GoRoute(
  path: AppPage.missionRequest.routePath,
  name: AppPage.missionRequest.routeName,
  builder: (context, state) => GuardAuth(
    fallbackRoute: AppPage.auth.routePath,
    protectedRoute: AppPage.missionRequest.routePath,
    child: MissionRequestScreen(
      serviceType: (state.extra! as MissionRequestExtra).serviceType,
      professional: (state.extra! as MissionRequestExtra).professional,
    ),
  ),
)

Guards are plain widgets — composable, testable, and reactive to Riverpod state. GuardAuth, GuardAuthUserRole, GuardOnboarding and GuardDocumentsVerified can be layered to express any access policy without polluting screens.

Test aggregators per module
// test/modules/authentication/authentication_module_test.dart
import 'providers/models/email_test.dart' as email_test;
import 'providers/models/password_test.dart' as password_test;
import 'providers/models/signin_state_test.dart' as signin_state_test;
import 'repositories/exceptions/authentication_exceptions_test.dart'
    as auth_exceptions_test;
import 'repositories/authentication_repository_test.dart'
    as auth_repository_test;

void main() {
  email_test.main();
  password_test.main();
  signin_state_test.main();
  auth_exceptions_test.main();
  auth_repository_test.main();
}

Each module exposes a single aggregator entry point — easy to wire into CI, easy to scope a focused run, and a clear convention for new contributors.

Production tech stack

The packages and patterns our team reaches for first when starting a new Flutter project.

Architecture

Clean ArchitectureFeature-firstRepository patternSealed unions

State management

Riverpod 3riverpod_annotationriverpod_generator

Navigation

go_routerCustom guardsDeep linking (app_links)

Models & codegen

Freezedjson_serializablebuild_runner

Backend

SupabaseFirebaseDioStripe ConnectRevenueCat

UI / Design

Material 3Custom themingflutter_svgGoogle Maps

Auth

google_sign_insign_in_with_appleEmail/password

Storage

shared_preferencesflutter_secure_storage

Notifications

firebase_messagingflutter_local_notifications

i18n

slangslang_flutterintl

Testing

flutter_testmocktail

Observability

SentryFirebase Analyticslogger

Tooling

FVMbuild_runnerflutter_lints

Delivery process

From discovery to release: the way our team runs Flutter projects end-to-end.

1. Discovery & scoping

Strategic session, business goals, target users, MVP cut. The output is a written plan with milestones, deliverables, and a fixed scope.

2. Architecture & build

Clean modular Flutter codebase from day one — Riverpod, go_router, Freezed, repositories, design system. Continuous demos every few days.

3. Quality & QA

Unit tests on critical domain logic, manual test plans on TestFlight / Play Console internal tracks, Sentry-instrumented from staging.

4. Release & growth

Store submission (App Store + Play Store), ASO, analytics setup, ongoing iteration based on real usage data.

Visuals, live demos & source code

Most of these projects are commercial work, so live build access and source code are shared on request and under NDA. The team is happy to provide:

  • TestFlight / Play Store internal track invites for any of the listed apps.
  • Recorded video walkthroughs of the production apps end-to-end.
  • Read-only access to representative parts of the Shly codebase (architecture, providers, repositories, tests).
  • A live screen-share or pair-coding session with the Flutter review team.

Please reach out via the contact section below and we'll provide whatever access is most useful for the review.

Writing about Flutter

Long-form articles where the team shares how we use Flutter in production. (In French. The rest of this page targets English readers.)

Get in touch

For the Flutter review team or anyone who wants to talk Flutter, architecture, or a new project.