Skip to content

Repository files navigation

🚀 SberLab-NSU Hackathon Platform

Платформа для управления совместными проектами СберЛаб и НГУ. Единая экосистема, объединяющая студентов, менторов из Сбера, преподавателей ВУЗа и HR-специалистов. Решает проблему коммуникации, бюрократии и поиска талантов.

SberLab Banner

💡 О проекте

Это не просто доска задач. Это ERP-система для управления полным жизненным циклом студенческих проектов: от идеи (сгенерированной AI) до трудоустройства в Сбер.

Ключевые преимущества:

  • AI-ассистент (GigaChat): Помогает менторам писать ТЗ и формулировать научную новизну для дипломов.
  • Верификация ВУЗом: Деканат подтверждает средний балл (GPA) студентов, исключая фейковые данные.
  • Talent Pipeline для HR: Аналитический дашборд для поиска лучших студентов по стеку и рейтингу.
  • Юридическая безопасность: Встроенный флоу подписания NDA и генерация документов (PDF).

🛠 Технологический стек

Backend

  • Язык: Python 3.11
  • Фреймворк: Django + Django REST Framework
  • AI: GigaChat API (Сбер)
  • База данных: SQLite (для портативности) / PostgreSQL (Ready)
  • Безопасность: Token Authentication, CORS headers

Frontend

  • Core: React, Vite
  • UI/UX: CSS Modules, Swiper (Галерея), React-Quill (Rich Text)
  • Аналитика: Recharts (Графики и диаграммы)
  • PDF: jsPDF (Генерация договоров)

DevOps

  • Контейнеризация: Docker, Docker Compose
  • Web Server: Nginx (Reverse Proxy, Static files)

📐 Архитектура и Схемы

1. Архитектура приложения (Container Diagram)

graph TD
%% Стили
classDef client fill:#f9f,stroke:#333,stroke-width:2px,color:black;
classDef nginx fill:#21A038,stroke:#333,stroke-width:2px,color:white;
classDef frontend fill:#61DAFB,stroke:#333,stroke-width:2px,color:black;
classDef backend fill:#092E20,stroke:#333,stroke-width:2px,color:white;
classDef db fill:#333,stroke:#333,stroke-width:2px,color:white;
classDef ext fill:#ddd,stroke:#333,stroke-width:2px,stroke-dasharray: 5 5,color:black;
User((👤 Пользователь)):::client
GigaChat[🤖 GigaChat API]:::ext
subgraph Docker_Compose [🐳 Docker Compose Host]
direction TB
subgraph Nginx_Container [Container: Nginx]
Proxy[🔄 Reverse Proxy /80]:::nginx
Static[📂 Static Files /dist]:::frontend
end
subgraph Backend_Container [Container: Django]
API[⚙️ API Server /8000]:::backend
Media[🖼️ Media Files]:::backend
end
DB[(🗄️ SQLite3 / File)]:::db
end
%% Исправленный блок связей (добавлены кавычки)
User -->|HTTP Request| Proxy
Proxy -->|"/ (Root)"| Static
Proxy -->|"/api or /admin"| API
Proxy -->|/media| Media
API -->|Read/Write| DB
API -.->|JSON Request| GigaChat
Loading

(Схема взаимодействия: Nginx -> React Static / Django API -> Database / GigaChat)

2. Схема User Flow (Путь студента)

flowchart TD
%% Стили
classDef start fill:#21A038,stroke:#333,stroke-width:2px,color:white;
classDef proc fill:#fff,stroke:#333,stroke-width:1px,color:black;
classDef decision fill:#FFD700,stroke:#333,stroke-width:1px,color:black;
classDef stop fill:#FF4B4B,stroke:#333,stroke-width:2px,color:white;
Start([🚀 Регистрация]):::start --> Verif{Проверен<br>ВУЗом?}:::decision
Verif -- Нет --> Wait[⏳ Ожидание верификации Деканатом]:::proc
Wait --> Verif
Verif -- Да --> Browse[🔍 Поиск проекта в Витрине]:::proc
Browse --> Apply[📝 Подача заявки<br>+ Мотивационное письмо]:::proc
Apply --> MentorApprove{Ментор<br>одобрил?}:::decision
MentorApprove -- Нет --> Browse
MentorApprove -- Да --> IsNDA{Нужен<br>NDA?}:::decision
IsNDA -- Да --> SignNDA[✍️ Подписание NDA в интерфейсе]:::proc
SignNDA --> Access[🔓 Доступ к Git/Jira]:::proc
IsNDA -- Нет --> Access
Access --> Work[💻 Работа над проектом]:::proc
Work --> Complete{Проект<br>завершен?}:::decision
Complete -- Да --> Grading[⭐ Ментор ставит оценку и отзыв]:::proc
Grading --> Portfolio[🏆 Проект попадает в Портфолио]:::start
Portfolio --> HR[💼 Виден в базе HR]:::proc
Loading

(Регистрация -> Верификация -> Подача заявки -> Одобрение -> NDA -> Работа -> Оценка -> Портфолио)

3. Схема БД (ER-Diagram)

erDiagram
User ||--o{ Project : "Creates / Mentors"
User ||--o{ Participation : "Joins"
User ||--o{ Comment : "Writes"
Project ||--o{ Participation : "Has members"
Project ||--o{ Resource : "Contains links"
Project ||--o{ Comment : "Has questions"
User {
int id
string role "student/mentor/teacher/hr"
float gpa "Средний балл"
bool is_verified
string tech_stack
}
Project {
int id
string title
string status "open/in_progress/done"
bool is_nda_required
bool is_diploma_allowed
text scientific_value "AI Generated"
}
Participation {
int id
string status "pending/accepted"
bool is_nda_signed
int grade "Оценка ментора"
text review "Отзыв"
}
Resource {
string title "GitLab/Jira"
string url "Hidden until NDA"
}
Loading

(Связи между Users, Projects, Participations, Comments)


🐳 Запуск через Docker (Рекомендуемый)

Требуется Docker Desktop или Docker Engine с Compose v2. После распаковки архива перейдите в корень проекта и выполните одну команду:

docker compose up --build -d

Compose соберёт backend и frontend, применит миграции, создаст тестовые данные и дождётся готовности Django и SQLite перед запуском frontend.

Проверка готовности:

docker compose ps
curl http://localhost:8080/health/

Оба контейнера в docker compose ps должны иметь состояние healthy, а endpoint должен вернуть:

{"status": "ok", "database": "ok"}

Адреса и порты

НазначениеАдрес на компьютереВнутри Compose
Frontend и основной входhttp://localhost:8080 (порт 8080)Nginx, порт 80
Backend напрямуюhttp://localhost:8000Django, порт 8000
Проверка готовностиhttp://localhost:8080/health/Nginx → backend:8000
SQLiteФайл не публикуется в сеть/app/data/db.sqlite3

Frontend по умолчанию публикуется как 8080:80: внешний порт компьютера — 8080, а Nginx внутри контейнера продолжает слушать 80. Чтобы использовать другой свободный внешний порт, передайте переменную окружения, например FRONTEND_PORT=9090 docker compose up --build -d.

Отдельного контейнера базы данных нет: SQLite работает внутри backend. База сохраняется в томе db_volume, загруженные файлы — в media_volume, поэтому данные переживают пересоздание контейнера.

Для остановки выполните docker compose down. Полный сброс вместе с базой и медиа:

docker compose down -v

Если нужны AI-функции, скопируйте .env.example в .env и заполните GIGACHAT_CREDENTIALS. Для запуска основного target ключ не требуется. Краткая пошаговая памятка находится в LOCAL_RUN.md.


👨‍💻 Запуск вручную (Для разработки)

Если вы хотите запустить проект локально без Докера.

Предварительные требования

  • Python 3.11+
  • Node.js 22+ (требуется текущей версией Vite)

1. Запуск Backend

cp .env.example .env
# Заполните GIGACHAT_CREDENTIALS в .envcd backend
python -m venv venv
source venv/bin/activate
# Windows: venv\Scripts\activate
pip install -r requirements.txt
python manage.py migrate
python manage.py seed_demo
python manage.py runserver

Бэкенд будет доступен по адресу: http://127.0.0.1:8000

2. Запуск Frontend

cd frontend/frontend
npm ci
npm run dev

Фронтенд будет доступен по адресу: http://localhost:5173


🧪 Тестовые данные (Credentials)

При старте backend команда python manage.py seed_demo автоматически и повторяемо создаёт пользователей, два проекта, заявки и тестовый ресурс. Пароли демонстрационных пользователей восстанавливаются при каждом запуске контейнера.

РольЛогинПарольОписание
AdminadminadminПолный доступ (Django Admin)
МенторmentorAa12345678!Создание проектов, управление командой
СтудентstudentAa12345678Подача заявок, портфолио
HRhrAa12345678Доступ к Talent Pool и аналитике
ДеканатteacherAa12345678Верификация студентов

🌟 Основной функционал (Фичи)

  1. Капитанская рубка (Ментор):

    • Визуализация команды слотами (как в лобби игр).
    • Управление жизненным циклом проекта (Запуск, Пауза, Архив).
    • Добавление скрытых ресурсов (ссылки на GitLab/Jira), доступных только после NDA.
  2. AI-Генерация:

    • Нажмите "Создать проект" -> введите идею -> нажмите "🪄 Заполнить".
    • GigaChat сгенерирует название, стек, описание и научную новизну.
  3. Аналитика:

    • Красивые графики Recharts: популярность технологий, воронка статусов проектов.
    • KPI метрики лаборатории.
  4. Безопасность и Валидация:

    • Студент не может сам себе "нарисовать" оценки. Только роль teacher может подтвердить GPA.
    • Студент не видит ссылок на код, пока не нажмет "Подписать NDA".

About

Продуктовое решение для организации взаимодействия ментор-стажер в СберЛаб

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages