CareerUp
Веб-платформа развития сотрудника на кейс Career Quest.
О проекте
Команда: BizAI
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Доведённый продукт
Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития
Суть
Веб-платформа развития сотрудника на кейс Career Quest. Сотрудник ведёт цели, планы и каталог обучения и отправляет доказательства на ревью. HR и руководитель одобряют или возвращают; AI-советник объясняет варианты, но не выставляет оценки.
Как устроено
Next.js/React читает датасет Career Quest в SQLite. Эффективные навыки считаются как базовая оценка плюс приросты от завершённых активностей с учётом потолков и дат оценки. Формальные модули закрываются только навыками, одобренными человеком. AI-ассистент через OpenAI работает на сервере, со стримингом и tools. Есть консультации, брифы для HR, импорт JSON/CSV и локализация ENG/РУС/ҚАЗ.
Ключевые решения
- rule-based skill progression
- human-in-the-loop review approval
- streaming chat
- tool calling
Особенности
Строгое разделение плана, эффективных навыков и формальных модулей: обучение само по себе не закрывает модуль, AI никого не повышает. Есть отдельные тест-наборы на HTTP, AI, ревью и identity, а также деплой в k3s через CI/CD.
Стек
TypeScript · Next.js · React · SQLite · Tailwind · Docker · Kubernetes (k3s) · GitHub Actions
Модели
OpenAI
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-dcb4d3bc-bizai.
README
README.mdCareerUp
Demo website: http://92.38.48.67
CareerUp is an employee development prototype built with Next.js, React and SQLite. Employees own their goals and plans, explore learning activities, and submit evidence for human review. Managers and HR can approve or return reviews; AI helps explain options but never sets ratings or promotes employees.
The supplied synthetic dataset contains 200 employees, 40 activities, 60 skills and 2,743 participation records. Its business date is 2026-10-01, independent of the server clock.
Demo identity only: anyone can select any employee or HR account on the public entry page. Server-side role checks do not establish a person's identity. Use synthetic data only.
Quick start
Requires Node.js 22.13+ and npm. Run from the repository root:
npm ci
npm run dev
Open localhost:3000, select an employee or HR, and enter the workspace. No external database or AI key is required for the core workflows.
For a production-mode synthetic demo, one command installs, builds and starts:
npm run demo
Or build and start separately:
npm run build
npm start
On first repository access, the app loads fixtures from case_source/case_1/career_quest_dataset/ into .data/career-quest.sqlite. Existing databases are reused; changing fixture files does not reseed them automatically.
Optional configuration:
# Only for a new local setup; preserve an existing .env.local.
cp -n .env.example .env.local
Set OPENAI_API_KEY for live assistance. The key stays on the server; never use a NEXT_PUBLIC_* variable. Set COOKIE_SECURE=true when serving over HTTPS. See setup and operations for every setting, isolated demo data, troubleshooting and validation.
Workspaces
| Route | What works |
|---|---|
/ | Public employee/HR account picker and language selector |
/employee/dashboard | Overview, goals/milestones, advisor, skill evidence and learning history through ?view= |
/employee/learning | Search/filter catalog, activity detail, add to plan and demo completion |
/employee/reviews | Self-assessment drafts/submission; direct-report reviews for managers |
/hr/dashboard | Profile search, target-gap prevalence and participation aggregates |
/hr/employees/[id] | Read-only employee plans, AI discussion briefs, review approval/return |
/hr/data | Preview/apply employee JSON and history CSV imports; fixture reset |
English, Russian and Kazakh are available through ENG / РУС / ҚАЗ. Switching language reloads the current URL; save edits first. Supplied catalog text is translated, while unknown imported free text stays verbatim.
What progress means
- Plan: employee intentions, milestones and claimed evidence. Changing a milestone does not increase skills.
- Effective skills: assessed baseline plus eligible completed-activity gains, respecting caps and per-skill assessment cutoffs.
- Formal modules: target requirements met by human-approved skill baselines, or imported assessments when no approval exists. Learning alone cannot close a module.
- Grade: recorded employment data. No workflow automatically promotes an employee.
A missing goal remains unset. An optional next-grade preview becomes a target only after the employee saves a role-linked focus. Free-form goals work for planning; catalog-based recommendations and quarterly reviews need a supported role/grade target.
Docker
docker build -t career-quest:local .
docker volume create career-quest-data
docker run -d --name career-quest \
--restart unless-stopped \
-p 3000:3000 \
--mount type=volume,source=career-quest-data,target=/app/.data \
career-quest:local
The image includes fixtures and runs Next.js standalone as UID/GID 1000. Persist the entire writable /app/.data directory, including SQLite WAL files. Use one application replica with its own volume. PostgreSQL and MinIO are not integrated. For Kubernetes use Recreate; an image rollback does not roll back database contents.
# Builds the application and executes the checked-in validation suites.
docker build --target test -t career-quest:test .
For an AMD64 server when building on Apple Silicon, use docker buildx build --platform linux/amd64 --load -t career-quest:local .. Deployment manifests, CI behavior and recovery commands are in the deployment runbook; its recorded live state is not a fresh deployment verification.
Validate
npm run typecheck
npm run lint
npm test
npm run build
npm run test:http
npm run test:ai
npm run test:reviews
npm run test:identity
Build before the HTTP suites: they run next start against temporary SQLite databases. The AI suite explicitly disables the provider and does not establish live model quality. Ports and overrides are in the validation guide.
Documentation
| Guide | Contents |
|---|---|
| Documentation index | Current guides versus historical plans/reviews |
| Setup and operations | Configuration, validation, persistence, imports and troubleshooting |
| Architecture | Components, storage, authorization, API surface and consistency rules |
| UX | Navigation, progress semantics, empty/error states and localization |
| User flows | Employee, manager and HR walkthroughs with expected outcomes |
| AI assistance | Evidence, consultation, streaming, adoption and provider boundaries |
| Implementation status | Current capability summary and historical delivery evidence |
Still pending: production SSO, AI review calibration, arbitrary natural-language constraint filtering, a unified action timeline, HR-authored tasks/resources and full dataset replacement. Demo completions, review approval/return, structured duration/format preferences and Docker packaging are implemented.
Versions and scripts are maintained in package.json. The Next.js PostCSS override is deliberate; review it when upgrading the framework rather than removing it incidentally.
Авторы коммитов
История коммитов
- 2026-09-23 17:54Rename project and platform to CareerUpAidynbek Tussipzhan
- 2026-09-23 17:41Make advisor timeout optional and environment-configuredAidynbek Tussipzhan
- 2026-09-23 17:35Add demo website link to READMEAidynbek Tussipzhan
- 2026-09-23 17:34Make career assistant conversational and aware of complete employee contextAidynbek Tussipzhan
- 2026-09-23 17:17Document setup, architecture, UX and user flowsAidynbek Tussipzhan
- 2026-09-23 17:10Fix client UUID generation on HTTP demo deploymentAidynbek Tussipzhan
- 2026-09-23 17:09Simplify advisor chat and floating widget presentationAidynbek Tussipzhan
- 2026-09-23 17:06Complete app translations and add locale coverage checksAidynbek Tussipzhan
Все коммиты (24)
- 2026-09-23 17:04Preserve development map context and prioritize milestone evidenceAidynbek Tussipzhan
- 2026-09-23 17:03Remove access-token login and use account pickerAidynbek Tussipzhan
- 2026-09-23 16:58Merge workflow redesign and interactive development mapAidynbek Tussipzhan
- 2026-09-23 16:57Build connected development map and activity planning journeyAidynbek Tussipzhan
- 2026-09-23 16:51Fix case compliance gaps in recommendations, completion and accessAidynbek Tussipzhan
- 2026-09-23 16:45Add HR and manager review approval with audited skill assessmentsAidynbek Tussipzhan
- 2026-09-23 16:28Fix chat stop button resubmission and document verificationAidynbek Tussipzhan
- 2026-09-23 16:26Merge remote-tracking branch 'origin/main'Aidynbek Tussipzhan
- 2026-09-23 16:24Add development workflows, AI advisor, and workspace redesignAidynbek Tussipzhan
- 2026-09-23 16:21Update .env.exampleKIT-DS
- 2026-09-23 16:19Add k3s deployment and GitHub Actions CI/CDNuraly Kituyev
- 2026-09-23 16:04Add Docker packaging for Next.js applicationNuraly Kituyev
- 2026-09-23 15:01Document quarterly development review flowAidynbek Tussipzhan
- 2026-09-23 14:56Remove obsolete planning documentAidynbek Tussipzhan
- 2026-09-23 14:52Add localized Career Quest interfaceAidynbek Tussipzhan
- 2026-09-23 14:38Add Career Quest application foundationAidynbek Tussipzhan
Структура репозитория (159 файлов)
.dockerignore .env.example .github/workflows/deploy.yml .gitignore Dockerfile README.md app/api/assistant/consultation/route.ts app/api/assistant/goal/route.ts app/api/assistant/route.ts app/api/completions/route.ts app/api/data/route.ts app/api/employees/[id]/route.ts app/api/planning/route.ts app/api/reviews/route.ts app/api/session/route.ts app/employee/dashboard/page.tsx app/employee/layout.tsx app/employee/learning/page.tsx app/employee/reviews/page.tsx app/error.tsx app/globals.css app/hr/dashboard/page.tsx app/hr/data/page.tsx app/hr/employees/[id]/page.tsx app/hr/layout.tsx app/layout.tsx app/not-found.tsx app/page.tsx case_source/HackAlem AI_ Career Quest - платформа геймификации жизненного цикла сотрудника..docx case_source/case_1/career_quest_dataset/README.kz.md case_source/case_1/career_quest_dataset/README.md case_source/case_1/career_quest_dataset/README.ru.md case_source/case_1/career_quest_dataset/activity_history.csv case_source/case_1/career_quest_dataset/employees.json case_source/case_1/career_quest_dataset/events.json case_source/case_1/career_quest_dataset/skills.json components/career/activity-card.tsx components/career/adopt-activity.tsx components/career/advisor-widget.tsx components/career/assistant-panel.tsx components/career/completion-button.tsx components/career/consultation-form.tsx components/career/development-flow.tsx components/career/development-map.tsx components/career/development-panel.tsx components/career/development-workspace.tsx components/career/entry-card.tsx components/career/import-form.tsx components/career/planning-editor.tsx components/career/preference-proposal.tsx components/career/review-panel.tsx components/career/skill-cards.tsx components/charts/donut.tsx components/providers/locale.tsx components/shell/app-shell.tsx components/shell/language-switcher.tsx components/shell/workspace-shell.tsx components/ui/badge.tsx components/ui/button.tsx components/ui/card.tsx components/ui/input.tsx deploy/README.md deploy/k8s/site.yaml deploy/known_hosts deploy/server/deploy-image.py deploy/server/install.sh docs/README.md docs/ai-assistance.md docs/architecture.md docs/corporate-development-questions.md docs/design-reference/previous-ui/README.md docs/design-reference/previous-ui/committed/app/employee/dashboard/page.tsx docs/design-reference/previous-ui/committed/app/employee/learning/page.tsx docs/design-reference/previous-ui/committed/app/globals.css docs/design-reference/previous-ui/committed/app/hr/dashboard/page.tsx docs/design-reference/previous-ui/committed/app/hr/employees/[id]/page.tsx docs/design-reference/previous-ui/committed/app/page.tsx docs/design-reference/previous-ui/committed/components/career/activity-card.tsx docs/design-reference/previous-ui/committed/components/career/development-flow.tsx docs/design-reference/previous-ui/committed/components/career/development-panel.tsx docs/design-reference/previous-ui/committed/components/career/entry-card.tsx docs/design-reference/previous-ui/committed/components/charts/donut.tsx docs/design-reference/previous-ui/committed/components/shell/workspace-shell.tsx docs/design-reference/previous-ui/committed/components/ui/badge.tsx docs/design-reference/previous-ui/committed/components/ui/button.tsx docs/design-reference/previous-ui/committed/components/ui/card.tsx docs/design-reference/previous-ui/committed/tailwind.config.ts docs/design-reference/previous-ui/manifest.json docs/design-reference/previous-ui/working-copy/components/career/development-flow.tsx docs/explainability-design.md docs/getting-started.md docs/implementation-status.md docs/next-stage-plan.md docs/product-memo.ru.md docs/prototype-product-direction.md docs/quarterly-review-requirements.md docs/repo-context.md docs/reviews/case-source-compliance-2026-09-23.md docs/reviews/development-map-ux-2026-09-23.md docs/reviews/hr-approval-implementation.md docs/reviews/project-state-2026-09-23.md docs/reviews/redesign-preview.md docs/reviews/ux-review-2026-09-23.md docs/reviews/workflow-redesign-2026-09-23.md docs/user-flows.md docs/ux.md eslint.config.mjs lib/ai/consultation.ts lib/ai/context.ts lib/ai/contracts.ts lib/ai/copy.ts lib/ai/presentation.ts lib/ai/provider.ts lib/ai/stream.ts lib/ai/tools.ts lib/career/eligibility.ts lib/career/import.ts lib/career/navigation.ts lib/career/planning.ts lib/career/review-copy.ts lib/career/reviews.ts lib/career/skills.ts lib/career/types.ts lib/client-id.ts lib/i18n/index.ts lib/i18n/messages.json lib/i18n/server.ts lib/server/access.ts lib/server/assistant-store.ts lib/server/database.ts lib/server/http.ts lib/server/identity.ts lib/server/repository.ts lib/server/session.ts lib/utils.ts next-env.d.ts next.config.mjs package-lock.json package.json postcss.config.mjs tailwind.config.ts tests/approval.test.ts tests/assistant-http.mjs tests/assistant-tools.test.ts tests/assistant.test.ts tests/case-compliance.test.ts tests/chat-stream.test.ts tests/client-id.test.ts tests/completion.test.ts tests/consultation.test.ts tests/domain.test.ts tests/http.mjs tests/i18n.test.ts tests/identity-http.mjs tests/navigation.test.ts tests/planning.test.ts tests/reviews-http.mjs tests/reviews.test.ts tsconfig.json
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.