Olaf b5f5f30005 feat: period-scoped holiday management, archive lifecycle, and docs/release sync
- 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
2026-03-31 12:25:55 +00:00

Infoscreen 2025

Docker React Flask MariaDB MQTT

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

  1. Clone
git clone https://github.com/RobbStarkAustria/infoscreen_2025.git
cd infoscreen_2025
  1. Configure environment
cp .env.example .env
# edit values as needed
  1. Start stack
make up
# or: docker compose up -d --build
  1. Initialize DB (first run)
python server/initialize_database.py
  1. Open services

Holiday Calendar (Quick Usage)

Settings path:

  • Settings -> Academic Calendar -> Ferienkalender: Import/Anzeige

Workflow summary:

  1. Select target academic period (archived periods are read-only/not selectable).
  2. Import CSV/TXT or add/edit holidays manually.
  3. Validation is period-scoped (out-of-period ranges are blocked).
  4. Duplicate/overlap policy:
    • exact duplicates: skipped/prevented
    • same normalized name+region overlaps (including adjacent ranges): merged
    • different-identity overlaps: conflict (manual blocked, import skipped with details)
  5. Recurring events with skip_holidays are 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

MQTT & Payloads

Events, Calendar, WebUntis

Historical Background

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

  1. Create branch
  2. Implement change + tests
  3. Update relevant docs
  4. Open PR

Guidelines:

License

MIT License. See LICENSE.

Description
No description provided
Readme 4.1 MiB
Languages
Python 47.9%
TypeScript 46.8%
CSS 2.2%
Shell 2.2%
Dockerfile 0.4%
Other 0.3%