Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Обратный найм: работодатели приходят к кандидатам с подтверждённой категорией и зарплатой.
Translation pending
BusinessPython · TypeScriptGitHub @Fighter90OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП. Хакатон Федерации спортивного программирования 2026, команда «Команда 1».
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Платформа-агрегатор ИТ-вакансий с верифицированным профилем достижений участника ФСП. Хакатон Федерации спортивного программирования 2026, команда «Команда 1». Кандидат проходит тест на грейд и получает категорию «направление · грейд», к профилю подтягиваются достижения из реестра ФСП. Работодатель описывает потребность и получает подборку проверенных кандидатов с объяснимым баллом соответствия, смотрит тест под вакансию и приглашает с вилкой зарплаты. Контакты кандидата открываются только после его согласия. Состояние по main 0.1.0 (10.10.2026) — версия к сдаче.Read the full 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 | Продукт, словарь, визуальная система |