# Roostersoftware Modulair, flexibel roostersysteem voor het speciaal onderwijs. Zie `PLAN.md` voor de visie en de fasering. Deze map bevat het resultaat van **Fase 0**: het fundament en een echt plugin-framework waarmee modules per school in- en uitgeschakeld kunnen worden. ## Wat er nu staat - **Backend** (`backend/`) — Django + Django REST Framework. - `plugins/` — het plugin-framework: een moduleregister, opslag van de aan/uit-status per module en een beheer-API. - `core/` — de kern (altijd actief). Domeinmodellen (personen, groepen, roosterblokken, kalender) volgen in fase 1–2. - `modules/printing/` en `modules/accounts/` — twee voorbeeldmodules die zich bij opstarten aanmelden bij het register. - **Frontend** (`frontend/`) — React (Vite) met een zijbalk die alleen menu's toont van ingeschakelde modules, plus een scherm **Modulebeheer** om modules aan/uit te zetten. ## Hoe modulariteit werkt (het verkoopargument) 1. Een module is een gewone Django-app met een `apps.py` die in `ready()` een `ModuleSpec` registreert (naam, beschrijving, versie, afhankelijkheden en menu-items). 2. Het register weet wélke modules bestaan; de database onthoudt of ze **aan** staan. Een beheerder schakelt ze per school in/uit via Modulebeheer. 3. Uitgeschakelde modules leveren geen menu's of schermen — de kern blijft overal gelijk, modules zijn los bij te schakelen. Een nieuwe module toevoegen = nieuwe app maken, één regel in `MODULE_APPS` (in `backend/config/settings.py`), klaar. ## Starten ### Backend (Django, poort 8000) ```bash cd backend pip install -r requirements.txt python manage.py migrate python manage.py createsuperuser # optioneel, voor /admin/ python manage.py runserver ``` API-eindpunten: - `GET /api/modules/` — alle modules met status. - `POST /api/modules//state/` — body `{"enabled": true|false}`. - `GET /api/info/` — korte systeem-/gezondheidsinfo. - `/admin/` — Django-admin (modulestatus ook hier instelbaar). > Draait SQLite niet op je projectmap (bv. op een netwerkschijf)? Zet dan > `ROOSTER_DB_PATH` naar een lokaal pad, of pas `DATABASES` aan. ### Frontend (React, poort 5173) ```bash cd frontend npm install npm run dev ``` De dev-server stuurt `/api` automatisch door naar de backend op poort 8000. Open daarna http://localhost:5173 en ga naar **Modulebeheer** om modules aan/uit te zetten. ## Volgende stap (Fase 1) Kerndomein bouwen: personen (leerlingen, leerkrachten, ondersteuners), groepen en subgroepen — met beheerschermen.