Предложение по разработке
План создания MVP: объём, технологии, сроки
Сегодня perernidad.es — это контентная витрина: сильный бренд, ~30 SEO-гайдов для семей (цены по 15 городам, юридические инструкции, интерактивная шкала качества жизни HHHHHMM) и форма предзаписи поставщиков. Позиционирование уже сформулировано и полностью совпадает с идеей маркетплейса: «независимый технологический посредник — показываем реальные варианты в вашей зоне с ясными ценами, решение принимаете вы».
Чего на сайте пока нет — транзакционной части: поиска по почтовому индексу, реальных прайсов конкретных поставщиков, заказа, оплаты и связи «семья ↔ исполнитель». Именно её мы и строим.
| Роль | Кто это | Что делает в системе |
|---|---|---|
| Семья (клиент) | Владелец питомца | Проходит визард, выбирает поставщика по цене, оплачивает, общается в WhatsApp-чате |
| Поставщик эвтаназии | Ветеринар с выездом на дом (autónomo или клиника) | Получает заказы; имеет свой список партнёров-крематориев и предлагает кремацию клиенту на выезде — за процент |
| Поставщик кремации | Крематорий | Получает заказы напрямую с сайта или через ветеринаров-партнёров |
| Площадка (PerErnidad) | Администратор сервиса | Ведёт базу поставщиков, зоны, цены и комиссии; участвует в каждом чате; управляет заказами |
Результат — список поставщиков с конкретными ценами, отсортированный по цене. Показываются только те, у кого индекс клиента есть в зоне обслуживания и задана цена для выбранной весовой категории.
После оплаты система автоматически создаёт групповой WhatsApp-чат. Площадка — участник каждого чата: видит, что услуга действительно оказана, и держит качество сервиса под контролем.
Расширение заказа в сценарии Б в MVP оформляет площадка: администратор открывает заказ, нажимает «Добавить кремацию», выбирает крематория из партнёрского списка этого ветеринара — в чат уходит ссылка на доплату, после оплаты крематорий добавляется в чат, комиссия ветеринара записывается в заказ. Автоматический выбор кнопками прямо в чате (бот) — следующий этап после MVP.
Входит в MVP
Сознательно после MVP
Нагрузка проекта скромная: 500 поставщиков по 1–2 заказа в день — это до ~1 000 заказов в сутки и единицы запросов в секунду в пике. Здесь выигрывает не «модная», а проверенная связка, на которой команда работает ежедневно: она даёт максимальную скорость разработки MVP и дешёвую поддержку. Монолитный API и одна база — осознанный выбор: микросервисы на этом масштабе только замедлили бы проект.
| Слой | Выбор | Почему |
|---|---|---|
| Фронтенд | React 18 + TypeScript, Vite, Tailwind | Единый стек для визарда и админки; наш ежедневный инструмент на админ-панелях сопоставимого масштаба |
| Бэкенд | .NET 8 (ASP.NET Core) + EF Core | Основной серверный стек команды; строгая типизация, миграции БД, LTS-поддержка Microsoft |
| База данных | PostgreSQL 16 | Надёжный выбор по умолчанию; запас по нагрузке в десятки раз |
| Инфраструктура | Docker + nginx, VPS в ЕС, CI/CD | Staging + prod окружения, автодеплой, HTTPS; данные клиентов остаются в ЕС (GDPR) |
| Шлюз с поддержкой групп (Whapi.Cloud / GREEN-API) + выделенный номер площадки | Единственный класс решений, умеющий создавать группы, — см. блок ниже. В коде — абстракция: шлюз меняется без переделки логики | |
| Платежи | Интерфейс PaymentProvider; в MVP — заглушка | Целевой провайдер — Redsys (стандарт испанских банков-эквайеров) или Stripe, плюс Bizum; подключается без переписывания кода заказа |
Официальный WhatsApp Business API (Meta) не умеет создавать групповые чаты — это ограничение самой платформы, а не нашего решения. Группы умеют только шлюзы, работающие поверх протокола WhatsApp Web (Whapi.Cloud, GREEN-API и аналоги), — их и берём для MVP, с отдельным номером площадки.
Риск: такие шлюзы формально вне правил WhatsApp, номер могут заблокировать. Митигируем: выделенный номер (не личный), малые объёмы сообщений, фолбэк на инвайт-ссылки и процедура быстрой замены номера. План Б, полностью «белый»: официальный Cloud API с индивидуальными уведомлениями каждому участнику вместо общей группы. Работоспособность шлюза проверяем спайком в первую же неделю — до того, как от него что-то зависит.
| Сущность | Что хранит |
|---|---|
| Поставщик | Название / ИП, тип услуг (эвтаназия · кремация · обе), контактное лицо, телефон WhatsApp (формат E.164, +34…), email, адрес, статус «активен» |
| Зоны обслуживания | Список почтовых индексов поставщика (испанский формат — 5 цифр) |
| Весовые категории | Справочник площадки: до 3 кг · 3–10 · 10–25 · 25–45 · свыше 45 (редактируется) |
| Прайс | Цена за: поставщик × услуга (эвтаназия на дому · кремация коллективная · кремация индивидуальная · опция «забор тела») × весовая категория |
| Партнёрские связки | Ветеринар → крематорий + процент комиссии по каждой паре |
| Заказ | Клиент (имя, WhatsApp-телефон), индекс, весовая категория, состав услуг, выбранные поставщики, цены и комиссия зафиксированы на момент покупки, статусы оплаты и выполнения |
| Чат заказа | ID WhatsApp-группы, участники, статус создания, лог доставки инвайтов |
| Журнал событий | Кто и что изменил в заказе: оплата, создание чата, расширение, комиссия, возврат — полная история каждого заказа |
| Администраторы | Учётные записи команды площадки |
Рабочий MVP — за 6 недель. Сверху закладываем запас до 2 недель (недели 7–8) на непредвиденное — внешние интеграции, правки по итогам демо; если запас не понадобится, сдаём раньше. Первое демо основного сайта и админки — в конце 3-й недели.
| Фаза | Недели | Содержание | Результат |
|---|---|---|---|
| 0 · Фундамент | 1 | Репозиторий, CI/CD, staging-домен (например app.perernidad.es), каркасы API и фронта, схема БД, UI-кит в бренде PerErnidad, спайк WhatsApp-шлюза | Пустое приложение деплоится; главный технический риск снят |
| 1 · Сайт + админка | 2–3 | Вход в админку, редактор поставщиков (контакты, зоны, цены, партнёры), справочники, публичный визард с выдачей цен | Демо №1: подбор по индексу и весу работает на реальных данных |
| 2 · Заказы + WhatsApp | 4–5 | Оформление заказа, оплата-заглушка, создание чатов ×3/×4, расширение заказа кремацией, фиксация комиссий, email-уведомления | Полный цикл всех трёх сценариев проходит насквозь |
| 3 · Запуск пилота | 6 | Статусы и журнал заказов, прогон сценариев, наполнение первыми 10–20 реальными поставщиками, прод-деплой | Демо №2 — приёмка MVP, старт пилота |
То, что показываем на первом демо: основной сайт и админка с редактором поставщиков.
| Риск / допущение | Влияние | Что делаем |
|---|---|---|
| WhatsApp-шлюз | Блокировка номера остановит создание чатов | Спайк в неделю 1; выделенный номер; фолбэк-инвайты; план Б — официальный API с 1:1-уведомлениями |
| Эквайринг Redsys | Договор с банком оформляется неделями | В MVP — заглушка; документы на эквайринг заказчик подаёт параллельно с разработкой, подключение — первый пост-MVP шаг |
| Данные поставщиков | Пустая база = нечего показывать в выдаче | Зоны и прайсы первых 10–20 поставщиков нужны от заказчика к неделе 5; источник — заявки с формы лендинга |
| GDPR | Персональные данные семей и поставщиков | Хостинг в ЕС, минимум собираемых данных, согласия в формах; политика конфиденциальности на сайте уже есть |
| Номер без WhatsApp | Участника не добавить в чат | Проверка номера при заведении поставщика и при оформлении заказа, до оплаты |
| Невозможность оказать услугу | Поставщик не смог принять или выполнить заказ | Правило простое: деньги возвращаются клиенту полностью. В MVP возврат оформляет площадка вручную; с боевым эквайрингом — возврат кнопкой через платёжного провайдера |
Допущения: язык публичной части — испанский; язык админки согласуем (по умолчанию русский, каркас перевода закладываем сразу). Юридическую схему комиссионных расчётов с поставщиками (агентский договор, счета) готовит заказчик — системе для MVP достаточно учитывать комиссии в заказах.