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

6.5 KiB
Raw Blame History

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.com192.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.com57.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.