Segmenta — это монорепозиторий на базе pnpm workspaces и Turborepo. Весь код разделён на приложения (apps/), общие пакеты (packages/) и модули (modules/).

Корневая структура

segmenta/
├── apps/
│   ├── client/          # Next.js фронтенд
│   └── server/          # NestJS бэкенд
├── packages/
│   ├── database/        # Drizzle ORM, схемы, миграции
│   ├── trpc/            # tRPC роутеры и контекст
│   ├── env/             # Переменные окружения (.env)
│   ├── logger/          # Логгер
│   ├── analytics/       # Аналитика (ClickHouse)
│   └── utils/           # Общие утилиты
├── modules/
│   ├── core/            # Ядро модульной системы
│   ├── forum/           # Модуль форума
│   ├── referrals/       # Модуль рефералов
│   └── scripts/         # Скрипты генерации модулей
├── installer/           # Установщики (bash, PowerShell)
├── docker-compose.yml   # ClickHouse для аналитики
├── pnpm-workspace.yaml  # Конфигурация воркспейсов
└── turbo.json           # Конфигурация Turborepo

Приложения (apps/)

Клиент (apps/client/)

Фронтенд на Next.js 16 с React 19. Использует App Router.
ПапкаНазначение
src/app/Страницы (App Router): главная, профиль, магазин, админка и др.
src/app/admin/Админ-панель
src/app/auth/Страницы авторизации
src/app/profile/Профиль пользователя
src/app/shop/Магазин
src/app/servers/Серверы
src/components/Переиспользуемые React-компоненты
src/components/ui/UI-компоненты (кнопки, модалки, инпуты и т.д.)
src/lib/Утилиты, хуки, константы
src/lib/hooks/React-хуки
src/providers/Провайдеры (tRPC, Auth, Theme, Modules и др.)
Клиент использует Zustand для управления состоянием и Framer Motion для анимаций. Стилизация — TailwindCSS с поддержкой тёмной темы.

Сервер (apps/server/)

Бэкенд на NestJS 10, запускается через Bun.
ПапкаНазначение
src/main.tsТочка входа, запуск NestJS + tRPC
src/app.module.tsКорневой модуль NestJS
src/trpc/Интеграция tRPC с NestJS
src/connections/OAuth-подключения (Discord, VK, Telegram и др.)
src/verification/Система верификации пользователей
src/payments/Платёжная система
src/launcher/Интеграция с GravitLauncher
src/storage/S3-совместимое хранилище файлов
src/avatar/Генерация и загрузка аватаров
src/analytics/Сервис аналитики
src/notifications/Многоканальные уведомления (WebSocket, Email, Telegram, Discord, Push)
src/rcon/RCON-подключение к Minecraft серверам
src/server-query/Запросы статуса Minecraft серверов
src/server-bots/Discord-боты со статусом серверов
src/settings/Настройки сайта
src/permissions/Синхронизация прав с LuckPerms
src/punishments/Наказания (баны, муты), интеграция с LiteBans
src/votes/Голосования за сервер (mctop, topcraft, minecraftrating)
src/users-assets/Скины, плащи и аватары игроков
src/maintenance/Режим технического обслуживания
src/security/Security-заголовки (middleware)
Сервер использует NestJS-модули для организации кода. Каждый сервис регистрируется в AppModule и прокидывается в tRPC-контекст через dependency injection.

Общие пакеты (packages/)

@segmenta/trpc

Главный пакет API. Содержит все tRPC-роутеры и контекст.
ФайлНазначение
src/trpc.tsИнициализация tRPC, определение процедур (publicProcedure, protectedProcedure, moderatorProcedure, adminProcedure)
src/context.tsСоздание контекста запроса (пользователь, сервисы, БД)
src/service-middleware.tsТипизированное внедрение сервисов в контекст (withRconService, withPaymentsService и др.)
src/routers/index.tsКорневой роутер — объединяет все подроутеры
src/routers/auth.tsАвторизация, регистрация, OAuth
src/routers/users.tsУправление пользователями
src/routers/servers.tsСерверы Minecraft
src/routers/shop.tsМагазин
src/routers/tickets.tsТикеты поддержки
src/routers/modules.tsДинамические роутеры модулей
src/routers/admin/Админ-роутеры: stats, players, servers, settings, updates и др.

@segmenta/database

Работа с базой данных через Drizzle ORM.
ФайлНазначение
src/schema/Схемы таблиц (users, sessions, servers, shop и др.)
src/client.tsПодключение к БД, функции withDatabase и withTransaction
src/utils/Утилиты: пароли, настройки, права доступа, логи
src/seed.tsСидинг начальных данных

@segmenta/env

Централизованное управление переменными окружения через @t3-oss/env-nextjs и Zod-валидацию. Файл .env хранится в packages/env/.env и автоматически подтягивается из любого пакета.

@segmenta/logger

Логгер для серверной части.

@segmenta/analytics

Интеграция с ClickHouse для сбора аналитики (просмотры страниц, сессии, события).

Модули (modules/)

Модульная система позволяет расширять функциональность без изменения ядра. Каждый модуль — отдельная папка с серверной и клиентской частью.
ПапкаНазначение
modules/core/Ядро: типы, реестр, хуки, клиентский реестр
modules/forum/Модуль форума
modules/referrals/Модуль реферальной системы
modules/scripts/Скрипт generate-imports.ts для автогенерации
Подробнее о создании модулей — в разделе Разработка модулей.

Как всё связано

Клиент (Next.js)

    │  tRPC-клиент (@trpc/react-query)

Сервер (NestJS)

    │  tRPC-роутеры (@segmenta/trpc)
    │  Контекст: user, services, withDatabase

База данных (Drizzle ORM)

    │  MySQL / PostgreSQL

Модули (modules/)

    │  Роутеры, схемы, хуки

Внешние сервисы
    ├── S3 (хранилище файлов)
    ├── ClickHouse (аналитика)
    ├── RCON (Minecraft серверы)
    └── OAuth (Discord, VK, Telegram, Google, Yandex)
Клиент общается с сервером исключительно через tRPC. Все вызовы типобезопасны — типы автоматически выводятся из роутеров на сервере и доступны на клиенте без кодогенерации.