# ☁️ BROJS.RU Landing - Полная документация
## 📋 Оглавление
1. [Обзор проекта](#обзор-проекта)
2. [Структура проекта](#структура-проекта)
3. [Static Site Generation (SSG)](#static-site-generation-ssg)
4. [Страница пользовательского соглашения](#страница-пользовательского-соглашения)
5. [Команды и скрипты](#команды-и-скрипты)
6. [Технологии](#технологии)
7. [Deployment](#deployment)
---
## Обзор проекта
**BROJS.RU Landing** - это статический лендинг платформы обучения фронтенд-разработке на базе React + SSG.
### Особенности:
✅ **React 18** с TypeScript
✅ **Server-Side Rendering (SSR)** - полноценный рендеринг React компонентов для SEO
✅ **Chakra UI** - современный UI framework
✅ **i18next** - мультиязычность (ru/en)
✅ **React Router** - клиентский роутинг
✅ **Hydration** - гидратация SSR контента
✅ **jsdom + canvas** - полноценная DOM эмуляция для SSR
### Страницы:
- **`/`** - главная страница "в разработке"
- **`/terms`** - пользовательское соглашение (полное, SEO-оптимизировано)
---
## Структура проекта
```
bro.landing/
├── src/
│ ├── pages/
│ │ ├── under-construction/ # Главная страница
│ │ ├── terms/ # Пользовательское соглашение
│ │ └── index.ts # Экспорт страниц
│ ├── app.tsx # Root компонент
│ ├── dashboard.tsx # Роутинг
│ ├── index.tsx # Entry point + hydration
│ └── index.ejs # HTML шаблон
├── scripts/
│ └── ssr-render.js # ⭐ SSR скрипт (react-dom/server)
├── dist/ # Сборка (генерируется)
│ ├── index.html # Главная (SSG)
│ ├── terms.html # Соглашение (SSG)
│ └── index.js # React bundle
├── package.json
└── cloud.md # 📚 Эта документация
```
---
## Server-Side Rendering (SSR)
### Как работает?
1. **Webpack** собирает React → `dist/index.js` + `dist/index.html` (шаблон)
2. **Скрипт `ssr-render.js`** автоматически:
- Настраивает окружение Node.js (jsdom + canvas)
- Импортирует React компоненты из `src/pages/`
- Рендерит компоненты через `react-dom/server`
- Инжектит HTML в `dist/index.html` и `dist/terms.html`
3. **React hydration** при загрузке оживляет SSR HTML
### Преимущества SSR:
- 🚀 **Быстрая загрузка** - контент виден до загрузки JS
- 🔍 **SEO** - поисковики индексируют полный HTML с Chakra UI
- ♿ **Доступность** - работает без JavaScript
- 📊 **Метрики** - улучшенные FCP и LCP
- ✅ **Никакого хардкода** - рендер реальных компонентов
### Hydration в index.tsx:
```typescript
const hasPrerenderedContent = MOUNT_NODE.hasChildNodes();
if (hasPrerenderedContent) {
hydrateRoot(MOUNT_NODE,