Home> Cases> Cross-Platform Service App Reference Architecture

Cross-Platform Service App Reference Architecture

Reference TypeApplication reference
Materials to ReviewFlutter · Dart · Go · PostgreSQL · Redis · FCM/APNs
Cross-Platform Service App Reference Architecture

Application reference. This is an illustrative architecture and scope checklist, not a verified customer project or measured deployment. Technologies, integration scope and delivery items are agreed for the actual brief.

Scenario and Constraints

A service product where iOS and Android share the same workflows and a small team has to maintain both. Three constraints shape the design: unreliable mobile networks, app-store review cycles that make hotfixes slow, and the need to change business rules without shipping a new build.

Architecture

Layers and responsibilities

LayerTechnologyWhat it is responsible for
AppFlutter (Dart), layered into UI / state / repositoryScreens and interaction. The repository layer is the only thing that knows whether data came from the network or the local cache, which keeps offline handling out of the UI code.
Local storeSQLite (drift) + platform secure storageCached entities, an outbox of pending writes, and tokens in secure storage rather than shared preferences.
APIGo + Gin, versioned routesBusiness rules, validation, authorisation. Versioned from day one because old app builds stay in users' hands long after release.
StoragePostgreSQLTransactional data; JSONB used for genuinely variable attributes instead of endlessly widening tables.
Cache / queueRedisSessions, rate limiting, idempotency keys and background job queue.
PushFCM and APNs behind one notification serviceA single internal API for notifications; platform differences are handled server-side, not in the app.
AdminVue admin panelUser, content and order management, plus the remote-config values that change app behaviour without a release.

Data Model

The tables below carry the rules that everything else depends on. Getting these wrong is what turns a working demo into a system that cannot be extended.

Core entities

EntityKey fields, relations and rules
user / auth_identityOne user may hold several identities (phone, Apple, Google, WeChat). Separating identity from user is what makes adding a login method later a migration-free change.
devicePush token, platform, app version and locale per device. Notification targeting and staged rollouts both read from here.
order / bookingThe domain entity with an explicit state column plus a transition log, so 'how did it reach this state' is answerable in support.
outbox (client-side)Queued local writes with a client-generated UUID. That UUID becomes the idempotency key on the server, which is what makes retry-after-timeout safe.
sync_cursorPer-user updated_at watermark driving incremental sync, so the app pulls deltas instead of refetching whole collections.
remote_configKey-value configuration by app version and platform, letting rules and feature flags change without an app-store submission.

Key Interfaces

Endpoints that carry the business rules

EndpointPurpose and concurrency notes
POST /api/v1/auth/tokenIssues a short-lived access token plus a rotating refresh token. Refresh rotation limits the damage from a stolen token on a device you cannot reach.
GET /api/v1/sync?since=Incremental pull of records changed since a cursor, paginated and capped, so a user returning after weeks offline cannot pull an unbounded response.
POST /api/v1/ordersAccepts the client UUID as an idempotency key; a retry after a network timeout returns the original order instead of creating a duplicate.
POST /api/v1/devicesRegisters or refreshes the push token, tied to user and app version for targeted and staged notifications.
GET /api/v1/configReturns remote configuration for the requesting app version — the mechanism that avoids shipping a build for a rule change.

Technical Decisions

  • Flutter over two native codebases. The workflows are shared and the team is small, so shared application code can reduce duplicated maintenance where the workflows overlap; platform integrations, device checks and releases still require separate work. Where platforms genuinely differ — payment, push, biometrics — the difference is isolated behind a platform channel rather than allowed to leak into shared code.
  • Offline-tolerant, not offline-first. Reads are cached and writes are queued in an outbox, but the server stays authoritative. Full offline-first with conflict resolution costs considerably more and is only worth it when users genuinely work disconnected for long periods.
  • Client-generated UUIDs as idempotency keys. Mobile networks time out mid-request routinely. Without this, timeout retries can create duplicate-order risk that must be tested.
  • API versioned from the first release. Users postpone updates, so the server must keep serving old builds. Retrofitting versioning after launch is far more expensive than starting with it.
  • Remote config for business rules. Client releases depend on platform review and user adoption. Supported thresholds, copy and feature flags may be managed server-side where platform rules allow; changes requiring a new app build retain that dependency.

Hypothetical Design Targets

The figures below are hypothetical capacity-planning examples, not measured client results, a validated sizing recommendation or an SLA. Set project-specific acceptance targets after defining the workload, devices, data, hardware and third-party dependencies; verify them through a pilot and load tests before committing to a production target.

Capacity and performance targets

TargetValue and assumption
Cold start to first meaningful screenUnder 2 seconds on a mid-range Android device, assuming cached data renders while the network refresh runs behind it.
Incremental syncDelta payload under 200 KB for a typical returning user, with page size capped so a long-absent user degrades gracefully rather than timing out.
API latencyp95 under 300 ms for standard reads, excluding third-party calls whose latency we do not control.
Push deliveryDefine and measure application enqueue and provider-acknowledgement timing. Final delivery timing belongs to the platform and is not guaranteed by this reference.

What Delivery Includes

  • Flutter app source, Go backend source and Vue admin source in your repository
  • Build and signing configuration for both platforms, plus store listing preparation
  • API documentation, database schema and migration history
  • Deployment notes, monitoring and log access, backup and restore procedure
  • App Store and Google Play submission support; review outcome and timing remain with Apple and Google

Planning This for Your Business

The modules above are a starting point, not a fixed package. We normally cut the first release to one core workflow plus one admin workflow, then extend once real usage shows where the load and the edge cases actually are. Send a scoped brief and we will map it against this architecture and tell you which parts you do not need yet.

Application Images

Flutter MVP for a Solo Founder Service Startup

Request a Project Estimate

Tell us about the product goal, current workflow, target platform, constraints and decision timeline. We will review the scope and recommend a practical next step.

Add project requirements (optional — helps us assess scope and cost)
We use these details strictly to review and respond to your project inquiry. Read our privacy notice. Please do not submit passwords or sensitive API keys.

Demo Solutions