AAYMA
RU
Войти

AI Sana Challenge Hub

Next.js-фронтенд платформы Challenge Hub: бизнес создаёт заявку-задачу и получает AI-анализ готовности, студенты загружают CSV команды, проходят…

Прототип
Команда «FirstPlace» 4💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

hack-bcd64953-firstplace

Hackathon team repository for FirstPlace

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

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

Daurenbek 零 19Amir 6abylay06 4

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

  • 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 комментариев

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

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