- 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>
146 lines
6.5 KiB
Markdown
146 lines
6.5 KiB
Markdown
# 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.
|
||
```
|