## Итерация 01 — каркас проекта + качество кода + базовая архитектура ### Цель Поднять Nuxt 3 проект под SSG, включить Vuetify, i18n, Pinia, ESLint+Prettier и заложить архитектурные правила. ### Ключевые принципы (чтобы потом не переделывать) - Лендинг деплоится как **статик (SSG)**, поэтому не закладываем фичи, которые требуют сервер на каждый запрос. - Источник правды по контенту: `landing/data/*` + `landing/locales/*`. Компоненты секций рендерят данные, а не “хранят смысл внутри себя”. - Логика, которую хочется тестировать, живёт в `landing/utils/*`. Всё что про Nuxt/Vue — в `composables/*`. ### Шаги 1) **Создать проект `landing/` (Nuxt 3)**: - SSG-ориентация: конфиг и скрипты сборки/генерации. 2) **Подключить Vuetify 3**: - Material 3, темы (dark/light), сохранение выбора. 3) **Подключить i18n**: - 6 языков, стратегия URL (prefix_except_default). - Автовыбор языка при первом визите: cookie (если выбирали) → настройки браузера → fallback. - Важно: IP-гео в рамках статического лендинга не используем. 4) **Подключить Pinia**: - Stores для: темы, локали, платформы/архитектуры, ссылок загрузки. 5) **ESLint + Prettier**: - `@nuxt/eslint`, Prettier, единые правила форматирования. - Команды `lint`, `lint:fix`, `format`. 6) **Структура папок**: - Добавить `landing/data`, `landing/types`, `landing/utils`. - Зафиксировать правило: composables = Nuxt/Vue, utils = чистые функции. ### Выход (deliverables) - Проект собирается и генерится в SSG режиме. - Локализация/темы/Pinia подключены и работают в минимальном виде. - Линтер/форматтер настроены, есть команды в `package.json`. - Созданы заготовки данных и типов (без бизнес-логики секций). - Есть короткий README как запускать/собирать локально (одинаково для всей команды). ### Критерии готовности - `pnpm/yarn/npm` workflow согласован и описан. - `generate`/`build`/`preview` проходят локально. - ESLint и Prettier не конфликтуют (нет “пинпонга” форматирования). - Подтвержден publish directory для статического хостинга (чтобы потом не гадать на деплое). ### Чеклист перепроверки (2–3 прохода) - SSG: нет использования SSR-only API в runtime. - i18n: URL стратегия соответствует требованиям SEO. - Pinia: состояния не дублируются в компонентах. - Минимальная страница открывается без ошибок с отключённым JS (хотя бы смысловой контент).