🏦 Capital - единый пульт (обзор платформы)

Единый источник правды по платформе Stefa Pay. Всё в демо/sandbox-режиме, живого бизнеса пока нет. Онлайн-версия (с демо-кредами, приватная страница) - вне этого репо; здесь - по правилу capital-kb без секретов (только имена/пути). Обновлено: 16.09.2026 (домены - HTTP-проба 15.09). Прод = main 5127b2b.

Метрики: паритет с Iorys ~88% · расходы ~$71/мес · 2 выделенных сервера · 8 git-репо.


01 · 🔗 Сайты и доступы

Capital - наш прод (LIVE)

Сервис Адрес Статус Вход
Кабинет клиента app.algorys.cc 🟢 LIVE (303→login) демо sandbox-логин (в handoff-файлах проекта)
Back-office (Ledger) bo.algorys.cc 🟢 LIVE (303→login) оператор CEO (пароль мимо чата)
KYC (мост SumSub) kyc.algorys.cc 🟡 up (корня нет) /webhooks/sumsub - HMAC, 401 без подписи

Iorys - демо вендора (референс)

Приложение Адрес
Ledger Admin demo-ledger.s-pay.io
Hub «Connect» demo.s-pay.io
Client Portal demo-portal.s-pay.io

Логины main@s-pay.io / ops1@s-pay.io (одни на все стенды; пароль мимо чата). Старые demo-*.stefa-pay.com мертвы. Iorys - вендорский UI (их IP): делаем оригинальные компоненты под бренд, не клонируем 1:1.

Инфраструктура

capital-prod Hetzner cpx32 · 4c/8GB/160GB · nbg1 · 188.245.104.38 · tailnet 100.113.37.115
capital-ops Hetzner cpx22 · 2c/4GB/80GB · fsn1 · 142.132.228.161 · tailnet 100.93.23.99
SSH только tailnet · ключ ~/.ssh/capital_ed25519 (cc-host) · публичных портов нет (Cloudflare tunnel)
Мониторинг Uptime Kuma http://100.93.23.99:3001 (tailnet-only) · uptime-check cron */5 → Telegram «Neo Infra Alerts»
Почта Resend · домен algorys.cc verified · отправитель no-reply@algorys.cc
GitHub (CryGor11) capital · capital-ledger · capital-portal · capital-shared · capital-kyc · capital-hub (reserved) · capital-kb · capital-support

🔐 Секреты - только по пути (значения мимо чата)

Секрет Где
Серверный .env capital-prod:~/capital/.env (имена: SMTP_PASSWORD · NSCARDS_WEBHOOK_SECRET · RAIL_* · SUMSUB_* · SECRET_KEY)
Hetzner API ~/.config/hcloud/capital_token
Tailscale API ~/.config/tailscale/api_token
Age-ключ бэкапов приватный ~/.config/age/capital-backup.key (только cc-host) · публичный age1wt7dk7…azf3
Git/deploy SSH ~/.ssh/capital_ed25519 · ~/.ssh/github_ed25519

Значения секретов в базе знаний не хранятся. Впрыск/ротацию делает оператор на сервере мимо чата.


02 · 🏗 Архитектура

Стек: FastAPI + async SQLAlchemy 2.0 + Jinja2 (server-rendered) + Postgres · общий пакет capital_shared · схема через Alembic. Три сервиса: cabinet (8101) / backoffice (Ledger) / capital-kyc.

Сквозной поток: от лендинга до платежа

1. Лендинг → Онбординг или Логин
2. Онбординг → Ledger + SumSub (KYC)     ↔ applicantReviewed GREEN/RED (вебхук, HMAC)
3. Ledger: GREEN → авто · RED/on-hold → ручной доп-запрос или отказ
4. Ручное формирование кабинета (счета, карты, реквизиты)
5. Email «счёт активен» → клиент логинится в кабинет (платежи/бенефициары/инвойсы/карты)
6. Платёжное поручение → Ledger: авто (API партнёра + KYT) или вручную   ↔ KYT-скрининг
7. Партнёр-процессинг Papaya (рельсы/ностро, SEPA) - пока симулятор

Топология прод-инфраструктуры

                     Интернет
                        │
          [Cloudflare: WAF / proxy / tunnel]   (публичных портов на серверах нет)
                        │
        ┌───────────────┴───────────────┐
   🖥 capital-prod (nbg1)          🖥 capital-ops (fsn1)
   backoffice/cabinet/kyc          staging (throwaway-БД)
   Postgres 16 · compose           Uptime Kuma · restore-тест
        └──────── бэкапы (age) ─────────┘
                        │
        ☁️ Backblaze B2 (Object Lock) [план, ждёт аккаунт]
        ☁️ Hetzner Storage Box 1TB    [план]

Сейчас (интерим-бэкапы): pg_dump → age → pull на cc-host (ретеншн 30д, restore-тест пройден 15.09). Целевое: pgBackRest + WAL (RPO ≤ 5 мин) → B2 + Storage Box, разные ДЦ, ключ не на prod. HA нет - быстрый DR ≤ 2-4 ч.


03 · 🏦 Ностро и партнёры

Живого ностро у Stefa Pay пока нет. Оба денежных партнёра в коде готовы, крутятся в симуляторе.

🛤 Papaya - рельс/ностро (симулятор, RAIL_SIMULATE=true)

💳 NS Cards - эмитент карт (симулятор, CARDS_SIMULATE=true)

Условия и экономика

Блокер флипа на live (CEO 15.09): оплата инвойсов партнёров. Papaya: + sandbox client_id/secret + VPN/IP-allow. NS Cards: + company API key. Код готов - впрыснуть креды и снять SIMULATE.


04 · 👥 Клиенты

Клиент Что есть Доступ
Демо-клиент id 25 2 счёта EUR+GBP · 8 операций (витрина) sandbox-демо-логин (в handoff)
Боевые клиенты 0 - БД очищена; сохранены операторы (CEO) + 4 тарифа -

Креды будущих реальных клиентов - по ссылке/мимо чата, в базе знаний не хранить.


05 · 💰 Текущие расходы

Факт (ежемесячно)

Статья Продукт $/мес
Prod-сервер Hetzner cpx32 ~€36
Ops/staging Hetzner cpx22 ~€29
Мониторинг / CI / WAF / VPN Kuma, Netdata, Sentry, Healthchecks, GH Actions, Cloudflare, Tailscale $0
Почта Resend (free-tier) $0
Итого сейчас €65 ≈ $71

Планово / разовое

Статья Когда $
Backblaze B2 (Object Lock) ждёт аккаунт ~3-6/мес
Hetzner Storage Box 1TB план ~4/мес
Внешний pentest квартал 1 ~2-3.5k/год
Профи-апгрейд когда пойдут клиенты ~130-150/мес

План был ~$52-55/мес, но цены Hetzner выросли (ccx23 €103 отменён) → факт по серверам ~$71.


06 · ✅ Задачи

Закрыто и LIVE - ядро банка

Новое в main / на проде (16.09)

Открыто - фиче-ветки (ждут ревью + мерж, ПО ОЧЕРЕДИ из-за shared/migrations)

Ветка Что Статус
feature/smooth-transitions плавные переходы + splash (86 тестов) 0ded2ac, готова
feature/onboarding-fixes баги онбординга: websdkLink-тупик, i18n Documents, Send money pending, коднейм, Jurisdictions, блок 6 пишется
feature/treasury-monitor казначейка read-only (см. architecture/09) 32b07e6, доводка до live-данных
feature/xbo-integration XBO USDT-шлюз, auth пробит (см. architecture/08) 3e39f4e: base64-фикс подписи закоммичен+запушен, тесты 182+73 зелёные

Открыто - инфра / внешнее

# Задача Блокер
#17 pgBackRest + WAL → B2 ждёт B2-аккаунт (CEO)
#10 SumSub webhook URL в дашборде CEO прописать
#9 Papaya + NS Cards → live оплата инвойсов (CEO)
#16 messenger-доступ офлайн с 07.08, чинить
#20 security-фиксы CEO личный SSH-ключ · fine-grained PAT · CF Access · age-ключ CEO · MFA Hetzner

07 · 🗺 План действий

Верхнеуровнево - roadmap

Детально - ближайшие действия (по порядку)

  1. Слить фиче-ветки в main ПО ОЧЕРЕДИ (конфликты по shared/models + migrations): smooth-transitions → onboarding-fixes → treasury-monitor → xbo-integration. Ревью каждой; money/auth-критичные - security-review; stage перед продом.
  2. Дизайн-правки кабинета ТОП-5: нативные select/file-input → брендовые · боковая навигация · унификация кнопок/лейблов · пустые состояния · превью курса в Convert. Плюс session-таймаут баг (403/CSRF).
  3. Облачная папка документов клиента - по спеке (storage.py БД-backend, веб-анкета HTML/PDF WeasyPrint, секция «Папка клиента» в Ledger, аудит). Облако ждёт B2-аккаунт.
  4. От CEO (разблокирует): B2-аккаунт → бэкапы · оплата инвойсов Papaya+NS → live · SumSub webhook URL · XBO этап 2 (боевой флип, отдельной сессией) · 5 security-токенов #20.
  5. После слияний: казначейка на live-данные + деплой · инфра-трек месяца 1 (CI/CD + GHCR + staging, уходим от rsync).

Правило владения демо-продом: деплой на прод - только из головного capital, одной рукой; фиче-ветки тестируют на stage-контейнере (дважды 15.09 параллельные сессии роняли демо).