Маркетплейс с безопасной сделкой: биржа AI-специалистов за три месяца

-

Вид услуги:

-

Технологии:

C#, ASP.NET Core 8, Blazor Server, PostgreSQL, Entity Framework Core, MediatR (CQRS)

Год:

2024

О проекте

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

Отрасль: фриланс-биржа для специалистов в области искусственного интеллекта Задача: разработать двусторонний маркетплейс с безопасной сделкой Старт: декабрь 2024 Запуск: февраль 2025 Роль Nabla Lab: проектирование, разработка, хостинг, сопровождение и развитие Права: исходный код и исключительные права переданы заказчику



Задача: биржа — это не каталог

Заказчик выводил на рынок площадку, где компании находят специалистов по искусственному интеллекту: тех, кто делает чат-ботов, обучает модели, генерирует контент, строит аналитику. Ниша молодая, специалисты разрозненные, а привычных способов проверить исполнителя до начала работы почти нет.

Из этого вырастает главная проблема любого маркетплейса — доверие. Заказчик не хочет платить вперёд человеку, которого видит впервые. Исполнитель не хочет работать без гарантии оплаты. Пока эта проблема не решена, площадка остаётся доской объявлений: люди находят друг друга и уходят договариваться в мессенджер, а биржа не зарабатывает ничего.

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


Деньги: самая сложная часть проекта

Мы вынесли работу с платежами в отдельный модуль. Внутри — не «приём оплаты», а полный жизненный цикл денег на площадке.

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

Отмена и возврат — разные вещи. Если заказ отменён до начала работы, блокировка снимается и деньги возвращаются мгновенно, без движения средств. Если работа уже оплачена, а потом возникли претензии, запускается возврат — другая процедура с другими сроками. Мы поддержали обе.

Выплаты исполнителям. Отдельный контур: привязка карты для получения денег, вывод средств, отслеживание статуса перевода. Принять деньги технически проще, чем корректно отдать.

Фискальные чеки. На каждую операцию формируется чек с составом позиций и данными покупателя. Это не опция и не «сделаем потом» — это требование закона к любой площадке, принимающей платежи от физических лиц.

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

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

Сколько это заняло. Из трёх месяцев до запуска около двух ушло на платёжный контур. Каталог, профили, заказы, отклики и чат — вся видимая часть площадки — собрались быстрее, чем один механизм, который переводит деньги от одного человека к другому и не ошибается.

Это соотношение стоит запомнить всем, кто планирует маркетплейс. Смета обычно строится по экранам, а время уходит в контур, у которого экранов почти нет.


Один человек — две роли

Обычный маркетплейс делит пользователей на два лагеря. На фриланс-бирже так не работает: копирайтер сегодня выполняет заказ, а завтра сам заказывает дизайн обложки.

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

Переключение между ролями не требует второго аккаунта, а история в обеих ролях не смешивается.


Как площадка производит доверие

Безопасная сделка закрывает риск потери денег. Остаётся риск потерять время на неподходящем исполнителе, и здесь работают другие механизмы.

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

Портфолио и документы. Исполнитель прикладывает работы с изображениями и файлами, загружает сертификаты и дипломы. Заказчик смотрит не описание, а результат.

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

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

Бонусный счёт. Пользователи получают бонусы за активность и качественную работу — механика удержания, которая на бирже работает лучше, чем скидки.


Как устроено внутри

Дальше — техническая сторона.

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

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

Удаление в системе мягкое: записи помечаются удалёнными, но не исчезают. На площадке с деньгами и спорами возможность восстановить историю дороже, чем чистая база.

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

Почтовый сервис работает отдельным проектом: подтверждение регистрации, восстановление пароля, уведомления. Хостинг и два почтовых сервера были на нашей стороне.


Три месяца до запуска

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

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


Что получил заказчик

  • Работающий маркетплейс с полным денежным контуром, а не витрину с кнопкой «написать в телеграм».
  • Модель, где площадка зарабатывает на сделке, потому что сделка проходит через неё.
  • Архитектуру, рассчитанную на рост нагрузки чтения без переписывания.
  • Исключительные права и исходный код.


Почему это важно для вас

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

Мы этот контур уже построили и знаем, где в нём подводные камни. Если вы запускаете площадку, которая должна зарабатывать на сделках, — расскажите о задаче, обсудим.

Давайте создавать вместе!

Свяжитесь с нами и мы проконсультируем по вопросам реализации IT-решений и найдем лучший подход к разработке

Контакты

Офис: г. Казань, ул. Островского, 57Б, оф. 110
Почта: info@nabla-lab.ru
Телефон: +7 (965) 595-62-78