Побудував SEO-маркетплейс на Laravel 13
Я побудував SEO-маркетплейс на Laravel 13 і відкрив core під MIT

Передісторія
Все почалося з простої задачі: потрібна була платформа для продажу посилань між вебмайстрами і SEO-клієнтами. Подивився на ринок — або дорогі SaaS з купою непотрібного, або немає нічого готового для self-hosted. Вирішив зробити своє.
За кілька місяців розробки отримав повноцінну production-ready платформу. Сьогодні вона живе на seolinkplace.com, і я відкрив її core під MIT ліцензією.
Що це таке
SEOLinkPlace — B2B маркетплейс для розміщення SEO-посилань. Три ролі: клієнти (покупці посилань), вебмайстри (власники сайтів), performers (виконавці завдань). Один акаунт може мати кілька ролей одночасно.
Основні фічі повної версії:
- Кампанії з daily charge (ідемпотентний білінг)
- Перевірка посилань через Go мікросервіс і Redis чергу
- WordPress плагін для автоматичного трекінгу посилань
- Onclick/PPC білінг
- Виплати через USDT TRC20, Cryptomus, NOWPayments
- Реферальна програма з комісіями
- Система завдань з auto-approve
- Повна GDPR відповідність
- Мультимовний інтерфейс (11 мов: uk, en, de, es, pl, pt, tr, sv, kk, ko, zh)
Архітектура: модульний моноліт
Ключове архітектурне рішення — модульний моноліт на базі nwidart/laravel-modules.
Modules/ ├── Core/ — auth, ролі, профілі, admin panel ├── Auth/ — login, OAuth, вибір ролі ├── Sites/ — реєстр сайтів, верифікація ├── Blog/ — публічний блог ├── Support/ — тікети підтримки ├── Campaigns/ — кампанії, щоденний білінг ├── Wallet/ — гаманці, транзакції ├── Billing/ — платіжні шлюзи ├── Articles/ — замовлення статей ├── Parser/ — Go мікросервіс ├── Affiliate/ — реферальна система ├── Tasks/ — завдання для performers └── Links/ — трекінг посилань
Кожен модуль самодостатній: моделі, контролери, Filament ресурси, роути, міграції, observers, jobs, mail класи — все в одному місці. app/ містить лише системні файли.
Чому не мікросервіси?
Для SaaS такого масштабу мікросервіси — це overhead без реальної користі. Модульний моноліт дає:
- Простий деплоймент (один VPS)
- Транзакції між модулями без distributed transaction hell
- Легкий рефакторинг
- 65 тестів запускаються за 15 секунд
Єдина auth система
Замість окремих guards для кожної ролі — один UnifiedUser з pivot таблицею ролей:
// Один юзер — кілька ролей
$user->hasRole('client'); // true
$user->hasRole('webmaster'); // true
$user->hasRole('performer'); // false
Це спростило всю логіку middleware і дало можливість перемикати кабінети без окремих акаунтів.
Filament 5 для адмінки
Весь admin panel — Filament 5. Кожен модуль реєструє свої ресурси через discoverResources(). Zero boilerplate для CRUD операцій.
Стек
| Шар | Технологія |
|---|---|
| Backend | Laravel 13.1, PHP 8.3 |
| Архітектура | Modular monolith (nwidart/laravel-modules) |
| Admin panel | Filament 5 |
| Database | MariaDB 11.4 (80 таблиць) |
| Cache / Sessions / Queue | Redis |
| Parser | Go мікросервіс |
| Frontend | Tailwind CSS v4, Alpine.js |
| Tests | Pest 4 (65 тестів) |
Що цікавого в коді
Ідемпотентний daily billing:
$links = CampaignLink::where('status', 'active')
->where(function ($q) use ($today) {
$q->whereNull('last_charged_at')
->orWhereDate('last_charged_at', '<', $today);
})
->get();
last_charged_at — простий але надійний спосіб уникнути подвійного списання навіть якщо cron запустився двічі.
Централізована логіка комісій: Всі комісії (withdrawal, deposit fee, affiliate) через один CommissionHelper з підтримкою per-client overrides. Версіонована через valid_from в commission_settings — зміна ставки не ламає старі записи.
Observer-driven cache invalidation: Замість ручного скидання кешу — observers на Sites, Campaigns, Settings автоматично інвалідують потрібний кеш при змінах моделей.
Go мікросервіс для парсингу: Перевірка посилань виконується асинхронно через Go сервіс і Redis чергу. Laravel лише ставить job в чергу і читає результат — вся важка робота поза PHP процесом.
Open Core модель
Я відкрив базове ядро під MIT:
Community Edition (безкоштовно):
- Core — auth, ролі, admin panel
- Auth — login, Google OAuth, вибір ролі
- Sites — реєстр сайтів і верифікація
- Blog — публічний блог
- Support — тікети підтримки
Enterprise Edition:
- Campaigns, Wallet, Billing — фінансова частина
- Parser — Go мікросервіс для перевірки посилань
- Articles, Tasks, Affiliate — бізнес логіка
Ідея проста: Community Edition дозволяє розгорнути базову платформу, розібратися з архітектурою і за потреби додати комерційні модулі.
Що далі
- Feature тести для HTTP endpoints
- WordPress плагін як окремий open source репо
- Enterprise Edition документація і ціноутворення
Посилання
- GitHub: github.com/seolinkplace/community
- Live: seolinkplace.com
Буду радий питанням і фідбеку в коментарях.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів