- 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>
6.5 KiB
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 частково перекладені, але:
- App pages (після логіну) — 0% перекладу, весь контент хардкодований англійською
- Переключатель мови відсутній у 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&Asrc/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, placeholdersrc/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.