Sprint 5 مكتمل · v0.5.0 Full-Stack SaaS

STUDYNEXUS

منصة لم يمتلكها أي طالب في HsH.
بنيتها طالب احتاجها.

التعمق

Chapter I: The Origin

من إحباط حقيقي إلى منتج حقيقي.

اكتمل Sprint 5 بالكامل — 9 sprints، 17 migrations، 122/122 اختباراً ناجحاً، 0 أخطاء TypeScript. دراسة الحالة تعكس الحالة الراهنة.

تنظيم الدراسة فوضى حقيقية

كل طالب في HS Hannover يعرف هذا: QIS للدرجات، Moodle للمواد، Excel لتتبع ECTS، دفتر لمواعيد الامتحانات — وبعد كل هذا تضيع الخيوط. لا أداة تتحدث بلغة الطالب. لا واحدة تعرف اللوائح الأكاديمية. ولا واحدة تحسب المعدل تلقائياً.

هذه ليست مشكلة راحة — إنها خلل في النظام. وأخطاء النظام تستحق حلولاً منهجية.

  • لا مرجع مركزي لمتابعة تقدم الدراسة
  • تتبع ECTS يدوياً في Excel
  • مواعيد الامتحانات موزعة على أنظمة متعددة
  • حساب المعدل التراكمي يدوياً بالآلة الحاسبة
  • اكتشاف التعارضات في الجدول فقط داخل قاعة المحاضرات
student_tools.sh

# Aktuelle Realität an der HsH

$ open QIS.exe && open moodle.hs-hannover.de
$ open "ECTS_Tracking_v3_FINAL.xlsx"
$ grep -r "Prüfungstermin" ~/Desktop/notizen/

# Die StudyNexus Lösung

yusef@studynexus:~$ docker compose up --build
[✓] frontend started on :3000
[✓] backend started on :8000
[✓] postgres ready — migrations applied
[READY] StudyNexus is running.

Platform Scope

📋
الخطة الدراسية & المعدل
لوائح الامتحانات مدمجة · مُرجَّح بـ ECTS
📅
Schedule Board
شبكة CSS بدقة 15 دقيقة · كشف التعارضات
📌
Kanban Board
سحب وإفلات · محفوظ في قاعدة البيانات
🔐
وصول حصري لـ HsH
@stud.hs-hannover.de · تحقق بالبريد الإلكتروني

نظام تشغيل لدراستك.

StudyNexus ليس تطبيق مهام آخر. إنه نظام تشغيل دراسي متكامل — مُصمَّم خصيصاً لـ HS Hannover. المنصة تعرف اللوائح الأكاديمية الفعلية، وتحسب GPA مُرجَّح بالـ ECTS، وتكشف تعارضات الجدول تلقائياً.

الوصول حصري عمداً: فقط عناوين @stud.hs-hannover.de مقبولة. لا ضجيج، لا حسابات وهمية — مجتمع طلابي حقيقي.

رغم أن المشروع لا يزال في تطوير نشط، MVP كامل full-stack يعمل بالفعل: مصادقة مع تحقق البريد الإلكتروني، خطة دراسية مع حساب GPA تلقائي، Kanban Board مع Drag & Drop، جدول دراسي مع كشف التعارضات وخطة دراسية مرئية.

200+

الملفات المصدرية
(Frontend + Backend)

17

هجرات
Alembic

22+

سجلات قرارات
المعمارية (ADRs)

122

اختبارات Backend
كلها ناجحة

37

وحدات BIN
مُعبَّأة بالكامل

5

خدمات Docker
(Compose Stack)

Chapter II: System Architecture

خمسة containers. منصة واحدة متماسكة.

Frontend & Backend. مستودع واحد.

StudyNexus مبني كـ monorepo — الـ frontend (Next.js) والـ backend (FastAPI) في نفس المستودع، يتشاركان سجل الـ commits وينشران معاً. هذا يُلغي التبديل بين السياقات ويُبقي API contracts متسقة.

كل تغيير في API contract يظهر فوراً في الـ frontend. لا تفاوت بين مستودعين.

📁 studynexus/ ├── 📁 frontend/ // Next.js 14 │ ├── 📁 src/app/[locale]/ │ ├── 📁 src/components/ │ └── 📄 package.json ├── 📁 backend/ // FastAPI │ ├── 📁 app/routers/ │ ├── 📁 app/models/ │ └── 📄 requirements.txt ├── 📄 docker-compose.yml └── 📄 .env

مسار الطلب

كل تعديل في الـ frontend يمر عبر pipeline آمن: Next.js API Routes تُوكّل جميع الطلبات للـ FastAPI backend. هذا يُلغي مشاكل CORS ويُخفي عنوان الـ backend بالكامل. الـ backend يتحقق بـ Pydantic، يفحص JWT، ثم يكتب في PostgreSQL.

Browser
React UI
TanStack Query
Next.js
API Route
Proxy + CSRF
FastAPI
Backend
JWT + Pydantic
PostgreSQL
Database
SQLAlchemy ORM
Redis
Cache
Sessions

Docker Compose: خمسة Services

كامل البنية التحتية تنطلق بأمر واحد. في الإنتاج، نفس الـ containers تُنشر — لا «يعمل عندي فقط».

PostgreSQL وRedis لهما فحوصات صحة. الـ backend لا يبدأ إلا بعد جهوزية قاعدة البيانات.

bash
$ docker compose up --build
✓ db healthy (postgres:16)
✓ redis healthy (redis:7-alpine)
✓ backend started → :8000
✓ frontend started → :3000
✓ adminer started → :8080
frontend :3000 Next.js 14 · App Router Node
backend :8000 FastAPI · Uvicorn · ASGI Python
db :5432 PostgreSQL 16-alpine Health ✓
redis :6379 Redis 7-alpine · Sessions Health ✓
adminer :8080 DB Admin UI · Dev only Tool

Chapter III: Engineering Decisions

أكثر من 22 سجل قرار معماري. هذه هي الأكثر تأثيراً.

قرارات المعمارية يجب توثيقها — ليس فقط ما قُرِّر، بل لماذا وأي بدائل رُفضت. لدى StudyNexus أكثر من 22 ADR. هذه هي التي شكّلت النظام أكثر.

ADR-01

FastAPI بدلاً من Django

Django هو إطار Python «الآمن». FastAPI هو الصحيح لهذه الحالة: دعم async أصيل، Pydantic v2 مباشرة في الـ schema، توثيق OpenAPI تلقائي على /api/docs — ومعمارية جاهزة للتوسع بالذكاء الاصطناعي.

async-nativePydantic v2OpenAPI /docsKI-ready
ADR-03

httpOnly Cookies بدلاً من localStorage

تخزين JWT في localStorage ثغرة XSS كلاسيكية: أي سكريبت مُحقَن يستطيع قراءة localStorage. httpOnly cookies غير مرئية لـ JavaScript أساساً. المتصفح يرسلها تلقائياً — لا سكريبت يستطيع سرقتها.

XSS-sicherhttpOnlySameSite=LaxSecure
ADR-02

bcrypt مباشرة — بدون passlib

passlib غير مُصانة فعلياً. آخر إصدار 2022، مشاكل توافق معروفة مع Python 3.13+. استخدام bcrypt 4.1.3 مباشرة أكثر أماناً وأنظف ومستدام — بدون طبقة تجريد قد تنكسر غداً.

bcrypt 4.1.3بدون passlibPython 3.13+ safe
ADR-12

CSRF عبر Custom Header

إدارة CSRF token الكلاسيكية تحتاج server state. عوضاً عن ذلك، كل طلب تعديل يحمل الـ header x-studynexus-client: true. المتصفحات لا تسمح لطلبات Cross-Origin بتعيين custom headers بدون CORS preflight — هذه هي الحماية. Stateless، بسيط، فعّال.

statelessCORS-PreflightOrigin-Check
ADR-07

استراتيجية HsH-Only

تقييد الوصول لـ @stud.hs-hannover.de ليس قيداً — إنه قرار تصميم. بدلاً من منصة عامة لجميع الجامعات: نظام متكامل بعمق لجامعة واحدة. لوائح الامتحانات مُدمَجة. هيكل المواد حقيقي.

@stud.hs-hannover.deلوائح امتحانات حقيقيةمجتمع موثقبدون بيانات مزيفة
ADR-019

Redis لرموز جلسة المشرف

لا يمكن إلغاء صلاحية JWT من جانب الخادم. لعمليات المشرف (حذف، أرشفة، إعادة تعيين) نحتاج رمزاً يمكن إلغاؤه فوراً. Redis بـ TTL 15 دقيقة — مفهوم sudo للويب.

server-side invalidierbar15min TTLRedis.get/setex/delete
ADR-021

is_admin في حمولة JWT

تعمل Next.js Middleware في Edge Runtime — لا يمكن الوصول إلى قاعدة البيانات. وضع is_admin: true في JWT مباشرةً يُتيح حراسة مسارات المشرف بدون استعلامات DB وبدون تأخير.

Edge Runtimezero DB-latencyatob() + Base64url

Chapter IV: Feature Deep-Dive

ما تستطيع المنصة فعله اليوم.

Mission Control

القلب النابض: Mission Control Dashboard

أول ما تراه بعد تسجيل الدخول. الـ dashboard يجمع كل المهم في الوقت الحقيقي: حالة GPA، تقدم ECTS، الامتحانات القادمة وأحداث اليوم — محسوبة مباشرة من قاعدة البيانات، بلا caching.

كل widget وظيفي. عداد الامتحان ينبض بالأحمر حين تكون المدة أقل من 14 يوماً. التركيز اليومي يتحول تلقائياً لـ «غداً» بعد الساعة 8 مساءً.

  • متتبع GPA مع حساب لحظي مُرجَّح بالـ ECTS
  • عداد تنازلي للامتحانات مع أنيميشن نبضي (أقل من 14 يوماً = أحمر)
  • التركيز اليومي: أحداث اليوم، تبديل تلقائي بعد 8 مساءً
  • Timeline ذكي: ترتيب حسب الأولوية وتاريخ الاستحقاق
Task Management

Kanban Board مع Drag & Drop حقيقي

ليس localStorage ولا useState tricks — @dnd-kit v6 كأساس. أربعة أعمدة: To Do وIn Progress وExam Ready وDone. للمهام أولويات، يمكن ربطها بمواد وتحمل علامة تسليم.

ترتيب قائم على الموضع: كل عملية Drag-Drop تُكتب فوراً في قاعدة البيانات. إعادة تحميل الصفحة لا تغيّر شيئاً — الـ board محفوظ بالكامل.

To DoIn ProgressExam ReadyDone LOW · MED · HIGHعلامة التسليم 📄@dnd-kit v6
Schedule Board

محرك CSS Grid بدقة 15 دقيقة

الجدول الدراسي ليس جدولاً — إنه CSS Grid حقيقي بدقة 15 دقيقة من 8 صباحاً حتى 8 مساءً. الأحداث تتموضع بدقة البكسل. خط أحمر يُظهر الوقت الحالي في الوقت الفعلي. التعارضات تُكشَف وتُرجَع بـ HTTP 409.

10 أنواع أحداث: LECTURE, EXERCISE, TUTORIAL, SEMINAR, PRACTICUM, CUSTOM_STUDY, FOCUS, EXAM, WORK, LIFE. الربط بالفصل الدراسي يمنع فقدان البيانات عند الانتقال. وضع Ghosting يُخفي الأحداث مؤقتاً دون حذفها.

LECTUREEXERCISETUTORIALSEMINAR EXAMFOCUSWORKLIFE +2 mehr
الخطة الدراسية

الخطة الدراسية المرئية

مواد في أعمدة قائمة على الفصول الدراسية. Drag & Drop بين الفصول، حساب ECTS تلقائي لكل عمود، ترميز لوني حسب نوع المادة. البيانات مأخوذة من لوائح الامتحانات الفعلية لـ HsH — لا بيانات تجريبية.

  • الوحدات الإلزامية تُحمَّل تلقائياً
  • الوحدات الاختيارية والتكميلية قابلة للإضافة يدوياً
  • سحب وإفلات بين الفصول الدراسية عبر @dnd-kit
  • مجموع ECTS لكل عمود يُحسَب في الوقت الفعلي
Milestone Tracker (Sprint 4)

MilestoneWidget — مراقبة §6 من لوائح الامتحانات مباشرةً

يضم لوح التحكم أداة جانبية جديدة تُقيِّم لائحة امتحانات BIN §6 في الوقت الفعلي: أيّ فصول اكتملت؟ هل تم اجتياز الامتحان التمهيدي؟

  • Sem 1 complete: alle 6 Module BIN-100..116
  • الامتحان التمهيدي: اجتياز جميع وحدات الفصول 1-3 الـ 17
  • القبول في البكالوريوس: الامتحان التمهيدي + ≥ 134 ECTS
  • شريط تقدم مباشر لكل معلم
Admin Panel (Sprint 5)

مشرف المؤسسة — 14 صفحة، 35+ نقطة وصول

مركز تحكم مشرف كامل: إدارة المستخدمين، إدارة لوائح الامتحانات، لوحة تحليلات، سجل مراجعة واستيراد JSON — تم تسليمه بالكامل في يومين.

Two-Layer AuthAudit-LogRecharts AdminDataTable<T>Soft DeleteJSON-Import
PO-Übersicht (Sprint 4)

لوائح الدراسة في لمحة

صفحة لوح تحكم مخصصة تعرض جميع قواعد اللائحة ذات الصلة: قواعد القبول §6، سلم الدرجات §10، قواعد الإعادة §11 — مع شارات حالة مباشرة من قاعدة البيانات.

  • Programm-aware: erkennt BIN via API-Response
  • أنواع الامتحانات PX / EA / R / BAA+Ko مُرمَّزة بالألوان
  • القبول في البكالوريوس: شريط تقدم ECTS مباشر
  • بدون بيانات مُضمَّنة — الـ Sprint 7 سيضيف لوائح إضافية

Chapter V: لوائح امتحانات BIN

3 PDFs. 37 مادة. جميع قواعد §6 مُطبَّقة تلقائياً.

مبني من وثائق حقيقية

لا توجد بيانات وهمية. تم استخراج جميع وحدات BIN الـ 37 مباشرةً من ثلاثة وثائق رسمية لـ HsH وإدخالها في قاعدة البيانات.

PO BIN 2019
9 صفحات
  • §5 — Modulstruktur Abschnitt 1 + 2
  • §6 — قواعد القبول والمتطلبات
  • الملحق B1/B2 — قوائم الوحدات الكاملة
ATPO-FIV 2025
20 صفحة
  • §7 — Prüfungsarten (PX, EA, R, BAA+Ko)
  • §10 — 11 درجة رسمية لـ HsH
  • §11 — قواعد الإعادة (حتى 3 محاولات)
Modulhandbuch BIN 19WS
76 صفحة
  • ساعات الدراسة الأسبوعية لكل وحدة (SWS)
  • نوع الامتحان لكل وحدة
  • 37 وصفاً كاملاً للوحدات

أربعة أنواع. مباشرةً من ATPO-FIV §7.

كل وحدة من وحدات BIN الـ 37 تحمل نوع الامتحان الرسمي من دليل الوحدات — محفوظ في قاعدة البيانات، مُرمَّز بالألوان في الواجهة.

يضمن التحقق عبر Pydantic إدخال الدرجات الـ 11 الرسمية لـ HsH فقط. HTTP 422 عند درجة غير صالحة.

PX · 26 وحدة
EA · 3 Module
R · 1 Modul
BAA+Ko · 1 Modul

§6 قواعد القبول — مُطبَّقة بالكامل

Module الشرط Typ
BIN-200..204 اكتمال الفصل الأول SEM_COMPLETE
BIN-206, BIN-208 اجتياز الامتحان التمهيدي (فصول 1-3) SEM_COMPLETE
BIN-211..219 (WP) اكتمال الفصلين 1 و2 SEM_COMPLETE
BIN-210 الامتحان التمهيدي + ≥ 134 ECTS ECTS_THRESHOLD

التقدم الدراسي وفق §6 — مباشر

GET /me/stats يوفر 8 حقول جديدة. تُقيِّمها أداة لوح التحكم في الوقت الفعلي. بدون polling — يُحسَب الحالة عند تحميل الصفحة.

Semester 1 complete
sem1_complete: true
Semester 2 complete
sem2_complete: true
تم اجتياز الامتحان التمهيدي
vorpruefung_bestanden: true
القبول في البكالوريوس
ba_zulassung_eligible: false

Chapter VI: Security by Design

الأمن ليس لاحقة. الأمن هو المعمارية.

CSRF Protection

CSRF Stateless عبر Custom Header

كل طلب تعديل (POST, PUT, DELETE, PATCH) يحمل الـ custom header x-studynexus-client: true. طلبات Cross-Origin لا تستطيع تعيين custom headers بدون CORS preflight. بالدمج مع فحص Origin header، يتشكل حماية CSRF كاملة — بدون أي تخزين للـ tokens.

Request
Check Header
Check Origin
✓ Allow
Authentication

JWT في httpOnly Cookies

JWT token يعيش حصراً في httpOnly cookie مع Secure وSameSite=Lax. JavaScript لا تستطيع قراءة هذا الـ cookie. المتصفح يرسله تلقائياً — لا إدارة token يدوية في الـ frontend.

Set-Cookie: token=eyJ...
HttpOnly; Secure; SameSite=Lax
Path=/; Max-Age=604800 (7d)
Verification

التحقق برمز 6 أرقام

بعد التسجيل، يتلقى الطالب بريداً إلكترونياً برمز مكون من 6 أرقام عبر Resend API. الرمز ينتهي بعد 15 دقيقة. الحساب لا يُفعَّل إلا بعد التحقق — وفقط عناوين @stud.hs-hannover.de مقبولة.

Register
6-digit Email
Verify (15min)
Active
Data Isolation

عزل البيانات على مستوى الصف

كل استعلام قاعدة بيانات يُفلتَر بـ user_id. لا طالب يستطيع رؤية بيانات طالب آخر، حتى لو عرف الـ UUID. لا نظام صلاحيات منفصل — نموذج ORM يُطبِّق العزل هيكلياً.

tasks.py
db.query(Task)
  .filter(Task.user_id == current_user.id)
  .all()
Admin Two-Layer Auth (ADR-019)

مفهوم Sudo: القراءة مقابل الحذف

رمز JWT للمشرف المسروق وحده لا يستطيع إحداث ضرر. العمليات المدمِّرة تتطلب عاملاً ثانياً — رمز Redis قصير العمر يُصدَر عبر إعادة التحقق بكلمة المرور.

Layer 1 — get_admin_user

فحص المشرف عبر JWT

is_admin: true في حمولة JWT (ADR-021). متوافق مع Edge Runtime — بدون استعلام DB، بدون تأخير. كافٍ لجميع عمليات المشرف القرائية.

GET /admin/users GET /admin/analytics GET /admin/audit-log
Layer 2 — get_verified_admin

رمز جلسة Redis (Sudo)

يُدخل المشرف كلمة المرور من جديد → رمز Redis بـ TTL 15 دقيقة. هذا الرمز وحده يُفتح العمليات المدمِّرة. قابل للإلغاء فوراً — بدون انتظار انتهاء JWT.

DELETE user ARCHIVE module RESET password

Chapter VII: Admin Panel

مركز تحكم على مستوى المؤسسات. مُخطَّط لأسبوع. سُلِّم في يومين.

Sprint 5 — Delivery Metrics (2026-05-09 bis 2026-05-10)
2 أيام
14 صفحات المشرف
35+ نقاط وصول
122 اختبارات ناجحة
0 أخطاء TypeScript

ما يستطيع لوحة المشرف فعله

01 — Analytics

لوحة التحكم والـ KPI

استجابة KPI بـ 13 حقلاً، مخطط نمو (Recharts LineChart، 7d/30d/90d/1y)، تقسيم المستخدمين، حجم DB عبر pg_database_size().

RechartsResponsiveContainerPostgreSQL
02 — User Management

وصول كامل للمستخدمين

قائمة مُقسَّمة (25/صفحة)، 5 تبويبات تصفية، بحث عبر البريد الإلكتروني والاسم، PATCH لجميع الحقول، إعادة تعيين كلمة المرور، حذف دائم مع إلزامية الإفادة بالسبب.

AdminDataTable<T>debounced Search350ms
03 — PO-Verwaltung

الجامعة → الوحدة → الشرط

6 ملفات موجِّه، ~30 نقطة وصول. حذف ناعم للوائح/الوحدات (حماية البيانات الموجودة)، حذف دائم للجامعات/الكليات.

Soft DeleteJSON-Import (500 Module)Duplikat-Skip
04 — Audit-Log

شامل منذ المرحلة 2

كل تعديل للمشرف مُسجَّل منذ اليوم الأول. تصميم timeline، ActionBadge بـ 8 ألوان، DiffBlock (مقارنة القديم بالجديد، خط شطب للقيم المحذوفة).

DiffBlockActionBadgefilter: entity/action/date
05 — Import-System

استيراد JSON جماعي حتى 500 وحدة

تحقق → معاينة (أول 10) → POST → النتيجة. إجراء idempotent عبر البحث بالاختصار ضمن اللائحة. PDF placeholder للـ Sprint 7 (ML/NLP).

idempotentPreview-StepAdmin-Session-Guard
06 — System & Health

حالة النظام في الوقت الفعلي

شارة إجمالية (ok/degraded/down)، ServiceBadge لكل خدمة (DB ping + Redis.ping)، نسخة DB + الحجم، تحديث تلقائي كل 60 ثانية.

health checkRedis.pingauto-refresh 60s

AdminDataTable — مكون واحد لجميع القوائم

بدلاً من 6 تطبيقات جداول منفصلة: مكون TypeScript عام واحد. فرز الأعمدة، بحث مؤجَّل (350ms)، ترقيم من الخادم، إخفاء على الجوال للعمود — كل شيء قابل للتهيئة عبر Props.

22 واجهة TypeScript جديدة، 11 ربط TanStack Query جديد، adminFetch.ts كـ wrapper رفيع: بدون fetch() مباشر، منطق headers مركزي، معالجة 204.

strict: true0 TS-Fehler22 Interfaces11 Hooks~400 i18n-Keys
pytest tests/ -q
test_admin_auth.py·······7 ✓ test_admin_users.py··········10 ✓ test_admin_po.py················16 ✓ test_admin_analytics.py············12 ✓ test_admin_audit_log.py···········11 ✓ test_auth.py········8 ✓ test_gpa.py··············14 ✓ test_grades.py············12 ✓ test_health.py··2 ✓ test_stats.py·····5 ✓ test_study_plan.py···············15 ✓ test_universities.py··········10 ✓
122 passed in 2.34s

Chapter VIII: Database Architecture

12+ جدول. 17 Alembic migration. هيكل جامعي كامل.

من الجامعة إلى المادة الواحدة

نموذج البيانات يُجسِّد الهيكل الحقيقي للجامعة. الطالب يختار لائحة امتحانات — النظام يحمّل تلقائياً جميع المواد الإلزامية في خطته الدراسية الشخصية.

9 نماذج SQLAlchemy مع foreign key constraints كاملة ومفاتيح UUID أساسية. ENUMs أصيلة في PostgreSQL للحالة والأولوية ونوع الحدث.

University name, kuerzel, stadt
└── FK ──
Faculty name, kuerzel
└── FK ──
Program abschluss, gesamt_ects
└── FK ──
ExamRegulation version, gueltig_ab
└── FK ──
Module ects, modul_typ, gewichtung
└── FK (user) ──
StudentModule status, note, semester

درجة مُرجَّحة — كما في الجامعات الحقيقية

لا يُحسَب GPA بالمتوسط البسيط. كل مادة لها وزن قائم على ECTS. فقط المواد الناجحة المُقيَّمة تدخل في الحساب. النتيجة: GPA يعكس اللوائح الأكاديمية فعلاً.

GPA_ALGORITHM · gpa_service.py
GPA  = 
Σ ( Note × ECTS × Gewichtung )
Σ ( ECTS × Gewichtung )
Nur bestandene (status=PASSED), benotete (ist_benotet=true) Module fließen ein.

17 Alembic Migration — كل خطوة مُصنَّفة

لا تعديلات SQL يدوية — كل تغيير في الـ schema مُصنَّف وقابل للعكس ومُنتَج على أي بيئة. Sprint 4 (0012–0014) أضاف بيانات BIN-PO. Sprint 5 (0015–0017) سلّم البنية التحتية للإدارة.

الـ Sprints 1-3 وضعت الأساس (0001-0011). الـ Sprint 4 أضاف بيانات لوائح BIN (0012-0014). الـ Sprint 5 قدَّم البنية التحتية للمشرف (0015-0017).

001 · Create users table
UUID PK, email, hashed_password, is_verified
002 · Study plan tables
University → Faculty → Program → ExamReg → Module
003–005 · Module data, email verification, Tasks+Events
Kanban & Schedule Board foundation
006–009 · Profil-Felder, Semester-Binding
matrikelnummer, FOCUS-Typ, birth_date, hochschule
010–011 · Studienplan + BIN-Full-Seed
parent_student_module, 37 BIN-Module komplett
012 · pruefungsart + sws
Sprint 4 — alle BIN-Module mit Prüfungsart aus ATPO-FIV §7
013 · module_prerequisites
Sprint 4 — §6-Voraussetzungen: SEM_COMPLETE, ECTS_THRESHOLD
014 · BIN-209 gewichtung fix
Sprint 4 — Datenfehler: 1.0 → 1.5 (Anlage B2 PO BIN)
015 · Admin-Felder auf users
Sprint 5 — is_admin, last_login_at, admin_notes
016 · admin_audit_logs Tabelle
Sprint 5 — entity_type, action, admin_id, diff_snapshot (3 Indizes)
017 · Soft-Delete-Felder
Sprint 5 — is_archived, archive_reason auf Module/Programs/ExamRegs

Chapter IX: Sprint-Roadmap

أين يقف المشروع. إلى أين يتجه.

Sprint 1-2 ✓

Foundation: Auth, DB & Docker

JWT Authentication, PostgreSQL-Schema mit Alembic, Docker Compose Stack mit 5 Services, Email-Verifikation via Resend API, vollständige Studienplan-CRUD mit GPA-Berechnung.

Sprint 3.x ✓

Mission Control & Mobile

Kanban Board (@dnd-kit), Schedule Board (15-Min CSS Grid), Dashboard Widgets, Mobile FAB, Agenda View für kleine Screens, TanStack Query Migration, vollständige i18n (DE/EN).

Sprint 4 ✓

BIN Prüfungsordnung Integration

37 BIN-Module aus 3 PDFs, Prüfungsart-System (PX/EA/R/BAA+Ko), §6-Voraussetzungen als DB-Constraints, MilestoneWidget, PO-Übersicht-Seite, GPA-Fix BIN-209.

Sprint 5 ✓

Admin Panel — Enterprise Control Center

14 Admin-Seiten, 35+ Endpunkte, Two-Layer Auth (JWT + Redis Sudo), Audit-Log, Analytics (Recharts), JSON-Bulk-Import, 122/122 Tests grün.

Sprint 6

Security Audit & Email-Templates

Admin-API-Rate-Limiting, Toast-Notifications bei API-Errors, E-Mail-Templates für Passwort-Reset, UI-Polishing und Dropdown-Auswahl für UUID-Felder.

v1.0 — Ziel

Production Launch für die HsH

Öffentlicher Launch für alle HS Hannover Studierenden. Onboarding-Flow mit vorausgefüllten Prüfungsordnungen. Gamification: XP, Badges, Streaks.

مشروع
في حركة دائمة.

StudyNexus لم يكتمل — وهذا بالضبط المقصود. البرمجيات الحقيقية تعيش. تنمو مع المتطلبات. كل أسبوع sprint. كل sprint ميزة جديدة.