# Placeo — портал объявлений

Полнофункциональный портал объявлений (аналог Avito по структуре): дерево категорий, объявления с фото и картой, лента и поиск, чат, отзывы, уведомления, **встраиваемый виджет для чужих сайтов** и админка. Минималистичный дизайн в **Material Design 3** (акцент `#87C540`).

**Локально:** http://placeo.ru · **Админка:** http://placeo.ru/admin

## Стек

**PHP 8.3 / Laravel 13 · MySQL 8.4 · Apache+mod_php (Laragon) · Blade + Alpine.js + Tailwind v4 · Filament 5 (админка) · Leaflet/OSM · Sanctum (виджет).**
Подробнее — [docs/architecture.md](docs/architecture.md).

## Быстрый старт

```bash
composer install && npm install
php artisan storage:link
php artisan migrate:fresh --seed
php artisan placeo:import-categories --fresh
php artisan db:seed --class=CategoryAttributeSeeder
php artisan db:seed --class=AdSeeder
npm run build
```
Фоновые процессы: `php artisan queue:work` и `php artisan schedule:work`.
Полная инструкция, домен, учётки и ключи — [docs/setup.md](docs/setup.md).

## Возможности

- **Каталог**: 1133 категории (импорт из Avito sitemap), 3 вида листинга (плитки/список/карта), фильтры, поиск, персонализированная лента.
- **Объявления**: подача с каскадом категорий, ценой «от», характеристиками, картой и до 30 фото (сжатие в WebP), модерация DeepSeek, карточка с телефоном по клику и жалобами.
- **Пользователи**: вход по номеру телефона (обратный flash call), а также e-mail и Яндекс OAuth; профиль, рейтинг и отзывы.
- **Социальное**: избранное, подписки на продавцов, чат (polling) + поддержка площадки, уведомления (снижение цены, пакеты новых объявлений за 2ч, новости).
- **Виджет для бизнеса**: встройка на любой сайт без iframe, с изоляцией стилей, авторизацией и подачей прямо из виджета.
- **Telegram мини-приложения**: доска объявлений внутри Telegram-группы по ссылке, авторизация по Telegram + номеру, подача прямо в мессенджере (см. [docs/telegram-miniapp.md](docs/telegram-miniapp.md)).
- **Массовые загрузки**: импорт объявлений из YML (файл/ссылка) с автоопределением категории через DeepSeek, скачиванием фото и ежедневным автообновлением (см. [docs/imports.md](docs/imports.md)).
- **Блог**: статьи с публикацией из админки, транслит-slug из заголовка и микроразметкой schema.org `BlogPosting` (см. [docs/blog.md](docs/blog.md)).
- **Админка (Filament)**: категории, пользователи, объявления, жалобы, страницы, блог, **учёт расходов DeepSeek**, дашборд, настройки (DeepSeek + Telegram + рассылки).

## Документация по модулям

| Документ | О чём |
|---|---|
| [docs/architecture.md](docs/architecture.md) | Архитектура, стек, структура, схема БД, соглашения |
| [docs/setup.md](docs/setup.md) | Установка, запуск, домен, пересборка БД, ключи |
| [docs/auth.md](docs/auth.md) | Авторизация: телефон (flash call) + почта + Яндекс OAuth |
| [docs/cabinet.md](docs/cabinet.md) | Личный кабинет (профиль, мои объявления, избранное, уведомления) |
| [docs/ads.md](docs/ads.md) | Объявления: подача, фото/WebP, модерация, карточка, жалобы |
| [docs/catalog.md](docs/catalog.md) | Каталог, лента, листинг, поиск, персонализация |
| [docs/seller.md](docs/seller.md) | Карточка продавца, избранное, подписки |
| [docs/messaging.md](docs/messaging.md) | Чат, отзывы, уведомления, батчинг |
| [docs/widget.md](docs/widget.md) | Виджет для бизнеса (встройка, API, авторизация) |
| [docs/telegram-miniapp.md](docs/telegram-miniapp.md) | Telegram мини-приложения (запуск в группах, авторизация, подача) |
| [docs/imports.md](docs/imports.md) | Массовые загрузки: импорт из YML + определение категории через DeepSeek |
| [docs/blog.md](docs/blog.md) | Блог: статьи, транслит-slug, микроразметка BlogPosting |
| [docs/admin.md](docs/admin.md) | Кабинет администратора (Filament 5) |
| [docs/integrations.md](docs/integrations.md) | DeepSeek, Telegram, Яндекс OAuth, карты |

## Учётные записи (после сидов)

| Роль | Логин | Пароль |
|---|---|---|
| Админ | `admin@placeo.test` | `admin12345` |

## Что нужно для полного функционала

- Ключи в `/admin → Настройки`: **DeepSeek** (модерация) и **Telegram** (token + chat ID — см. [docs/integrations.md](docs/integrations.md)).
- В Яндекс-приложение добавить Redirect URI виджета: `http://placeo.ru/widget/oauth/yandex/callback`.
- Запустить `queue:work` и `schedule:work`.

<!-- deploy pipeline verified: local -> GitLab -> prod (2026-06-22) -->
