Обзор#
Workora — готовый скрипт фриланс-биржи. Заказчики публикуют проекты и получают отклики или покупают готовые услуги. Деньги движутся через эскроу по этапам, у каждого участника есть кошелёк, а каждый платёж записывается в книгу с двойной записью.
Версия продукта 1.0.0, построен на Laravel 13. Включает публичный сайт, кабинет участника и админ-панель, на английском и арабском.


Требования#
| Компонент | Требуется |
|---|---|
| PHP | 8.4 или новее |
| Расширения PHP | bcmath, ctype, curl, fileinfo, gd (с WebP), intl, mbstring, openssl, pdo_mysql, tokenizer, xml, zip. sodium нужен только для подписанных обновлений. |
| База данных | MySQL 8.0+ или MariaDB 10.6+ (utf8mb4) |
| Веб-сервер | Apache, Nginx или LiteSpeed с HTTPS |
| Cron | Одно задание каждую минуту |
Node.js и Composer на сервере не нужны: пакет содержит зависимости и собранные стили.
Установка#
- Загрузите содержимое папки
1-Source/workoraна сервер. Корень сайта должен указывать на папкуpublic. - Создайте пустую базу MySQL и пользователя.
- Откройте
https://your-domain/installв браузере. Установщик проверит сервер, затем запросит базу данных, название и адрес сайта, часовой пояс и аккаунт администратора. - В конце он покажет строку cron, которую нужно добавить. Затем войдите на
/loginи откройте/admin.
Командная строка (необязательно)
php artisan app:install \
--db-name=workora --db-user=root --db-password=secret \
--app-name="My Marketplace" --app-url=https://example.com \
--admin-name="Admin" --admin-username=admin \
--admin-email=admin@example.com --admin-password="a-strong-password"
Добавьте --create-database для создания базы и --demo для тестовых данных (только для демо-сайтов).
Задание Cron#
Одно задание управляет всем: отложенная почта и уведомления, автовыплата по контрактам, истечение проектов, продление тарифов, напоминания о встречах, статистика отзывов, ночная сверка книги и резервные копии.
* * * * * cd /path/to/workora && php artisan schedule:run >> /dev/null 2>&1
Страница Состояние в админке показывает, запускался ли планировщик недавно.
Первые шаги#
- Настройки → Общие: название сайта, текстовый логотип, базовая валюта (выберите до запуска), почта для связи, часовой пояс, страна по умолчанию.
- Внешний вид: тема, цвета, логотип, иконка, ширина, блоки главной, уведомление о cookie.
- Языки: включите языки, выберите основной и проверьте переводы.
- Платежи: включите шлюзы и задайте комиссию, депозит и правила вывода.
- Почта: настройте SMTP и отправьте тестовое письмо.
- Контент: отредактируйте страницы, FAQ, блог и отзывы.
- Категории: подгоните 14 категорий и 125 подкатегорий под свою нишу.


Платежи#
Включайте способы в Настройки → Платежи. Каждый показывает адрес webhook, который нужно зарегистрировать у провайдера.
| Способ | Примечания |
|---|---|
| Stripe | Карты. Секретный ключ и секрет подписи webhook. Адрес: /webhooks/stripe |
| PayPal | Песочница или боевой режим; client ID, секрет и ID webhook. Адрес: /webhooks/paypal |
| Paystack, Razorpay, Flutterwave | Ключи и секреты webhook; адреса вида /webhooks/{gateway} |
| Банковский перевод | Ваши реквизиты; участники загружают подтверждение, команда его одобряет |
У пополнений есть минимум и максимум. Вывод — через PayPal или банковские реквизиты, с минимумом, необязательной комиссией, необязательным сроком удержания и лимитом открытых заявок.
Электронная почта#
Настройте Настройки → Почта на SMTP-сервер и отправьте тестовое письмо. До этого письма пишутся в журнал. Уведомления отложены и доставляются через cron за минуту. Участники выбирают, какие категории получать, в настройках уведомлений.
Оформление и темы#
Админка → Внешний вид управляет всем видом без кода: одна из восьми тем, основной и акцентный цвета, оттенок серого, скругления, шрифт, тени, стиль шапки и боковой панели, режим цвета (светлый, тёмный, авто). Загрузите логотип (с тёмным вариантом) и иконку.
Макет: стандартная, широкая или полная ширина и плотность карточек. Главная: включайте блоки (лента категорий, цифры, почему мы, лучшие фрилансеры, проекты, отзывы, баннеры), задайте число рядов категорий и режим: прокрутка или сетка. Участники выбирают режим цвета, а при вашем разрешении и тему.


Языки и RTL#
Языки показывает включённые языки. Добавьте язык из шаблона или по коду, укажите направление и флаг, затем откройте Перевод, чтобы править каждый текст в таблице с поиском, импортировать и экспортировать JSON и видеть непереведённое. Категории, навыки, страницы, блог и FAQ переводятся в редакторе каждого элемента.
Для RTL-языков интерфейс переключается целиком. У каждого языка свой индексируемый адрес (?lang=ru) с ссылками hreflang и многоязычной картой сайта.
Как движутся деньги#
- Заказчик финансирует этап из кошелька, и деньги уходят в эскроу.
- Фрилансер сдаёт работу; заказчик принимает (платёж выплачивается за вычетом комиссии), просит доработки или открывает спор. Если заказчик ничего не делает, платёж выплачивается автоматически через заданное число дней.
- Каждое движение — сбалансированная запись в книге с двойной записью. Ночное задание доказывает, что кошельки, эскроу и доход сходятся.
Комиссия
Задайте процент платформы в Настройки → Платежи, необязательную минимальную комиссию с платежа, другой процент для любой категории и сниженный для любого тарифа. Приоритет: тариф, затем категория, затем по умолчанию. Контракт сохраняет ставку на момент создания.
Участники и модерация#
Роли команды (админ, модератор, финансы, поддержка) ограничены нужными правами; аккаунты команды требуют двухфакторной защиты. В разделе Пользователи можно искать, приостанавливать, блокировать участников и назначать роли. Проекты и услуги можно проверять до публикации; у отзывов и жалоб свои очереди; команда решает споры с записанным комментарием.
Контент и SEO#
Управляйте страницами, блогом, FAQ и отзывами в разделе Контент, всё переводимо. Workora создаёт карту сайта с языковыми версиями, теги canonical, Open Graph, структурированные данные для услуг и правила robots. Публичные страницы быстрые и подходят для кэширования.
Тарифы, Connects и лимиты#
Три независимых способа зарабатывать и регулировать активность; используйте любой или все:
- Connects: отклики стоят кредиты. Задайте цену отклика, бесплатные кредиты, размер и цену пакета.
- Тарифы: месячные подписки, дающие Connects, снижающие комиссию и меняющие лимиты.
- Лимиты (Настройки → Лимиты и тарифы): включайте любые из откликов в день, неделю или месяц, числа услуг, работ в портфолио и активных контрактов. Участники без тарифа получают бесплатные значения; у каждого тарифа свои (0 = без лимита).
Участники видят расход на странице тарифов и получают уведомление при достижении лимита.


Профили, портфолио и верификация#
Фрилансеры укрепляют доверие заголовком, навыками, почасовой ставкой, ссылками, опытом, образованием, сертификатами и языками (вкладка Резюме), портфолио, которое редактируют, скрывают, выделяют и сортируют, и резюме для печати по адресу /u/username/resume. Шкала силы профиля показывает, чего не хватает.
Верификация: почта, фото профиля и личность (паспорт, ID-карта или права). Документы перекодируются и хранятся на закрытом диске; видит их только команда в Админка → Верификации, где одобряет или отклоняет с причиной. Проверка телефона отмечена «скоро». Можно потребовать подтверждённую личность перед первым выводом.


Сообщения и встречи#
В мессенджере есть список диалогов, чат и боковая панель с человеком, проектом, заказами, контрактами, встречами и общими файлами, каждый элемент ведёт на свою страницу. Сообщения приходят вживую, видны отметки о прочтении, поддерживаются вложения. До контракта адреса почты, номера телефонов и ссылки скрываются, защищая вашу комиссию (можно изменить).
Встречи: любая сторона может назначить встречу: выберите время (каждый видит его в своём часовом поясе), длительность и ссылку Zoom, Google Meet, Teams, Webex, Jitsi, Whereby или Skype (или создайте бесплатную комнату Jitsi). Приглашение появляется карточкой с кнопками принять, отклонить, добавить в календарь (ics) и «Присоединиться», активной за 15 минут до начала. Обе стороны получают напоминание. В Настройки → Сообщения и файлы можно отключить встречи или разрешить любые https-ссылки.


Чат поддержки#
Участники открывают Поддержку, чтобы написать вашей команде; посетители используют форму связи и получают ответ по почте. В Админка → Поддержка фильтруйте по статусу, теме, приоритету и ответственному, назначайте диалоги, пишите личные заметки, вставляйте шаблоны ответов и смотрите время первого ответа и оценки. После закрытия участник оценивает помощь.
Рефералы, купоны и уведомления#
Рефералы включены по умолчанию: пригласивший получает бонус, когда приглашённый завершает оплаченный контракт. У участников есть страница для шеринга с кнопками копирования и отправки, числом переходов и результатами; бонус, приветственный подарок и минимальный контракт задаются в Настройки → Рефералы, итоги видны в Админка → Рефералы. Купоны зачисляют сумму в кошелёк один раз на участника, с лимитами и сроком.
У уведомлений есть колокольчик и центр с фильтрами, отметкой прочитано/не прочитано и удалением. Фрилансеры настраивают оповещения о проектах по категориям и ключевым словам.
Устанавливаемое приложение (PWA)#
Сайт публикует манифест и небольшой service worker, кэширующий только собранные CSS и JavaScript и офлайн-страницу, но никогда не страницы участников. Телефоны предложат Добавить на главный экран с цветом и названием вашего бренда.
REST API#
В комплекте JSON API только для чтения. Включите его в Настройки → Общие. Участники создают токены на странице Безопасность (показываются один раз, хранится только хэш, срок действия необязателен). Отправляйте Authorization: Bearer wk_...; каждый токен ограничен 60 запросами в минуту. Суммы — целые числа в младших единицах вместе с кодом валюты.
| Маршрут | Возвращает |
|---|---|
GET /api/v1/me | Профиль владельца токена |
GET /api/v1/categories | Категории и подкатегории |
GET /api/v1/gigs и /gigs/{id} | Опубликованные услуги (фильтры q, category) |
GET /api/v1/projects и /projects/{id} | Открытые публичные проекты |
GET /api/v1/wallet, /orders, /contracts, /notifications | Данные владельца токена |
curl -H "Authorization: Bearer wk_your_token" https://your-site.example/api/v1/gigs?q=logoРезервные копии и состояние#
Ежедневная копия базы и еженедельная полная копия (с файлами) запускаются планировщиком и перечислены в разделе Состояние, откуда их можно скачать. Эта же страница проверяет PHP, расширения, права, планировщик, очередь, книгу и место на диске. Укажите путь к mysqldump в .env (BACKUP_MYSQLDUMP), если его нет в PATH.
Обновление#
- Сделайте копию базы и файлов.
- Откройте Админка → Обновления, загрузите подписанный пакет и проверьте сводку.
- Примените. Workora проверит подпись, скопирует новые файлы, выполнит миграции и очистит кэш.
.env, загрузки и настройки сохраняются.
Если на сервере нет расширения sodium, обновляйтесь вручную: загрузите новые файлы поверх старых и выполните php artisan migrate --force и php artisan optimize:clear.
Демо-данные и демо-сайт#
php artisan app:demo добавляет тестовых участников, проекты и услуги в любую установку; --full наполняет каждую подкатегорию. Для публичной демо задайте DEMO_MODE=true в .env и выполните php artisan demo:reset; cron сбрасывает её каждый час. В демо-режиме показывается баннер с тестовыми аккаунтами и входом в один клик, а опасные действия (настройки, команда, обновления, копии, реальные платежи) блокируются. Задайте DEMO_PURCHASE_URL, чтобы показать кнопку «Купить».
Чек-лист безопасности#
- Работайте только по HTTPS и держите
APP_DEBUG=false. - Держите папку приложения вне публичного корня или закройте к ней доступ.
- Команде нужно использовать двухфакторную защиту.
- Держите
.envзакрытым и храните его копию отдельно. - Используйте надёжный пароль базы и ограничьте доступ к ней сервером.
- Установите ClamAV и задайте
CLAMSCAN_PATHдля проверки каждой загрузки (необязательно). - Запускайте
composer auditпри обновлении зависимостей.
Включено: строгая CSP с nonce, лимиты чувствительных действий, закрытое хранение документов и вложений, перекодированные изображения, автотесты, пытающиеся получить данные других участников, и обновления с подписью Ed25519.
Решение проблем#
| Проблема | Решение |
|---|---|
| Пустая страница или ошибка 500 | Смотрите storage/logs/laravel.log. Проверьте, что storage и bootstrap/cache доступны для записи и PHP 8.4+. |
| "Your Composer dependencies require PHP 8.4" | Выберите PHP 8.4 для домена в панели хостинга. |
| Нет стилей | Корнем должна быть папка public с загруженной папкой build. |
| Не видны загруженные изображения | Создайте ссылку хранилища: public/storage на storage/app/public. |
| Не приходят письма | Проверьте SMTP и что cron запускается каждую минуту. |
| Загрузки отклоняются | Увеличьте upload_max_filesize и post_max_size. |
| Платежи остаются в ожидании | Проверьте, что адрес webhook зарегистрирован у шлюза и доступен. |
Поддержка и лицензия#
Workora продаётся на CodeCanyon. Поддержка и обновления следуют политике поддержки Envato: помощь с установкой и исправление ошибок, без индивидуальной разработки. Платформе, которая берёт с участников сборы, комиссии или подписки, нужна расширенная лицензия. Сторонние компоненты перечислены с их лицензиями в пакете.
Нет разделов, подходящих под запрос.