# Архитектурные инварианты (Landing) Этот файл — про правила, которые защищают лендинг от “тихой деградации” (SEO/SSG/перф/поддерживаемость). Если правило нарушается — это не вкусовщина, это потенциальный регресс. ## 1) SSG — не обсуждается - Лендинг деплоится как **статик**. Мы не рассчитываем на backend на каждый запрос. - Любые идеи “а давайте по IP определим язык/страницу” — это **отдельная задача** (edge/runtime), не часть текущего лендинга. ## 2) Контент и i18n — два слоя - **Микрокопирайт** (кнопки/лейблы/мелкие подписи) — `landing/locales/*`. - **Контент секций** (FAQ, список фич, провайдеры, тексты блоков) — `landing/content/{locale}.*` с одинаковой структурой. - **Стабильные id**: - `id` элементов (FAQ/фичи/провайдеры) не меняем. - Меняем текст — да. Меняем `id` — только если сознательно ломаем совместимость и понимаем последствия. ## 3) Store-лимиты (чтобы не раздуть проект) Pinia используем только там, где реально есть общий state: - `theme` (dark/light) - `locale` (выбранный язык) - `download` (os/arch/preferredMacArch/selectedAsset) Всё остальное — props + данные/контент. Никаких “store для секции Features”. ## 4) Источник правды по URL (i18n + SSG + sitemap) Один источник правды: - список поддерживаемых локалей - список страниц, которые должны существовать - правила генерации i18n-роутов Из этого должны получаться: - пререндер-роуты для SSG - sitemap - корректные `alternate`/`canonical` ## 5) Downloads — ответственность и процесс обновления - Есть один способ обновлять релизы/ссылки, понятный команде. - Если используем статичный `landing/data/downloads.ts`: - обновление версии/URL/sha/размера — часть релиз-процесса - перед деплоем прогоняем быструю проверку ссылок (хотя бы HEAD/GET на 200) ## 6) Аналитика и согласие - По умолчанию **не отправляем аналитику до пользовательского действия**, если проекту нужен consent (зависит от политики/юрисдикции). - Никаких персональных данных, никаких “текстов транскрипций”, никаких ключей. ## 7) Минимальные бюджеты качества - Главная страница: Lighthouse без красных метрик (LCP/CLS). - A11y: клавиатура/фокус/label/alt — не “по настроению”, а обязательный критерий готовности.