Клієнти публікують задачі, спеціалісти беруть їх у роботу
Двосторонній маркетплейс послуг: клієнти публікують замовлення, спеціалісти відгукуються, обидві сторони лишають відгуки, а просування оплачується через Stripe.
Задача
Клієнтам потрібен надійний спосіб знайти спеціаліста, спеціалістам — стабільний потік замовлень. Платформа мала будувати довіру з обох боків і заробляти без плати за вхід.
Результат
Окремі кабінети клієнта й спеціаліста, замовлення з категоріями й файлами, каталог із пошуком, взаємні рейтинги та платне просування. Інтерфейс трьома мовами.
Ключові функції
Кабінети клієнта й спеціаліста
Замовлення з файлами
Каталог і пошук спеціалістів
Взаємні відгуки й рейтинги
Платне просування (Stripe)
Завантаження медіа
Три мови
Рольовий доступ
Як це побудовано
Двосторонній маркетплейс послуг: клієнти публікують завдання, перевірені спеціалісти відповідають пропозиціями, а після роботи обидві сторони оцінюють одна одну. Ось рішення, які його сформували.
3
Ролі користувачів
4
Статуси замовлення
3
Тарифи підписки
UA·RU·EN
Мови
Дві сторони, змодельовані окремо
Клієнт і спеціаліст — не один користувач із прапорцем ролі. Спільних даних у них майже немає: у спеціаліста профіль, портфоліо, підписка й рейтинг; у клієнта — замовлення. Ми змоделювали їх окремими сутностями за єдиним рівнем сесійної авторизації.
Права лишаються однозначними: ендпоінт належить одній стороні, а не «користувачу, який може бути будь-ким». Публічний профіль теж відділено від запису акаунта — щоб рейтинг і підписка, які переписуються постійно, не чіпали рядок, від якого залежить авторизація.
Цикл маркетплейсу
Угоду несуть чотири статуси. Клієнт публікує OPEN-замовлення: категорія, місто, дедлайн, файли. Спеціалісти надсилають відгуки — пропозиції на нього. Клієнт приймає одну, переводячи замовлення в IN_PROGRESS, далі COMPLETED або CANCELLED.
Відгуки — окремі записи, а не пряме призначення, тож клієнт порівнює кількох спеціалістів, а не отримує одного призначеного.
Обидві сторони циклу, як їх пояснює сам продукт
Як знаходять потрібного спеціаліста
Пошук працює по осях «що» і «де». Замовлення й профілі привʼязані до категорії та міста, тож сантехнік зі Львова не зʼявиться в замовленні по Одесі.
Окремого пошукового рушія немає. На такому обсязі каталогу індексовані запити в PostgreSQL по категорії, місту й рейтингу швидші в розробці й дешевші в експлуатації, ніж додавання Meilisearch, — і тримають видачу узгодженою з даними. Тариф підписки враховується в ранжуванні: саме це робить платне просування вартим грошей, не даючи йому перекрити релевантність.
Пошук побудований на двох осях, що мають значення: послуга й місто
Утримати угоду на платформі
Найскладніша комерційна проблема маркетплейсу послуг — коли сторони знайомляться один раз, а далі працюють повз платформу. Контактні дані, позначені клієнтом як конфіденційні, отримує лише той спеціаліст, якого він обрав, — а не всі, хто відгукнувся. Саме це правило зберігає стимул лишатися в системі після першого повідомлення.
Репутація в обидва боки
Відгуки працюють в обох напрямках. Одностороння оцінка захищає лише покупця, але тут спеціаліст ризикує не менше — неявки, суперечки про обсяг, несплата. Видима історія з обох боків робить платформу безпечною не лише щоб купувати, а й щоб працювати.
Монетизація без плати за доступ
Опублікувати замовлення й відгукнутися — безкоштовно. Спеціалісти платять за охоплення: тарифи підписки й платне просування через Stripe. Плата за лід оподаткувала б саме ту поведінку, якої маркетплейсу треба більше.
Стан підписки веде Stripe через webhooks — ACTIVE, PAST_DUE, UNPAID, CANCELED — і перевірки доступу читають цей живий статус, тож невдалий платіж звужує охоплення, а не лишає платну функцію відкритою.
Три тарифи підписки, білінг через Stripe
Чого вимагав продакшен
Сповіщення — це події, а не виклики: кожна дія випускає подію, а обробники перетворюють її на запис у застосунку та лист, тож бізнес-логіка не вміє надсилати пошту. Скарги проходять справжню машину станів з обробкою в адмінці — без модерації маркетплейс послуг наповнюється спорами, які не може вирішити. Рейт-лімітинг, HTTP-захист, підтвердження пошти й медіа в Cloudinary були з першого деплою.
Результат
Живий маркетплейс послуг із повним циклом — опублікувати, відгукнутися, найняти, виконати, оцінити, оплатити — з монетизацією підписками, модерацією і трьома мовами, у продакшені на services-helper.com.