← Назад

Веб-приложение · Баку

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

3 мин чтения

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

01О проекте

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

02Задача

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

03Что сделали

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

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

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

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

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

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

Кабинет строительной компании в маркетплейсе MyBuild: лента доступных заказов с бюджетом заказчика, площадью объекта и датой начала работ
Кабинет компании: лента заказов с ожиданиями заказчика по бюджету и сроку.

06Технологии

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

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

Четыре месяца разработки, после них приёмочное тестирование на стороне заказчика. Стоимость проекта - 45 000 манатов.

08Демо

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

Технологии

Next.jsNestJSPostgreSQLWebSocket