Веб-приложение · Баку
Маркетплейс для строительства
Двусторонняя платформа: заказчик публикует строительный заказ, компании предлагают цену и срок, сделка идёт по шагам до приёмки работы. Два кабинета, обновления в реальном времени, файлы и уведомления. Открытое демо со входом в один клик.
01О проекте
Заказчик - компания из Баку. Название и данные закрыты соглашением о неразглашении, поэтому здесь мы показываем публичную демо-версию платформы на тестовых данных. Она собрана из того же кода, что и рабочая система, и в неё можно войти прямо сейчас, не регистрируясь.
02Задача
До платформы заказчик и строительная компания договаривались в переписке и по телефону. Условия сделки терялись в чатах, чертежи и сметы расходились по разным перепискам, а на вопрос «на каком этапе работа» ни у одной стороны не было точного ответа. Нужна была система, где у сделки есть явные шаги, каждый шаг подтверждается обеими сторонами, и ни один из них нельзя пропустить.
03Что сделали
- Два кабинета в одном приложении: заказчик ведёт свои заказы, строительная компания видит ленту доступных заказов, свои предложения и сдачу работ.
- Форма заказа с категорией, типом объекта, площадью, адресом, бюджетом, желаемой датой начала и файлами: чертежи и планы прикладываются сразу, чтобы компания считала цену по документам, а не по описанию словами.
- Предложения с ценой и сроком: заказчик видит их рядом друг с другом и выбирает одно. Цена и срок сделки берутся из принятого предложения, остальные предложения автоматически переходят в «не выбрано».
- Сдача работы файлами с обязательным комментарием, приёмка заказчиком и возврат на доработку с новым кругом сдачи. История всех кругов сохраняется.
- Обновления в реальном времени: действие одной стороны появляется у другой без перезагрузки страницы.
- Уведомления по каждому событию сделки со счётчиком непрочитанных.
- Каталог подрядчиков с числом завершённых заказов и отдельный раздел «Документы» со всеми файлами по всем заказам.
- Приватное файловое хранилище: ссылка на скачивание живёт пять минут и выдаётся только тому, у кого есть право на этот файл.
- Тёмная и светлая темы, адаптив от телефона до большого экрана.
04Как устроена сделка
Статус заказа нельзя переставить вручную. Все допустимые переходы описаны одной таблицей, и любое действие вне её отклоняется с понятным объяснением. Статус, предложения и уведомления меняются одной транзакцией, поэтому состояние сделки не может разъехаться между экранами двух сторон.
- Поиск исполнителя - заказ опубликован, предложений пока нет.
- Ожидает подтверждения - пришло хотя бы одно предложение, заказчик выбирает.
- В работе - предложение принято, цена и срок зафиксированы.
- Ожидание подтверждения выполнения - компания сдала работу с файлами и комментарием.
- На доработке - заказчик вернул работу, компания готовит следующий круг сдачи.
- Завершён - заказчик принял работу.
05Что видит посторонняя компания
Приватность здесь не оговорка, а правило, заложенное в саму выдачу данных. Компания, которая не участвует в сделке, видит заказ как «ищет исполнителя», в каком бы состоянии он ни был на самом деле. Ей не видны ни цена сделки, ни чужие предложения, ни контакты заказчика. Правило действует одинаково в трёх местах: в ответе сервера, в адресации событий реального времени и в доступе к файлам.
06Технологии
Next.js и React на стороне интерфейса, NestJS и PostgreSQL на стороне сервера, весь проект на TypeScript. Обновления в реальном времени идут по WebSocket, авторизация и файловое хранилище - на Supabase. Общие правила сделки вынесены в отдельный пакет и подключены с обеих сторон, поэтому кнопка на экране и проверка на сервере считаются одной и той же функцией и не могут разойтись.
07Сроки и стоимость
Четыре месяца разработки, после них приёмочное тестирование на стороне заказчика. Стоимость проекта - 45 000 манатов.
08Демо
Демо-версия открыта, регистрация не нужна: на странице входа есть готовые учётные записи заказчика и двух строительных компаний, кнопка рядом с аккаунтом входит сразу. Чтобы увидеть обновления в реальном времени, откройте заказчика и компанию в разных браузерах: действие одной стороны появляется у другой без перезагрузки. Демо-сервер засыпает без обращений, поэтому первый вход может занять около минуты, дальше всё работает с обычной скоростью.
Технологии