Кейс 01 из 12 · Веб-приложение

Маркетплейс для строительства

Двусторонняя платформа: заказчик публикует строительный заказ, компании предлагают цену и срок, а сделка идёт по шагам до приёмки работы. Два кабинета, обновления в реальном времени, файлы и уведомления.

Результат
Платформа заказов, торгов и приёмки работ
Срок
4 месяца разработки
Стоимость
≈ $26 500
Технологии и каналы
  • Next.js
  • NestJS
  • PostgreSQL
  • WebSocket
Содержание07

01О проекте

Название заказчика и данные проекта закрыты соглашением о неразглашении, поэтому здесь — только устройство платформы. Публичная демо-версия на тестовых данных собрана из того же кода, что и рабочая система.

02Задача

До платформы заказчик и строительная компания договаривались в переписке и по телефону. Условия сделки терялись в чатах, чертежи и сметы расходились по разным перепискам, а на вопрос «на каком этапе работа» ни у одной стороны не было точного ответа.

Нужна была система, где у сделки есть явные шаги, каждый шаг подтверждают обе стороны и ни один нельзя пропустить.

03Что сделали

  • Два кабинета в одном приложении: заказчик ведёт свои заказы, строительная компания видит ленту доступных заказов, свои предложения и сдачу работ.
  • Форма заказа с категорией, типом объекта, площадью, адресом, бюджетом, желаемой датой начала и файлами: чертежи и планы прикладываются сразу, чтобы компания считала цену по документам, а не по описанию словами.
  • Предложения с ценой и сроком: заказчик видит их рядом и выбирает одно. Цена и срок сделки берутся из принятого предложения, остальные автоматически переходят в «не выбрано».
  • Сдача работы файлами с обязательным комментарием, приёмка заказчиком и возврат на доработку с новым кругом сдачи. История всех кругов сохраняется.
  • Обновления в реальном времени: действие одной стороны появляется у другой без перезагрузки страницы.
  • Уведомления по каждому событию сделки со счётчиком непрочитанных.
  • Каталог подрядчиков с числом завершённых заказов и раздел «Документы» со всеми файлами по всем заказам.
  • Приватное файловое хранилище: ссылка на скачивание живёт пять минут и выдаётся только тому, у кого есть право на этот файл.
  • Тёмная и светлая темы, адаптив от телефона до большого экрана.

04Как устроена сделка

Статус заказа нельзя переставить вручную. Все допустимые переходы описаны одной таблицей, и любое действие вне её отклоняется с понятным объяснением. Статус, предложения и уведомления меняются одной транзакцией, поэтому состояние сделки не может разъехаться между экранами двух сторон.

  1. Поиск исполнителя — заказ опубликован, предложений пока нет.
  2. Ожидает подтверждения — пришло хотя бы одно предложение, заказчик выбирает.
  3. В работе — предложение принято, цена и срок зафиксированы.
  4. Ожидание подтверждения выполнения — компания сдала работу с файлами и комментарием.
  5. На доработке — заказчик вернул работу, компания готовит следующий круг сдачи.
  6. Завершён — заказчик принял работу.

05Что видит посторонняя компания

Приватность здесь не оговорка, а правило, заложенное в саму выдачу данных. Компания, которая не участвует в сделке, видит заказ как «ищет исполнителя», в каком бы состоянии он ни был на самом деле. Ей не видны ни цена сделки, ни чужие предложения, ни контакты заказчика.

Правило действует одинаково в трёх местах: в ответе сервера, в адресации событий реального времени и в доступе к файлам.

06Технологии

Next.js и React на стороне интерфейса, NestJS и PostgreSQL на стороне сервера, весь проект на TypeScript. Обновления в реальном времени идут по WebSocket, авторизация и файловое хранилище — на Supabase.

Общие правила сделки вынесены в отдельный пакет и подключены с обеих сторон, поэтому кнопка на экране и проверка на сервере считаются одной и той же функцией и не могут разойтись.

07Сроки и стоимость

Четыре месяца разработки, после них — приёмочное тестирование на стороне заказчика. Стоимость проекта — около $26 500.

Нужен похожий проект?

Расскажите о задаче — смету и сроки дадим после короткого брифа на 15 минут.

Обсудить похожий проект