cohorta/HANDOVER.md
Vadym Samoilenko 802c004ca4 feat(i18n): full EN/UK/RU coverage — app pages, landing, AppLayout switcher
- Add LanguageSwitcher to AppLayout header (all authenticated pages)
- Fix Pricing tooltip: remove nested TooltipProvider (broken hover popup)
- Landing: FAQ, HowItWorks, Comparison, Testimonials, FeatureGrid, Footer
- App pages: Dashboard, Admin, MyUsage, Billing
- Toast messages: FocusGroups, SyntheticUsers, FocusGroupSession (28 toasts)
- New namespaces: faq, how_it_works, comparison, testimonials, features,
  footer, dashboard, admin, usage, billing, focus_groups, synthetic_users,
  focus_group_session — 130+ keys across EN/UK/RU

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 16:23:36 +01:00

146 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Cohorta — Session Handover
## Стан проекту
Production: https://cohorta.ai-impress.com
Repo: git@git.ai-impress.com:Aimpress/cohorta.git (branch: main)
Stack: React 18 + Vite + TypeScript / Quart (Python async) / MongoDB / Docker + Traefik на OVH (57.128.160.249, ssh alias: `aimpress`, port 1220)
Deploy: `ssh aimpress "bash /opt/03-business/cohorta/deploy-cohorta.sh"` (тягне git pull + docker build + up)
Push: через HTTPS-токен — `git remote set-url origin https://vadym:<TOKEN>@git.ai-impress.com/Aimpress/cohorta.git`
---
## Що зроблено в цій сесії
| Epic | Статус |
|------|--------|
| Epic 1 — OG-image + базовий SEO | ✅ |
| Epic 2 — Pricing з admin panel | ✅ |
| Epic 3 — Form redesign: SyntheticUsers | ✅ |
| Epic 4 — Form redesign: FocusGroups + rewrite текстів | ✅ |
| Epic 5 — i18n EN/uk/ru + LanguageSwitcher | ✅ **повністю** |
| Epic 6 — SEO full: helmet, JSON-LD, robots, sitemap, llms.txt | ✅ |
| Epic 7 — AI Admin: model catalog tab | ✅ |
| Full report export (GET /api/focus-groups/{id}/report/download) | ✅ |
| Code audit + bug fixes | ✅ |
| Docker .dockerignore + npm overrides fix | ✅ |
---
## Активне завдання: ЗАВЕРШЕНО
Epic 5 (i18n) повністю реалізований. Всі app pages + лендінг переведені. LanguageSwitcher у AppLayout. Tooltip в Pricing пофіксовано.
## Наступні кроки
- Деплой: `ssh aimpress "bash /opt/03-business/cohorta/deploy-cohorta.sh"`
- Можливі покращення: Zod validation messages в Login/Register (низький пріоритет)
---
## Що зроблено в Epic 5 (i18n)
### Проблема
Лендінг і auth частково перекладені, але:
1. **App pages (після логіну) — 0% перекладу**, весь контент хардкодований англійською
2. **Переключатель мови відсутній** у app layout (є тільки в Header на лендінгу)
### Архітектура i18n (вже налаштована)
```
src/i18n/index.ts — i18next init, detection: localStorage(cohorta_lang) → navigator → 'en'
src/i18n/locales/en/common.json — source of truth
src/i18n/locales/uk/common.json
src/i18n/locales/ru/common.json
src/components/LanguageSwitcher.tsx — 3 pill-кнопки EN/UA/RU (вже є)
```
Поточні namespace в common.json: `nav`, `hero`, `pricing`, `auth`, `language`
### Що потрібно зробити (пріоритет)
#### 1. Додати LanguageSwitcher до app layout
Файл: `src/components/layout/AppLayout.tsx` або `src/pages/*` — знайти де рендериться header для авторизованих сторінок і додати `<LanguageSwitcher />`.
#### 2. Лендінг — компоненти (0% i18n)
- `src/components/landing/FAQ.tsx` — 7 Q&A
- `src/components/landing/HowItWorks.tsx` — 3 кроки
- `src/components/landing/Comparison.tsx` — таблиця
- `src/components/landing/Testimonials.tsx` — відгуки
- `src/components/landing/FeatureGrid.tsx` — фічі
- `src/components/landing/TrustBar.tsx` — мітки
- `src/components/layout/Footer.tsx` — секції + tagline
#### 3. App pages — хардкод
- `src/pages/Dashboard.tsx` — заголовки, мітки
- `src/pages/Admin.tsx` — таби, описи
- `src/pages/MyUsage.tsx` — статистика мітки
- `src/pages/SyntheticUsers.tsx` — toast, placeholder пошуку
- `src/pages/FocusGroups.tsx` — toast, placeholder
- `src/pages/FocusGroupSession.tsx` — 15+ toast, placeholders select-ів
- `src/pages/Billing.tsx` — toast ("Payment successful!", "Credits added…")
#### 4. Форми
- `src/pages/Login.tsx` + `src/pages/Register.tsx` — Zod validation messages
### Нові namespace для common.json
```
faq, how_it_works, comparison, testimonials, features, footer,
dashboard, admin, usage, focus_groups, focus_group_session, billing, synthetic_users
```
### Повний список поточних ключів
Читай `src/i18n/locales/en/common.json` — він source of truth.
---
## Інші відкриті питання
### AdGuard DNS (WiFi недоступність)
AdGuard має wildcard: `*.ai-impress.com``192.168.1.225` (локальний Forgejo).
`cohorta.ai-impress.com` потрібно додати override: `57.128.160.249`.
Конфіг на PVE: `ssh pve "pct exec 102 -- nano /opt/services/adguard/conf/AdGuardHome.yaml"`
Або UI: http://192.168.1.225:8053 → Filters → DNS Rewrites → Add: `cohorta.ai-impress.com``57.128.160.249`
Після змін: `ssh pve "pct exec 102 -- docker restart adguard"`
### Деплой через SSH-ключ (не налаштовано)
`id_rsa` (SHA256:UWsx6bkp) додано в Forgejo але SSH push не працює.
Зараз push через HTTPS токен. Токен: `efde233ee0e4f77116cbd663755e9f23e5e463c5`
---
## Файлова структура (ключові файли)
```
src/
i18n/
index.ts
locales/en/common.json ← source of truth
locales/uk/common.json
locales/ru/common.json
components/
LanguageSwitcher.tsx ← вже є, додати в app layout
layout/Header.tsx ← має LanguageSwitcher (лендінг)
landing/ ← потрібен i18n
focus-group-session/SetupTab.tsx ← переписано в Epic 4
pages/
Dashboard.tsx, Admin.tsx, MyUsage.tsx ← потрібен i18n
Billing.tsx, FocusGroups.tsx, SyntheticUsers.tsx ← потрібен i18n
FocusGroupSession.tsx ← потрібен i18n (найбільший)
backend/
app/routes/focus_groups.py ← додано /report/download endpoint
prompts/report-executive-summary.md ← новий промпт для звіту
I18N_TODO.md ← детальний список що хардкодовано
```
---
## Як почати нову сесію
```
Продовжуємо роботу над Cohorta.
Прочитай HANDOVER.md в корені проекту і I18N_TODO.md.
Активне завдання: реалізуй i18n для всіх app pages і додай LanguageSwitcher в app layout.
Почни з: 1) знайти де рендериться layout для авторизованих сторінок, 2) додати switcher, 3) Dashboard.tsx.
```