- Enhanced tests to ensure consistent messageId generation for legacy inbox rows lacking a messageId. - Updated test descriptions for better clarity regarding the new messageId handling. - Adjusted test expectations to align with the updated behavior of relaying legacy inbox rows with generated messageIds.
4.2 KiB
4.2 KiB
Итерация 02 — страницы и секции (UI) на данных из data/
Цель
Собрать UI лендинга с секциями из плана, но без “случайного” стейта в компонентах: данные/конфиги лежат в landing/data, общее состояние — в Pinia.
Правила, чтобы лендинг было легко менять
- Порядок секций задаётся конфигом (например
landing/data/sections.ts), чтобы можно было переставлять/скрывать блоки без переписыванияpages/index.vue. - Тексты и контент: разделяем “микрокопирайт” и “контент секций”.
- Микрокопирайт (кнопки, лейблы, короткие подписи) — через i18n (
landing/locales/*). - Контент секций (FAQ, список фич, описания провайдеров, тексты блоков) — через локализованные контент-файлы по структуре (например
landing/content/{locale}.tsилиlanding/content/{locale}.json). - В
landing/data/*храним структуру и стабильные id, а не длинные строки и не “россыпь ключей”. - Правило простое: чтобы изменить один пункт FAQ, не нужно искать 10 ключей — открыл контент-файл нужной локали и поправил.
- Микрокопирайт (кнопки, лейблы, короткие подписи) — через i18n (
- UI-атомы (
components/ui/*) не знают про бизнес и не ходят в store. Они получают props и рендерят. - Секции (
components/sections/*) отвечают за композицию: берут данные изdata/*, нужные значения из store и связывают это с UI.
Шаги
- Layout:
layouts/default.vue: header/footer, контейнер, базовые отступы.
- Страница
/:- Hero, Features, Providers, Screenshots, Download, Privacy, FAQ.
- Страница
/download:- Платформо-специфичный блок + инструкции установки.
- Секция Privacy:
- Чётко подсветить: локальное хранение ключей, опциональные ключи, отсутствие облачного хранилища.
- Отдельный блок: “часть компонентов open-source” (без излишних обещаний).
- i18n покрытие:
- Все тексты вытащены в locales, не оставляем хардкод строк.
- Data-driven подход:
- Карточки фич, FAQ, провайдеры, список платформ — из
landing/data/*.
- Карточки фич, FAQ, провайдеры, список платформ — из
- Навигация по секциям:
- Якоря/scroll в рамках страницы так, чтобы это было доступно (фокус/URL, без поломки истории).
Критерии готовности
- Компоненты секций не содержат бизнес-данных “внутри себя”.
- Минимум логики внутри шаблонов, максимум — через computed/props и util-функции.
- i18n покрывает весь UI без пропусков.
- Любую секцию можно скрыть конфигом, и страница остаётся валидной.
- Для изображений есть корректные
alt/подписи, а для кнопок — понятные названия/label.
Чеклист перепроверки
- Нет дублирования конфигов секций.
- Секции легко переставить/скрыть, не ломая остальное.
- Нет лишних сторонних зависимостей “на всякий случай”.
- На мобильных нет “сломанных” отступов/переполнений (особенно в таблицах/списках).