Розробка мобільного додатку для маркетплейсу
Маркетплейс — не просто інтернет-магазин з кількома продавцями. Це три паралельні додатки в одному: покупатель, продавець, адміністратор. Архітектурні рішення, прийняті на старте, визначають, наскільки складно буде додавати нового продавця через полгода.
Де маркетплейси ломаються технічно
Каталог з багатовендорними фільтрами. Стандартний UICollectionView / RecyclerView з paginated endpoint працює доки у вас не 50 продавців з перекриваючимися категоріями. Проблема: фільтр «категорія + продавець + діапазон цін + сортування» при pagination через offset дає дублі, якщо продавець додав товар між запитами сторінок. Використовуйте cursor-based pagination (after=<last_item_id>) — стабільніше при частому оновленні каталогу.
Корзина з товарами від різних продавців. Користувач додав товари від трьох продавців — при checkout потрібно либо розбити на три окремих замовлення, либо створити один складений з sub-orders. Це бізнес-рішення, але впливає на UI: розбивка за продавцями в корзині, окремі статуси доставки, можливість оплатити частково. Архітектуру корзини CartService з підтримкою VendorGroup узгоджуємо на старте.
Real-time наявність товарів. Покупатель дивиться товар, який в цей момент купили. Класика: товар додано в корзину, при checkout — out_of_stock. Хороше рішення: WebSocket-канал на детальній сторінці товара (wss://api/items/{id}/stock), який оновлює лічильник залишків. Менш дорого: polling кожні 30 секунд через Timer при активному екрані товара.
Додаток продавця
Окремий target/модуль або окремий додаток — залежить від обсягу функціональності. Якщо продавець тільки управляє товарами та дивиться замовлення — один target з role-based routing. Якщо продавцю потрібна аналітика, управління складом, чат з покупцями — окремий додаток.
Обов'язкові функції продавця:
- Додавання та редагування товарів з фотографіями (завантаження на S3/Cloudinary через pre-signed URL прямо з пристрою, без проксирування через сервер)
- Вхідні замовлення з push-сповіщеннями (
FCM/APNsз високим пріоритетом для нових замовлень) - Зміна статусу замовлення: прийнято → в обробці → відправлено → доставлено
- Звіт по продажам за період
Платежі в маркетплейсі
Найскладніше — split-payment: покупатель платить одну суму, деньги розщеплюються між продавцями та платформою. Stripe Connect, PayPal Marketplace або аналог. Stripe Connect: покупатель платить через PaymentIntent з transfer_data або application_fee_amount, деньги автоматично розподіляються по Connected Account кожного продавця. На мобілі — стандартний Stripe SDK (stripe-ios, stripe-android) для UI карточної форми.
Якщо split-payment не потрібен (платформа збирає все, потім переводить продавцям) — простіше: звичайний платіжний шлюз, розрахунки з продавцями через окрему систему виплат.
Поиск
Повнотекстовий пошук з автодополненням — не запит до SQL LIKE. Elasticsearch або Meilisearch на бекенді, мобільний клієнт робить дебаунсований запит (300–500ms) при вводі. UISearchController (iOS) / SearchView (Android) з результатами в UITableView / RecyclerView. Попередні запити — в UserDefaults / SharedPreferences, показуємо при пустому полі.
Архітектура та стек
Для маркетплейсу з двома додатками (покупатель + продавець) React Native з спільним core-пакетом — розумний вибір: переиспользование бізнес-логіки (CartService, OrderService, AuthService), окремі UI-шари для кожної ролі. Нативний Swift + Kotlin — коли потрібна специфічна продуктивність або hardware-інтеграції (NFC, сканер штрих-кода).
Паттерн: Clean Architecture з UseCases / Interactors — дозволяє тестувати бізнес-логіку незалежно від UI. На React Native: Zustand або Redux Toolkit для стану корзини та каталогу.
Процес
Discovery та проектування (ролі, флоу замовлення, платежна схема) → UI/UX для обох додатків → розробка core-модулів (каталог, корзина, замовлення, платежи) → продавчий модуль → адміністративна панель → нагрузкове тестування каталогу та checkout → публікація.
Ориентири по срокам
MVP маркетплейсу (каталог, корзина, checkout, базовое продавческое приложение): 6–10 недель. Полнофункциональная платформа з split-payment, real-time сповіщеннями, пошуком та аналітикою: 3–5 місяців. Вартість розраховується індивідуально після аналізу вимог.







