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:8000 Django, порт 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 в .env

cd 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 автоматически и повторяемо создаёт пользователей, два проекта, заявки и тестовый ресурс. Пароли демонстрационных пользователей восстанавливаются при каждом запуске контейнера.

Роль Логин Пароль Описание
Admin admin admin Полный доступ (Django Admin)
Ментор mentor Aa12345678! Создание проектов, управление командой
Студент student Aa12345678 Подача заявок, портфолио
HR hr Aa12345678 Доступ к Talent Pool и аналитике
Деканат teacher Aa12345678 Верификация студентов

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

  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