EngineeringHow it's built
DC Pay is a client-first, feature-modular Flutter application. Launch presents an unauthenticated welcome flow. Successful login or registration enters a persistent five-tab shell that owns the authenticated product. Each tab is a vertical: Home (portfolio, payments, wallets, addresses, notifications, history), Swap (quote, asset selection, settings), Earn (staking list and stake confirmation), Discover (campaigns, news, markets), and Browser (searchable dApp categories). Shared widgets live in a common components layer so app bars, search, inputs, and asset rows stay identical across verticals. Settings is a cross-cutting surface reachable from the shell. Authentication, wallet lifecycle, and operating features are therefore separate layers: identity, custody, then usage. A request in this product is a user intent — send, swap, stake, open a dApp — that is routed to a dedicated screen with its own state, then returned to the tab that originated it.
feature-modularcross-platformAPI-ready clientsecure authentication flowdesign-system drivenmulti-surface information architecture
Decision
Organize the product as five primary surfaces instead of a single dashboard with nested menus.
A wallet that includes payments, DEX, staking, markets, and dApps cannot keep every job on one home screen without becoming noisy.
Users always know where to go for a given job, and the product can grow a vertical without rewriting navigation.
Decision
Build a shared component library before expanding screen count.
The inventory is large: auth, portfolio, payments, swap, earn, discovery, and browser. Duplicated chrome would fracture trust.
New screens inherit the same spacing, type, and controls, which is what makes the product feel like one system.
Decision
Separate account identity from wallet custody.
Login proves who the user is; a secret phrase proves what they control. Mixing those steps confuses first-time users and raises risk.
Auth can use Firebase and social providers while wallet create/import remains an explicit custody moment.
Stack
DC Pay is a Flutter application with a feature-modular client architecture, Material 3 theming, and Firebase Authentication as the account layer. The stack is chosen so one codebase can deliver a dense fintech product on iOS, Android, web, and desktop without splitting design or engineering. Persistent tab navigation, a shared widget library, and OTP-backed recovery give the product the structure of a commercial wallet rather than a single-screen demo.
FlutterDartMaterial 3Google Fonts (Urbanist)Persistent bottom navigationFont AwesomeFirebase AuthenticationFlutter multi-platform targetsNative splash and launcher pipelineEmail OTP recoveryCredential hygieneSwap allowance controlsWallet creation and importSocial identity providersDEX venues (Uniswap and Thorchain)Pooled ETH staking (Kiln)dApp ecosystem directoryOTP input components