Back to Overview

SiwGLUдики

team06
RED Service down Connection failed Timeout or DNS error

Today (9:00 MSK — 9:00 MSK)

0
Commits
0
PRs Merged
0
PRs Opened
0
Issues Opened
0
Issues Closed

All Time

144
Commits
5
PRs Merged
5
PRs Opened
0
Issues Opened
0
Issues Closed
$41.89
API Usage

Product Testing

Last tested: 2026-02-06 16:00
PDF DOCX
8.2
Overall
8
ux
8
functionality
9
performance
ux (8/10)
Интерфейс интуитивно понятен и хорошо структурирован. Навигация работает как якорные ссылки, плавно прокручивая к нужным секциям. Демо-режим впечатляет - показывает полный цикл работы платформы от панели управления до итоговой оценки. Переключатели табов (Университеты/Компании) работают корректно. Форма входа имеет базовую валидацию. Однако есть UX-проблемы: кнопка 'Попробовать' в хедере не делает ничего очевидного, сообщение об ошибке входа на английском, а на мобильной версии отсутствует бургер-меню для навигации.
functionality (8/10)
Основной функционал лендинга работает отлично. Демо-режим показывает впечатляющий набор функций: панель управления сессиями, профиль кандидата с ИИ-анализом CV и GitHub, план интервью с таймингами и вопросами, интеграция с Zoom и real-time ИИ-подсказки, итоговая оценка с рекомендациями. Форма входа работает с валидацией. Внешние ссылки (Telegram, email) функционируют. Фильтры в демо-панели отображаются, но не фильтруют данные (демо-режим). Кнопка 'Новая сессия' не активна в демо.
performance (9/10)
Сайт загружается очень быстро. Все переходы между страницами мгновенные благодаря SPA-архитектуре. Нет заметных задержек при навигации, прокрутке или взаимодействии с элементами. Единственная ошибка в консоли - 401 при проверке авторизации, что является ожидаемым поведением для неавторизованного пользователя.

Findings (19)

high bug Сообщение об ошибке авторизации на английском языке: 'Invalid login or password' вместо русского
high bug Консольная ошибка 401 при каждой загрузке страницы (api/auth/me)
high bug Кнопка 'Попробовать' в хедере не выполняет видимого действия
high bug Broken: Кнопка 'Попробовать' в хедере - нет видимого действия
high bug Broken: Фильтры в демо-панели управления - отображаются но не работают

Commits & Code Churn

31 Jan — 6 Feb 2026

PR Activity

31 Jan — 6 Feb 2026

Languages

README

AI Interview Copilot (Nyusha)

Чтобы получить доступ для тестового юзера, можно ввести креды:
login: expert1
pass: pass1

AI-помощник для профессиональных интервью. 600 интервью за 10 дней — с консистентными оценками и без выгорания экспертов.

Status
Stage
License


Что это?

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] Обоснование с цитатами из транскрипта
  • [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

Документация


Команда

  • Герман — Hacker (разработчик)
  • Надя — Hipster (UX/Product)
  • Саша — Hustler (бизнес, метрики)

Лицензия

Private - All rights reserved


Последнее обновление: 2026-02-10

Events History

Total: 154 events
C Merge branch '010-expert-slot-kanban' germankochnev 02-06 03:28
M Update unit-econimic noviyblock 02-05 20:49
PR Update unit-econimic noviyblock 02-05 20:49
C Update unit-econimic chernykh_alexander 02-05 20:46
C Merge branch 'feature/offer' germankochnev 02-05 14:47
C asd Tsoy Nadya 02-05 14:43
M Update promts and metrics noviyblock 02-05 14:40
PR Update promts and metrics noviyblock 02-05 14:40
C Update promts and metrics chernykh_alexander 02-05 14:39
C Merge branch 'feature/offer' germankochnev 02-05 14:00
C asd Tsoy Nadya 02-05 13:59
C Merge branch 'feature/offer' germankochnev 02-05 13:54
C ya ustal Tsoy Nadya 02-05 13:51
M Update 17-experiments-and-metrics noviyblock 02-05 13:43
PR Update 17-experiments-and-metrics noviyblock 02-05 13:41
C Update 17-experiments-and-metrics chernykh_alexander 02-05 13:41
C archive Tsoy Nadya 02-05 12:37
C head page ui Tsoy Nadya 02-05 12:19
M Feature/update readme and prompts noviyblock 02-05 12:18
PR Feature/update readme and prompts noviyblock 02-05 12:14
Page 1 of 4