b5f5f3000572d0b36f2bdef7b585e69e23dfcb7d
- add period-scoped holiday architecture end-to-end - model: scope `SchoolHoliday` to `academic_period_id` - migrations: add holiday-period scoping, academic-period archive lifecycle, and merge migration head - API: extend holidays with manual CRUD, period validation, duplicate prevention, and overlap merge/conflict handling - recurrence: regenerate holiday exceptions using period-scoped holiday sets - improve frontend settings and holiday workflows - bind holiday import/list/manual CRUD to selected academic period - show detailed import outcomes (inserted/updated/merged/skipped/conflicts) - fix file-picker UX (visible selected filename) - align settings controls/dialogs with defined frontend design rules - scope appointments/dashboard holiday loading to active period - add shared date formatting utility - strengthen academic period lifecycle handling - add archive/restore/delete flow and backend validations/blocker checks - extend API client support for lifecycle operations - release/docs updates and cleanup - bump user-facing version to `2026.1.0-alpha.15` with new changelog entry - add tech changelog entry for alpha.15 backend changes - refactor README to concise index and archive historical implementation docs - fix Copilot instruction link diagnostics via local `.github` design-rules reference
Infoscreen 2025
Multi-service digital signage platform for educational institutions.
Core stack:
- Dashboard: React + Vite + Syncfusion
- API: Flask + SQLAlchemy + Alembic
- DB: MariaDB
- Messaging: MQTT (Mosquitto)
- Background jobs: Redis + RQ + Gotenberg
Architecture (Short)
- Dashboard talks only to API (
/api/...via Vite proxy in dev). - API is the single writer to MariaDB.
- Listener consumes MQTT discovery/heartbeat/log/screenshot topics and updates API state.
- Scheduler expands recurring events, applies exceptions, and publishes active content to retained MQTT topics.
- Worker handles document conversions asynchronously.
Quick Start
Prerequisites
- Docker + Docker Compose
- Git
Development
- Clone
git clone https://github.com/RobbStarkAustria/infoscreen_2025.git
cd infoscreen_2025
- Configure environment
cp .env.example .env
# edit values as needed
- Start stack
make up
# or: docker compose up -d --build
- Initialize DB (first run)
python server/initialize_database.py
- Open services
- Dashboard: http://localhost:5173
- API: http://localhost:8000
- MariaDB: localhost:3306
- MQTT: localhost:1883 (WS: 9001)
Holiday Calendar (Quick Usage)
Settings path:
Settings->Academic Calendar->Ferienkalender: Import/Anzeige
Workflow summary:
- Select target academic period (archived periods are read-only/not selectable).
- Import CSV/TXT or add/edit holidays manually.
- Validation is period-scoped (out-of-period ranges are blocked).
- Duplicate/overlap policy:
- exact duplicates: skipped/prevented
- same normalized
name+regionoverlaps (including adjacent ranges): merged - different-identity overlaps: conflict (manual blocked, import skipped with details)
- Recurring events with
skip_holidaysare recalculated automatically after holiday changes.
Common Commands
# Start/stop
make up
make down
# Logs
make logs
make logs-server
# Health
make health
# Build/push/deploy
make build
make push
make pull-prod
make up-prod
Documentation Map
Deployment
Backend & Database
Authentication & Authorization
Monitoring, Screenshots, Health
- CLIENT_MONITORING_IMPLEMENTATION_GUIDE.md
- CLIENT_MONITORING_SPECIFICATION.md
- SCREENSHOT_IMPLEMENTATION.md
MQTT & Payloads
Events, Calendar, WebUntis
Historical Background
- docs/archive/ACADEMIC_PERIODS_IMPLEMENTATION_SUMMARY.md
- docs/archive/ACADEMIC_PERIODS_CRUD_BUILD_PLAN.md
- docs/archive/PHASE_3_CLIENT_MONITORING_IMPLEMENTATION.md
- docs/archive/CLEANUP_SUMMARY.md
Conversion / Media
Frontend
Project / Contributor Guidance
API Highlights
- Core resources: clients, groups, events, academic periods
- Holidays:
GET/POST /api/holidays,POST /api/holidays/upload,PUT/DELETE /api/holidays/<id> - Media: upload/download/stream + conversion status
- Auth: login/logout/change-password
- Monitoring: logs and monitoring overview endpoints
For full endpoint details, use source route files under server/routes/ and the docs listed above.
Project Structure (Top Level)
infoscreen_2025/
├── dashboard/ # React frontend
├── server/ # Flask API + migrations + worker
├── listener/ # MQTT listener
├── scheduler/ # Event scheduler/publisher
├── models/ # Shared SQLAlchemy models
├── mosquitto/ # MQTT broker config
├── certs/ # TLS certs (prod)
└── docker-compose*.yml
Contributing
- Create branch
- Implement change + tests
- Update relevant docs
- Open PR
Guidelines:
- Match existing architecture and naming conventions
- Keep frontend aligned with FRONTEND_DESIGN_RULES.md
- Keep service/API behavior aligned with .github/copilot-instructions.md
License
MIT License. See LICENSE.
Description
Languages
Python
47.9%
TypeScript
46.8%
CSS
2.2%
Shell
2.2%
Dockerfile
0.4%
Other
0.3%