
Magazinchik
15-minute delivery app concept with full shopping and checkout flow.
Links
Quick facts
• Role: iOS Developer (end-to-end delivery app build)
• Timeframe: Pre-production build delivered; project stopped before launch
• Platform: iOS (iPhone)
• Status: Discontinued (pre-production)
• Team: Small team with backend + design
Summary
Express grocery delivery app concept for Kazakhstan with a “~15 minutes” promise. I built the iOS client end to end: address-first onboarding, catalog + search, cart/checkout, payments (including Kaspi transfer), and order lifecycle screens. The project was stopped in pre-production, before App Store release.
Key highlights:
• Address-first flow tied to delivery availability and district detection
• Full shopping loop: browse → cart → checkout → orders → receipts
• Reactive UI updates across app state (cart, address, auth)
Problem
• Needed a fast, local-first UX: ₸ pricing, +7 phone auth, Kaspi payments, RU/KZ audience.
• Had to make “15 minutes to this address” a core product constraint across screens.
• Required resilience for real-world edge cases: out-of-stock, store hours, offline, 3DS, cancellations.
Solution
I implemented the full iOS app in UIKit with programmatic layout. The UX starts with address selection (with delivery zone checks), then supports quick cart building from lists and product details. Checkout includes multiple payment methods and a 3DS step. The order flow covers confirmation, in-progress states, cancellation, history, order details, and a receipt view. Profile includes addresses, cards, FAQ, and support.
• Built as a production-ready client, but never shipped due to project closure
Architecture
• UIKit + SnapKit UI, pragmatic MVC with lightweight ViewModels
• RxSwift/RxCocoa bindings for cart, address, auth, and network results
• Alamofire Router-based networking + typed Codable models
• Shared app state (cart, address, cached catalog) published via reactive subjects
• Yandex MapKit district selection + “find district” backend integration
• Lottie-based order-forming and empty/error states
• Reachability-driven offline handling and retry UI
Hard problems solved
• Designed an address-first lifecycle with delivery availability gating and district resolution
• Kept cart state consistent across lists, product screens, checkout, and bottom banners using reactive streams
• Modeled inventory instability: out-of-stock labeling + cart warnings + safe checkout behavior
• Implemented a time-based order forming flow with countdown + success/failure outcomes without blocking the UI
• Built a multi-payment checkout (cash, Kaspi transfer, card + 3DS screen) with clear validation and recovery
• Shipped a robust set of operational states (offline, store closed, generic retry) to avoid dead ends
Impact / Results
• Delivered a complete pre-production iOS app covering the full delivery funnel and edge cases
• Validated feasibility of a Kazakhstan-localized “fast delivery” experience (address-first, Kaspi, RU strings)
• Produced a codebase ready for backend hardening and production rollout, but project was stopped before release
Tech stack
• iOS: Swift, UIKit, SnapKit, RxSwift/RxCocoa, Kingfisher, Lottie
• Architecture: MVC + ViewModels (reactive bindings)
• Backend/Infra: Alamofire, Yandex MapKit, Firebase Analytics, ReachabilitySwift
• Tooling: CocoaPods, GitHub

