2026-03-30 09:10:21 +03:00
# Правила работы над документацией
Мета-документ: как устроен проект, как писать и редактировать разделы.
## О проекте
Документационный сайт с правилами и стандартами фронтенд-разработки на Next.js + TypeScript.
- Движок: VitePress
2026-04-26 15:04:10 +03:00
- Язык: русский
- Контент: `docs/docs/`
2026-03-30 09:10:21 +03:00
## Команды
| Команда | Что делает |
|---------|-----------|
| `npm run dev` | Локальный сервер разработки |
| `npm run build` | Сборка статического сайта |
2026-04-26 15:04:10 +03:00
| `npm run llms` | Генерация `llms.txt` (карта документации для LLM) и README |
2026-03-30 09:10:21 +03:00
## Структура файлов
```
docs/
2026-04-26 15:04:10 +03:00
├── index.md # Лендинг (URL `/` )
└── docs/ # Контент документации (URL `/docs/...` )
├── index.md # Главная страница
2026-04-28 16:02:00 +03:00
├── workflow.md # Подсказки
├── basics/ # Базовые правила: каким должен быть код
2026-04-26 15:04:10 +03:00
│ ├── tech-stack.md
│ ├── architecture/
│ ├── code-style.md
│ ├── naming.md
│ ├── documentation.md
│ └── typing.md
2026-04-29 11:25:58 +03:00
└── applied/ # Прикладные разделы: настройка и использование
2026-05-08 19:12:26 +03:00
├── creating-project/ # Создание проекта: как поднять новый проект
│ ├── from-template.md
│ ├── manual.md
│ └── nextjs.md
2026-04-29 20:52:01 +03:00
├── project-structure.md
├── page-level.md
├── component.md
├── module.md
2026-05-08 19:12:26 +03:00
├── rest-client/ # REST-клиент: настройка клиента сервиса
│ ├── index.md
│ ├── usage.md
│ └── setup/
├── data-fetch/ # Получение данных: стратегии серверного и клиентского получения
│ ├── index.md
│ ├── server-await.md
│ └── client-get-hook.md
2026-04-29 11:25:58 +03:00
├── styles/ # Стили: настройка + использование
│ ├── styles-setup.md
│ └── styles-usage.md
2026-04-29 20:52:01 +03:00
├── svg-sprites/ # SVG-спрайты: введение + настройка + использование
│ ├── svg-sprites-intro.md
2026-04-29 11:25:58 +03:00
│ ├── svg-sprites-setup.md
│ └── svg-sprites-usage.md
2026-04-29 20:52:01 +03:00
├── images.md
├── fonts.md
├── aliases.md
├── templates/ # Шаблоны генерации: введение + настройка + использование
│ ├── templates-intro.md
2026-04-29 11:25:58 +03:00
│ ├── templates-setup.md
2026-04-29 20:52:01 +03:00
│ ├── templates-create.md
2026-04-29 11:25:58 +03:00
│ └── templates-usage.md
2026-04-29 20:52:01 +03:00
├── biome.md
├── postcss.md
├── vscode.md
├── localization.md
└── stores.md
2026-03-30 09:10:21 +03:00
.vitepress/
2026-04-26 15:04:10 +03:00
└── config.ts # Конфигурация VitePress, сайдбар
2026-04-25 18:06:27 +03:00
generate-llms.ts # Скрипт генерации llms.txt и README
2026-03-30 09:10:21 +03:00
```
2026-04-26 15:04:10 +03:00
Сгенерированные артефакты (`docs/public/` ): `llms.txt` , `llms-full.txt` ,
`nextjs-style-guide.zip` , `manifest.json` , копии `.md` в `docs/public/docs/` .
2026-03-30 09:10:21 +03:00
### Добавление нового раздела
2026-05-08 19:12:26 +03:00
1. Создать `.md` -файл в нужной папке: `basics/` или `applied/` .
2026-04-26 15:04:10 +03:00
2. Добавить пункт в сайдбар — `.vitepress/config.ts` .
2026-04-25 18:06:27 +03:00
Сайдбар — единственный источник порядка и группировки для `llms.txt` .
2026-04-26 15:04:10 +03:00
3. Запустить `npm run llms` для обновления `llms.txt` и README.
2026-03-30 09:10:21 +03:00
2026-04-28 16:02:00 +03:00
## Типы разделов
2026-03-30 09:10:21 +03:00
2026-05-08 19:12:26 +03:00
Документация разделена на две основные группы. Каждая отвечает на свой вопрос
2026-04-28 16:02:00 +03:00
и имеет свою природу — это влияет на содержимое и структуру страницы.
### Базовые правила (`basics/`)
2026-03-30 09:10:21 +03:00
**Отвечает на вопрос:** «Каким должен быть любой код?»
Универсальные стандарты, **не привязанные к конкретной области** .
2026-04-28 16:02:00 +03:00
Правило базовое, если оно применимо ко всему коду одинаково: именование
переменных, оформление импортов, когда использовать `type` vs `interface` .
Примеры в базовых правилах допускаются, но служат иллюстрацией принципа,
а не инструкцией по конкретной области.
**Граница:** если правило касается только одной области (только стили,
только компоненты, только API) — оно живёт в прикладном разделе, не в базовых.
2026-04-29 11:25:58 +03:00
### Прикладные разделы (`applied/`)
2026-03-30 09:10:21 +03:00
2026-05-08 19:12:26 +03:00
**Отвечает на вопрос:** «Как решить практическую задачу в проекте?»
2026-03-30 09:10:21 +03:00
2026-05-08 19:12:26 +03:00
Прикладные разделы объединяют создание проекта, настройку и использование инструментов
2026-04-29 11:25:58 +03:00
и подсистем. Каждый раздел — самостоятельная предметная область.
2026-03-30 09:10:21 +03:00
2026-05-08 19:12:26 +03:00
`applied/creating-project/` отвечает на вопрос «Как поднять новый проект?» и описывает сценарии запуска нового проекта целиком: из шаблона, вручную, чистую установку фреймворка. Детали отдельных инструментов остаются в собственных прикладных разделах, а создание проекта ссылается на них как на шаги общего сценария.
Разделы делятся на три типа:
1. **Создание проекта** — сценарии запуска проекта целиком. Живут в
`applied/creating-project/` и в сайдбаре оформляются как первая группа
прикладных разделов.
2026-03-30 09:10:21 +03:00
2026-05-08 19:12:26 +03:00
2. **Только настройка** — разовая установка инструмента (линтер,
2026-04-29 11:25:58 +03:00
CSS-процессор, алиасы). Файл без суффикса: `biome.md` , `postcss.md` .
2026-03-30 09:10:21 +03:00
2026-05-08 19:12:26 +03:00
3. **Настройка + использование** — область, требующая и установки,
2026-04-29 11:25:58 +03:00
и повседневных правил. Два файла с суффиксами: `styles-setup.md`
(настройка) и `styles-usage.md` (использование). В сайдбаре
оборачиваются в collapsed-группу.
2026-04-28 16:02:00 +03:00
**Граница:** прикладной раздел не дублирует базовые правила. Если правило
уже описано в `basics/` — прикладной раздел ссылается на него, но не
повторяет.
2026-03-30 09:10:21 +03:00
## Структура прикладного раздела
2026-04-29 11:25:58 +03:00
Шаблон ниже относится к usage-страницам прикладных разделов (`applied/*-usage.md` ).
2026-05-08 19:12:26 +03:00
Setup-страницы (`applied/*-setup.md` ) и `applied/creating-project/` имеют другую
2026-04-29 11:25:58 +03:00
структуру — ориентированную на пошаговую установку (требования → установка →
2026-04-28 16:02:00 +03:00
проверка).
Шаблон описывает все допустимые секции. Раздел включает только те,
которые для него релевантны — пустые секции не создаются.
2026-03-30 09:10:21 +03:00
```markdown
# {Название}
2026-04-28 15:35:10 +03:00
{Одно-два предложения, по которым читатель за секунду решает, нужен ли ему раздел.
Правила оформления — секция «Заголовок и описание» ниже.}
2026-03-30 09:10:21 +03:00
## Что нужно знать
2026-04-01 10:35:07 +03:00
Неочевидная информация, которую читатель должен знать перед чтением раздела.
Если для раздела нет такой вводной — секция не создаётся.
2026-03-30 09:10:21 +03:00
## Структура
Файловая организация: какие файлы создавать и куда класть.
Обязательно — дерево файлов через code-block.
## Правила
2026-04-01 10:35:07 +03:00
Конкретные требования, специфичные для области. Делятся на две подсекции:
### Реализация
Как написан код внутри файла: синтаксис, паттерны, API.
Отвечает на вопрос: «Как писать код?»
Примеры: объявление через `const` , деструктуризация пропсов, формат вызова `cl()` , способ подключения стилей, структура хука.
### Организация
Как компонент/модуль встроен в проект: файловые границы, зоны ответственности, экспорт.
Отвечает на вопрос: «Где что лежит и за что отвечает?»
Примеры: один компонент — один файл, вложенные компоненты в `ui/` , логика выносится в `model/` .
Формат обеих подсекций — маркированный список.
2026-03-30 09:10:21 +03:00
Для неочевидных случаев — блоки «Хорошо / Плохо».
2026-04-01 10:35:07 +03:00
Если в области нет правил одной из категорий — подсекция не создаётся.
2026-03-30 09:10:21 +03:00
## Именование
Соглашения по именам, специфичные для этой области.
Только то, что Н Е покрыто в базовом разделе «Именование».
## Типизация
Правила типизации, специфичные для этой области.
Только то, что Н Е покрыто в базовом разделе «Типизация».
## Документирование
Что и как документировать в этой области.
Только то, что Н Е покрыто в базовом разделе «Документирование».
## Примеры
Полноценные примеры кода.
Каждый пример с путём к файлу и пояснениями.
2026-04-01 10:35:07 +03:00
2026-03-30 09:10:21 +03:00
```
### Порядок секций
2026-04-01 10:45:22 +03:00
Порядок фиксированный: контекст → структура → правила → специализации базовых правил → примеры.
2026-04-01 10:35:07 +03:00
2026-04-01 10:45:22 +03:00
Логика: читатель сначала понимает «что это», потом «где это лежит», потом «как это делать», и в конце видит полный пример.
2026-03-30 09:10:21 +03:00
### Секции-расширения базовых правил
«Именование», «Типизация», «Документирование» в прикладном разделе — это **точки расширения** базовых правил.
- В базовых описано общее: `camelCase` для переменных, `type` vs `interface` , формат JSDoc.
- В прикладном разделе описано специфичное: как именовать CSS-классы (стили), как типизировать пропсы компонентов (компоненты), как документировать хуки (хуки).
Если для области нет специфики по именованию, типизации или документированию — секция не создаётся.
## Конвенции оформления
### Frontmatter
Каждый `.md` -файл начинается с YAML frontmatter:
```yaml
---
title: Название раздела
2026-04-28 16:02:00 +03:00
description: Описание раздела одним предложением.
2026-03-30 09:10:21 +03:00
---
```
2026-04-28 16:02:00 +03:00
- `title` совпадает с текстом `h1` -заголовка в файле.
- `description` совпадает с абзацем-описанием сразу под `h1` .
Подробнее о требованиях к самому заголовку и описанию — секция
«Заголовок и описание» ниже.
2026-03-30 09:10:21 +03:00
2026-04-28 15:35:10 +03:00
### Заголовок и описание
2026-03-30 09:10:21 +03:00
2026-04-28 15:35:10 +03:00
Каждая страница начинается с `h1` -заголовка и абзаца-описания сразу под ним.
Эта пара — **навигационный маркер** : попадает в сайдбар, `llms.txt` ,
2026-04-28 20:28:01 +03:00
`MAP.md` архива и должна за секунду давать читателю или LLM понять,
2026-04-28 15:35:10 +03:00
**когда сюда нужно идти**.
#### Структура заголовков
- Один `h1` на файл, совпадает с `title` во frontmatter.
- Сразу после `h1` — описание (одно-два предложения, см. ниже).
2026-03-30 09:10:21 +03:00
- Основные секции — `h2` .
- Подсекции внутри `h2` — `h3` .
- `h4` не используется.
2026-04-28 15:35:10 +03:00
#### Имя `h1` (заголовок страницы)
- Называет предметную область, а не реализацию.
- Без имён пакетов, опций, конфигов и путей.
- Самодостаточен — читается без контекста сайдбара.
- Исключение: имя инструмента допустимо, если оно — единственное
устойчивое имя самой области (`PostCSS` , `Biome` , `VS Code` ).
2026-04-28 16:02:00 +03:00
- Если страница вложена в семантическую группу
2026-05-08 19:12:26 +03:00
(`Архитектура → Слои` , `Прикладные → REST-клиент → Использование` )
2026-04-28 16:02:00 +03:00
и короткое имя теряет смысл при прямой ссылке — `h1` поднимает
имя родителя в заголовок: `Слои SLM` , `Сегменты SLM` . В сайдбаре
допустимо оставить короткий вариант (`Слои` , `Сегменты` ) — там
путь группы виден через дерево.
- Подъём в заголовок применяется только когда читается грамматически
естественно (`Слои SLM` , `Автогенерация REST-клиента` ). Если
получается натянутая конструкция (`REST в серверных компонентах` ) —
заголовок остаётся коротким, а контекст полностью переносится
в описание. Заголовок и описание — пара: если один не несёт
контекст, е г о обязательно несёт второй.
**Хорошо:** «Алиасы импортов», «Структура проекта», «SVG-спрайты»,
«Слои SLM», «Автогенерация REST-клиента».
2026-04-28 15:35:10 +03:00
**Плохо:** «Установка и настройка» (что устанавливаем?),
2026-04-28 16:02:00 +03:00
«Использование» (что используем?), «Введение» (во что?),
«Сегменты» (чего сегменты?), «REST в серверных компонентах»
(грамматически натянуто — лучше короткий h1 + контекст в описании).
2026-04-28 15:35:10 +03:00
#### Описание
Описание — короткий ответ на вопрос «у меня задача X, мне сюда?».
Н е аннотация. Н е оглавление.
**Запреты:**
- Н е упоминать конкретные пакеты, библиотеки, инструменты
(`@gromlab/svg-sprites` , `Mantine` , `Zustand` ).
- Н е упоминать конкретные файлы и пути
(`postcss.config.mjs` , `.templates/` , `biome.json` ).
- Н е упоминать конкретные опции, ключи API, имена функций
(`baseUrl` , `cl()` , `useStore` ).
- Н е начинать с «Раздел описывает», «Этот раздел»,
«В этом разделе», «Здесь рассмотрено».
- Н е использовать дежурные префиксы как шаблон
(«Правила работы с ...», «Правила написания...») — само то,
что раздел про правила, и так понятно из секции и заголовка.
- Н е пересказывать содержимое перечислением подсекций
(«организация, реализация, делегирование, метаданные»).
- Н е аргументировать пользу
(«обеспечит единообразие», «упростит поддержку»).
**Требования:**
- 1 предложение, обычно 5– 12 слов.
- Звучит как ответ человека другу, а не как техспек.
- Описание читается **самостоятельно** , без контекста сайдбара.
- Если страница вложена в семантическую группу
2026-05-08 19:12:26 +03:00
(например, `Прикладные → REST-клиент → Настройка → ...` ) и её заголовок
2026-04-28 15:35:10 +03:00
без этой группы теряет смысл — описание явно содержит имя
родительской области, чтобы читалось без сайдбара.
**Подходящие формы:**
2026-04-25 20:15:10 +03:00
2026-04-28 15:35:10 +03:00
- «Как X.»
- «Что такое X.»
- «Из чего состоит X.»
- «Установка X.»
- «Какие X есть и как ими пользоваться.»
2026-04-25 20:15:10 +03:00
2026-04-28 15:35:10 +03:00
Перечисление аспектов через двоеточие — только если без него читатель
не сможет различить раздел от соседнего.
2026-04-25 20:15:10 +03:00
2026-04-28 15:35:10 +03:00
**Тест навигации.** Читатель видит описание — за секунду должен понять
«мне сюда» или «нет, не сюда». Если приходится перечитывать —
описание слишком длинное.
2026-04-25 20:15:10 +03:00
2026-04-28 15:35:10 +03:00
**Тест на изменение.** Если в разделе сменится пакет, переименуется
файл или добавится правило — придётся ли править описание?
Если да — оно слишком конкретное.
2026-04-25 20:15:10 +03:00
**Хорошо:**
```markdown
2026-04-28 15:35:10 +03:00
Какие алиасы импортов есть в проекте и как ими пользоваться.
2026-04-25 20:15:10 +03:00
```
```markdown
2026-04-28 15:35:10 +03:00
Установка и настройка линтера-форматтера в новом проекте.
```
```markdown
Из чего состоит проект и где что лежит.
```
```markdown
Получение REST-данных в серверных компонентах.
2026-04-25 20:15:10 +03:00
```
**Плохо:**
```markdown
2026-04-28 15:35:10 +03:00
Раздел описывает, какие алиасы используются в проекте: их полный список,
где они объявлены и как ими пользоваться между модулями и внутри модуля.
2026-04-25 20:15:10 +03:00
```
2026-04-28 15:35:10 +03:00
_Н а чина е тс я с «Раздел описывает», пересказывает содержимое._
```markdown
Установка и настройка CSS-процессора PostCSS в проекте: набор плагинов,
конфиг `postcss.config.mjs` . Выполняется один раз при заведении проекта.
```
_У по мяну т конкретный файл, перечисление аспектов превратилось в оглавление._
2026-04-25 20:15:10 +03:00
```markdown
2026-04-28 15:35:10 +03:00
Правила работы с React-компонентами: файловая структура,
типизация пропсов, документирование, реализация.
2026-04-25 20:15:10 +03:00
```
2026-04-28 15:35:10 +03:00
_Де жу р ный префикс «Правила работы с ...» плюс оглавление подсекций._
2026-03-30 09:10:21 +03:00
### Примеры кода
- Блоки кода с указанием языка: ` ` ``tsx ` , ` ` ``css ` , ` ` ``bash ` , ` ` ``text ` .
- Путь к файлу указывается перед блоком кода текстом или комментарием внутри блока.
- Дерево файлов — ` ` ``text ` с символами `├──` , `└──` , `│` .
### Блоки «Хорошо / Плохо»
Используются для контрастного сравнения правильного и неправильного подхода.
Формат:
```markdown
**Хорошо:**
\`\`\`tsx
// правильный код
\`\`\`
**Плохо:**
\`\`\`tsx
// неправильный код
\`\`\`
```
### Таблицы
Используются для структурированных перечислений: настройки, команды, соответствия.
Формат — стандартный Markdown: `| Ключ | Описание |` .
### Ссылки между разделами
Прикладной раздел может ссылаться на другие разделы, но не дублирует их содержимое.
## Принципы
1. **Н е дублировать.** Одна мысль живёт в одном месте. Остальные ссылаются.
2. **Базовое vs прикладное.** Если правило применимо ко всему коду — оно базовое. Если только к одной области — прикладное.
2026-04-01 10:45:22 +03:00
3. **Пустые секции не создавать.** Если для раздела нет специфики по именованию — секции «Именование» в нём нет.
4. **Примеры обязательны.** Прикладной раздел без примеров кода — незавершён.