SiwGLUдики
Today (9:00 MSK — 9:00 MSK)
All Time
Findings (19)
Commits & Code Churn
31 Jan — 6 Feb 2026PR Activity
31 Jan — 6 Feb 2026Languages
README
AI Interview Copilot (Nyusha)
Чтобы получить доступ для тестового юзера, можно ввести креды:
login: expert1
pass: pass1AI-помощник для профессиональных интервью. 600 интервью за 10 дней — с консистентными оценками и без выгорания экспертов.
Что это?
AI Interview Copilot — AI-помощник для интервьюеров, который работает в реальном времени во время собеседования.
Решение — AI-copilot автоматизирует рутину:
- До интервью: Анализ CV + GitHub за 2 мин (вместо 15 мин вручную) + персонализированные вопросы
- Во время: Автоматические заметки + live-подсказки вопросов + транскрипция речи
- После: Структурированный отчёт с оценкой за 30 сек (вместо 10 мин вручную)
Архитектура
┌─────────────────────────────────────┐
│ React Frontend (Vite) │
│ - Dashboard (список сессий) │
│ - SessionDetail (интервью) │
│ - CandidateRegistration (публ.) │
│ - InsightsPanel (live insights) │
└────────────────┬────────────────────┘
│ HTTP/JSON + WebSocket
▼
┌─────────────────────────────────────┐
│ FastAPI Backend (Port 9000) │
│ src/app/main.py │
│ - Auth (JWT + cookies) │
│ - Sessions CRUD + Analysis │
│ - Real-time Insights (WS) │
│ - Evaluation (agent + expert) │
│ - ZIP Import │
│ - Serves compiled frontend (SPA) │
└────────────────┬────────────────────┘
│ HTTP (async httpx)
▼
┌─────────────────────────────────────────────────────────────┐
│ Bot Services (same API contract) │
├─────────────────────────────┬───────────────────────────────┤
│ Zoom Bot Service (:8001) │ Daily Bot Service (:8002) │
│ src/zoom-bot-service/ │ src/daily-bot-service/ │
│ - C++ SDK + Subprocess │ - Playwright (headless Chrome)│
│ - Requires Zoom SDK │ - No SDK required │
└─────────────────────────────┴───────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Claude API (Anthropic) │
│ - CV Parsing │
│ - GitHub Analysis │
│ - Interview Plan Generation │
│ - Real-time Insights │
│ - Session Evaluation │
└─────────────────────────────────────┘
Реализованный функционал
Аутентификация (001-expert-auth, 009-user-registration)
- [x] JWT-аутентификация с httpOnly cookies
- [x] Регистрация новых пользователей
- [x] Логин/логаут
Управление сессиями (002-expert-sessions)
- [x] CRUD для интервью-сессий
- [x] Список сессий с фильтрацией и пагинацией
- [x] Присоединение экспертов к сессии
Подготовка к интервью (003-interview-prep)
- [x] Загрузка CV (PDF, до 10MB)
- [x] Парсинг CV через Claude API
- [x] Анализ GitHub-профиля
- [x] Генерация персонализированного плана интервью
- [x] Маппинг навыков на 11 блоков Hard Skills
Проведение интервью (004-expert-join-session)
- [x] Присоединение к сессии по Zoom URL
- [x] Интеграция с Zoom Bot Service
- [x] Старт/завершение интервью
Real-time Insights (005-realtime-insights)
- [x] WebSocket для live-обновлений
- [x] Транскрипция речи в реальном времени
- [x] AI-анализ транскрипта каждые 30 сек
- [x] Категории инсайтов: противоречия, подтверждения, предложенные вопросы, подсказки
- [x] Трекинг покрытия плана интервью
Оценка кандидата (006-session-evaluation)
- [x] Автоматическая оценка агентом (100 баллов)
- [x] 4 критерия: Hard Skills (50), Опыт (20), Мотивация (15), Soft Skills (15)
- [x] Оценка экспертами с комментариями
- [x] Обоснование с цитатами из транскрипта
Интеграция с Zoom API (007-auto-zoom-links)
- [x] Автоматическая генерация Zoom-ссылок
- [x] OAuth2 авторизация с Zoom
Массовый импорт (008-zip-session-import)
- [x] Импорт сессий из ZIP-архива
- [x] Структура: папка/meta.json + *.pdf
- [x] Детекция дубликатов
- [x] Пакетный анализ CV
Регистрация кандидатов (005-candidate-registration)
- [x] Публичная форма регистрации
- [x] Генерация временных слотов
- [x] Согласие на обработку ПД (152-ФЗ)
API Endpoints
Аутентификация
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/auth/login |
Логин |
| POST | /api/auth/register |
Регистрация |
| GET | /api/auth/me |
Текущий пользователь |
| POST | /api/auth/logout |
Логаут |
Сессии
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/sessions |
Список сессий |
| POST | /api/sessions |
Создать сессию |
| GET | /api/sessions/{id} |
Детали сессии |
| PATCH | /api/sessions/{id} |
Обновить заметки |
| POST | /api/sessions/join |
Присоединиться по Zoom URL |
| GET | /api/sessions/{id}/experts |
Список экспертов сессии |
Подготовка к интервью
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/sessions/{id}/cv |
Загрузить CV |
| GET | /api/sessions/{id}/analysis-status |
Статус анализа |
| GET | /api/sessions/{id}/profile |
Профиль кандидата |
| GET | /api/sessions/{id}/plan |
План интервью |
| POST | /api/sessions/{id}/analyze |
Перезапустить анализ |
Проведение интервью
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/sessions/{id}/start-interview |
Начать интервью |
| POST | /api/sessions/{id}/end-interview |
Завершить интервью |
| GET | /api/sessions/{id}/insights |
Получить инсайты |
| WS | /api/insights/ws/{id} |
WebSocket для live-инсайтов |
Оценка
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/sessions/{id}/evaluations |
Все оценки сессии |
| POST | /api/sessions/{id}/evaluations/expert |
Сохранить оценку эксперта |
| POST | /api/sessions/{id}/evaluations/agent/restart |
Перезапустить оценку агента |
ZIP-импорт
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /api/sessions/import-zip |
Загрузить ZIP |
| GET | /api/sessions/import-zip/{job_id}/status |
Статус импорта |
| POST | /api/sessions/import-zip/{job_id}/confirm |
Подтвердить дубликаты |
Публичные (без авторизации)
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/public/slots/dates |
Доступные даты |
| GET | /api/public/slots/{date} |
Слоты на дату |
| POST | /api/public/candidate/register |
Регистрация кандидата |
Tech Stack
Backend
- Python 3.12+ — основной язык
- FastAPI — веб-фреймворк
- SQLite — база данных (
/data/nyusha.db) - python-jose — JWT-токены
- httpx — асинхронные HTTP-запросы
- websockets — WebSocket клиент
- Anthropic SDK — Claude API
- PyMuPDF/pdfplumber — парсинг PDF
- APScheduler — фоновые задачи (cleanup)
- loguru — логирование
Frontend
- React 18 — UI-фреймворк
- Vite — сборщик
- JavaScript (ES6+)
Bot Services
- Docker + Docker Compose
- Zoom Bot: C++ (Zoom Meeting SDK), Xvfb, PulseAudio
- Daily Bot: Python, Playwright (headless Chromium)
AI
- Claude API (Anthropic) — анализ CV, GitHub, генерация планов, инсайты, оценка
Структура проекта
nyusha-ai-assistant/
├── src/
│ └── app/
│ ├── main.py # FastAPI application
│ ├── auth.py # JWT authentication
│ ├── database.py # SQLite setup + migrations
│ ├── models.py # Pydantic models
│ ├── repositories/ # Data access layer
│ ├── services/ # Business logic
│ │ ├── agent/ # Claude API agents
│ │ │ └── prompts/ # Agent prompts (md files)
│ │ ├── session_service.py
│ │ ├── evaluation_service.py
│ │ ├── insights_service.py
│ │ ├── import_service.py
│ │ └── ...
│ └── tasks/ # Background tasks
├── frontend/
│ └── src/
│ ├── pages/ # React pages
│ │ ├── Dashboard.jsx
│ │ ├── SessionDetail.jsx
│ │ ├── CreateSession.jsx
│ │ └── CandidateRegistration.jsx
│ ├── components/ # React components
│ │ ├── InsightsPanel/
│ │ ├── CandidateProfile.jsx
│ │ ├── EvaluationForm.jsx
│ │ └── ...
│ └── services/ # API clients
├── docker/ # Dockerfiles
├── docs/ # Documentation
└── data/ # SQLite database
Команды
# Setup
make install # Install all dependencies (backend + frontend)
# Development
make dev # Backend + frontend (without Docker bot)
make dev-backend # FastAPI on :9000 only
make dev-frontend # Vite dev server only
make dev-full # Backend + frontend + Zoom bot (Docker)
make dev-daily # Backend + frontend + Daily.co bot (Docker)
# Zoom Bot Service (Docker)
make zoom-bot-up # Start zoom-bot-service on :8001
make zoom-bot-down # Stop zoom-bot-service
make zoom-bot-logs # View logs
make zoom-bot-build # Rebuild image
# Daily Bot Service (Docker)
make daily-bot-up # Start daily-bot-service on :8002
make daily-bot-down # Stop daily-bot-service
make daily-bot-logs # View logs
make daily-bot-build # Rebuild image
# Build
make build # Build frontend for production
# Deployment (Yandex Cloud)
make deploy # Sync + build + start on remote server
make deploy-sync # Sync files only (no restart)
make deploy-start # Restart containers on server
make deploy-stop # Stop containers
make deploy-logs # View remote logs
make deploy-status # Check remote status
# Utilities
make clean # Remove build artifacts
make clean-all # Remove venv, node_modules, builds
Environment
Создайте файл .env в корне проекта:
# Anthropic API (обязательно)
ANTHROPIC_API_KEY=sk-ant-...
# Bot service URL
ZOOM_BOT_SERVICE_URL=http://localhost:8002 # Daily.co или :8001 для Zoom
# Zoom API (опционально, для автогенерации ссылок)
ZOOM_ACCOUNT_ID=...
ZOOM_CLIENT_ID=...
ZOOM_CLIENT_SECRET=...
# Daily.co (опционально)
DAILY_API_KEY=...
Database Schema
| Таблица | Описание |
|---|---|
users |
Пользователи (эксперты) |
sessions |
Интервью-сессии |
session_experts |
Связь сессий с экспертами |
time_slots |
Временные слоты для записи |
candidate_registrations |
Регистрации кандидатов |
agent_evaluations |
Оценки агента |
expert_evaluations |
Оценки экспертов |
import_jobs |
Задачи ZIP-импорта |
AI Agents (Prompts)
Промпты агентов находятся в src/app/services/agent/prompts/:
| Файл | Назначение |
|---|---|
cv_parsing.md |
Парсинг CV, извлечение структурированных данных |
github_analysis.md |
Анализ GitHub-профиля |
plan_generation.md |
Генерация персонализированного плана интервью |
insights_analysis.md |
Real-time анализ транскрипта |
evaluation_scoring.md |
Финальная оценка кандидата (100 баллов) |
Deployment & Infrastructure
Production Architecture
┌──────────────────────────┐
│ Yandex Cloud VM │
│ 158.160.143.201 │
│ │
User ──► :80 nginx ──►│──► 127.0.0.1:3000 │
│ Docker (FastAPI+React)│
│ │
│ WireGuard VPN Client │
│ 10.66.66.2 │
└──────────┬───────────────┘
│ WireGuard tunnel
│ (UDP :51820)
┌──────────▼───────────────┐
│ Hetzner VPN Gateway │
│ 65.109.168.104 │
│ WireGuard Server │
│ 10.66.66.1 │
└──────────┬───────────────┘
│ NAT (MASQUERADE)
▼
OpenRouter, Deepgram, etc.
Why VPN?
Yandex Cloud (RU) blocks access to some external APIs (OpenRouter, Deepgram).
All outbound traffic from the Yandex VM is routed through a WireGuard VPN tunnel
to a Hetzner server in Germany, which acts as a NAT gateway.
Servers
| Alias | IP | Location | Role |
|---|---|---|---|
ssh inna-ai |
158.160.143.201 | Yandex Cloud (RU) | Application server |
ssh hetzner-main |
65.109.168.104 | Hetzner (DE) | WireGuard VPN gateway |
Deployment
make deploy # Full deploy: rsync files → docker build → start
make deploy-sync # Sync files only
make deploy-start # Rebuild and restart containers
make deploy-stop # Stop containers
make deploy-logs # Tail container logs
make deploy-status # Show container status
make deploy runs rsync (excludes .venv, node_modules, .git, data) to ~/nyusha-ai
on the Yandex Cloud VM, then builds and starts via docker compose -f docker-compose.prod.yml.
Production Stack
- nginx — reverse proxy on port 80, proxies to Docker container on 127.0.0.1:3000
- Docker — runs
backend.Dockerfile(Python 3.12 + Node.js build + FastAPI) - WireGuard — full-tunnel VPN client (
AllowedIPs = 0.0.0.0/0) to Hetzner gateway
SSL (when DNS is ready)
ssh inna-ai "sudo certbot --nginx -d inna-ai.ru -d www.inna-ai.ru --non-interactive --agree-tos -m your@email.com"
Certbot auto-configures nginx for HTTPS and sets up auto-renewal.
Compliance (152-ФЗ)
- Согласие кандидата на обработку ПД перед регистрацией
- Согласие эксперта при создании сессии
- Автоматическое удаление данных через 90 дней (APScheduler)
- Audit log всех действий
- Анонимизация данных перед отправкой в Claude API
Документация
- 11-tech-spec-mvp.md — Tech Spec
- 12-legal-compliance.md — Юридические требования
- 09-lean-canvas.md — Lean Canvas
- CLAUDE.md — Инструкции для Claude Code
Команда
- Герман — Hacker (разработчик)
- Надя — Hipster (UX/Product)
- Саша — Hustler (бизнес, метрики)
Лицензия
Private - All rights reserved
Последнее обновление: 2026-02-10