Documentation

Mobile overview

Flutter is the canonical mobile stack for AppMint. Native iOS/Android works via REST, but the documented patterns are Flutter.

AppMint exposes its full backend over plain HTTP/JSON, so any mobile platform that can sign a request and parse JSON can talk to it. In practice, every reference app shipping today is built in Flutter, and that is the stack this section documents end-to-end. Native iOS, native Android, React Native, and Kotlin Multiplatform all work — they just don't have ready-made code in this repository to copy from.

Why Flutter

Four production apps already use the same conventions, so the patterns are battle-tested:

  • A single Dart codebase for iOS and Android.
  • A consistent HTTP client wrapping package:http or dio.
  • JWT in flutter_secure_storage, settings in shared_preferences, optional offline cache in Hive.
  • Real-time over socket_io_client against AppEngine's chat and community gateways.
  • Stripe, biometrics, push, and image upload through well-known Pub.dev packages.

If you are starting a new mobile project, fork one of the reference apps below and replace the screens. The plumbing is already correct.

Reference apps

The four apps live in /Users/imzee/projects/appmint_go/ and each maps to a different module mix.

AppAudienceModules usedNotable
reel_momentConsumersStorefront, RentalsCamera and event-experience controller, image picker workflow
dfw_errandConsumers + driversStorefront, Logistics, StripeReal-time delivery tracking, dual customer/driver mode
event_appCommunitiesEvents, Community, Storefront, ChatMulti-module integration — events + social feed + tickets + chat
appmint_mobileOperators (staff)CRM, Profile, Inbox, Repository, ChatOperator-side admin app, biometrics, offline cache, dio + bloc

reel_moment, dfw_errand, and event_app authenticate as customers (/profile/customer/signin). appmint_mobile authenticates as a staff user (/profile/user/signin) — different endpoint, different role checks, different RBAC. Mixing the two is the most common integration mistake; the admin-mobile section covers the operator path in full.

What this section is, and isn't

There is no first-party Flutter package on Pub.dev today. Every reference app re-implements the same AppmintHttpClient, the same JWT-attach interceptor, and the same BaseModel\<T\> unwrapping. This documentation track canonicalizes that pattern so the next app you build doesn't have to invent it.

The pages are organized as:

  • Flutter SDK — the canonical client class, auth, biometrics, offline cache, push, error handling. Ground-truth code lives in /Users/imzee/projects/appmint_go/appmint_mobile/lib/services/ — the snippets here are the version distilled and verified across all four apps.
  • Recipes — task-shaped how-tos: build a login screen, browse products, take a Stripe payment, connect to chat, render a community feed. Each pulls from the most relevant reference app.
  • Examples — short walkthroughs of each reference app's architecture, with file pointers so you can read the real code.
  • Admin mobile — operator-only patterns: staff auth, lead and order management, biometric gates, KPI dashboards.

None of these pages claim a published appmint_dart package exists. When you see class AppmintClient, treat it as a copy-paste starter — the real code lives in the reference apps, and you are expected to vendor it into your project.

Native iOS and Android

The REST surface is identical regardless of platform. To talk to AppEngine from Swift, Kotlin, or anything else:

  1. Send Authorization: Bearer <jwt> and orgid: <your-org-id> on every request.
  2. Hit https://appengine.appmint.io in production or http://localhost:3300 in development.
  3. Decode BaseModel\<T\> envelopes — your data is on .data.

The endpoints, auth flows, and error shapes documented for Flutter apply unchanged to native clients. The Dart code is illustrative; the wire format is the contract.

Where to start

If you have never used AppEngine from a mobile app, walk the Flutter SDK installation page and the auth flow recipe in order. Both take about ten minutes and leave you with a working signed-in session that can call any AppEngine endpoint.

If you are extending an existing app, jump to the client pattern page — that is the canonical shape every other recipe builds on.