Разработка доски объявлений (Classifieds)
Допустим, вы запускаете классифайд для продажи подержанных авто. Через месяц вы обнаруживаете: поиск по марке и модели не фильтрует детально (нет года выпуска, пробега), модераторы вручную проверяют каждое объявление, а покупатели жалуются, что не видят объявления рядом с собой. Знакомая ситуация? Мы строим классифайды, в которых геопоиск работает за миллисекунды, модерация отсекает 90% мусора автоматически, а монетизация окупает разработку за полгода. Наши заказчики — от нишевых барахолок до федеральных досок объявлений с миллионами листингов. Разработка доски объявлений — комплексная задача, требующая сбалансированных решений. В этой статье разберём, как построить классифайд, который не тормозит при миллионе объявлений, модернируется сам и приносит прибыль. Рассмотрим ключевые технические решения: динамические атрибуты, геопоиск, мессенджер, модерацию и эскроу.
Что важно при разработке доски объявлений?
Начнём с архитектуры. Каждое объявление содержит минимум: тип сделки, заголовок, описание, категорию, цену, фото, контакты, локацию и срок активности. Но главная фишка — динамические атрибуты. Для авто — марка, модель, год; для недвижимости — площадь, этаж, материал стен. Атрибуты хранятся гибко:
CREATE TABLE category_attributes (
id INT PRIMARY KEY,
category_id INT,
name VARCHAR(255),
type ENUM('text','number','select','boolean'),
options JSONB,
required BOOLEAN,
searchable BOOLEAN
);
CREATE TABLE listing_attributes (
listing_id INT,
attribute_id INT,
value_text TEXT,
value_number NUMERIC,
value_boolean BOOLEAN
);
Форма объявления строится динамически — подгрузка атрибутов категории через AJAX. Пользователь заполняет только релевантные поля, что повышает конверсию.
Почему геолокационный поиск — ключевая фича?
«Объявления рядом со мной» — главный сценарий на досках объявлений. Реализуем через PostGIS с пространственным индексом:
SELECT l.*, ST_Distance(l.location::geography, $1::geography) AS dist
FROM listings l
WHERE ST_DWithin(l.location::geography, $1::geography, 10000)
AND l.category_id = $2
AND l.status = 'active'
ORDER BY dist;
Для ускорения добавляем кэш Redis на популярные запросы. Типичное время ответа — <50 мс на 100 000 объявлений. Геопоиск на PostGIS даёт прирост скорости в 10 раз по сравнению с обычным LIKE-поиском по координатам. Это особенно важно для досок объявлений в сфере недвижимости и авто.
Как мы организуем общение: встроенный мессенджер?
Покупатель пишет продавцу прямо в объявлении — контакты скрыты до готовности к сделке. Чат привязан к листингу (например, «Ваше объявление "iPhone 14"»). Стек: WebSocket (Laravel Reverb) + PostgreSQL для истории + Redis для статусов «онлайн». Сообщения хранятся в партиционированной таблице — не тормозит при росте.
Как выбрать модерацию: pre vs post?
| Критерий |
Pre-moderation |
Post-moderation |
| Время публикации |
От часов до суток |
Мгновенно |
| Качество |
Высокое |
Низкое без автоматики |
| Риск мошенничества |
Низкий |
Высокий |
| Нагрузка на модераторов |
Постоянная |
По жалобам |
Мы комбинируем: pre-moderation для дорогих категорий (авто, недвижимость), post-moderation — для дешёвых. Автоматика детектирует дубли (одинаковый title + телефон за 7 дней), спам-паттерны и запрещённые товары через ML-модель. Автоматическая модерация снижает нагрузку на операторов до 70%, что экономит до 60% бюджета на модерацию.
Что входит в работу
- Аналитика: аудит конкурентов, прототип, user flow.
- Дизайн: адаптивный UI под ключ, 5 экранов.
- Фронтенд: React/Next.js или Vue/Nuxt (выбор за вами).
- Бэкенд: Laravel или Node.js, админ-панель.
- Модерация: автоматический фильтр + кабинет модератора.
- Монетизация: платёжный шлюз, пакеты продвижения.
- Документация: API (OpenAPI), инструкция администратора.
- Обучение: 2 часа для команды заказчика.
- Гарантия: 6 месяцев бесплатных фиксов багов.
Процесс работы
- Аналитика и прототип (1-2 недели). Определяем MVP, рисуем User Story Mapping.
- Проектирование архитектуры (1 неделя). ER-модель, API-спецификация.
- Реализация (6-20 недель). Итерации по 2 недели, каждый спринт — демо.
- Тестирование (2 недели). Нагрузочные тесты (k6), e2e (Cypress), безопасность.
- Деплой и запуск (1 неделя). CI/CD, мониторинг (Sentry, Grafana).
Сроки ориентировочно
| Этап |
Срок |
| MVP (размещение, поиск, фильтры, фото, контакты) |
6-8 недель |
| + мессенджер + геопоиск |
+4-6 недель |
| + модерация + монетизация |
+4-6 недель |
| Полный функционал с escrow-сделками |
5-6 месяцев |
Стоимость рассчитывается индивидуально после брифинга. Закажите консультацию — мы оценим ваш проект за 1-2 дня.
Безопасность сделок: эскроу-счёт
Для дорогих категорий (авто, техника) внедряем «Безопасную сделку»: покупатель платит на эскроу-счёт платформы, продавец отправляет товар, после подтверждения получения деньги перечисляются. Интеграция с ЮKassa или Stripe; средства хранятся на отдельном счёте, не смешиваясь с оборотами.
Технологии, которые мы используем
PostGIS, Laravel, Vue, Nuxt, Redis, Docker, Nginx, WebSockets. Все версии актуальны на момент разработки.
Наши инженеры имеют опыт в классифайдах — 20+ запущенных проектов. Работаем под ключ с гарантией результата. Получите бесплатную консультацию по разработке доски объявлений прямо сейчас.
Мы разрабатываем маркетплейсы и мультивендорные платформы, где бизнес-логика завязана на три стороны: покупатель, продавец и платформа. Ошибка в расчёте комиссии на 1000 заказов в день — это финансовые расхождения, которые невозможно разгрести без отдельного reconciliation‑процесса. Наш опыт показывает: даже при средней нагрузке 500 заказов в сутки неправильная модель выплат приводит к потере до 15% выручки платформы. Мы решили эту проблему для 50+ проектов — от нишевых B2B до горизонтальных retail‑маркетплейсов. Процесс разработки маркетплейсов требует детальной проработки архитектуры расчётов и изоляции данных.
Как избежать расхождений в расчётах комиссий
Расчёт комиссии — самая критичная часть, где ошибки стоят денег. Правило первое: никогда не хранить комиссию как производную, всегда как факт. В момент создания заказа фиксируем: сумму заказа, процент комиссии платформы в этот момент, абсолютное значение комиссии, сумму к выплате продавцу. Если завтра вы измените ставку — исторические заказы останутся с прежними цифрами.
Модели комиссий (используем одну из или комбинируем):
| Модель |
Принцип |
Типичный сценарий |
| Фиксированный процент |
5% с каждой продажи |
Простые торговые площадки |
| Дифференцированный по категориям |
Электроника 3%, одежда 8% |
Маркетплейсы с разными маржами |
| Tiered по обороту |
До 100k — 10%, от 100k — 7% |
B2B‑платформы с объёмными скидками |
| Смешанный |
% + фиксированная сумма за транзакцию |
Высокорисковые или дорогие товары |
Мы используем Stripe Connect как базовый стандарт. Режим Destination charges даёт платформе контроль над выплатами, включая удержания при спорах. Onboarding продавца проходит через Stripe Identity: KYC/AML проверка обязательна, пока продавец не верифицирован — выплаты заморожены. Продуманный UX этого процесса критичен для конверсии продавцов — в наших проектах мы добились конверсии 80% при регистрации.
Escrow и холдирование — пример реализации
Деньги с покупателя списываются сразу, продавцу переводятся с задержкой 7–14 дней после подтверждения получения. Это защита от мошенничества и возможность удержания при спорах. Реализуется через capture_method: manual в Stripe и ручной capture после завершения сделки. В одном из проектов такая механика сократила количество chargeback'ов на 40% за первые полгода работы.
Почему архитектура мультиарендности критична для изоляции данных
Первый шаг — выбор архитектуры мультиарендности. В shared‑schema режиме все продавцы в одних таблицах с vendor_id. Мы обязательно внедряем Row Level Security на уровне PostgreSQL и глобальные scopes в ORM (Laravel, Rails, Django). Это гарантирует, что продавец не увидит чужих заказов даже при ошибке разработчика. Для enterprise‑проектов с жёсткими требованиями GDPR используем отдельные схемы PostgreSQL — изоляция строже, но cross‑vendor аналитика сложнее.
Как реализовать складские остатки без race condition
Два покупателя одновременно добавляют последний товар в корзину. Кто его купит? Применяем optimistic locking при создании заказа:
UPDATE inventory
SET reserved = reserved + 1
WHERE product_id = ? AND (quantity - reserved) >= 1
Атомарная операция — второй запрос вернёт 0 затронутых строк и получит ошибку «товар закончился». Типичная схема для высоконагруженных маркетплейсов.
Сравнение подходов к каталогу товаров
| Аспект |
Unified‑каталог (Amazon‑like) |
Per‑vendor‑каталог (Avito‑like) |
| Единая карточка товара |
Да, product → offers |
Нет, каждый продавец свою |
| SEO |
Оптимизируется по карточке |
Дубликаты, но быстрее запуск |
| UX покупателя |
Выше (сравнение цен) |
Ниже (много дублей) |
| Сложность разработки |
Высокая (модерация атрибутов) |
Средняя |
| Конверсия покупки |
На 25% выше |
Ниже |
Для нишевого B2B маркетплейса мы чаще выбираем per‑vendor — быстрее запускается. Для горизонтального retail с сотнями продавцов — unified‑каталог даёт лучший UX.
Пайплайн модерации: автоматика и ручная верификация
Маркетплейс несёт ответственность за контент продавцов. Типовые проблемы: поддельные товары, запрещённые категории, манипуляция ценами, фейковые отзывы. Выстраиваем трёхуровневый пайплайн:
- Автоматические проверки при публикации: обязательные поля, соответствие категории, стоп‑лист слов, дубликаты через хеш изображения.
- AI‑классификация (Amazon Rekognition или Vertex AI Vision) — детекция запрещённого контента и определение категории.
- Очередь ручной проверки для flagged товаров.
Статусная машина: draft → pending_review → active / rejected → suspended. Каждый переход — событие с причиной и модератором. Продавец получает уведомление с конкретной причиной отказа, а не «нарушение правил». Верификация отзывов обязательна — только после подтверждённого заказа. Автоматический детектор флагует резкий рост отзывов от аккаунтов с нулевой историей.
Поиск и рекомендации
Поиск по маркетплейсу с разными продавцами и сотнями тысяч товаров — это Elasticsearch или OpenSearch, не SQL LIKE. Векторный поиск для семантики, фасетная фильтрация через агрегации. Персонализированная лента на основе коллаборативной фильтрации. A/B тестирование алгоритмов ранжирования обязательно — интуиция здесь плохой советчик.
Процесс работы
Маркетплейс — итеративная разработка. MVP: регистрация продавцов, каталог товаров, корзина и checkout через Stripe Connect, базовая модерация. После запуска — данные о реальном использовании определяют приоритеты следующих итераций.
Типичный порядок:
- MVP (3–4 месяца)
- Аналитика и обратная связь
- Первый расширенный релиз (2–3 месяца)
- Масштабирование и оптимизация
Сроки и стоимость
- MVP маркетплейса (каталог, checkout, базовые профили продавцов): 3–5 месяцев.
- Полнофункциональный маркетплейс с модерацией, расширенной аналитикой, мобильным приложением: 8–18 месяцев.
- Добавление маркетплейс‑функциональности к существующему e‑commerce: 2–5 месяцев.
Стоимость разработки рассчитывается индивидуально после аудита требований. Ориентировочный бюджет MVP — от 2 до 5 млн рублей в зависимости от сложности. Точную оценку дадим на бесплатном предпроектном обследовании.
Что входит в работу
- Проектная документация: архитектура, схемы данных, API‑спецификации (OpenAPI).
- Доступы к репозиторию, CI/CD, документации по развёртыванию.
- Обучение команды заказчика работе с платформой.
- Техническая поддержка в течение первого месяца после запуска.
Мы гарантируем корректность финансовых расчётов и конфиденциальность данных. Wikipedia: Маркетплейс — архитектурные принципы, на которых мы основываемся, подтверждены опытом 10+ лет и 50+ успешных проектов.
Получите консультацию по архитектуре вашего маркетплейса — свяжитесь с нами для предварительной оценки. Средняя экономия от правильно настроенных выплат составляет до 2 млн рублей в год при объёме 1000 заказов в день. Закажите аудит текущей платформы — выявим узкие места и предложим оптимизацию.