
MIG
Redesign and rate-reservation features for a major currency exchange app in Kazakhstan.
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
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
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
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
Tech stack
• iOS: Swift, UIKit, SnapKit, Storyboards, Kingfisher
• Architecture: MVC
• Backend/Infra: Alamofire, ReachabilitySwift, Firebase Messaging/Analytics/Crashlytics
• Tooling: CocoaPods, GitLab


