# SiteForge — Код-индекс (Карта проекта)

> Обновляется при каждой разработке. Читать ПЕРВЫМ при потере контекста.

## Быстрый старт
- Сервер: 93.183.81.233 (SSH: root/aywrNd3WUP-eyH)
- Проект: /var/www/marketplace/
- Исходники: /var/www/marketplace/src/
- Билд-исходник: /opt/siteforge-src/
- Продакшен: /opt/siteforge/
- БД: PostgreSQL (siteforge/siteforge2024secure@127.0.0.1:5432/siteforge)
- Сборка: rsync src → /opt/siteforge-src/ → npx next build --webpack → rsync standalone → /opt/siteforge/ → systemctl restart siteforge
- Для файлов со спецсимволами: base64 кодирование
- Старт проекта: cd /opt/siteforge-src && npx next build (или через rsync-скрипт)

## Архитектура
- **Фреймворк**: Next.js 16 App Router + Payload CMS 3.x
- **БД**: PostgreSQL + Prisma (для кастомных таблиц) + Payload (для CMS-коллекций)
- **Стили**: Tailwind CSS 4 + CSS-переменные для тематизации
- **Realtime**: Socket.IO для чата
- **Платежи**: ЮKassa
- **Доставка**: СДЭК API
- **Мультиарендность**: /var/www/marketplace/src/payload/payload.config.ts
- **Модули**: tenant.modules (JSON-массив в коллекции tenants)
- **useModule() hook**: /src/components/tenant/TenantContext.tsx
- **ModuleGuard**: /src/components/tenant/ModuleGuard.tsx
- **Шаблон маршрутизации**: /src/app/(site)/[siteId]/... — динамический tenant по URL
- **Лендинг**: /src/app/(site)/page.tsx — статическая посадочная (без [siteId])
- **Payload Admin**: /src/app/(payload)/admin/... — встроенная админка CMS
- **Middleware**: /src/middleware.ts — резолв тенанта по домену/пути

## Структура директорий
```
src/
├── app/                          # Next.js App Router
│   ├── (site)/                   # Группа маршрутов сайта
│   │   ├── page.tsx              # Лендинг SiteForge
│   │   ├── features/page.tsx     # Страница всех фич
│   │   ├── info/page.tsx         # Информация о платформе
│   │   ├── tz/page.tsx           # Техническое задание
│   │   ├── demo/                 # Демо-тур
│   │   ├── login/page.tsx        # Вход
│   │   ├── onboarding/page.tsx   # Регистрация/создание сайта
│   │   ├── editor/page.tsx       # Редактор сайтов
│   │   ├── ref/[code]/page.tsx   # Реферальная ссылка
│   │   └── [siteId]/             # Динамические страницы тенанта
│   │       ├── page.tsx          # Главная магазина
│   │       ├── catalog/          # Каталог товаров
│   │       ├── product/[productId]/  # Карточка товара
│   │       ├── cart/page.tsx     # Корзина
│   │       ├── checkout/page.tsx # Оформление заказа
│   │       ├── compare/page.tsx  # Сравнение
│   │       ├── favorites/page.tsx# Избранное
│   │       ├── chat/             # Чат с продавцом
│   │       ├── search/           # Поиск
│   │       ├── listings/         # Объявления (classifieds)
│   │       ├── listing/[listingId]/  # Страница объявления
│   │       ├── seller/[sellerId]/    # Профиль продавца
│   │       ├── orders/page.tsx   # Заказы покупателя
│   │       ├── order-success/    # Успешный заказ
│   │       ├── account/page.tsx  # Аккаунт
│   │       ├── auth/page.tsx     # Авторизация клиента
│   │       └── admin/            # Админ-панель тенанта
│   │           ├── page.tsx      # Дашборд (аналититика)
│   │           ├── analytics/    # Аналитика
│   │           ├── products/     # Управление товарами
│   │           ├── categories/   # Управление категориями
│   │           ├── orders/       # Управление заказами
│   │           ├── sellers/      # Управление продавцами
│   │           ├── seller-analytics/ # Аналитика продавца
│   │           ├── listings/     # Управление объявлениями
│   │           ├── moderation/   # Модерация
│   │           ├── chat/         # Управление чатами
│   │           ├── mailing/      # Рассылки
│   │           ├── notifications/# Уведомления
│   │           ├── promo/        # Промокоды
│   │           ├── autoreply/    # Автоответы
│   │           ├── theme/        # Настройка темы
│   │           ├── templates/    # Шаблоны описаний
│   │           ├── settings/     # Настройки сайта
│   │           ├── integrations/ # Интеграции
│   │           ├── media/        # Медиабиблиотека
│   │           └── layout.tsx    # Layout админки (с Sidebar)
│   ├── (payload)/                # Payload CMS Admin
│   │   ├── admin/                # Админка Payload
│   │   ├── api/                  # API Payload
│   │   └── graphql/              # GraphQL API
│   ├── api/                      # Next.js API Routes
│   ├── layout.tsx                # Корневой layout
│   ├── providers.tsx             # Провайдеры (тема, контекст)
│   ├── robots.ts                 # robots.txt
│   └── sitemap.ts                # sitemap.xml
├── components/
│   ├── ui/                       # shadcn/ui компоненты
│   ├── tenant/                   # Компоненты тенанта (клиентские)
│   ├── tenant-admin/             # Компоненты админки тенанта
│   ├── auth/                     # Компоненты авторизации
│   └── NewsletterForm.tsx        # Форма подписки
├── contexts/                     # React Context (Cart, Compare, Favorites, Theme, Navigation)
├── hooks/                        # Хуки (useSocketIO, usePushNotifications, useToast, useMobile)
├── views/                        # Страницы-views (CartView, CheckoutView, CompareView и т.д.)
├── modules/                      # Модульные компоненты (catalog, cart, reviews, checkout, header, footer, comparison, promo, product, account)
├── payload/                      # Payload CMS конфигурация
│   ├── collections/              # Коллекции CMS
│   │   ├── modules/              # Модульные коллекции (Products, Categories, Orders, Reviews и т.д.)
│   │   ├── Tenants.ts            # Коллекция тенантов
│   │   ├── Sites.ts              # Коллекция сайтов
│   │   ├── Users.ts              # Пользователи CMS
│   │   └── Media.ts              # Медиа
│   ├── hooks/                    # Payload hooks
│   ├── components/               # Payload UI компоненты
│   └── payload.config.ts         # Конфигурация Payload
├── lib/                          # Утилиты и бизнес-логика
│   ├── socket/                   # Socket.IO сервер
│   ├── cdek/                     # СДЭК API клиент
│   ├── i18n/                     # Интернационализация
│   ├── push/                     # Push-уведомления
│   ├── site-generator/           # Генератор сайтов
│   ├── yookassa.ts               # ЮKassa SDK
│   ├── chat-auto-reply.ts        # Автоответы в чате
│   ├── catalog-history.ts        # Persist фильтров каталога
│   ├── product-templates.ts      # Шаблоны описаний товаров
│   ├── theme-presets.ts          # Пресеты тем
│   └── db.ts                     # Подключение к БД
├── data/                         # Mock-данные
├── themes/                       # Определения тем
├── scripts/                      # Скрипты (seed, update-images)
└── migrations/                   # Миграции БД
```

## Фичи → Файлы

### Модульная система
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| ModuleGuard | src/components/tenant/ModuleGuard.tsx | — | (все) |
| useModule hook | src/components/tenant/TenantContext.tsx | — | (все) |
| useModuleSafe hook | src/components/tenant/TenantContext.tsx | — | (все) |
| Sidebar (динамический) | src/components/tenant-admin/Sidebar.tsx | — | (все) |
| Header админки | src/components/tenant-admin/Header.tsx | — | (все) |
| ConditionalCartProvider | src/components/tenant/ConditionalCartProvider.tsx | — | cart |
| ConditionalCompareProvider | src/components/tenant/ConditionalCompareProvider.tsx | — | comparison |
| Manifest (PWA) | src/app/manifest.ts | — | (PWA) |
| Middleware (резолв тенанта) | src/middleware.ts | — | (core) |
| ThemeStyles | src/components/tenant/ThemeStyles.tsx | — | theming |
| ThemeEditor | src/components/tenant/ThemeEditor.tsx | — | theming |
| ThemeContext | src/contexts/ThemeContext.tsx | — | theming |
| Theme presets | src/lib/theme-presets.ts | — | theming |
| Themes index | src/themes/index.ts | — | theming |

### Каталог и товары
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Страница каталога | src/app/(site)/[siteId]/catalog/page.tsx | — | catalog |
| CatalogClient | src/app/(site)/[siteId]/catalog/CatalogClient.tsx | — | catalog |
| CatalogFilterBar | src/app/(site)/[siteId]/catalog/CatalogFilterBar.tsx | — | catalog |
| CatalogFilterChips | src/app/(site)/[siteId]/catalog/CatalogFilterChips.tsx | — | catalog |
| CatalogFilters | src/app/(site)/[siteId]/catalog/CatalogFilters.tsx | — | catalog |
| SidebarFilters | src/modules/catalog/SidebarFilters.tsx | — | catalog |
| ProductGrid | src/modules/catalog/ProductGrid.tsx | — | catalog |
| SortDropdown | src/modules/catalog/SortDropdown.tsx | — | catalog |
| FacetedFilters | src/components/tenant/FacetedFilters.tsx | — | catalog |
| Фильтр persist | src/lib/catalog-history.ts | — | catalog |
| BackToCatalog | src/components/tenant/BackToCatalogLink.tsx | — | catalog |
| Страница товара | src/app/(site)/[siteId]/product/[productId]/page.tsx | — | catalog |
| ProductGallery | src/app/(site)/[siteId]/product/[productId]/ProductGallery.tsx | — | catalog |
| ProductTabs | src/app/(site)/[siteId]/product/[productId]/ProductTabs.tsx | — | catalog |
| FavoriteButton | src/app/(site)/[siteId]/product/[productId]/FavoriteButton.tsx | — | catalog |
| ProductCard | src/modules/product/ProductCard.tsx | — | catalog |
| ProductQuickView | src/components/tenant/ProductQuickView.tsx | — | catalog |
| RecommendationsBlock | src/components/tenant/RecommendationsBlock.tsx | — | catalog |
| API продуктов | — | src/app/api/products/route.ts | catalog |
| API продукта по ID | — | src/app/api/products/[id]/route.ts | catalog |
| API категорий | — | src/app/api/categories/route.ts | catalog |
| API продукта по ID | — | src/app/api/products/[id]/route.ts | catalog |
| API цена-дроп | — | src/app/api/products/price-drop/route.ts | catalog |
| API импорт продуктов | — | src/app/api/products/import/route.ts | catalog |
| API рекомендации | — | src/app/api/products/recommendations/route.ts | catalog |
| API категорий | — | src/app/api/categories/route.ts | catalog |
| API поиск | — | src/app/api/search/route.ts | catalog |
| API переиндексация | — | src/app/api/search/reindex/route.ts | catalog |
| Продукты (коллекция) | — | src/payload/collections/modules/Products.ts | catalog |
| Категории (коллекция) | — | src/payload/collections/modules/Categories.ts | catalog |
| Mock-продукты | src/data/mockProducts.ts | — | catalog |
| Mock-категории | src/data/mockCategories.ts | — | catalog |

### Сравнение товаров
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Страница сравнения | src/app/(site)/[siteId]/compare/page.tsx | — | comparison |
| CompareView | src/views/CompareView.tsx | — | comparison |
| ComparisonTable | src/modules/comparison/ComparisonTable.tsx | — | comparison |
| ConditionalCompareProvider | src/components/tenant/ConditionalCompareProvider.tsx | — | comparison |
| Manifest (PWA) | src/app/manifest.ts | — | (PWA) |
| CompareContext | src/contexts/CompareContext.tsx | — | comparison |

### Отзывы с фото
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| ReviewForm | src/app/(site)/[siteId]/product/[productId]/ReviewForm.tsx | — | reviews |
| ReviewPhotos (lightbox) | src/app/(site)/[siteId]/product/[productId]/ReviewPhotos.tsx | — | reviews |
| ReviewCard | src/modules/reviews/ReviewCard.tsx | — | reviews |
| ReviewsView | src/views/ReviewsView.tsx | — | reviews |
| API отзывов | — | src/app/api/reviews/route.ts | reviews |
| Отзывы (коллекция) | — | src/payload/collections/modules/Reviews.ts | reviews |
| Mock-отзывы | src/data/mockReviews.ts | — | reviews |

### Шаблоны описаний
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| ProductTemplateSelector | src/components/tenant/ProductTemplateSelector.tsx | — | descriptionTemplates |
| Шаблоны (lib) | src/lib/product-templates.ts | — | descriptionTemplates |
| Админка шаблонов | src/app/(site)/[siteId]/admin/templates/page.tsx | — | descriptionTemplates |
| API шаблонов | — | src/app/api/templates/route.ts | descriptionTemplates |
| Шаблоны (коллекция) | — | src/payload/collections/modules/DescriptionTemplates.ts | descriptionTemplates |

### Корзина и оформление заказа
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Страница корзины | src/app/(site)/[siteId]/cart/page.tsx | — | cart |
| CartView | src/views/CartView.tsx | — | cart |
| CartItemRow | src/modules/cart/CartItemRow.tsx | — | cart |
| CartSummary | src/modules/cart/CartSummary.tsx | — | cart |
| CartScript | src/components/tenant/CartScript.tsx | — | cart |
| ConditionalCartProvider | src/components/tenant/ConditionalCartProvider.tsx | — | cart |
| AddToCartButton | src/components/tenant/AddToCartButton.tsx | — | cart |
| CartContext | src/contexts/CartContext.tsx | — | cart |
| Страница чекаута | src/app/(site)/[siteId]/checkout/page.tsx | — | cart |
| CheckoutView | src/views/CheckoutView.tsx | — | cart |
| CheckoutForm | src/modules/checkout/CheckoutForm.tsx | — | cart |
| CheckoutProgress | src/components/tenant/CheckoutProgress.tsx | — | cart |
| API чекаута | — | src/app/api/checkout/route.ts | cart |
| API валидации промокода | — | src/app/api/promo/validate/route.ts | cart |
| Промокоды (коллекция) | — | src/payload/collections/modules/PromoCodes.ts | cart |
| Админка промокодов | src/app/(site)/[siteId]/admin/promo/page.tsx | — | cart |
| Заказы (коллекция) | — | src/payload/collections/modules/Orders.ts | cart |
| API моих заказов | — | src/app/api/orders/my/route.ts | cart |
| API отслеживания заказа | — | src/app/api/orders/track/route.ts | cart |
| Страница заказов | src/app/(site)/[siteId]/orders/page.tsx | — | cart |
| OrderSuccessView | src/views/OrderSuccessView.tsx | — | cart |
| Страница успешного заказа | src/app/(site)/[siteId]/order-success/page.tsx | — | cart |
| Админка заказов | src/app/(site)/[siteId]/admin/orders/page.tsx | — | cart |
| Админка заказа по ID | src/app/(site)/[siteId]/admin/orders/[id]/page.tsx | — | cart |
| Кастомеры (коллекция) | — | src/payload/collections/modules/Customers.ts | cart |

### Платежи
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| ЮKassa SDK | — | src/lib/yookassa.ts | payments |
| API ЮKassa | — | src/app/api/payments/yookassa/route.ts | payments |
| Webhook ЮKassa | — | src/app/api/payments/yookassa/webhook/route.ts | payments |
| Stripe webhook | — | src/app/api/webhooks/stripe/route.ts | payments |

### Доставка
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| DeliveryInfo | src/components/tenant/DeliveryInfo.tsx | — | delivery |
| СДЭК клиент | — | src/lib/cdek/client.ts | delivery |
| API СДЭК | — | src/app/api/delivery/cdek/route.ts | delivery |
| Регионы (коллекция) | — | src/payload/collections/modules/Regions.ts | delivery |
| API регионов | — | src/app/api/regions/route.ts | delivery |
| GeoContext | src/components/tenant/GeoContext.tsx | — | delivery |
| CitySelector | src/components/tenant/CitySelector.tsx | — | delivery |
| API геолокации | — | src/app/api/geolocation/route.ts | delivery |

### Маркетплейс (Продавцы)
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Профиль продавца | src/app/(site)/[siteId]/seller/[sellerId]/page.tsx | — | marketplace |
| Товары продавца | src/app/(site)/[siteId]/seller/[sellerId]/SellerProducts.tsx | — | marketplace |
| API продавцов | — | src/app/api/sellers/route.ts | marketplace |
| Продавцы (коллекция) | — | src/payload/collections/modules/Sellers.ts | marketplace |
| Админка продавцов | src/app/(site)/[siteId]/admin/sellers/page.tsx | — | marketplace |
| Админка аналитики продавца | src/app/(site)/[siteId]/admin/seller-analytics/page.tsx | — | marketplace |
| API аналитики продавца | — | src/app/api/seller-analytics/route.ts | marketplace |

### Объявления (Classifieds)
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Страница объявлений | src/app/(site)/[siteId]/listings/page.tsx | — | classifieds |
| ListingsClient | src/app/(site)/[siteId]/listings/ListingsClient.tsx | — | classifieds |
| Страница объявления | src/app/(site)/[siteId]/listing/[listingId]/page.tsx | — | classifieds |
| ListingContact | src/app/(site)/[siteId]/listing/[listingId]/ListingContact.tsx | — | classifieds |
| API модерации | — | src/app/api/listings/moderate/route.ts | classifieds |
| Объявления (коллекция) | — | src/payload/collections/modules/Listings.ts | classifieds |
| Админка объявлений | src/app/(site)/[siteId]/admin/listings/page.tsx | — | classifieds |

### Чат
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Страница чатов | src/app/(site)/[siteId]/chat/page.tsx | — | chat |
| Страница комнаты | src/app/(site)/[siteId]/chat/[chatId]/page.tsx | — | chat |
| Socket.IO сервер | — | src/lib/socket/server.ts | chat |
| Socket.IO API route | — | src/app/api/socketio/route.ts | chat |
| useSocketIO hook | src/hooks/useSocketIO.ts | — | chat |
| API комнат чата | — | src/app/api/chat/rooms/route.ts | chat |
| API комнаты по ID | — | src/app/api/chat/rooms/[chatId]/route.ts | chat |
| API сообщений | — | src/app/api/chat/rooms/[chatId]/messages/route.ts | chat |
| Комнаты чата (коллекция) | — | src/payload/collections/modules/ChatRooms.ts | chat |
| Сообщения (коллекция) | — | src/payload/collections/modules/Messages.ts | chat |
| Админка чата | src/app/(site)/[siteId]/admin/chat/page.tsx | — | chat |

### Автоответы
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Админка автоответов | src/app/(site)/[siteId]/admin/autoreply/page.tsx | — | autoReply |
| API автоответов | — | src/app/api/autoreply/route.ts | autoReply |
| Логика автоответов | — | src/lib/chat-auto-reply.ts | autoReply |
| Правила автоответов (коллекция) | — | src/payload/collections/modules/AutoReplyRules.ts | autoReply |

### Рассылки
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| MailingDashboard | src/components/tenant/MailingDashboard.tsx | — | mailing |
| Админка рассылок | src/app/(site)/[siteId]/admin/mailing/page.tsx | — | mailing |
| API рассылок | — | src/app/api/mailing/route.ts | mailing |
| Email templates | — | src/lib/email-templates.ts | mailing |
| Email adapter (Payload) | — | src/payload/emailAdapter.ts | mailing |
| Кампании (коллекция) | — | src/payload/collections/modules/MailingCampaigns.ts | mailing |
| NewsletterForm | src/components/NewsletterForm.tsx | — | mailing |
| API newsletter | — | src/app/api/newsletter/route.ts | mailing |

### Уведомления
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Админка уведомлений | src/app/(site)/[siteId]/admin/notifications/page.tsx | — | notifications |
| API отправки уведомлений | — | src/app/api/notifications/send/route.ts | notifications |
| API email уведомлений | — | src/app/api/notifications/email/route.ts | notifications |
| API push уведомлений | — | src/app/api/push/route.ts | notifications |
| Push manager | — | src/lib/push/manager.ts | notifications |
| Push storage | — | src/lib/push/storage.ts | notifications |
| usePushNotifications hook | src/hooks/usePushNotifications.ts | — | notifications |
| CreateNotification hook | — | src/payload/hooks/createNotification.ts | notifications |
| Уведомления (коллекция) | — | src/payload/collections/modules/Notifications.ts | notifications |

### Лояльность
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| LoyaltyDashboard | src/components/tenant/LoyaltyDashboard.tsx | — | loyalty |
| API лояльности | — | src/app/api/loyalty/route.ts | loyalty |
| Счета лояльности (коллекция) | — | src/payload/collections/modules/LoyaltyAccounts.ts | loyalty |

### Реферальная программа
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Реферальная страница | src/app/(site)/ref/[code]/page.tsx | — | loyalty |
| API рефералов | — | src/app/api/referral/route.ts | loyalty |
| Рефералы (коллекция) | — | src/payload/collections/modules/Referrals.ts | loyalty |

### Демо-тур
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| DemoTour | src/components/tenant/DemoTour.tsx | — | demo |
| DemoTourLauncher | src/components/tenant/DemoTourLauncher.tsx | — | demo |
| Страница демо | src/app/(site)/demo/page.tsx | — | demo |
| Layout демо | src/app/(site)/demo/layout.tsx | — | demo |

### Аналитика
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Админка аналитики | src/app/(site)/[siteId]/admin/analytics/page.tsx | — | analytics |
| Админка дашборд | src/app/(site)/[siteId]/admin/page.tsx | — | analytics |
| API аналитики | — | src/app/api/analytics/route.ts | analytics |

### Модерация
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Админка модерации | src/app/(site)/[siteId]/admin/moderation/page.tsx | — | moderation |
| API модерации | — | src/app/api/listings/moderate/route.ts | moderation |

### Мультиязычность
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| i18n context | src/lib/i18n/context.tsx | — | i18n |
| Русская локаль | src/lib/i18n/locales/ru.ts | — | i18n |
| Английская локаль | src/lib/i18n/locales/en.ts | — | i18n |
| LanguageSwitcher | src/components/tenant/LanguageSwitcher.tsx | — | i18n |

### SEO
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| robots.txt | src/app/robots.ts | — | seo |
| sitemap.xml | src/app/sitemap.ts | — | seo |

### PWA
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| PWAInstallPrompt | src/components/tenant/PWAInstallPrompt.tsx | — | pwa |

### Избранное
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Страница избранного | src/app/(site)/[siteId]/favorites/page.tsx | — | catalog |
| FavoritesView | src/views/FavoritesView.tsx | — | catalog |
| FavoritesContext | src/contexts/FavoritesContext.tsx | — | catalog |

### Авторизация клиентов
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| CustomerAuth | src/components/tenant/CustomerAuth.tsx | — | (core) |
| Страница авторизации | src/app/(site)/[siteId]/auth/page.tsx | — | (core) |
| API входа клиента | — | src/app/api/customers/login/route.ts | (core) |
| API регистрации клиента | — | src/app/api/customers/register/route.ts | (core) |
| API профиля клиента | — | src/app/api/customers/me/route.ts | (core) |
| API соц-логина | — | src/app/api/customers/social-login/route.ts | (core) |
| NextAuthProvider | src/components/auth/NextAuthProvider.tsx | — | (core) |
| NextAuth route | — | src/app/api/auth/[...nextauth]/route.ts | (core) |

### Управление тенантами
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| Tenants (коллекция) | — | src/payload/collections/Tenants.ts | (core) |
| Sites (коллекция) | — | src/payload/collections/Sites.ts | (core) |
| Users (коллекция) | — | src/payload/collections/Users.ts | (core) |
| Media (коллекция) | — | src/payload/collections/Media.ts | (core) |
| API тенантов | — | src/app/api/tenants/route.ts | (core) |
| API сайтов | — | src/app/api/sites/route.ts | (core) |
| API сайта по ID | — | src/app/api/sites/[id]/route.ts | (core) |
| API публикации сайта | — | src/app/api/sites/[id]/publish/route.ts | (core) |
| Onboarding | src/views/OnboardingView.tsx | — | (core) |
| Onboarding страница | src/app/(site)/onboarding/page.tsx | — | (core) |
| Site generator | — | src/lib/site-generator/ | (core) |

### CRM интеграции
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| CRM lib | — | src/lib/crm.ts | (core) |
| CRM export API | — | src/app/api/crm/export/route.ts | (core) |
| CRM webhook API | — | src/app/api/crm/webhook/route.ts | (core) |
| Админка интеграций | src/app/(site)/[siteId]/admin/integrations/page.tsx | — | (core) |

### Доп. компоненты
| Что | Где (фронтенд) | Где (бэкенд) | Модуль |
|-----|----------------|---------------|--------|
| WelcomeBanner | src/components/tenant/WelcomeBanner.tsx | — | (core) |
| Breadcrumbs | src/components/tenant/Breadcrumbs.tsx | — | (core) |
| Header модуля | src/modules/header/Header.tsx | — | (core) |
| Footer модуля | src/modules/footer/Footer.tsx | — | (core) |
| PromoCarousel | src/modules/promo/PromoCarousel.tsx | — | (core) |
| CategoriesGrid | src/modules/promo/CategoriesGrid.tsx | — | (core) |
| ProfileCard | src/modules/account/ProfileCard.tsx | — | (core) |
| NavigationContext | src/contexts/NavigationContext.tsx | — | (core) |
| HomeView | src/views/HomeView.tsx | — | (core) |
| CategoryView | src/views/CategoryView.tsx | — | (core) |
| SearchView | src/views/SearchView.tsx | — | (core) |
| AccountView | src/views/AccountView.tsx | — | (core) |
| SearchClient | src/app/(site)/[siteId]/search/SearchClient.tsx | — | (core) |
| NewsletterSection | src/app/(site)/[siteId]/components/NewsletterSection.tsx | — | mailing |
| Админка настроек | src/app/(site)/[siteId]/admin/settings/page.tsx | — | (core) |
| Админка темы | src/app/(site)/[siteId]/admin/theme/page.tsx | — | theming |
| Админка медиа | src/app/(site)/[siteId]/admin/media/page.tsx | — | (core) |
| Админка продуктов | src/app/(site)/[siteId]/admin/products/page.tsx | — | catalog |
| Новый продукт | src/app/(site)/[siteId]/admin/products/new/page.tsx | — | catalog |
| Редактирование продукта | src/app/(site)/[siteId]/admin/products/[id]/edit/page.tsx | — | catalog |
| Админка категорий | src/app/(site)/[siteId]/admin/categories/page.tsx | — | catalog |
| Новая категория | src/app/(site)/[siteId]/admin/categories/new/page.tsx | — | catalog |
| Редактирование категории | src/app/(site)/[siteId]/admin/categories/[id]/edit/page.tsx | — | catalog |

## Payload CMS коллекции (полный список)
| Коллекция | Файл | Модуль |
|-----------|------|--------|
| Products | src/payload/collections/modules/Products.ts | catalog |
| Categories | src/payload/collections/modules/Categories.ts | catalog |
| Orders | src/payload/collections/modules/Orders.ts | cart |
| Customers | src/payload/collections/modules/Customers.ts | cart |
| PromoCodes | src/payload/collections/modules/PromoCodes.ts | cart |
| Reviews | src/payload/collections/modules/Reviews.ts | reviews |
| DescriptionTemplates | src/payload/collections/modules/DescriptionTemplates.ts | descriptionTemplates |
| Sellers | src/payload/collections/modules/Sellers.ts | marketplace |
| Listings | src/payload/collections/modules/Listings.ts | classifieds |
| ChatRooms | src/payload/collections/modules/ChatRooms.ts | chat |
| Messages | src/payload/collections/modules/Messages.ts | chat |
| AutoReplyRules | src/payload/collections/modules/AutoReplyRules.ts | autoReply |
| MailingCampaigns | src/payload/collections/modules/MailingCampaigns.ts | mailing |
| Notifications | src/payload/collections/modules/Notifications.ts | notifications |
| LoyaltyAccounts | src/payload/collections/modules/LoyaltyAccounts.ts | loyalty |
| Referrals | src/payload/collections/modules/Referrals.ts | loyalty |
| Regions | src/payload/collections/modules/Regions.ts | delivery |
| Pages | src/payload/collections/modules/Pages.ts | (core) |
| Tenants | src/payload/collections/Tenants.ts | (core) |
| Sites | src/payload/collections/Sites.ts | (core) |
| Users | src/payload/collections/Users.ts | (core) |
| Media | src/payload/collections/Media.ts | (core) |

## API Routes (полный список)
| Роут | Файл | Модуль |
|------|------|--------|
| /api/products | src/app/api/products/route.ts | catalog |
| /api/products/[id] | src/app/api/products/[id]/route.ts | catalog |
| /api/products/price-drop | src/app/api/products/price-drop/route.ts | catalog |
| /api/products/import | src/app/api/products/import/route.ts | catalog |
| /api/products/recommendations | src/app/api/products/recommendations/route.ts | catalog |
| /api/categories | src/app/api/categories/route.ts | catalog |
| /api/search | src/app/api/search/route.ts | catalog |
| /api/search/reindex | src/app/api/search/reindex/route.ts | catalog |
| /api/checkout | src/app/api/checkout/route.ts | cart |
| /api/promo/validate | src/app/api/promo/validate/route.ts | cart |
| /api/orders/my | src/app/api/orders/my/route.ts | cart |
| /api/orders/track | src/app/api/orders/track/route.ts | cart |
| /api/payments/yookassa | src/app/api/payments/yookassa/route.ts | payments |
| /api/payments/yookassa/webhook | src/app/api/payments/yookassa/webhook/route.ts | payments |
| /api/delivery/cdek | src/app/api/delivery/cdek/route.ts | delivery |
| /api/regions | src/app/api/regions/route.ts | delivery |
| /api/geolocation | src/app/api/geolocation/route.ts | delivery |
| /api/sellers | src/app/api/sellers/route.ts | marketplace |
| /api/seller-analytics | src/app/api/seller-analytics/route.ts | marketplace |
| /api/listings/moderate | src/app/api/listings/moderate/route.ts | classifieds |
| /api/socketio | src/app/api/socketio/route.ts | chat |
| /api/chat/rooms | src/app/api/chat/rooms/route.ts | chat |
| /api/chat/rooms/[chatId] | src/app/api/chat/rooms/[chatId]/route.ts | chat |
| /api/chat/rooms/[chatId]/messages | src/app/api/chat/rooms/[chatId]/messages/route.ts | chat |
| /api/autoreply | src/app/api/autoreply/route.ts | autoReply |
| /api/mailing | src/app/api/mailing/route.ts | mailing |
| /api/newsletter | src/app/api/newsletter/route.ts | mailing |
| /api/notifications/send | src/app/api/notifications/send/route.ts | notifications |
| /api/notifications/email | src/app/api/notifications/email/route.ts | notifications |
| /api/push | src/app/api/push/route.ts | notifications |
| /api/loyalty | src/app/api/loyalty/route.ts | loyalty |
| /api/referral | src/app/api/referral/route.ts | loyalty |
| /api/analytics | src/app/api/analytics/route.ts | analytics |
| /api/reviews | src/app/api/reviews/route.ts | reviews |
| /api/templates | src/app/api/templates/route.ts | descriptionTemplates |
| /api/customers/login | src/app/api/customers/login/route.ts | auth |
| /api/customers/register | src/app/api/customers/register/route.ts | auth |
| /api/customers/me | src/app/api/customers/me/route.ts | auth |
| /api/customers/social-login | src/app/api/customers/social-login/route.ts | auth |
| /api/auth/[...nextauth] | src/app/api/auth/[...nextauth]/route.ts | auth |
| /api/tenants | src/app/api/tenants/route.ts | core |
| /api/sites | src/app/api/sites/route.ts | core |
| /api/sites/[id] | src/app/api/sites/[id]/route.ts | core |
| /api/sites/[id]/publish | src/app/api/sites/[id]/publish/route.ts | core |
| /api/theme | src/app/api/theme/route.ts | theming |
| /api/crm/export | src/app/api/crm/export/route.ts | core |
| /api/crm/webhook | src/app/api/crm/webhook/route.ts | core |
| /api/webhooks/stripe | src/app/api/webhooks/stripe/route.ts | payments |

## Ключевые конфигурационные файлы
| Файл | Описание |
|------|----------|
| src/payload/payload.config.ts | Конфигурация Payload CMS (коллекции, плагины, multi-tenant) |
| src/next.config.ts | Конфигурация Next.js |
| src/middleware.ts | Middleware (резолв тенанта, редиректы) |
| src/importMap.ts | Карта импортов для Payload CMS |
| src/app/layout.tsx | Корневой layout |
| src/app/providers.tsx | Провайдеры (тема, контекст, auth) |
| src/app/(site)/layout.tsx | Layout для (site) группы |
| src/app/(site)/[siteId]/layout.tsx | Layout для тенанта (с NavigationContext) |
| src/app/(payload)/layout.tsx | Layout для Payload Admin |

## Частые операции
1. **Добавить новую фичу-модуль**: создать коллекцию в payload/collections/modules/, добавить в payload.config.ts, добавить проверку в ModuleGuard, добавить ссылку в Sidebar, создать API routes и страницы
2. **Изменить тему**: src/lib/theme-presets.ts, src/themes/, src/components/tenant/ThemeEditor.tsx, ThemeStyles.tsx
3. **Добавить API**: src/app/api/[path]/route.ts (GET/POST/etc handlers)
4. **Изменить навигацию**: src/components/tenant-admin/Sidebar.tsx (админка), src/modules/header/Header.tsx (магазин), лендинг — src/app/(site)/page.tsx
5. **Билд и деплой**: rsync src → /opt/siteforge-src/ → npx next build → rsync standalone → /opt/siteforge/ → systemctl restart siteforge
