# 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:@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 для авторизованих сторінок і додати ``. #### 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. ```