Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП. Хакатон Федерации спортивного программирования 2026, команда «Команда 1».
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП. Хакатон Федерации спортивного программирования 2026, команда «Команда 1». Кандидат проходит тест на грейд и получает категорию «направление · грейд», к профилю подтягиваются достижения из реестра ФСП. Работодатель описывает потребность и получает подборку проверенных кандидатов с объяснимым баллом соответствия, смотрит тест под вакансию и приглашает с вилкой зарплаты. Контакты кандидата открываются только после его согласия. Состояние по main 0.1.0 (10.10.2026) — версия к сдаче.檢視完整 README ↗
| Что | Адрес |
|---|---|
| Прототип | https://hyrekit.ru — стенд в Yandex Cloud; экспресс-тест без регистрации — https://hyrekit.ru/express. Локально прототип поднимается одной командой (Инструкция запуска) |
| Описание API (Swagger) | https://hyrekit.ru/docs, локально — http://localhost:8000/docs |
| Репозиторий | https://github.com/Fighter90/hyrekit_fsp |
| Сопроводительная документация | docs/guide/README.md, одним файлом — docx и pdf |
| Инструкция для жюри | docs/jury.md — стенд, демо-аккаунты, экспресс-тест за 5 минут, что посмотреть работодателем |
| Демо-видео (3 минуты, титры) | HyreKit_demo.mp4: тест, автопроверка, Code Arena, разбор модели, подборка и приглашение |
| Презентация (питч на 10 минут, шаблон ФСП) | pptx и pdf, 23 слайда, заметки докладчика в pptx |
Платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП. Хакатон Федерации спортивного программирования 2026, команда «Команда 1».
Кандидат проходит тест на грейд и получает категорию «направление · грейд», к профилю подтягиваются достижения из реестра ФСП. Работодатель описывает потребность и получает подборку проверенных кандидатов с объяснимым баллом соответствия, смотрит тест под вакансию и приглашает с вилкой зарплаты. Контакты кандидата открываются только после его согласия.
Состояние по
main0.1.0 (10.10.2026) — версия к сдаче.Работает без ключей и внешних сервисов:
- оба кабинета и лендинг в фирменном стиле ФСП, адаптив от 360 px, анимации с учётом «уменьшить движение»;
- тест на грейд: 10 параметрических заданий из 36 семейств по 14 темам, оценка по модели Раша, категория или предложение пересдать уровнем ниже, пересдача через 90 дней;
- подборка под потребность с разбивкой балла, фильтры, банк кандидатов, тест под вакансию с двумя вариантами равной сложности;
- приглашения, отклики, раскрытие контактов, короткие задания;
- достижения ФСП из эмулятора реестра, рейтинг внутри категории;
- демо-аккаунты и синтетический банк из 120 кандидатов, подтверждение почты через Mailpit.
С ключами LLM (GigaChat, в резерве YandexGPT): разбор PDF/DOCX-резюме, оценка ответов на короткие задания и разбор решений Code Arena моделью; без ключей — правила. Все интеграции — в разделе Интеграции.
Вход и привязка через ФСП ID по OpenID Connect: встроенный тестовый провайдер, Keycloak ФСП подключается переменными
FSP_OIDC_*.Не входит в MVP: реальный реестр ФСП, модерация работодателей, интеграция с ATS — схемы в docs/guide/04-arhitektura.md.
История версий — CHANGELOG.md.
Нужно: Docker 24+ с Compose v2 и 2 ГБ свободной памяти. Ключи не нужны.
git clone https://github.com/Fighter90/hyrekit_fsp.git
cd hyrekit_fsp
cp .env.example .env
docker compose up -d --build
| Что | Адрес |
|---|---|
| Приложение | http://localhost:3000 |
| Swagger UI | http://localhost:8000/docs |
| Письма подтверждения (Mailpit) | http://localhost:8025 |
Проверка «получилось»: curl -s http://localhost:8000/health отвечает {"status":"healthy",...}, docker compose ps показывает app, db, redis, mailpit и frontend в состоянии healthy или running.
При первом старте API применяет миграции (alembic upgrade head) и создаёт демо-данные. Демо-аккаунты, пароль у всех HyreKit2026:
| Роль | Почта | Что внутри |
|---|---|---|
| Кандидат | [email protected] | Пустой профиль — путь проходится с нуля |
| Работодатель | [email protected] | Компания «ТехноПлатформа», 3 вакансии с подборками, 2 коротких задания |
| Синтетические кандидаты | [email protected] … [email protected] | Прошли тест через симуляцию по модели валидации |
Экспресс-тест для жюри (пошагово — docs/jury.md). На главной ссылка «Экспресс-тест за 5 минут без регистрации» ведёт на /express: выберите направление и грейд, отметьте согласие и пройдите 5 заданий. Каждый запуск создаёт отдельного гостевого кандидата, поэтому эксперты не мешают друг другу. После теста войдите как [email protected] — гость будет в подборке и банке кандидатов. Выключается переменной GUEST_MODE=false.
Вход через ФСП ID. На странице входа кнопка «Войти через ФСП ID», в настройках кандидата «Привязать через ФСП ID» (OpenID Connect, FSP-20). Пока Keycloak ФСП недоступен, работает встроенный тестовый провайдер: участники FSP-123457 и FSP-123450, пароль fsp2026. Подтверждённый ФСП ID работодатель видит с отметкой «подтверждён ФСП ID».
Запуск без Docker и PostgreSQL (SQLite) — в Быстром старте для разработчика. Демо-сценарий за 5 минут — docs/guide/05-zapusk-i-demo.md.
| Параметр | Значение |
|---|---|
| Команда | Команда 1 |
| Трек | «Цифровая платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП» |
| Хакатон | Хакатон Федерации спортивного программирования, 2026 |
| Участник | Роль |
|---|---|
| Яков Дятлов (@iakov_is) | product manager |
| Ирина Живова (@IrinaZhivova) | product manager |
| Сергей Емельянов (@sergey_in_job) | backend developer |
| Алиса Живова (@AlisaZhivova) | аналитик |
Работодатель тратит часы на резюме, где грейд заявлен, но не подтверждён, а сильные олимпиадники и участники соревнований ФСП теряются среди шаблонных откликов. Кандидат не может показать, что его Middle — действительно Middle.
Не кандидат ищет вакансию, а работодатель находит кандидата:
Задания не хранятся списком: 23 из 36 семейств генерируют условие из случайных данных и вычисляют ответ, поэтому утёкшие ответы к новой попытке почти не подходят. По валидации на синтетических кандидатах Junior со шпаргалкой из 200 чужих попыток сдаёт Middle в 29,7 % случаев против 19,3 % честно — и в 100 % при статичном тесте. Все цифры — docs/validation/results.md, методика — docs/guide/03-metodika-ocenki.md.
Реестр ФСП эмулируется детерминированно по ФСП ID (ID на 0 — участник без истории); замена на реальный API — одна реализация интерфейса FspProvider. Модель (GigaChat или YandexGPT) не генерирует и не проверяет задания теста: сопоставимость сложности важнее.
Интерфейс в фирменном стиле ФСП: официальный кириллический логотип федерации в связке с HyreKit, графитовая основа, синий #402FFF и красный #EC1D35, шрифты JetBrains Mono и TDAText. Токены и правила — DESIGN.md.
| Лендинг | Подборка работодателя |
|---|---|
| Тест на грейд | Тест под вакансию |
| Телефон: кабинет кандидата | Телефон: подборка | Телефон: тестирование |
|---|---|---|
Движение: блоки проявляются по очереди, карточки подсвечиваются за курсором, у главных кнопок бегущая рамка, у заголовка лендинга короткий глитч, таймер теста пульсирует в последнюю минуту. Настройка «уменьшить движение» всё это выключает. Все 18 скриншотов — docs/assets/screens/.
Задачи ведутся в Linear, проект «HyreKit — платформа подбора ИТ-специалистов (ФСП)», ключи FSP-N. Что в main:
| Блок | Задачи | Что сделано |
|---|---|---|
| Профиль кандидата | FSP-22…FSP-25 | Профиль, разбор PDF/DOCX-резюме, приватность и согласие, PDF-профиль |
| Достижения ФСП | FSP-26 | Эмулятор реестра, балл ФСП, отметка «профильное» |
| ФСП ID | FSP-20 | Вход и привязка через ФСП ID по OpenID Connect, встроенный тестовый провайдер, Keycloak ФСП через FSP_OIDC_* |
| Тестирование | FSP-27…FSP-31 | Опрос, банк семейств, план попытки, оценка θ, решение по грейду, пересдача |
| Экспресс-тест | FSP-32 | Тест за 5 минут без регистрации для жюри, гостевой кандидат |
| Честный порог | FSP-61 | Грейд подтверждается только большинством верных ответов на уровне грейда, одинаково для полного и экспресс-теста |
| Калибровка | FSP-33 | Статус семейств заданий, исключение утёкших, мониторинг дрейфа (scripts/calibrate.py) |
| Подбор | FSP-43…FSP-45 | Подборка с объяснением, фильтры, банк кандидатов, тест под вакансию |
| Найм | FSP-46, FSP-50, FSP-51 | Приглашения, вакансии и отклики, короткие задания |
| Демо-данные | FSP-17 | Демо-аккаунты, 120 синтетических кандидатов |
| Валидация | FSP-54, FSP-55 | scripts/validate.py, отчёт в docs/validation/results.md |
| Браузерный тест | FSP-56 | scripts/e2e.cjs: сквозной сценарий в браузере локально и на hyrekit.ru |
| LLM | FSP-22, FSP-36, FSP-51 | Цепочка GigaChat → YandexGPT → правила, GET /api/v1/llm/status |
| Code Arena | FSP-36…FSP-42 | Задачи по коду в браузере (Python, JavaScript), песочница на Landlock и seccomp, вердикты по тестам, разбор решения моделью (GigaChat, резерв YandexGPT) или правилами, таблица в реальном времени, рейтинг Glicko-2 в подборке, раунды и витрина работодателя |
Спецификации каждого блока — docs/specs/, журнал — docs/progress.md.
| Кабинет | Экраны |
|---|---|
| Кандидат | Главная, Профиль, Тестирование, Приглашения, Вакансии, Code Arena, Челленджи, Настройки |
| Работодатель | Главная, Компания, Потребности (подборка и тест под вакансию), Банк кандидатов, Избранное, Приглашения и отклики, Code Arena, Челленджи, Настройки |
Регистрация с выбором роли, подтверждение почты по ссылке. Кабинеты разделены по ролям на уровне API.
[email protected] / HyreKit2026.FSP-123457.[email protected] → «Потребности» → «Python backend-разработчик» → подборка → «Пригласить».Нужно: Python 3.11+, Node.js 20+.
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt
PATH=$PWD/.venv/bin:$PATH scripts/dev.sh # API на :8000, база — файл .dev.db (SQLite)
cd frontend && npm ci && npm run dev # http://localhost:5173, /api проксируется на :8000
Только PostgreSQL и Redis в Docker, код локально: docker compose -f docker-compose.infra.yml up -d.
Разработка в OpenCode: настройка уже в репозитории (opencode.json, .opencode/) — правила, Linear и GitHub через MCP, агенты @spec и @review, команды /task FSP-N, /check, /docs, /e2e. Подключение — docs/opencode.md.
Образец — .env.example.
| Переменная | По умолчанию | Назначение |
|---|---|---|
SECRET_KEY | — (обязательна) | Подпись JWT; в production слабый ключ останавливает запуск |
DATABASE_URL | PostgreSQL на localhost | postgresql+asyncpg://… или sqlite+aiosqlite:///… |
REDIS_URL | redis://localhost:6379/0 | Лимиты запросов |
ENVIRONMENT | development | production включает строгие проверки |
CORS_ORIGINS | localhost | Разрешённые адреса фронтенда |
GIGACHAT_CREDENTIALS | пусто | Authorization Key GigaChat (developers.sber.ru); без ключа провайдер пропускается |
GIGACHAT_SCOPE, GIGACHAT_MODEL | GIGACHAT_API_PERS, GigaChat | Параметры GigaChat |
YANDEX_GPT_API_KEY | пусто | API-ключ Yandex AI Studio (сервисный аккаунт с ролью ai.languageModels.user); резервный провайдер |
YANDEX_GPT_FOLDER_ID | пусто | ID каталога Yandex Cloud для YandexGPT |
YANDEX_GPT_MODEL | yandexgpt-lite/latest | Модель YandexGPT |
LLM_PROVIDERS | gigachat,yandexgpt | Порядок опроса провайдеров; если не ответил никто, работают правила |
SEED_DEMO | true | Демо-аккаунты и синтетический банк при старте |
CALIBRATION_INTERVAL_MINUTES | 60 | Как часто пересчитывать статус семейств заданий и исключать утёкшие (FSP-33); 0 — выключено |
GUEST_MODE | true | Экспресс-тест для жюри без регистрации (POST /api/v1/auth/guest) |
FSP_OIDC_ISSUER | пусто | Адрес провайдера ФСП ID (Keycloak realm). Пусто — встроенный тестовый провайдер (FSP-20) |
ruff check src tests scripts && ruff format --check src tests scripts # линтер и формат
pytest --cov=app # тесты бэкенда с покрытием
PYTHONPATH=src python scripts/validate.py # валидация методики
PYTHONPATH=src python scripts/calibrate.py # статус семейств заданий, исключение утёкших
cd frontend && npm run lint && npm run build && npm test # фронтенд
python scripts/smoke.py # дымовая проверка поднятого стенда
node scripts/e2e.cjs --base http://localhost:5173 # сквозной сценарий в браузере (Playwright)
python scripts/load.py # нагрузка: p50/p95 ключевых операций
docker compose logs -f app # логи API
Монолит FastAPI с модулями по предметным блокам и SPA на React за nginx.
flowchart TB
Browser[Браузер: React SPA] -->|HTTPS| Nginx[nginx: статика + прокси /api]
Nginx --> API[FastAPI]
API --> PG[(PostgreSQL 16)]
API --> Redis[(Redis 7)]
API -->|SMTP| Mail[Почта / Mailpit]
API -->|по ключу| Giga[GigaChat]
API -.->|резерв, по ключу| YGPT[YandexGPT]
API -.->|FspProvider| FSP[Реестр ФСП: эмулятор]
| Слой | Технология |
|---|---|
| Фронтенд | React 19, TypeScript, Vite 6, vitest |
| API | FastAPI, Pydantic v2, async SQLAlchemy 2, Alembic |
| Данные | PostgreSQL 16 (в разработке SQLite), Redis 7 |
| LLM | GigaChat, резерв YandexGPT, без ключей — правила |
Методика (assessment.bank, assessment.engine, matching.service) — чистые функции без базы: их проверяют и юнит-тесты, и скрипт валидации. Подробно — docs/guide/04-arhitektura.md, модель данных — docs/schema.md, контракт API — docs/spec/api.md.
| Интеграция | Что даёт | Как подключена | Без неё |
|---|---|---|---|
| GigaChat (Сбер) | Разбор резюме, оценка ответов на короткие задания, разбор решений Code Arena | SDK gigachat, src/app/llm/gigachat.py; ключ GIGACHAT_CREDENTIALS | Запрос уходит в YandexGPT |
| YandexGPT (Yandex AI Studio) | Те же функции, резервный провайдер | REST Foundation Models API, src/app/llm/yandexgpt.py; YANDEX_GPT_API_KEY, YANDEX_GPT_FOLDER_ID | Работают правила |
| ФСП ID (OpenID Connect) | Вход и подтверждённая привязка ФСП ID | Authorization Code + PKCE, src/app/fsp/oidc.py; FSP_OIDC_* | Встроенный тестовый провайдер /api/v1/fsp-id |
| Реестр достижений ФСП | Достижения и балл ФСП в профиле и подборке | Интерфейс FspProvider, src/app/fsp/provider.py | Детерминированный эмулятор по ФСП ID |
| Почта (SMTP) | Письмо для подтверждения адреса | src/app/core/mailer.py; SMTP_* | Ссылка подтверждения пишется в лог; локально письма в Mailpit |
| Yandex Cloud | ВМ Compute Cloud, Container Registry, статический IP, снимки диска | deploy/yc/deploy.sh | Локальный запуск через Docker Compose |
| DNS Timeweb и Let's Encrypt | Домен hyrekit.ru и сертификат | deploy/yc/deploy.sh, Caddy | Доступ по IP |
Все вызовы модели идут через цепочку src/app/llm/chain.py. Запрос получает первый настроенный провайдер из LLM_PROVIDERS (по умолчанию gigachat,yandexgpt). Если он не ответил, отказал в авторизации или вернул ответ без JSON, запрос повторяется у следующего. Если не ответил никто, результат строят правила. Пользователь всегда получает ответ. У разбора резюме и разбора решения Code Arena подпись в интерфейсе и поле source в API показывают, кто его написал: gigachat, yandexgpt или rules. Оценка коротких заданий возвращает только балл и отзыв, без source.
| Где | Что пишет модель | Что делают правила |
|---|---|---|
Разбор резюме (candidates.resume_parser) | ФИО, контакты, стек, роли, стаж, софт-скиллы в JSON, сливается с правилами | Регулярные выражения и словари технологий |
Короткие задания (challenges.service) | Балл по рубрике и отзыв | Эвристика по полноте и ключевым словам |
Разбор решения Code Arena (arena.feedback) | Где и почему упало решение, до пяти замечаний по коду | Шаблоны по вердикту, типичные ошибки задачи, статический разбор кода |
Модель не генерирует и не проверяет задания теста, не влияет на грейд и подборку (ADR 0002).
Как получить ключи:
GIGACHAT_CREDENTIALS, скоуп GIGACHAT_API_PERS для физлиц.ai.languageModels.user в каталоге Yandex Cloud, API-ключ в YANDEX_GPT_API_KEY, ID каталога в YANDEX_GPT_FOLDER_ID.Проверка: GET /api/v1/llm/status под любым входом показывает по каждому провайдеру, задан ли ключ, ответил ли проверочный запрос, ошибку, задержку (кэш 5 минут) и последнюю ошибку в рабочих запросах. Спека — docs/specs/llm-provajdery.md.
.
├── src/app/
│ ├── assessment/ # банк семейств, план попытки, оценка θ, тест под вакансию, симуляция
│ ├── matching/ # подборка и балл соответствия
│ ├── candidates/ # профиль, резюме, PDF-профиль, приватность
│ ├── employers/ # компания, вакансии, банк кандидатов
│ ├── hiring/ # приглашения и отклики
│ ├── challenges/ # короткие задания
│ ├── arena/ # Code Arena: песочница, задачи, раунды, рейтинг, разбор решений
│ ├── fsp/ # реестр ФСП (интерфейс и эмулятор), вход через ФСП ID (OIDC) и тестовый провайдер
│ ├── auth/ catalog/ llm/ ml/ core/
│ └── main.py
├── frontend/ # React SPA: лендинг, кабинеты кандидата и работодателя
├── tests/ # pytest: сквозной сценарий, методика, ядро
├── scripts/ # dev.sh, validate.py, calibrate.py, smoke.py, e2e.cjs, load.py, export_openapi.py, build_docs.py, render_diagrams.cjs
├── alembic/ # миграции
├── deploy/yc/ # площадка Yandex Cloud: deploy.sh, cloud-init, compose, Caddy
├── docs/
│ ├── guide/ # сопроводительная документация 1–7
│ ├── specs/ # спецификации задач FSP-N
│ ├── decisions/ # ADR
│ ├── spec/api.md # контракт API
│ ├── validation/ # результаты валидации методики
│ ├── presentation/ # питч pptx и pdf на шаблоне ФСП, демо-видео, скриншоты стенда, скрипты сборки
│ ├── jury.md # инструкция для жюри
│ ├── opencode.md # разработка в OpenCode: подключение, агенты, команды
│ └── assets/ # логотип, скриншоты
├── .opencode/ # агенты и команды OpenCode (opencode.json — в корне)
├── PRODUCT.md CONTEXT.md DESIGN.md AGENTS.md CHANGELOG.md
└── docker-compose.yml
Задачи — Linear, ключи FSP-N. Спецификация до кода — docs/specs/, контракт API — docs/spec/api.md, решения — docs/decisions/.
Подробно — docs/process.md.
| Что | Как |
|---|---|
| Бэкенд | pytest, 276 тестов, покрытие 83 % при пороге 70 % |
| Сквозной сценарий | tests/test_flow.py: регистрация → опрос → тест → категория → подборка → приглашение → контакты |
| Методика | tests/test_method/: каждое семейство на всех уровнях, монотонность θ, правила грейда, подбор, ФСП |
| Фронтенд | vitest, 43 теста; ESLint; сборка TypeScript |
| Стенд | scripts/smoke.py против поднятого docker compose: 28 шагов от регистрации с письмом до раскрытия контактов, отклика и короткого задания |
| Браузер | scripts/e2e.cjs (Playwright) против SPA локально или на hyrekit.ru: 23 шага — регистрация, опрос и тест в интерфейсе с проверкой согласованности результата, согласие и ФСП ID; потребность, подборка, приглашение демо-кандидата, принятие, контакты; кандидат без ФСП |
| Нагрузка | scripts/load.py: 10 пользователей — p95 до 65 мс, 50 пользователей — 0 ошибок; отчёт в docs/validation/load.md |
| Валидация | scripts/validate.py: равная сложность, утечка, повторяемость, дискриминативность, точность грейда, precision@10 и nDCG@10 против базовых способов |
Ключевые результаты валидации:
| Показатель | Значение |
|---|---|
| Профилей сложности на грейд | 1 (варианты равной сложности) |
| Junior сдаёт Middle: честно / со шпаргалкой / статичный тест | 19,3 % / 29,7 % / 100 % |
| Грейд по тесту: точно / в пределах шага | 69,5 % / 98,7 % (заявленный — 65,5 %) |
| Повторное прохождение: корреляция θ | 0,83 |
| Precision@10 подборки, backend / devops | 0,93 / 0,96 против 0,80 / 0,80 по заявленному грейду |
GitHub Actions (.github/workflows/ci.yml) на каждый push и PR:
ruff check, ruff format --check, pytest --cov=app с порогом покрытия 70 %, scripts/validate.py, scripts/export_openapi.py --check (сверка docs/openapi.json с кодом);npm ci, npm run build (проверка типов и сборка), npm test.ESLint (npm run lint) в CI не входит и запускается локально.
.env в git не попадает, .gitleaks.toml — проверка секретов.Площадка работает на https://hyrekit.ru: ВМ Compute Cloud в Yandex Cloud, стек из образов Container Registry по deploy/yc/compose.prod.yaml, Caddy с сертификатом Let's Encrypt. Выкатка одной командой — deploy/yc/deploy.sh (нужны YC_SA_KEY_JSON и TIMEWEB_TOKEN). Пошагово — deploy/yc/README.md и docs/runbook.md.
| Документ | Что внутри |
|---|---|
| docs/guide/ | Сопроводительная документация для жюри: продукт, сценарий, методика, архитектура, запуск, технологии, команда |
| HyreKit_Documentation.docx, .pdf | Те же разделы одним файлом, сборка — python scripts/build_docs.py |
| docs/jury.md | Инструкция для жюри: стенд, демо-аккаунты, экспресс-тест, сценарий работодателя |
| docs/presentation/ | Питч на 10 минут и демо-видео: pptx с заметками докладчика и pdf; скриншоты стенда — docs/presentation/assets/, сборка — docs/presentation/source/ |
| docs/openapi.json | Спецификация OpenAPI, выгрузка — PYTHONPATH=src python scripts/export_openapi.py |
| docs/specs/ | Спецификации задач |
| docs/spec/api.md |
| ADR | Решение |
|---|---|
| 0001 | Стек: FastAPI, PostgreSQL, React |
| 0002 | GigaChat как LLM, YandexGPT в резерве, правила без ключей |
| 0003 | Параметрические задания и модель Раша |
| 0004 | Подбор по объяснимому баллу |
| 0005 | Интерфейс реестра ФСП и эмулятор |
| 0006 | SQLite для разработки |
| 0007 | Фирменный стиль ФСП |
| 0008 | Песочница Code Arena на Landlock и seccomp внутри контейнера приложения |
| Симптом | Что сделать |
|---|---|
| Порт 8000, 3000 или 5432 занят | Остановить локальный сервис или поменять порт в docker-compose.yml |
| Письмо подтверждения не пришло | Открыть Mailpit http://localhost:8025; без Docker ссылка в логе API |
SECRET_KEY не задан | cp .env.example .env и задать значение |
| Подборка пустая | Демо-данные создаются при SEED_DEMO=true; перезапустить API |
Хакатон Федерации спортивного программирования 2026. Трек — «Цифровая платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП». Команда — «Команда 1». Лицензия — GPL-3.0, сторонние компоненты — THIRD_PARTY_NOTICES.md.
/api/v1/fsp-idFSP_OIDC_CLIENT_ID / FSP_OIDC_CLIENT_SECRET | hyrekit / пусто | Клиент HyreKit у провайдера; у тестового провайдера секрет выводится из SECRET_KEY |
FSP_OIDC_SCOPE | openid profile email | Запрашиваемые у провайдера scope |
FSP_OIDC_ID_CLAIM | fsp_id | Claim с ФСП ID; без него берётся preferred_username |
FSP_OIDC_BACKCHANNEL_URL | пусто | Внутренний адрес провайдера для запросов сервер-сервер, если публичный недоступен из контейнера |
FSP_OIDC_MOCK | true | Включить встроенный тестовый провайдер, когда FSP_OIDC_ISSUER пуст |
PUBLIC_URL | http://localhost:3000 | Адрес фронтенда в ссылках писем |
DOCS_ENABLED | true | Swagger UI и /openapi.json |
SMTP_HOST, SMTP_USER, SMTP_PASSWORD | пусто | Почта; пустой SMTP_HOST — ссылка подтверждения пишется в лог |
SMTP_PORT, SMTP_TLS, MAIL_FROM | 1025, false, HyreKit <[email protected]> | Порт, TLS и отправитель писем |
| Контракт API |
| docs/schema.md | Модель данных |
| docs/validation/results.md | Результаты валидации |
| docs/runbook.md | Эксплуатация |
| docs/process.md, docs/progress.md | Процесс и журнал |
| PRODUCT.md, CONTEXT.md, DESIGN.md | Продукт, словарь, визуальная система |