AAYMA
RU
Войти

ШАГРА

Карьерный навигатор для сотрудника и HR.

Доведённый продукт
Команда «Invincibles» 22💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Invincibles
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Доведённый продукт

Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития

Суть

Карьерный навигатор для сотрудника и HR. Показывает текущий и целевой грейд, карту навыков и разрывы, персональные рекомендации активностей с «примеркой» и сравнением эффекта, подтверждение выполнения, HR-сводку и безопасный импорт профилей.

Как устроено

Синтетический набор данных с фиксированным seed (200 сотрудников, 40 активностей, 60 навыков, 1736 записей истории) загружается в FastAPI со SQLite. Серверные правила считают допуск, разрывы и прогноз изменения навыков. Затем LLM ранжирует только допустимые варианты по структурированной схеме с точным числом выборов: OpenAI gpt-4.1-mini или локальная Ollama qwen2.5:1.5b, без ключа — подбор по правилам. Сессии в HttpOnly cookie, версии и Idempotency-Key защищают от повторного начисления. UI на React поддерживает RU/KK/EN.

Ключевые решения

  • LLM ranking with structured output
  • rule-based eligibility
  • skill gap analysis
  • deterministic fallback
  • idempotency keys
  • OpenAPI contracts

Особенности

Три режима AI (OpenAI, локальная Ollama, офлайн по правилам) и отдельный офлайн-compose для жюри. LLM только ранжирует уже допустимые варианты, а эффекты и запись результата определяют серверные правила. Эффект активности можно «примерить» до выполнения. Интерфейс и README на трёх языках. Работу распределили по трём агентам-исполнителям.

Стек

Python 3.12 · FastAPI · SQLite · React · TypeScript · Tailwind CSS · Docker Compose · Ollama

Модели

gpt-4.1-mini-2025-04-14 · qwen2.5:1.5b (Ollama)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-3e883744-invincibles.

README

README.md
Логотип ШАГРА

ШАГРА

Следующий карьерный шаг — с понятным результатом

Русский · Қазақша · English

HackAlem AI MVP Languages AI

ШАГРА превращает профиль сотрудника, требования следующего грейда и историю развития в проверяемый план карьерного шага. Эффект каждой активности можно увидеть и сравнить до её выполнения.

Сотрудник видит разрывы навыков и обоснованные рекомендации, а HR — сводку команды и безопасный импорт профилей. Все расчёты выполняет настоящий API; AI ранжирует варианты, но не подменяет факты.

Продукт в действии

Профиль сотрудника с карьерной целью

Сравнение карьерных активностейHR-аналитика
Сравнение вариантовHR-панель

Чем отличается

Контекст вместо общего советаПроверяемый результатТри режима демонстрации
Учитывает грейд, конкретные пробелы и историю сотрудникаПоказывает источник рекомендации и прогноз изменения навыков до подтвержденияOpenAI API, локальная Ollama или полностью готовый fallback без ключа

Возможности

СотрудникHR
Текущий и целевой грейд, покрытие требованийСводка развития команды
Карта навыков и конкретные разрывыПриоритетные дефициты с понятными знаменателями
Персональные рекомендации из каталогаПоиск сотрудника по ID
Примерка и сравнение двух активностейТаблицы участия, фильтры, пагинация
Подтверждение выполнения и историяПроверка файлов перед отдельным применением

RU / KZ / EN, светлая и тёмная темы, desktop и мобильное меню. Язык и тема сохраняются в браузере. Переводы названий зависят от каталога: при отсутствии перевода показывается доступный язык с пояснением. Обоснования сервера остаются на языке источника.

Скриншоты рабочего приложения получены на синтетических данных. Реальных данных сотрудников банка в репозитории нет.

Быстрый старт

Нужны Git и Docker Compose v2. Python и Node.js на хосте не требуются. Первая сборка скачивает зависимости.

git clone https://github.com/BAITC-Hacks/hack-3e883744-invincibles.git
cd hack-3e883744-invincibles

Создайте .env из .env.example, если файла ещё нет.

Linux/macOS:

test -f .env || cp .env.example .env

Windows PowerShell:

if (!(Test-Path .env)) { Copy-Item .env.example .env }

Для AI заполните OPENAI_API_KEY в .env. Без ключа работает подбор по правилам, явно обозначенный в интерфейсе. Ключ нельзя помещать в Git или VITE_*.

docker compose up -d --build app
docker compose ps

Откройте localhost:8080. Проверка сервера · Swagger UI.

РольЛогинПароль
Сотрудник, E0001employeedemo-employee
HRhrdemo-hr

Это демонстрационные учётные записи. Пароли задаются через DEMO_EMPLOYEE_PASSWORD и DEMO_HR_PASSWORD.

Установка на разных системах

СистемаПодготовка
WindowsУстановите Docker Desktop с WSL 2 и Linux containers, запустите его. Команды выполняйте в PowerShell.
macOSУстановите Docker Desktop под Apple silicon или Intel, запустите его. Используйте Terminal.
LinuxУстановите Docker Engine и Compose plugin: Ubuntu или инструкция своего дистрибутива. Проверьте docker info и docker compose version.

При permission denied для Docker socket на Linux используйте sudo docker compose … либо настройте доступ по правилам своей системы. Актуальные требования к ОС и оборудованию — по официальным ссылкам выше.

Без Docker: Linux / macOS

Нужны Python 3.12 и Node.js 22 LTS (22.19 или новее в ветке 22). Node.js 24 также использовался при проверке. Из корня проекта:

python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.lock
npm --prefix frontend ci
npm --prefix frontend run build
export DATABASE_PATH="$PWD/runtime/shagra.sqlite3"
export SESSION_SECRET_PATH="$PWD/runtime/session-secret"
export AI_USAGE_PATH="$PWD/runtime/ai-usage.json"
export KIT_PATH="$PWD/data/synthetic"
export FRONTEND_DIST="$PWD/frontend/dist"
export APP_ORIGIN=http://localhost:8080
export AI_PROVIDER=openai
# Для AI задайте OPENAI_API_KEY в окружении терминала.
.venv/bin/python -m uvicorn app.main:app --app-dir backend --host 127.0.0.1 --port 8080

Без Docker: Windows PowerShell

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r backend/requirements.lock
npm --prefix frontend ci
npm --prefix frontend run build
$env:DATABASE_PATH = "$PWD/runtime/shagra.sqlite3"
$env:SESSION_SECRET_PATH = "$PWD/runtime/session-secret"
$env:AI_USAGE_PATH = "$PWD/runtime/ai-usage.json"
$env:KIT_PATH = "$PWD/data/synthetic"
$env:FRONTEND_DIST = "$PWD/frontend/dist"
$env:APP_ORIGIN = 'http://localhost:8080'
$env:AI_PROVIDER = 'openai'
# Для AI задайте OPENAI_API_KEY в окружении терминала.
.\.venv\Scripts\python.exe -m uvicorn app.main:app --app-dir backend --host 127.0.0.1 --port 8080

Прямой запуск uvicorn автоматически не читает .env. Передайте настройки через окружение. Пустой ключ включает fallback. runtime/ создаётся приложением. Локальный запуск и Compose используют разные хранилища БД.

Проверка для жюри

Готовая инструкция для эксперта: живой OpenAI с приватным тестовым ключом, локальная Ollama без аккаунта и подготовленный офлайн-сценарий. Для третьего варианта ключ не нужен, платные вызовы отключены:

docker compose --env-file config/jury-offline.env -p shagra-jury -f compose.yaml -f compose.offline.yaml up -d --build app

Откройте http://localhost:8081. Отдельный том сохраняет демонстрацию независимо от основного приложения. Это подбор «По правилам», не живой AI. Четыре готовых профиля для импорта показывают полезный шаг, достигнутую цель, последний грейд и отсутствие оценки.

Конфигурация и AI

ПеременнаяПо умолчаниюНазначение
APP_PORT8080Порт Compose на компьютере
APP_ORIGINhttp://localhost:8080Точный адрес страницы для POST-запросов
AI_PROVIDERopenaiopenai или ollama
OPENAI_API_KEYпустоСерверный ключ; без него работает fallback
OPENAI_MODELgpt-4.1-mini-2025-04-14Модель ранжирования
AI_MAX_PAID_CALLS2000Лимит попыток API, не долларовый бюджет
LLM_TIMEOUT_SECONDS8Время ожидания модели
OLLAMA_MODELqwen2.5:1.5bЛокальная модель
COOKIE_SECUREfalseДля локального HTTP; HTTPS требует secure cookies

Другой порт требует изменить оба значения, например APP_PORT=8081 и APP_ORIGIN=http://localhost:8081. localhost и 127.0.0.1 — разные origin.

Для Ollama задайте в .env AI_PROVIDER=ollama и OLLAMA_BASE_URL=http://ollama:11434:

docker compose --profile local-ai up -d --build
docker compose logs -f model-init

Первый запуск скачивает модель и требует дополнительных ресурсов. До её готовности допустим fallback. AI ранжирует допустимые варианты; эффект, допуск и запись результата определяются серверными правилами. Подробнее об AI.

Данные и импорт

200 сотрудников · 40 активностей · 60 навыков · 1736 записей истории за 24 месяца. Это воспроизводимый синтетический кит команды: seed 20260923, версия shagra-kit/1.

Файл в data/synthetic/Содержание
employees.jsonТекущие профили и уровни навыков
events.jsonАктивности, аудитория, эффект
skills.jsonНавыки, роли, требования грейдов
activity_history.csvИстория участия
manifest.jsonПроисхождение и контрольные суммы

HR загружает employees.json + activity_history.csv, до 5 MiB каждый. Проверка и применение разделены. Совпавший ID полностью заменяет профиль, включая навыки; история объединяется по ID записи. Проверка действует 15 минут. Неизвестный навык не считается нулевым; импорт истории не начисляет эффект повторно. Схема кита · Правила импорта.

Архитектура

flowchart LR
  UI[React · RU / KK / EN] --> API[FastAPI /api/v1]
  API --> Rules[Допуск · разрывы · примерка]
  API --> DB[(SQLite)]
  API --> Rank[Ранжирование]
  Rank --> Model[OpenAI / Ollama]
  Rank --> Fallback[Подбор по правилам]

Frontend и API обслуживаются с одного origin. HttpOnly cookie хранит сессию; версии защищают от устаревших операций; Idempotency-Key предотвращает повторное начисление. В контейнере один worker, БД и секрет сессий сохраняются в volume.

backend/app/       API, правила, рекомендации, SQLite
frontend/src/      app → pages → features / entities → shared
contracts/         OpenAPI и примеры
data/             синтетический кит и AI-сценарии
tools/            проверки данных, схемы, AI-оценка
docs/             документация, дизайн, результаты проверок

Проверки

После установки зависимостей; на Windows замените .venv/bin/python на .\.venv\Scripts\python.exe:

.venv/bin/python -m pytest -q
.venv/bin/python tools/validate_kit.py
.venv/bin/python -m pip check
npm --prefix frontend run build
cd frontend
npx playwright install chromium firefox webkit
npm run test:e2e

На Linux могут понадобиться системные зависимости Playwright, устанавливаемые через npx playwright install --with-deps. Live-тест изменяет данные: только отдельная тестовая БД и правильный LIVE_BASE_URL. Как запускать и что проверено.

На ревизии 3eb7a86: 42 backend-теста, 21 Chromium-сценарий и 1 live-сценарий прошли на финальном прогоне. Первый параллельный UI-прогон дал один таймаут входа, не повторившийся отдельно и последовательно. Реальные Q1–Q3 OpenAI прошли в предыдущем аудите. Docker daemon в среде проверки недоступен по правам; это не проверка контейнера или всех ОС.

Обновление и помощь

git pull --ff-only
docker compose up -d --build app
docker compose logs --tail=100 app

Остановка: docker compose stop. Пересборка сохраняет volume. Не используйте docker compose down -v, если нужны текущие данные.

СимптомРешение
Недопустимый источник запросаОткрыть точный APP_ORIGIN; после изменения .env пересоздать контейнер
Старый дизайнПересобрать image, обновить страницу Ctrl+Shift+R / Cmd+Shift+R
«По правилам»Проверить ключ, провайдера и model_status в health
STALE_CONTEXT / IMPORT_CONFLICT / IMPORT_EXPIREDОбновить профиль или повторить проверку файлов
Docker недоступенЗапустить Docker Desktop/daemon, проверить docker info и права

Для Vite-разработки backend запускается на 8080 с APP_ORIGIN=http://localhost:5173; затем npm --prefix frontend run dev и именно http://localhost:5173. Для обычного билда верните origin 8080.

Документация и границы MVP

Это локальный демонстрационный MVP. Покрытие навыков не является решением о повышении; совместимость с официальным китом организаторов не подтверждена. HR API не везде содержит названия ролей; серверные объяснения пока остаются на русском языке. Макеты в docs/validation/ui/redesign и start-design.sh — исторический предпросмотр, для рабочего приложения они не нужны. .env, runtime-БД и зависимости не включаются в Git.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
63
Авторы
3
Файлы
265
Ветки
2

Авторы коммитов

AlmazCode 30ONI-COLLI 18suber66 15

История коммитов

  • 2026-09-23 17:58docs: refresh multilingual project readmeAlmazCode
  • 2026-09-23 17:47Add page transition and metric microanimationsONI-COLLI
  • 2026-09-23 17:47Merge remote-tracking branch 'origin/main'ONI-COLLI
  • 2026-09-23 17:43Merge branch 'main' of https://github.com/BAITC-Hacks/hack-3e883744-invinciblesAlmazCode
  • 2026-09-23 17:43fix: prepare jury imports and offline verificationAlmazCode
  • 2026-09-23 17:43Move mobile preferences into burger menuONI-COLLI
  • 2026-09-23 17:41Remove preference pop-up notificationsONI-COLLI
  • 2026-09-23 17:40Add subtle motion and preference notificationsONI-COLLI
Все коммиты (63)
  • 2026-09-23 17:36Keep preference controls stable across languagesONI-COLLI
  • 2026-09-23 17:36Merge remote-tracking branch 'origin/main'ONI-COLLI
  • 2026-09-23 17:28Integrate monochrome logos across light and dark themessuber66
  • 2026-09-23 17:21docs: add multilingual guides and remove unused assetsAlmazCode
  • 2026-09-23 17:05recyclesuber66
  • 2026-09-23 17:042ONI-COLLI
  • 2026-09-23 16:55Preserve shared API import entry pointAlmazCode
  • 2026-09-23 16:54Integrate employee UI safeguards and skill mapAlmazCode
  • 2026-09-23 16:22Merge remote-tracking branch 'origin/main'ONI-COLLI
  • 2026-09-23 16:21Merge shared UI foundation and verify multilingual redesignONI-COLLI
  • 2026-09-23 16:20Add monochrome SHAGRA logo for light and dark themessuber66
  • 2026-09-23 16:17Add language and theme switching with simpler career screensONI-COLLI
  • 2026-09-23 16:09Add shared dark UI system and role labelsAlmazCode
  • 2026-09-23 15:47Merge branch 'main' of https://github.com/BAITC-Hacks/hack-3e883744-invinciblesAlmazCode
  • 2026-09-23 15:46updAlmazCode
  • 2026-09-23 15:46Add dark redesign mockups and validation evidenceONI-COLLI
  • 2026-09-23 15:06Merge remote-tracking branch 'origin/main'ONI-COLLI
  • 2026-09-23 15:05Merge branches 'main' and 'main' of https://github.com/BAITC-Hacks/hack-3e883744-invinciblessuber66
  • 2026-09-23 15:05Merge remote-tracking branch 'origin/main'ONI-COLLI
  • 2026-09-23 15:05Record exact-count schema live validationsuber66
  • 2026-09-23 15:03Verify mobile preview and import actionsONI-COLLI
  • 2026-09-23 15:02Constrain ranking choice count in structured schemasuber66
  • 2026-09-23 15:02Document A3 delivery and verify live workflowONI-COLLI
  • 2026-09-23 14:59Refresh A1 validation after A2 live resultsAlmazCode
  • 2026-09-23 14:57Record successful isolated Docker integration checkAlmazCode
  • 2026-09-23 14:57Merge branch 'main' of https://github.com/BAITC-Hacks/hack-3e883744-invinciblessuber66
  • 2026-09-23 14:56Record live AI acceptance and latency resultssuber66
  • 2026-09-23 14:54Improve structured ranking prompt and benchmark health pathsuber66
  • 2026-09-23 14:52hello world 2ONI-COLLI
  • 2026-09-23 14:45Document A2 integration and verify startup probe accountingAlmazCode
  • 2026-09-23 14:43Integrate recommendation service into backend startupAlmazCode
  • 2026-09-23 14:40chore: expand gitignore for local development artifactsAlmazCode
  • 2026-09-23 14:32Validate benchmark cache miss and hit samplessuber66
  • 2026-09-23 14:32Record blocked live AI and latency validationsuber66
  • 2026-09-23 14:31Integrate recommendations with shared core contractssuber66
  • 2026-09-23 14:28Merge branch 'main' of https://github.com/BAITC-Hacks/hack-3e883744-invinciblessuber66
  • 2026-09-23 14:28Implement recommendation ranking and AI providerssuber66
  • 2026-09-23 14:27Merge remote-tracking branch 'origin/main'AlmazCode
  • 2026-09-23 14:26docs: refresh backend validation recordAlmazCode
  • 2026-09-23 14:26test: verify history summaries and eligibility reasonsAlmazCode
  • 2026-09-23 14:24docs: record backend validation evidence and remaining gatesAlmazCode
  • 2026-09-23 14:24test: verify session boundaries and same-origin static servingAlmazCode
  • 2026-09-23 14:22fix: reject unsupported import shapes and document HTTP errorsAlmazCode
  • 2026-09-23 14:20test: verify full kit reimport and persisted completion retryAlmazCode
  • 2026-09-23 14:18test: cover import edge cases and document backend handoffAlmazCode
  • 2026-09-23 14:13refactor: align Python package path and strengthen acceptance checksAlmazCode
  • 2026-09-23 14:11fix: align recommendation source with design contractAlmazCode
  • 2026-09-23 14:09build: add pinned container runtime and exported OpenAPIAlmazCode
  • 2026-09-23 14:04feat: add synthetic kit SQLite persistence and API workflowsAlmazCode
  • 2026-09-23 13:54feat: establish Shagra contracts and core interfacesAlmazCode
  • 2026-09-23 13:532suber66
  • 2026-09-23 13:51hello worldONI-COLLI
  • 2026-09-23 13:47docs: add hackathon requirements and competition rulesAlmazCode
  • 2026-09-23 13:46docs: adopt Tailwind and OpenAI API for Shagra MVPAlmazCode
  • 2026-09-23 13:36docs: specify Shagra MVP and three-agent work packagesAlmazCode
Структура репозитория (265 файлов)
.dockerignore
.env.example
.gitignore
Dockerfile
README.en.md
README.kk.md
README.md
THIRD_PARTY.md
TZ.txt
backend/__init__.py
backend/app/__init__.py
backend/app/application/__init__.py
backend/app/application/employees.py
backend/app/application/hr.py
backend/app/application/imports.py
backend/app/bootstrap.py
backend/app/contracts/__init__.py
backend/app/contracts/api.py
backend/app/contracts/domain.py
backend/app/contracts/recommendation.py
backend/app/core/__init__.py
backend/app/core/eligibility.py
backend/app/core/errors.py
backend/app/core/history.py
backend/app/core/progress.py
backend/app/data/__init__.py
backend/app/data/import_adapter.py
backend/app/data/kit_v1.py
backend/app/data/repository.py
backend/app/data/schema.sql
backend/app/data/validation.py
backend/app/http/__init__.py
backend/app/http/routes.py
backend/app/main.py
backend/app/recommendations/__init__.py
backend/app/recommendations/candidates.py
backend/app/recommendations/providers.py
backend/app/recommendations/service.py
backend/requirements.in
backend/requirements.lock
backend/tests/__init__.py
backend/tests/api/__init__.py
backend/tests/api/test_http.py
backend/tests/api/test_import.py
backend/tests/api/test_import_compatibility.py
backend/tests/api/test_repository.py
backend/tests/core/__init__.py
backend/tests/core/test_progress.py
backend/tests/recommendations/test_recommendations.py
compose.offline.yaml
compose.yaml
config/jury-offline.env
contracts/README.md
contracts/examples/completion.json
contracts/examples/error-stale.json
contracts/examples/hr-overview.json
contracts/examples/import-commit.json
contracts/examples/import-invalid.json
contracts/examples/import-valid.json
contracts/examples/preview-request.json
contracts/examples/preview.json
contracts/examples/profile-active.json
contracts/examples/profile-no-next-grade.json
contracts/examples/recommendations-fallback.json
contracts/examples/recommendations-llm.json
contracts/openapi.json
data/acceptance/q1-q3.json
data/demo-import/README.md
data/demo-import/activity_history.csv
data/demo-import/employees.json
data/synthetic/README.md
data/synthetic/activity_history.csv
data/synthetic/employees.json
data/synthetic/events.json
data/synthetic/manifest.json
data/synthetic/skills.json
docs/AI.md
docs/ARCHITECTURE.md
docs/DATA.md
docs/DEMO.md
docs/JURY.md
docs/README.md
docs/TESTING.md
docs/implementation/README.md
docs/implementation/a3-redesign-requirements.md
docs/implementation/a3-template.jpg
docs/implementation/agent-1-data-api.md
docs/implementation/agent-2-recommendations.md
docs/implementation/agent-3-ui-delivery.md
docs/implementation/frontend-design-requirements.md
docs/implementation/production-agent-1-ui.md
docs/implementation/production-agent-2-hr.md
docs/implementation/production-agent-3-api-release.md
docs/superpowers/plans/2026-09-23-production-redesign.md
docs/superpowers/specs/2026-09-23-shagra-design.md
docs/validation/a1-handoff.md
docs/validation/ai.json
docs/validation/backend.json
docs/validation/documentation-cleanup-2026-09-23.md
docs/validation/jury-openai.json
docs/validation/jury-readiness.json
docs/validation/latency.json
docs/validation/ui/README.md
docs/validation/ui/hr-390.png
docs/validation/ui/import-390.png
docs/validation/ui/profile-1280.png
docs/validation/ui/profile-390.png
docs/validation/ui/redesign/README.md
docs/validation/ui/redesign/assets-manifest.json
docs/validation/ui/redesign/assets/LICENSE-ibm-plex-mono.txt
docs/validation/ui/redesign/assets/LICENSE-ibm-plex-sans.txt
docs/validation/ui/redesign/assets/LICENSE-lucide.txt
docs/validation/ui/redesign/assets/files/ibm-plex-mono-cyrillic-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-cyrillic-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-cyrillic-ext-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-cyrillic-ext-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-latin-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-latin-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-latin-ext-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-latin-ext-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-vietnamese-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-mono-vietnamese-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-cyrillic-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-cyrillic-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-cyrillic-600-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-cyrillic-ext-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-cyrillic-ext-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-cyrillic-ext-600-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-greek-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-greek-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-greek-600-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-latin-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-latin-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-latin-600-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-latin-ext-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-latin-ext-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-latin-ext-600-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-vietnamese-400-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-vietnamese-500-normal.woff2
docs/validation/ui/redesign/assets/files/ibm-plex-sans-vietnamese-600-normal.woff2
docs/validation/ui/redesign/assets/mono-400.css
docs/validation/ui/redesign/assets/mono-500.css
docs/validation/ui/redesign/assets/sans-400.css
docs/validation/ui/redesign/assets/sans-500.css
docs/validation/ui/redesign/assets/sans-600.css
docs/validation/ui/redesign/capture.mjs
docs/validation/ui/redesign/data.js
docs/validation/ui/redesign/generate_data.py
docs/validation/ui/redesign/hr-1440x900.png
docs/validation/ui/redesign/hr-390x844.png
docs/validation/ui/redesign/index.html
docs/validation/ui/redesign/preview.js
docs/validation/ui/redesign/profile-1440x900.png
docs/validation/ui/redesign/profile-390x844.png
docs/validation/ui/redesign/style.css
docs/validation/ui/redesign/validation.json
docs/validation/ui/simple/README.md
docs/validation/ui/simple/hr-1440-light.png
docs/validation/ui/simple/hr-390-light.png
docs/validation/ui/simple/live-hr-1440-dark.png
docs/validation/ui/simple/live-hr-1440-light.png
docs/validation/ui/simple/live-hr-390-dark.png
docs/validation/ui/simple/live-hr-390-light.png
docs/validation/ui/simple/live-preview.png
docs/validation/ui/simple/live-profile-1440-dark.png
docs/validation/ui/simple/live-profile-1440-light.png
docs/validation/ui/simple/live-profile-390-dark.png
docs/validation/ui/simple/live-profile-390-light.png
docs/validation/ui/simple/login-390-en.png
docs/validation/ui/simple/login-390-kk.png
docs/validation/ui/simple/profile-1440-dark.png
docs/validation/ui/simple/profile-1440-light.png
docs/validation/ui/simple/profile-390-dark.png
docs/validation/ui/simple/profile-390-light.png
docs/validation/ui/simple/profile-empty.png
docs/validation/ui/simple/profile-error.png
docs/validation/ui/simple/profile-loading.png
frontend/.gitignore
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/playwright.config.ts
frontend/playwright.live.config.ts
frontend/public/brand/logo-dark.png
frontend/public/brand/logo-light.png
frontend/src/api.ts
frontend/src/app/App.tsx
frontend/src/app/AppShell.tsx
frontend/src/entities/skill/SkillMap.tsx
frontend/src/entities/skill/Skills.tsx
frontend/src/features/completion/CompletionDialog.tsx
frontend/src/features/import/files.ts
frontend/src/features/preview/PreviewDialog.tsx
frontend/src/features/recommendations/RecommendationCard.tsx
frontend/src/main.tsx
frontend/src/pages/HrPage.tsx
frontend/src/pages/ImportPage.tsx
frontend/src/pages/LoginPage.tsx
frontend/src/pages/ProfilePage.tsx
frontend/src/shared/api/client.ts
frontend/src/shared/api/types.ts
frontend/src/shared/lib/format.ts
frontend/src/shared/lib/messages.ts
frontend/src/shared/lib/preferences.tsx
frontend/src/shared/styles/fonts/LICENSE-ibm-plex-mono.txt
frontend/src/shared/styles/fonts/LICENSE-ibm-plex-sans.txt
frontend/src/shared/styles/fonts/LICENSE-lucide.txt
frontend/src/shared/styles/fonts/files/ibm-plex-mono-cyrillic-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-cyrillic-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-cyrillic-ext-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-cyrillic-ext-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-latin-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-latin-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-latin-ext-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-latin-ext-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-vietnamese-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-mono-vietnamese-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-cyrillic-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-cyrillic-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-cyrillic-600-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-cyrillic-ext-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-cyrillic-ext-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-cyrillic-ext-600-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-greek-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-greek-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-greek-600-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-latin-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-latin-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-latin-600-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-latin-ext-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-latin-ext-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-latin-ext-600-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-vietnamese-400-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-vietnamese-500-normal.woff2
frontend/src/shared/styles/fonts/files/ibm-plex-sans-vietnamese-600-normal.woff2
frontend/src/shared/styles/fonts/mono-400.css
frontend/src/shared/styles/fonts/mono-500.css
frontend/src/shared/styles/fonts/sans-400.css
frontend/src/shared/styles/fonts/sans-500.css
frontend/src/shared/styles/fonts/sans-600.css
frontend/src/shared/styles/global.css
frontend/src/shared/ui/BrandMark.tsx
frontend/src/shared/ui/DataTable.tsx
frontend/src/shared/ui/Dialog.tsx
frontend/src/shared/ui/index.tsx
frontend/src/types.ts
frontend/src/vite-env.d.ts
frontend/tests/employee-redesign.spec.ts
frontend/tests/helpers.ts
frontend/tests/live.spec.ts
frontend/tests/simple-ui.spec.ts
frontend/tsconfig.json
frontend/vite.config.ts
output/imagegen/shagra-logo-monochrome/PROMPTS.md
output/imagegen/shagra-logo-monochrome/WEB-ASSETS.md
output/imagegen/shagra-logo-monochrome/light-and-dark.png
pytest.ini
rules.md
start-design.sh
tools/benchmark.py
tools/evaluate_recommendations.py
tools/export_openapi.py
tools/generate_contract_examples.py
tools/generate_kit.py
tools/validate_kit.py
Ветки (2)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.