Skip to content

Tech Stack

Слой Решение Почему
Фреймворк React 19 + Vite Быстрый HMR, нет оверхеда SSR
Роутинг TanStack Router Type-safe маршруты, удобные лейауты, поддержка search params
Серверный стейт TanStack Query Кэш, фоновое обновление, оптимистичные мутации
Глобальный стейт Zustand Только auth + UI preferences, без Redux-бойлерплейта
UI shadcn/ui + Tailwind CSS Кастомизируемые компоненты, не black box
Графики Recharts Трафик, онлайн-пользователи, нагрузка нод
Формы React Hook Form + Zod Zod-схема одновременно валидирует на фронте и бэке
HTTP Axios + TanStack Query Interceptors для refresh token
WebSocket native / reconnecting-websocket Realtime-метрики в админке
Иконки Lucide React
Интернационализация i18next RU/EN минимум
Слой Решение Почему
Язык Go 1.24+ Низкое потребление RAM, быстрый старт, один бинарник
HTTP фреймворк Fiber v3 Быстрее чем Echo/Gin на benchmarks, Express-like API
ORM GORM + pgx GORM для CRUD, pgx напрямую для bulk-операций
БД PostgreSQL 17 JSONB для Xray конфигов, партиционирование трафика
Кэш / Pub-Sub Redis 7 Сессии, rate limiting, очередь sync-задач
Миграции Goose + embed SQL-файлы встроены в бинарник, нет внешних зависимостей
Auth JWT (golang-jwt) + bcrypt Access token 15 мин, refresh 30 дней
Валидация go-playground/validator Теги на struct-полях
Xray API gRPC (google.golang.org/grpc) Официальный способ управления Xray
Брокер задач Asynq (Redis-based) Async синхронизация пользователей на ноды
Конфиг Viper ENV + YAML файл
Логи Zap (uber-go/zap) Structured logging, JSON в prod
Документация API Swaggo (swagger) Генерируется из комментариев
Компонент Решение
Контейнеризация Docker + Docker Compose
Reverse proxy Traefik v3 (автоматический TLS)
Метрики Prometheus + Grafana
Node exporter Кастомный агент на Go (на каждой ноде)

Каждая нода — отдельный VPS с:

  • Xray-core (последняя версия)
  • Кастомным агентом (Go), который принимает команды от панели по gRPC и управляет Xray через его API
  • Prometheus node_exporter для системных метрик