Контекст
Запуск нишевого маркетплейса требовал единого профиля для покупателей и продавцов, простой регистрации без пароля и одновременного web + mobile-присутствия. Карта с гео-выдачей — обязательная часть UX.
Решение
Единая модель User с тремя способами входа: email-code, Google OAuth, Yandex OAuth. Поверх — модель магазинов 1:N, чтобы продавец вёл несколько витрин. Web-сборка проксирует API через Next.js rewrites; mobile-сборка делает static export и обращается к бэкенду по абсолютному URL через единый wrapper api(). Карта — MapLibre GL.
Стек и архитектура
- Backend: Spring Boot, Spring Data MongoDB, Spring Mail (email-OTP), Spring Security OAuth2, Spring Actuator.
- Frontend: Next.js 16 (App Router), React 19.
- Mobile: Capacitor 7 (
@capacitor/{core,ios,android,app,browser,geolocation,splash-screen}). - Гео: MapLibre GL +
react-map-gl. - Транспорт API: env-aware fetch-wrapper, dev-rewrites в
next.config.ts.
Роль и результат
Мы спроектировали unified-auth, доменную модель магазинов и сетевой слой, который одинаково работает в web и mobile. MVP включал scaffolding, регистрацию, профиль и создание магазинов — задел под расширение (items / поиск / платежи / чат).