AI Sana Challenge Hub
Next.js-фронтенд платформы Challenge Hub: бизнес создаёт заявку-задачу и получает AI-анализ готовности, студенты загружают CSV команды, проходят…
О проекте
Команда: FirstPlace
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Прототип
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Next.js-фронтенд платформы Challenge Hub: бизнес создаёт заявку-задачу и получает AI-анализ готовности, студенты загружают CSV команды, проходят matching и отправляют отклики, бизнес принимает решение.
Как устроено
Фронт на Next.js App Router с Supabase Auth (PKCE, cookie-based SSR) и типизированным fetch к FastAPI-бэкенду (контракт из Pydantic-схем, генерация типов через openapi-typescript). Роль берётся из GET /profile. Готовность (readiness_score), matching и eligibility считает backend, публикация возможна только при readiness_score=100. Вопросы и оценки привязаны к ревизии заявки. В этой ветке только frontend: backend на FastAPI добавлялся и удалялся коммитами, в дереве его нет.
Ключевые решения
- Supabase Auth SSR
- openapi-typescript
- readiness scoring
- matching команд по CSV
- Playwright e2e с fixture-сервером
Особенности
Контрактный подход: e2e-тесты Playwright работают против изолированного HTTP fixture, а типы API генерируются из OpenAPI. Однако AI-часть и backend в этой ветке отсутствуют, фронт только ссылается на них.
Стек
Next.js 16 · React · TypeScript · Tailwind CSS 4 · Supabase · FastAPI (backend вне ветки) · Vitest · Playwright · pnpm
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-bcd64953-firstplace.
README
README.mdhack-bcd64953-firstplace
Hackathon team repository for FirstPlace
Авторы коммитов
История коммитов
- 2026-09-23 17:58Fix formatting of site link in READMEDaurenbek 零
- 2026-09-23 17:57Revise brief description in README.mdDaurenbek 零
- 2026-09-23 17:57Update README.mdDaurenbek 零
- 2026-09-23 17:56Update README.mdDaurenbek 零
- 2026-09-23 17:54Update README.mdabylay06
- 2026-09-23 17:48Delete frontend directoryDaurenbek 零
- 2026-09-23 17:34Update heading text for team matching sectionAmir
- 2026-09-23 17:27Update README.mdabylay06
Все коммиты (29)
- 2026-09-23 17:24feat: implement AI Sana Challenge Hub frontendAmir
- 2026-09-23 16:58Add files via uploadDaurenbek 零
- 2026-09-23 16:57Delete backend/supabase/migrations/202609230002_transactions.sqlDaurenbek 零
- 2026-09-23 16:57Delete backend/supabase/migrations/202609230001_schema.sqlDaurenbek 零
- 2026-09-23 16:18Delete frontend directoryDaurenbek 零
- 2026-09-23 16:16Add FastAPI backendDaurenbekGit
- 2026-09-23 16:05Delete backend directoryDaurenbek 零
- 2026-09-23 16:05Delete index.pyDaurenbek 零
- 2026-09-23 16:05Delete Daurenbek.txt.bmpDaurenbek 零
- 2026-09-23 16:04Delete node_modules directoryDaurenbek 零
- 2026-09-23 15:51Add files via uploadDaurenbek 零
- 2026-09-23 15:48chore: hourly checkpointAmir
- 2026-09-23 14:53DaurenbekDaurenbekGit
- 2026-09-23 14:52chore: hourly checkpointAmir
- 2026-09-23 14:49Added logicAbylay
- 2026-09-23 14:01chore: hourly checkpointAmir
- 2026-09-23 14:01chore: initialize frontend workspaceAmir
- 2026-09-23 13:56IndexFileDaurenbekGit
- 2026-09-23 13:53Student page first commitAbylay
- 2026-09-23 12:35Delete Abylay.pyDaurenbek 零
- 2026-09-23 12:33MessageDaurenbekGit
Структура репозитория (95 файлов)
.gitignore CHECKPOINT.txt CHECKPOINT_1547.txt FRONTEND.md README.md frontend/.env.example frontend/.gitignore frontend/.npmrc frontend/AGENTS.md frontend/CLAUDE.md frontend/README.md frontend/docs/integration.md frontend/docs/routes.md frontend/eslint.config.mjs frontend/next-env.d.ts frontend/next.config.ts frontend/package.json frontend/playwright.config.ts frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml frontend/postcss.config.mjs frontend/scripts/generate-api.mjs frontend/src/api/applications.ts frontend/src/api/client.ts frontend/src/api/csv.ts frontend/src/api/notifications.ts frontend/src/api/profiles.ts frontend/src/api/responses.ts frontend/src/app/about/page.tsx frontend/src/app/auth/callback/route.ts frontend/src/app/business/applications/[id]/ai-analysis/page.tsx frontend/src/app/business/applications/[id]/edit/page.tsx frontend/src/app/business/applications/[id]/page.tsx frontend/src/app/business/applications/[id]/preview/page.tsx frontend/src/app/business/applications/[id]/responses/page.tsx frontend/src/app/business/applications/create/page.tsx frontend/src/app/business/applications/page.tsx frontend/src/app/business/dashboard/page.tsx frontend/src/app/business/layout.tsx frontend/src/app/business/notifications/page.tsx frontend/src/app/business/profile/page.tsx frontend/src/app/business/responses/[id]/page.tsx frontend/src/app/business/responses/page.tsx frontend/src/app/business/settings/page.tsx frontend/src/app/business/teams/[id]/page.tsx frontend/src/app/complete-profile/page.tsx frontend/src/app/error.tsx frontend/src/app/forgot-password/page.tsx frontend/src/app/globals.css frontend/src/app/layout.tsx frontend/src/app/login/page.tsx frontend/src/app/not-found.tsx frontend/src/app/page.tsx frontend/src/app/register/page.tsx frontend/src/app/reset-password/page.tsx frontend/src/app/student/applications/[id]/apply/page.tsx frontend/src/app/student/applications/[id]/csv-check/page.tsx frontend/src/app/student/applications/[id]/page.tsx frontend/src/app/student/applications/page.tsx frontend/src/app/student/dashboard/page.tsx frontend/src/app/student/layout.tsx frontend/src/app/student/notifications/page.tsx frontend/src/app/student/profile/page.tsx frontend/src/app/student/responses/[id]/page.tsx frontend/src/app/student/responses/page.tsx frontend/src/app/student/settings/page.tsx frontend/src/auth/browser.ts frontend/src/auth/profile-context.tsx frontend/src/auth/server.ts frontend/src/components/ai-analysis.tsx frontend/src/components/api-navigation.tsx frontend/src/components/app-shell.tsx frontend/src/components/application-pages.tsx frontend/src/components/application-ui.tsx frontend/src/components/auth-form.tsx frontend/src/components/brand.tsx frontend/src/components/csv-pages.tsx frontend/src/components/profile-form.tsx frontend/src/components/public-layout.tsx frontend/src/components/response-pages.tsx frontend/src/components/secondary-pages.tsx frontend/src/components/team-ui.tsx frontend/src/components/ui.tsx frontend/src/config/env.ts frontend/src/hooks/use-resource.ts frontend/src/proxy.ts frontend/src/types/api.source.ts frontend/src/types/api.ts frontend/src/validators/csv.ts frontend/src/validators/navigation.ts frontend/tests/api-client.test.ts frontend/tests/e2e/flows.spec.ts frontend/tests/fixtures/server.mjs frontend/tsconfig.json frontend/vitest.config.ts
Ветки (3)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.