iOS Mobile App
The iOS app is built with SwiftUI and modern Swift concurrency (async/await), and is currently in active development. It is designed from the start with production standards in mind, not as a prototype.
Architecture
The app follows a modular MVVM + Clean Architecture structure, with explicit separation between:
- Presentation layer (SwiftUI views and ViewModels)
- Domain layer (use cases, business logic, models)
- Data layer (network client, repositories, caching)
Each module has a clearly defined responsibility and can be developed and tested independently. This structure is not over-engineered — it reflects the minimum necessary to keep the codebase navigable and stable as new features are added.
Networking and authentication
The networking layer integrates with the backend’s REST API and handles:
- JWT-based authentication with automatic token refresh
- Typed error handling across the request/response lifecycle
- Offline-first caching for key resources
State management
State flows through the app using SwiftUI’s native state tools combined with ViewModels, keeping the UI as a function of well-defined, testable states. Navigation is handled with modern SwiftUI navigation APIs.
Testing
The app includes unit tests for ViewModels and domain logic, and integration tests for the networking layer. The test suite covers both the expected path and failure scenarios — authentication expiry, network errors, empty states.
Status
The app is in active development. The current focus is on completing core flows (authentication, offer browsing, transaction history) in preparation for TestFlight distribution.