Вакансия: Разработка мобильного приложения-путеводителя
Ищу специалиста или команду для разработки приложения.
1. Концепция
Мобильное приложение (iOS и Android) в жанре «путеводитель-игра» по домам Невского проспекта. Пользователь выбирает анимированного персонажа-экскурсовода. При приближении к дому или выборе на карте персонаж рассказывает историю здания с «оживающими» историческими фото (панорамирование, зум). После рассказа - интерактивное задание (викторина с выбором ответа). За правильный ответ - цифровой купон (скидка/презент) от реального заведения в этом доме или находящегося в этом районе. Купоны сохраняются в кошельке приложения, предъявляются по QR-коду.
2. Обязательный функционал первой версии
Онбординг и выбор персонажа. Три анимированных персонажа на выбор (Rive/Spine), краткое описание.
Карта и навигация. Интерактивная карта Невского пр. Маркеры домов с индикацией статуса (доступно/пройдено). Определение геопозиции: подсветка маркера при приближении (радиус 30–50 м). Запуск рассказа по нажатию на маркер.
Экран рассказа. Анимированный персонаж с озвучкой и субтитрами. Параллельно - историческое фото с лёгкой анимацией (оживление). Кнопки: пауза, перемотка ±10 сек, скрытие субтитров.
Задание. После рассказа - викторина с 3–4 вариантами ответа. Две попытки, на третью - подсказка. При правильном ответе - кнопка «Получить купон».
Купоны и кошелёк. Генерация уникального промокода и QR-кода. Отображение: название заведения, условия, срок действия. Раздел «Мои купоны» со списком и возможностью показа QR продавцу.
Профиль. Имя/Гость, выбранный персонаж, количество пройденных домов, список купонов, настройки (громкость, субтитры, упрощённая анимация).
Админ-панель (веб). CRUD для историй (текст, фото, анимация), заданий (вопросы, ответы, подсказка), купонов (партнёр, условия, срок, лимит активаций). Просмотр статистики выдач.
3. Технические требования
Платформы: iOS 14+, Android 8+. Архитектура: клиент-серверная. Бэкенд: Node.js + Express / Firebase / Supabase. База: PostgreSQL / Firestore. Фронтенд: React Native + Expo или Flutter. Анимации: Rive / Spine. Медиа: хранение на CDN (Cloudinary и т.п.). Геолокация: только при открытии карты, без постоянного трекинга. Купоны: генерация uuid+QR (библиотека qrcode), проверка лимитов на бэкенде. Безопасность: HTTPS, bcrypt для паролей (если появятся), rate limiting. Аналитика: Firebase Analytics / Яндекс.Метрика.
4. Дизайн и UX
Стиль - уютный, «петербургский», тёплые тона (кирпичный, тёмно-синий, латунь). Экраны: онбординг, карта, рассказ, задание, купон, профиль. Вертикальная ориентация. Кнопки от 48 dp, высокий контраст, обязательные субтитры. Референсы: IZI.TRAVEL (карта+аудио) + Duolingo (игровые карточки).
5. Контент первой версии (предоставляет заказчик)
Для домов: тексты историй (1–3 мин чтения), 2–3 исторических фото/картины на дом, одно задание (вопрос + 4 варианта), список партнёров с условиями купонов и логотипами.
Разработчик оптимизирует контент, загружает на CDN, настраивает связи в админ-панели.
6. Сроки и этапы (ориентир)
Проектирование и дизайн (Figma) - 2 нед. Прототип на 1 дом + карта + купон — 4 нед. Основная разработка (Must have + админка) - 6–8 нед. Интеграция контента - 1 нед. Тестирование - 2 нед. Деплой и публикация - 1 нед. Итого: 4–5 мес (команда 2–3 разработчика + дизайнер + PM). При вайб-кодинге одним разработчиком - 2–3 мес до MVP.
7. Что НЕ входит в первую версию
Регистрация/авторизация, синхронизация между устройствами, AR, полноценный офлайн, своя CRM для партнёров.
8. Критерии приёмки
Пользователь может пройти полный цикл: выбор персонажа → карта → дом №1 → рассказ → задание → получение QR-кода купона. Купон появляется в кошельке и сканируется. Администратор через веб-панель меняет задание без пересборки. Приложение стабильно на 5 тестовых устройствах (2 iOS + 3 Android). Время ответа API для получения купона ≤3 сек в 4G.
9. Основные риски
Нежелание партнёров. Решение: бесплатное размещение на 3 месяца + доступ к аналитике выдач.
Тормоза анимации. Решение: Rive вместо Lottie + настройка «Упрощённая анимация» в профиле.
Неточная геолокация. Решение: ручная кнопка «Я на месте» на экране рассказа.