Apply Edge Start your job search

Senior Flutter Developer

SalesWorks Group · Federal Territory of Kuala Lumpur, Malaysia

Apply & track with Apply Edge
About SuperNovaSuperNova is developing a mobile-first super app that empowers Brand Ambassadors (BAs) — independent sales promoters and recruiters. The platform streamlines the entire BA lifecycle: recruitment, onboarding, sales training, product distribution, sales enablement, payments, performance monitoring as well as team and community growth.SuperNova will also support agencies (SalesWorks franchisees) with the same set of services to manage their Brand Ambassadors at scale.About the roleWe are looking for a Senior Flutter Developer to take a leading role in building the SuperNova mobile app. You will own features implementation end-to-end in our Flutter app — from local data and state management through authentication, UI, and testing.You’ll work closely with Product and UX/UI to ensure features are delivered to agreed specifications and to the highest quality, both functionally and non-functionally.The codebase is an AI-native monorepo with a local-first mobile client today and backend services planned as Architecture Decision Records (ADRs); you will work within those conventions and help evolve them as the product grows.This role suits someone who deeply understands and is opinionated about clear boundaries, offline-first UX, instant responsiveness and maintainable Dart — and who is comfortable building domain-rich flows (onboarding, training, sales, payments, team growth) in a repo designed for both human reviewers and AI-native development.Mobile app development & architectureThe ideal candidate will have experience of the following development paradigms & architectural design patterns (example implementation frameworks suggested):Developer experience (hermetic build process) — Possibly Bazel for hermetic, incremental builds and affected targets, just recipes and local development via Docker (docker compose). Feature modules with strict layer boundaries — Code is organized by product feature, not by technical layer at the top level.Local-first persistence — Isar (preferred) or Drift; the device is the source of truth. All reads and writes go to local storage first; the UI must remain usable without network access.Repository pattern — Persistence and external I/O are accessed through repositories. Presentation code talks to providers, not to Isar or HTTP clients directly. This keeps UI testable and leaves room for sync without rewriting screens.Networking — gRPC (primary for internal services and durable workflow integration) with Protocol Buffers; Dio for REST/JSON fallback or external APIs; connectivity_plus for real-time network status; background_fetch (or equivalent) for background sync and offline queuing.Minimal dependencies — We add packages only when they solve a clear, recurring problem and provide measurable value. Prefer the existing stack and well-understood tools before introducing new ones.Feature flagging with role based control — Flagsmith (or equivalent) + OpenFeature, critical for presenting the correct features based on a user’s roles and access.. Authentication and session management — Zitadel OIDC (authorization code flow, refresh tokens, biometric unlock).State and Dependency Injection — Riverpod 3.x with code generation (@riverpod + riverpod_generator). Codegen reduces boilerplate, improves type safety and AI-assisted development, and keeps providers consistent while still allowing hand-written providers where they add clarity.Performance & offline resilience — Instant local feedback, minimal widget rebuilds, Impeller-aware rendering, performance budgets, graceful offline UX, optimistic updates, and resilient session handling.Notifications - Experience implementing reliable, user-centric mobile notifications including push (FCM/APNs) and local notifications, contextual permission requests, deep linking into the correct feature, Android notification channels and iOS notification groups, actionable buttons, offline queuing with background sync, secure token lifecycle management, and graceful handling of denied permissions so the app remains consistent and responsive whether online or offline.Quality and Continuous Integration — widget tests with provider overrides, flutter analyze, Maesto for E2E/UI flows and parity with GitHub Actions via just ci.What we expect at senior levelTechnicalAI Native development. Using appropriate models with your favourite CLI and IDE not only to write code to but to interrogate product specifications, automate testing and drive productivity in all aspects of your work.Strong Dart and Flutter fundamentals — widgets, async, streams, and platform nuances (iOS/Android).Experience with offline-first or local-first mobile apps.Comfortable with OIDC/OAuth flows and secure token storage on device.Solid testing habits — testable architecture, provider overrides, meaningful widget tests.Ability to read and write ADRs and explain trade-offs clearly.CollaborationImprove developer experience (just recipes, docs, CI) when you hit friction and let others know when you discover sources of friction.Effectively manage your communication and ‘work outloud’. Respond in a timely fashion to requests for information and assistance. Be present in third-party support platforms (slack, discord, etc) and build relationships with technology vendors. Work effectively with AI coding tools — the repo is structured so agents can follow ADRs and feature-module conventions. Automate workflows with AI engagement (code review, pull requests, writing and executing tests, etc)MindsetBias toward simplicity — focus on small incremental changes; avoid over-abstraction.User-visible quality — instant local feedback, attention to detail.Forward-compatible design — repositories and providers that can absorb sync later without UI rewrites.Data-driven decisions — instrument everything so design and operational choices can be validated.Ownership of the full lifecycle — from local development through production reliability, drive your deliverables.High Agency & Self-Reliance — act independently when necessary and find ways to remove obstacles when there is no clear playbook or support. Nice to haveExperience with Zitadel or self-hosted identity providers.Isar or similar embedded databases (SQLite, Realm, Drift).Riverpod in production apps.Monorepo workflows (just, Make, Nx, etc.).Docker Compose for local dependencies.Prior work on field sales, gig/workforce, payments, or franchise/agency platforms.Experience with multi-sided products (individual contributors + managers/agencies).Familiarity with Temporal or durable workflow orchestration from the client side.