38 lines
2.1 KiB
Markdown
38 lines
2.1 KiB
Markdown
# C2 Решение по стеку web prototype
|
||
|
||
Дата: 2026-03-07
|
||
Статус: approved
|
||
Владелец: Engineering
|
||
|
||
## 1) Принятое решение
|
||
- Для web prototype используется `Vite + React + TypeScript` (SPA).
|
||
- Бэкенд-ядро остаётся в Go (`/api/v1` + SSE `/api/v1/events/stream`).
|
||
- `Next.js` на MVP-этапе не используется.
|
||
|
||
## 2) Почему так
|
||
- В проекте уже есть готовый Go API-контракт; отдельный Node/SSR-слой не обязателен.
|
||
- Цель текущего этапа: рабочая control-plane панель, а не SEO-публичный сайт.
|
||
- `Vite` даёт быстрый старт, простой билд и минимальные операционные риски.
|
||
|
||
## 3) Базовый frontend stack
|
||
- `react` + `typescript`
|
||
- `vite`
|
||
- `react-router`
|
||
- `@tanstack/react-query` для REST
|
||
- `EventSource` (SSE) для realtime
|
||
- lightweight UI state (например, `zustand`) только для локального состояния интерфейса
|
||
|
||
## 4) Когда рассматривать переход на Next.js
|
||
- Появляется требование SSR/SEO.
|
||
- Нужен встроенный BFF/edge middleware в самом фронтенд-проекте.
|
||
- Требуется server-side session orchestration, которую нецелесообразно держать в Go gateway.
|
||
|
||
## 5) Архитектурный инвариант
|
||
- Независимо от UI-фреймворка, источник истины остаётся в Go-ядре.
|
||
- UI не дублирует бизнес-логику маршрутизации/transport/policy.
|
||
- Контракт для web/iOS/Android остаётся единым: `/api/v1`.
|
||
|
||
## 6) Статус внедрения
|
||
- Создан модуль `selective-vpn-web/` (foundation level).
|
||
- На текущем этапе включены read-only проверки и SSE connectivity; mutating controls будут подключаться по фазам P1/E4.
|