Legacy
MIG
iOS App · Fintech
Redesign and rate-reservation features for a major currency exchange app in Kazakhstan.
- iOS App
- Fintech
- UIKit
- Alamofire
- Firebase

Summary
iOS app for MIG, one of the largest currency exchange networks in Kazakhstan. I worked on the redesign and added new product features, including a reservation flow for locking a rate or reserving an amount at a selected branch. The app combines live rates, calculators, branch discovery, and content pages opened via webviews. Key highlights:
- End-to-end reservation lifecycle with status tracking and timers
- Rates + conversion calculator tied to nearest branches (list + map)
- Hybrid UI codebase modernized during feature delivery
Quick facts
- Role: iOS Developer (redesign + feature delivery)
- Timeframe: Shipped redesign + new features (including rate/amount reservation)
- Platform: iOS
- Status: Released
- Team: In-house team
Problem
- Users needed a fast way to check live exchange rates and calculate buy/sell outcomes.
- Reservation had to cover multiple modes (rate tracking, amount booking) with clear disclaimers and statuses.
- The app had a mixed UI stack (storyboards + code) and required changes without breaking existing flows.
Solution
I implemented redesigned screens and shipped the reservation subsystem: phone-based auth, service selection, branch choice, confirmation, and a status screen that reflects each request state (pending/confirmed/declined/completed) with countdown and branch details. I also improved the core rate and calculator experience and wired supporting flows like feedback after completion.
- Reservation modes: rate booking and amount booking (with/without rate binding)
Architecture
- MVC with service-based network layer (Alamofire)
- Live rates + calculator module feeding reservation inputs
- Reservation module: auth → service type → branch selection → request status
- Webview wrapper for content-heavy sections (news/analytics/info)
- Push notifications entry points into updates/reservation-related screens
- Local persistence for lightweight state (UserDefaults)
- Hybrid UI: Storyboards + UIKit/SnapKit screens as needed
Tech stack
- iOS: Swift, UIKit, SnapKit, Storyboards, Kingfisher
- Architecture: MVC
- Backend/Infra: Alamofire, ReachabilitySwift, Firebase Messaging/Analytics/Crashlytics
- Tooling: CocoaPods, GitLab
Hard problems solved
- Modeled reservation as a state machine with explicit statuses and user recovery paths (e.g., declined → reselect branch)
- Built a time-sensitive request UI (countdowns, “time left”, cancellation) that stays consistent across app sessions
- Kept reservation correctness across three booking modes with different constraints and disclaimers
- Integrated branch selection with both list and map views and ensured consistent “closest branch” behavior after calculations
- Delivered redesign changes safely in a mixed Storyboard + programmatic UI codebase
- Ensured reliable network behavior under changing connectivity using reachability-aware flows
Impact / Results
- Shipped redesign improvements and new reservation functionality without disrupting core rates usage
- Enabled users to plan visits by reserving rate/amount at a specific branch and tracking request status
- Improved the end-to-end journey: check rate → calculate → pick branch → reserve → confirm → give feedback