- 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.
52 lines
4.7 KiB
Markdown
52 lines
4.7 KiB
Markdown
## Итерация 00 — фиксация требований и источников данных
|
||
|
||
### Цель
|
||
Согласовать “что именно делаем”, чтобы не переписывать UX/архитектуру на ходу.
|
||
|
||
### Входные решения (обязательные)
|
||
- **Карусель скриншотов**: Swiper Vue (`https://swiperjs.com/vue`), на десктопе видно **несколько** скринов одновременно.
|
||
- **Download Section**:
|
||
- Автоопределение ОС.
|
||
- Если не определили — показываем все ОС.
|
||
- Для macOS — учёт **Apple Silicon vs Intel** (если детект не точный — дать выбор пользователю).
|
||
- **Privacy**:
|
||
- Локальное хранение API ключей.
|
||
- Опциональное использование собственных API ключей.
|
||
- Нет облачного хранилища транскрипций.
|
||
- **Open Source**: да, часть компонентов/модулей будет open-source (маркетинг/доверие).
|
||
- **Статистика загрузок**: не делаем.
|
||
- **Аналитика**: GA4 + события скачивания и ключевых действий.
|
||
- **Деплой**: Render, **SSG**.
|
||
- **State management**: Pinia (общее состояние не размазываем по компонентам).
|
||
- **Code quality**: ESLint (`@nuxt/eslint`) + Prettier.
|
||
- **Структура**: добавляем `landing/data`, `landing/types`, `landing/utils` + правило `composables/` vs `utils/`.
|
||
|
||
### Важно про SSG (чтобы не было сюрпризов в конце)
|
||
- Лендинг остаётся **статическим**: без собственного backend на каждый запрос.
|
||
- Поэтому **IP-геолокацию на сервере не делаем** (в чистом SSG её просто негде исполнять).
|
||
- Автовыбор языка: **cookie/localStorage (если пользователь выбирал)** → **настройки браузера** → fallback на `en`. Всё остальное (гео, Accept-Language на сервере) — только если появится отдельный runtime/edge, но это уже другая задача.
|
||
|
||
### Решения/данные, которые нужно получить от владельца проекта
|
||
- **Релизы/артефакты**: где лежат ссылки на `.dmg/.exe/.msi/.deb/.AppImage`, как формируется URL (GitHub Releases / отдельный CDN).
|
||
- **macOS артефакты**: есть ли separate сборки `arm64` и `x64` или один universal.
|
||
- **GA4**:
|
||
- Measurement ID вида `G-XXXXXXXXXX` (и подтверждение, что GA4 property уже создан).
|
||
- Список обязательных событий/параметров (если есть требования маркетинга).
|
||
|
||
### Контракт по загрузкам (нужно согласовать один раз)
|
||
- **Источник правды**: GitHub Releases (рекомендуется) или статичный список в `landing/data/downloads.ts` (если релизы ведутся вручную).
|
||
- **Нейминг ассетов**: как минимум, чтобы можно было однозначно сопоставить `os + arch + extension` (например `VoiceToText-1.2.3-mac-arm64.dmg`).
|
||
- **Страница /download**: откуда берём “версия/размер/дата” (из релиза или руками в data).
|
||
- **Проверки**: если есть sha256/подпись — решаем, показываем ли это пользователю (желательно да).
|
||
|
||
### Критерии готовности
|
||
- Все пункты выше подтверждены.
|
||
- Есть источник правды по ссылкам загрузок и форматам релизов.
|
||
- Определены обязательные GA4 события и параметры.
|
||
- Подтверждено, что лендинг действительно деплоится как **статик** (SSG), без server runtime.
|
||
|
||
### Чеклист перепроверки (прогнать 2–3 раза)
|
||
- Нет “опциональных” фич, которые фактически обязательны.
|
||
- Нет скрытых зависимостей (например, server API для статистики).
|
||
- SSG и Render не конфликтуют с выбранными модулями.
|
||
|