---
name: codoceh-studio-cabinet
description: Кабинет заказчика на codoceh.ru (заявки/статусы/файлы/оплата) + форж-hero
metadata: 
  node_type: memory
  type: project
  originSessionId: b11e39bd-4f6f-47c9-ba7b-680ccf041a5b
---

**codoceh-studio** — кабинет заказчика студии на **codoceh.ru** (2026-07-01, v0.1). Бэкенд FastAPI `~/Services/codoceh-studio` :8210, launchd `local.codoceh-studio`, БД `data/studio.db`, публично через Next-rewrite `/api/studio/*`→:8210 в `apps/studio` (нового туннеля НЕ добавляли).

Auth — **копия auth-стека Автеро** (`oauth/emailauth/mailer/accounts/webauth/db`, env-префикс `CODOCEH_`, cookie `cds_session`): Email magic-link (relay Postfix :2526, письма уходят), Яндекс/Mail OAuth (redirect `https://codoceh.ru/api/studio/auth/oauth/{p}/callback`). Мульти-идентичность (get_or_create_for_identity/resolve_link).

**Telegram-вход (v0.2) — deep-link+nonce, как в zemlya-web, БЕЗ `/setdomain`** (`app/tg_auth.py`): `POST /auth/telegram/start`→nonce+`t.me/codoceh_bot?start=auth_<nonce>`; встроенный `getUpdates`-поллер @codoceh_bot ловит deep-link и подтверждает nonce **in-process** (бот+веб = один процесс, HMAC-мост zemlya не нужен); `GET /auth/telegram/status?nonce=`→ставит cookie. Фронт: кнопка «Войти через Telegram»+поллинг 2с. Условие: один воркер uvicorn (иначе 409 getUpdates). Старый widget-роут `/auth/telegram` жив, но не используется. E2E (локал+edge) зелёный. См. [[tg_login_widget_fallback]].

Заявки: `"order"`/`order_event`/`order_file`/`payment`; статусы new→discussion→in_progress→review→done(+cancelled); переписка, файлы (25MB, гейт владения), TG-уведомления админу @codoceh_bot. Веб-админка `/admin` (гейт `CODOCEH_ADMIN_EMAILS`/`_ACCOUNT_IDS`). Platega: `/admin/orders/{id}/invoice`→pay.platega.io + webhook `/api/studio/payment/platega` (fail-closed), креды из ВакХантера, один мерчант на всё (payload `order:{id}`).

Фронт: `apps/studio/app/{cabinet,admin}/page.tsx` + общий `_orders_ui.tsx` (OrderDetail — НЕ в page-файле, иначе Next ругается). Ссылка «Кабинет» в шапке.

**Проверено:** локальный + edge E2E (email-вход→заявка→статус→ответ→файл), Platega E2E (invoice→webhook CONFIRMED→succeeded, bad-creds 403). Тест-данные вычищены.

**OAuth Яндекс/Mail — ПОДКЛЮЧЕН 2026-07-07:** отдельные приложения codoceh (не общие с Автеро). Креды в `~/Services/codoceh-studio/.env` (`CODOCEH_OAUTH_YANDEX_CLIENT_ID/_SECRET`, `..._MAILRU_...`; грузятся через `start.sh` → allexport source .env). `/auth/providers` отдаёт yandex+mailru, oauth/start → 302 на провайдера с redirect `https://codoceh.ru/api/studio/auth/oauth/{yandex,mailru}/callback`; кабинет рисует 4 кнопки (проверено headless+скрин). Полный login-callback headless не проверить (нужен согласие+редирект) — зависит от точного redirect_uri в приложении провайдера. Бэкап `.env.bak-oauth-*`.
**Осталось (юзер):** мобильная визуальная приёмка. (`/setdomain` НЕ нужен — TG-вход через deep-link.)

**Hero codoceh.ru:** видео-интро «Кузница» (Veo-ролик A, watermark вычищен delogo → `apps/studio/public/forge.mp4`+постер) в `ForgeHero.tsx` — полноэкранный занавес с надписями «проблемы→удар→решения», один раз за сессию, reduced-motion→skip. На самой странице видео НЕ встраивали (решили: смотрелось как сток-гифка) — страница чистая, bespoke-hero. См. [[kodoceh_web_overview]] [[avtero_rename]] [[vakhunter_platega_live]].
