AAYMA
RU
Войти

AI Sana Challenge Hub (Work.ai)

Кроссплатформенное Flutter-приложение Work.ai: бизнес за 3 шага уточнений формирует редактируемое ТЗ и публикует задачу, студенты откликаются.

Рабочий MVP
Команда «IT-Forge» 4💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: IT-Forge
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP

Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд

Суть

Кроссплатформенное Flutter-приложение Work.ai: бизнес за 3 шага уточнений формирует редактируемое ТЗ и публикует задачу, студенты откликаются. Бизнес принимает отклик, дальше работают задачи, чат и сдача решения.

Как устроено

Экраны Flutter работают с общим ChangeNotifier-хранилищем, данные сохраняются локально в SharedPreferences. Уточняющие вопросы берутся из локальных шаблонов по теме. Опционально их генерирует локальный Node-компаньон, который вызывает OpenAI Responses API для структурированных вопросов и ТЗ. Поток: проблема, бюджет и срок → 3 шага с множественным выбором и своими требованиями → редактируемая спецификация → публикация → отклик → задача → сдача URL решения.

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

  • OpenAI Responses API
  • локальные шаблоны уточнений
  • ChangeNotifier state

Особенности

Нативное мобильное приложение (Android, iOS, web) с казахским интерфейсом. Ключ OpenAI вынесен в отдельный Node-сервер и не компилируется в клиент. Авторизации и общей БД нет, всё хранится локально на устройстве.

Стек

Flutter · Dart · Node.js · SharedPreferences

Модели

OpenAI Responses API


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

README

README.md

AI Sana Challenge Hub

Business challenges. Student talent. Real project experience.

A Flutter workspace that takes a business idea from a clear brief to a student proposal and project delivery.

Flutter Dart Android OpenAI

Quick start · Product flows · OpenAI setup · Verification


The experience

Work.ai connects business problems with students who can solve them. Its Kazakh-language interface follows the updated design in designappwai2: blue brand accents, light surfaces, focused project cards, student/business workspaces and a guided challenge studio.

The Flutter implementation adds bundled Manrope typography, Lucide icons, tactile buttons, staged entrances and short page transitions. It respects reduced-motion settings, keeps tab state alive and adapts to a navigation rail on wider screens.

Product flows

DiscoverCreateCollaborate
Search titles, companies and skills.Set the title, problem, budget and duration.Submit a validated proposal with contact details.
Filter categories, sort and save projects.Answer three questions with multiple selections and custom requirements.Review applications and accept, invite or decline them in business mode.
Open each project's own brief.Review and edit the actual specification that will be published.Send messages, submit a solution URL and review delivery.

From idea to published challenge

flowchart LR
  A[Business problem] --> B[Title, budget, duration]
  B --> C[Three clarification steps]
  C --> D[Multiple choices + custom answers]
  D --> E[Editable specification]
  E --> F[Confirm publication]
  F --> G[Discovery + business workspace]

Drafts are saved between visits. Publishing keeps the entered budget, duration, selections and edited specification. Student applications are linked to the correct project; accepting an application creates a task, and submitting a solution changes its status.

What is local, and what connects to OpenAI?

CapabilityCurrent boundary
Projects, bookmarks, profiles, applications, task decisions and chatOne local workspace, saved on the device with SharedPreferences
Guided questions without a serverTopic-based templates; the flower project includes catalog/3D/AR, delivery and AI choices from the reference
Optional OpenAI assistanceA companion Node server calls the Responses API for structured questions and editable specifications
Authentication and company deliveryNot connected; local role switching is not server authentication
Payments and escrowNot connected; no real balances or transfers
Example companies, projects and conversationsDemonstration data; no live company communication is implied

The readiness indicator on newly published projects measures completion of the brief, not independent AI verification. With OpenAI enabled, the builder explains what project data will be sent, handles connection errors and lets the user explicitly continue with local questions.

Quick start

Requirements: Flutter compatible with Dart ^3.11.4, an Android SDK/device or Chrome. OpenAI integration additionally needs Node.js 22+.

git clone https://github.com/BAITC-Hacks/hack-3228a77c-it-forge.git
cd hack-3228a77c-it-forge
flutter pub get
flutter devices
flutter run -d <device-id>

For web:

flutter run -d chrome

For live AI, follow OpenAI setup. The key belongs in the ignored server environment file. It is never compiled into the Flutter application.

Architecture

flowchart TD
  UI[Flutter feature screens] <--> S[WorkspaceStore]
  S <--> P[Device persistence]
  B[Challenge studio] --> L[Local clarification service]
  B --> C[Optional HTTP client]
  C --> N[Loopback Node companion]
  N --> O[OpenAI Responses API]
lib/
├── app/                  App shell, theme, responsive navigation
├── core/
│   ├── services/         Local questions and optional AI client
│   └── state/            Shared workspace and persistence
├── features/
│   ├── challenges/       Builder, detail and application
│   ├── home/             Discovery, search and filters
│   └── workspace/        Responses, tasks, chat and profiles
├── shared/               Models, demo data and reusable UI
└── main.dart

assets/fonts/             Bundled Manrope and its OFL license
server/                   Local OpenAI adapter and tests
test/                     State, persistence and UI workflow tests
designappwai2/             Updated reference design; not app runtime

Flutter uses Material widgets and local state primitives with a shared ChangeNotifier store. Tabs retain their state. Writes are serialized, persistence errors are surfaced and damaged stored data is not automatically overwritten.

Verification

flutter analyze
flutter test
node --test server/server.test.mjs
flutter build apk --debug --target-platform android-arm64

Tests cover saved data round trips, duplicate applications, task status transitions, malformed storage, relevant clarification questions, search, mobile navigation, retained chat, edited specification publication and wide-screen layout. Server tests use mocked responses and make no paid API calls.

A practical walkthrough:

  1. Open Profile → Кәсіпкер → Жаңа тапсырма.
  2. Enter a flower-delivery project, a problem, a budget and a duration.
  3. Select multiple catalog options and add a custom requirement.
  4. Complete the other steps, edit the final specification and publish.
  5. Open the published card from discovery.
  6. Switch to the student role, apply and inspect Жауаптар.
  7. Return to business mode and accept the application.
  8. Submit a solution from Тапсырмалар, then review it in business mode.
  9. Send a message, switch tabs and restart the app to check retention.

Before a public release

The local demo needs authenticated server accounts, a shared database, authorized company messaging, attachment storage and a deployed HTTPS AI backend before supporting real independent users. The included Node server is loopback-only development infrastructure. Android still uses the example application ID and development signing.

The design reference is preserved separately. Its web code and example API configuration are not consumed by Flutter.


Built for the AI SANA practical hackathon case. The product is Work.ai.

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

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

Nurislam0707 11beksu1ltan 2

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

  • 2026-09-23 17:37Change project name to 'AI Sana Challenge Hub'beksu1ltan
  • 2026-09-23 17:28Revise README for improved project overview and detailsbeksu1ltan
  • 2026-09-23 17:256Nurislam0707
  • 2026-09-23 17:05Merge branch 'main' of https://github.com/BAITC-Hacks/hack-3228a77c-it-forgeNurislam0707
  • 2026-09-23 17:055Nurislam0707
  • 2026-09-23 16:23docs: correct product name to Work.aiNurislam0707
  • 2026-09-23 16:22docs: add SANA product READMENurislam0707
  • 2026-09-23 16:194Nurislam0707
Все коммиты (13)
  • 2026-09-23 16:10Merge main into Flutter implementationNurislam0707
  • 2026-09-23 16:073Nurislam0707
  • 2026-09-23 15:072Nurislam0707
  • 2026-09-23 13:53первыйNurislam0707
  • 2026-09-23 13:46первыйNurislam0707
Структура репозитория (186 файлов)
.gitignore
.metadata
README.md
analysis_options.yaml
android/.gitignore
android/app/build.gradle.kts
android/app/src/debug/AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
android/app/src/main/kotlin/com/example/wai/MainActivity.kt
android/app/src/main/res/drawable-v21/launch_background.xml
android/app/src/main/res/drawable/launch_background.xml
android/app/src/main/res/mipmap-hdpi/ic_launcher.png
android/app/src/main/res/mipmap-mdpi/ic_launcher.png
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
android/app/src/main/res/values-night/styles.xml
android/app/src/main/res/values/styles.xml
android/app/src/profile/AndroidManifest.xml
android/build.gradle.kts
android/gradle.properties
android/gradle/wrapper/gradle-wrapper.properties
android/settings.gradle.kts
assets/fonts/Inter-OFL.txt
assets/fonts/Inter.ttf
assets/fonts/Manrope-OFL.txt
assets/fonts/Manrope.ttf
assets/fonts/PlusJakartaSans-OFL.txt
assets/fonts/PlusJakartaSans.ttf
deisgnappwai/.env.example
deisgnappwai/.gitignore
deisgnappwai/README.md
deisgnappwai/bun.lock
deisgnappwai/index.html
deisgnappwai/metadata.json
deisgnappwai/package.json
deisgnappwai/src/App.tsx
deisgnappwai/src/components/FlutterCodeViewer.tsx
deisgnappwai/src/components/MobileSimulator.tsx
deisgnappwai/src/flutter_code_data.ts
deisgnappwai/src/index.css
deisgnappwai/src/main.tsx
deisgnappwai/tsconfig.json
deisgnappwai/vite.config.ts
ios/.gitignore
ios/Flutter/AppFrameworkInfo.plist
ios/Flutter/Debug.xcconfig
ios/Flutter/Release.xcconfig
ios/Runner.xcodeproj/project.pbxproj
ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
ios/Runner.xcworkspace/contents.xcworkspacedata
ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
ios/Runner/AppDelegate.swift
ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
ios/Runner/Assets.xcassets/LaunchImage.imageset/[email protected]
ios/Runner/Assets.xcassets/LaunchImage.imageset/[email protected]
ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
ios/Runner/Base.lproj/LaunchScreen.storyboard
ios/Runner/Base.lproj/Main.storyboard
ios/Runner/Info.plist
ios/Runner/Runner-Bridging-Header.h
ios/Runner/SceneDelegate.swift
ios/RunnerTests/RunnerTests.swift
lib/app/theme/app_colors.dart
lib/app/theme/app_theme.dart
lib/app/work_ai_app.dart
lib/core/services/ai_challenge_service.dart
lib/core/services/task_clarification_service.dart
lib/features/challenges/challenge_builder_screen.dart
lib/features/challenges/challenge_detail_screen.dart
lib/features/home/discovery_screen.dart
lib/features/workspace/workspace_screens.dart
lib/l10n/README.md
lib/l10n/app_language.dart
lib/l10n/catalog.json
lib/l10n/catalog_kk.json
lib/l10n/translations.dart
lib/main.dart
lib/models/job_challenge.dart
lib/screens/application_form_screen.dart
lib/screens/auth_screen.dart
lib/screens/chat_screen.dart
lib/screens/employer_profile_screen.dart
lib/screens/home_feed_screen.dart
lib/screens/new_task_screen.dart
lib/screens/responses_screen.dart
lib/screens/student_profile_screen.dart
lib/screens/tasks_screen.dart
lib/screens/vacancy_detail_screen.dart
lib/shared/data/demo_data.dart
lib/shared/models/challenge.dart
lib/shared/widgets/app_widgets.dart
lib/shared/widgets/navigation_icon.dart
lib/theme/app_theme.dart
lib/widgets/ai_task_clarification_dialog.dart
linux/.gitignore
linux/CMakeLists.txt
linux/flutter/CMakeLists.txt
linux/flutter/generated_plugin_registrant.cc
linux/flutter/generated_plugin_registrant.h
linux/flutter/generated_plugins.cmake
linux/runner/CMakeLists.txt
linux/runner/main.cc
linux/runner/my_application.cc
linux/runner/my_application.h
macos/.gitignore
macos/Flutter/Flutter-Debug.xcconfig
macos/Flutter/Flutter-Release.xcconfig
macos/Flutter/GeneratedPluginRegistrant.swift
macos/Runner.xcodeproj/project.pbxproj
macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
macos/Runner.xcworkspace/contents.xcworkspacedata
macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
macos/Runner/AppDelegate.swift
macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
macos/Runner/Base.lproj/MainMenu.xib
macos/Runner/Configs/AppInfo.xcconfig
macos/Runner/Configs/Debug.xcconfig
macos/Runner/Configs/Release.xcconfig
macos/Runner/Configs/Warnings.xcconfig
macos/Runner/DebugProfile.entitlements
macos/Runner/Info.plist
macos/Runner/MainFlutterWindow.swift
macos/Runner/Release.entitlements
macos/RunnerTests/RunnerTests.swift
pubspec.lock
pubspec.yaml
test/design_screens_test.dart
test/localization_test.dart
test/new_task_flow_test.dart
test/widget_test.dart
tool/generate_localizations.py
web/favicon.png
web/icons/Icon-192.png
web/icons/Icon-512.png
web/icons/Icon-maskable-192.png
web/icons/Icon-maskable-512.png
web/index.html
web/manifest.json
windows/.gitignore
windows/CMakeLists.txt
windows/flutter/CMakeLists.txt
windows/flutter/generated_plugin_registrant.cc
windows/flutter/generated_plugin_registrant.h
windows/flutter/generated_plugins.cmake
windows/runner/CMakeLists.txt
windows/runner/Runner.rc
windows/runner/flutter_window.cpp
windows/runner/flutter_window.h
windows/runner/main.cpp
windows/runner/resource.h
windows/runner/resources/app_icon.ico
windows/runner/runner.exe.manifest
windows/runner/utils.cpp
windows/runner/utils.h
windows/runner/win32_window.cpp
windows/runner/win32_window.h

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

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

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