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

💡 Усі статті, обговорення, новини про продукти — в одному місці. Приєднуйтесь до Product спільноти!

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

Дашборд - SEOLinkPlace

Передісторія

Все почалося з простої задачі: потрібна була платформа для продажу посилань між вебмайстрами і 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 операцій.

Стек

ШарТехнологія
BackendLaravel 13.1, PHP 8.3
АрхітектураModular monolith (nwidart/laravel-modules)
Admin panelFilament 5
DatabaseMariaDB 11.4 (80 таблиць)
Cache / Sessions / QueueRedis
ParserGo мікросервіс
FrontendTailwind CSS v4, Alpine.js
TestsPest 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 документація і ціноутворення

Посилання

Буду радий питанням і фідбеку в коментарях.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Ctrl + Enter
Ctrl + Enter

Підписатись на коментарі