Тема
Маркетплейсы и фриланс-биржи на Laravel
Честная оценка рынка
Качественной готовой open-source фриланс-биржи на Laravel не существует. Что есть:
| Вариант | Вердикт |
|---|---|
| Скрипты с CodeCanyon (Freelancer clone и т.п.) | 🔴 Платные ($30–70), код низкого качества, дыры в безопасности, невозможно поддерживать — не брать даже как основу |
| Bagisto + Multi-Vendor (Webkul, платный) | 🟡 Только для товарных маркетплейсов; для услуг/фриланса не подходит |
| Cocorico (Symfony), Sharetribe (SaaS) | Не Laravel: Cocorico заброшен, Sharetribe — аренда SaaS |
| Своя разработка из проверенных пакетов | 🟢 Единственный рабочий путь; ~60–70% функционала закрывается готовыми пакетами |
Вывод: биржа — это своя разработка, но «свой» здесь — оркестрация готовых кирпичей. Ниже карта: подсистема → пакет.
Карта подсистем биржи → готовые пакеты
| Подсистема | Пакет | Примечание |
|---|---|---|
| Роли (заказчик/исполнитель/арбитр/админ) | spatie/laravel-permission | Стандарт |
| Балансы, холды, комиссии | bavix/laravel-wallet | Ключевой пакет: кошельки на пользователя, переводы, заморозка средств, atomic-операции |
| Статусы сделки (workflow) | spatie/laravel-model-states | Черновик → отклик принят → в работе → сдано → принято/спор — конечный автомат, а не строковое поле |
| Чат по сделке | munafio/chatify или musonza/chat | Chatify — готовый UI; musonza/chat — headless-ядро под свой UI |
| Realtime (чат, уведомления, счётчики) | laravel/reverb + laravel-echo | Reverb — first-party WebSocket-сервер, бесплатный |
| Отзывы и рейтинги | своя модель (2 таблицы) | Готовые пакеты слабые; двусторонний отзыв + агрегат рейтинга проще написать |
| Поиск исполнителей/заказов | laravel/scout + Meilisearch | Meilisearch — OSS, фасеты и опечатки из коробки |
| Уведомления | laravel-notification-channels/telegram + mail + database | Каналы комбинируются штатно |
| Модерация контента | spatie/laravel-model-status + очередь на проверку | Плюс антиспам: spatie/laravel-honeypot, rate limiting |
| Верификация (KYC-лайт) | spatie/laravel-medialibrary | Загрузка документов + статус проверки |
| Аудит действий (для споров) | spatie/laravel-activitylog | Кто что менял — база для арбитража |
| Жалобы/споры | своя модель + FreeScout для переписки поддержки | Спор = состояние сделки + тред |
| Тарифы/подписки (PRO-аккаунты) | своя модель + laravel-wallet | Cashier не подходит для РФ-платежей |
| Платежи (пополнение/безопасная сделка) | ЮKassa (в т.ч. «Безопасная сделка») → ru-specific.md | |
| Выплаты исполнителям | ЮKassa Выплаты / банковский API | Юридическая часть важнее технической |
| Админка (модерация, финансы, арбитраж) | Filament | Multi-panel: /admin + кабинеты как отдельные панели |
| API для мобильного приложения | laravel/sanctum + spatie/laravel-data + dedoc/scramble | Scramble генерирует OpenAPI-доку из кода |
Эскроу на bavix/laravel-wallet — ключевой паттерн
Классическая схема безопасной сделки без спецпакета «escrow»:
- Заказчик пополняет кошелёк (платёжный шлюз →
deposit). - При старте сделки — перевод на «кошелёк сделки» (у wallet есть мультикошельки на одну модель) либо
freezeсуммы у заказчика. - Сдача работы → подтверждение →
transferисполнителю минус комиссия (комиссия — второй transfer на системный кошелёк). - Спор → арбитр делит сумму (два transfer по решению).
- Вывод — заявка на выплату, обрабатываемая вручную/через API выплат.
Всё это atomic-операции пакета + DB::transaction(). Писать свою бухгалтерию с нуля не нужно, но тесты на каждый денежный сценарий обязательны (включая гонки — два подтверждения одновременно).
Юридические грабли (влияют на архитектуру)
- Приём денег «за другого» = агентская схема: нужен договор-оферта, комиссия — доход площадки.
- «Безопасная сделка» ЮKassa решает часть проблем (деньги у банка, не у площадки) — заложить её API в архитектуру платёжного сервиса с самого начала.
- Выплаты физлицам → самозанятость (проверка статуса НПД через API ФНС) или ГПХ. Это поле
payout_methodи проверки в домене «Исполнитель» с первого дня, а не «потом прикрутим».
Ориентировочная декомпозиция (биржа услуг, MVP)
| Блок | Готовое | Своё |
|---|---|---|
| Auth, профили, роли | Breeze/Fortify + spatie/permission | Анкеты исполнителей |
| Заказы, отклики, сделки | model-states, activitylog | Домен: правила откликов, дедлайны |
| Деньги | laravel-wallet, шлюз | Комиссии, правила холдов, вывод |
| Чат | chatify/musonza + reverb | Привязка к сделке, вложения |
| Поиск/каталог | scout + meilisearch | Ранжирование, фасеты |
| Отзывы, рейтинги | — | Своё (просто) |
| Админка/арбитраж | Filament | Экраны споров |
| Уведомления | notification-channels | Матрица событий |
Итого готовыми пакетами закрывается инфраструктурный слой (~60%), своя работа — доменная логика и UX. Это и есть главная экономия: не писать кошельки, чаты, websockets и права.