{"id":45964368,"url":"https://github.com/phash/monteweb","last_synced_at":"2026-02-28T14:02:32.940Z","repository":{"id":337981752,"uuid":"1154883628","full_name":"phash/monteweb","owner":"phash","description":"MonteWeb - Schul-Intranet fuer Montessori-Schulen","archived":false,"fork":false,"pushed_at":"2026-02-26T21:02:10.000Z","size":18078,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-27T02:04:16.618Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phash.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY-AUDIT.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T22:05:53.000Z","updated_at":"2026-02-26T21:02:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/phash/monteweb","commit_stats":null,"previous_names":["phash/monteweb"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phash/monteweb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fmonteweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fmonteweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fmonteweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fmonteweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phash","download_url":"https://codeload.github.com/phash/monteweb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fmonteweb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29936364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T13:49:17.081Z","status":"ssl_error","status_checked_at":"2026-02-28T13:48:50.396Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-28T14:01:59.362Z","updated_at":"2026-02-28T14:02:32.909Z","avatar_url":"https://github.com/phash.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MonteWeb\n\nModulares, selbst-gehostetes Schul-Intranet fuer Montessori-Schulkomplexe (Krippe bis Oberstufe).\n\n## Screenshots\n\n| Login | Dashboard | Kalender |\n|-------|-----------|----------|\n| ![Login](screenshots/01-login.png) | ![Dashboard](screenshots/02-dashboard.png) | ![Kalender](screenshots/09-calendar.png) |\n\n## Features\n\n- **Feed \u0026 Nachrichten** — Schulweiter Newsfeed mit Posts, Kommentaren, System-Bannern und gezielten Posts fuer bestimmte Nutzer\n- **Raeume** — Klassen, Gruppen und Projekte mit Mitgliederverwaltung, Diskussions-Threads, Chat und Beitrittsanfragen\n- **Familienverbund** — Familien mit Einladungscodes, Stundenkonto, Kinderzuordnung und optionaler Stundenbefreiung\n- **Jobboerse** — Elternstunden-Verwaltung mit Anmeldung, Bestaetigungen, Jahresabrechnung und PDF-Export\n- **Putz-Organisation** — Putzaktionen mit automatischer Kalender-Event- und Job-Erstellung, Familien-Anmeldeliste\n- **Kalender** — Events auf Raum-, Bereichs- oder Schulebene mit RSVP, Absage-Benachrichtigungen und iCal-Export\n- **Formulare** — Umfragen und Einverstaendniserklaerungen mit Multi-Bereichs-Targeting, Dashboard-Widget, CSV/PDF-Export\n- **Fotobox** — Foto-Threads pro Raum mit Thumbnails, Lightbox und Zielgruppen-Sichtbarkeit\n- **Fundgrube** — Schulweite Fundgrube: Verlorene Gegenstaende mit Foto melden, nach Schulbereich filtern, Besitzer koennen beanspruchen (automatische Entfernung nach 24h)\n- **Direktnachrichten** — Echtzeit-Chat mit WebSocket und konfigurierbaren Kommunikationsregeln\n- **Dateiverwaltung** — Dateiablage pro Raum via MinIO (S3-kompatibel) mit Ordner-Zielgruppen und Auto-Ordner fuer Klassen\n- **Benachrichtigungen** — In-App + optionale Web Push Notifications (VAPID)\n- **PWA** — Installierbar auf Smartphones, Offline-Zwischenspeicherung eigener Inhalte (Termine, Jobs)\n- **Bereichsverwaltung** — Section-Admin-Rolle mit eigenem Verwaltungspanel\n- **OIDC/SSO** — Optionale Anbindung an externe Identity Provider\n- **i18n** — Deutsch + Englisch mit Browser-Locale-Erkennung\n- **Feiertage \u0026 Ferien** — Bundesland-abhaengige Feiertage (alle 16 Bundeslaender) und konfigurierbare Schulferien\n- **DSGVO** — Datenexport und Account-Loeschung\n- **Fehlerberichterstattung** — Automatisches Error-Reporting mit GitHub-Issue-Integration\n- **Lesezeichen** — Posts, Events, Jobs und Wiki-Seiten als Lesezeichen speichern\n- **Aufgaben (Kanban)** — Kanban-Board pro Raum: Aufgaben erstellen, zuweisen und in Spalten verwalten\n- **Wiki** — Wiki pro Raum: Markdown-Seiten mit Hierarchie, Versionierung und Suchfunktion\n- **Benutzerdefinierte Profilfelder** — Administratoren koennen zusaetzliche Felder fuer Benutzerprofile anlegen\n- **Volltextsuche** — Globale Suche (Ctrl+K) mit Solr-Volltextsuche, Tika-Extraktion fuer Dokumente\n- **2FA** — Optionale/Verpflichtende Zwei-Faktor-Authentifizierung (TOTP)\n- **LDAP/AD** — Authentifizierung ueber externen Verzeichnisdienst\n- **Jitsi** — Video-Meetings in Kalender-Terminen und Raum-Chats\n- **ONLYOFFICE** — Dokumente direkt im Browser bearbeiten (Word, Excel, PowerPoint)\n- **ClamAV** — Automatische Virenscanner fuer Datei-Uploads\n- **Dark Mode** — Drei Modi (System/Hell/Dunkel) mit CSS Custom Properties\n- **Backup** — Automatisierte taegliche Backups (PostgreSQL + MinIO) mit Rotation und optionalem S3-Upload\n- **Admin** — Benutzerverwaltung, Modulsteuerung, Theme-Anpassung, Audit-Log, Fehlerberichte, CSV-Import\n- **Monitoring** — Prometheus + Grafana Dashboard (optional)\n\n## Tech-Stack\n\n### Backend\nJava 21, Spring Boot 3.4, Spring Modulith 1.3, Spring Security (JWT), Spring Data JPA + Flyway (96 Migrationen), Spring WebSocket + Redis Pub/Sub, PostgreSQL 16, Redis 7, MinIO, Apache Solr 9.8\n\n### Frontend\nVue 3.5 (Composition API), TypeScript 5.9, Vite 7, PrimeVue 4 (Aura), Pinia 3, vue-i18n, Axios, PWA (vite-plugin-pwa + Workbox)\n\n### Infrastruktur\nDocker Compose, nginx (Reverse Proxy), Caddy (Auto-SSL), GitHub Actions CI/CD, Prometheus + Grafana\n\n### Tests\n- Frontend: ~1341 Tests in 147 Dateien (Vitest + vue-test-utils)\n- Backend: 47 Testklassen, ~490 Tests (Testcontainers + MockMvc)\n\n## Schnellstart\n\n### Voraussetzungen\n\n- Docker + Docker Compose\n- Node.js 20+ (fuer Frontend-Entwicklung)\n\n### Production\n\n```bash\ncp .env.example .env\n# .env anpassen (Datenbank-Passwoerter, JWT-Secret, etc.)\ndocker compose up -d\n```\n\nDie Anwendung ist erreichbar unter `http://localhost` (Port 80).\n\n### Entwicklung\n\n```bash\n# 1. Infrastruktur starten (Postgres, Redis, MinIO)\ndocker compose -f docker-compose.dev.yml up -d\n\n# 2. Full Stack via Docker\ndocker compose up -d\n\n# 3. Oder: Frontend mit Hot Reload (erfordert laufendes Backend)\ncd frontend\nnpm install\nnpm run dev   # http://localhost:5173\n```\n\n## Tests\n\n```bash\n# Frontend (~1341 Tests)\ncd frontend \u0026\u0026 npm test\n\n# Backend (Testcontainers, Docker erforderlich)\ncd backend \u0026\u0026 ./mvnw test\n```\n\n## Port-Belegung\n\n| Service | Entwicklung | Docker Compose |\n|---------|-------------|----------------|\n| PostgreSQL | 5433 | 5432 (intern) |\n| Redis | 6380 | 6379 (intern) |\n| MinIO API / Console | 9000 / 9001 | 9000 / 9001 |\n| Backend | 8080 | 8080 (intern) |\n| Frontend (dev) | 5173 | — |\n| nginx (Production) | — | 80 |\n\n## Projektstruktur\n\n```\nmonteweb/\n├── backend/\n│   ├── src/main/java/com/monteweb/\n│   │   ├── auth/          # Authentifizierung, JWT, OIDC\n│   │   ├── user/          # Benutzerverwaltung, Profile, Rollen\n│   │   ├── family/        # Familienverbund, Stundenkonto\n│   │   ├── school/        # Schulbereiche (Krippe–Oberstufe)\n│   │   ├── room/          # Raeume, Diskussions-Threads\n│   │   ├── feed/          # Newsfeed, Posts, Kommentare, Banner\n│   │   ├── calendar/      # Kalender, Events, RSVP\n│   │   ├── notification/  # Benachrichtigungen, Web Push\n│   │   ├── messaging/     # Direktnachrichten, Chat\n│   │   ├── files/         # Dateiablage (MinIO), Ordner-Sichtbarkeit\n│   │   ├── jobboard/      # Jobboerse, Elternstunden, Jahresabrechnung\n│   │   ├── cleaning/      # Putzaktionen, Familien-Anmeldung\n│   │   ├── forms/         # Formulare, Umfragen, Export\n│   │   ├── fotobox/       # Foto-Threads, Thumbnails\n│   │   ├── fundgrube/     # Fundgrube (Lost \u0026 Found)\n│   │   ├── bookmark/      # Lesezeichen\n│   │   ├── tasks/         # Kanban-Board pro Raum\n│   │   ├── wiki/          # Wiki pro Raum (Markdown)\n│   │   ├── profilefields/ # Benutzerdefinierte Profilfelder\n│   │   ├── search/        # Globale Suche (Solr)\n│   │   ├── admin/         # Systemkonfiguration, Audit-Log, Error-Reports\n│   │   └── shared/        # Security, DTOs, Exceptions, PDF-Service\n│   └── Dockerfile\n├── frontend/\n│   ├── src/\n│   │   ├── views/         # Seiten (Login, Dashboard, Rooms, ...)\n│   │   ├── components/    # UI-Komponenten nach Domaene\n│   │   ├── stores/        # Pinia State Management\n│   │   ├── api/           # Axios API-Client\n│   │   ├── types/         # TypeScript Interfaces\n│   │   ├── composables/   # Composables (Auth, WebSocket, Holidays, ...)\n│   │   └── i18n/          # Deutsch + Englisch\n│   └── Dockerfile\n├── backup/               # Backup-Container (pg_dump + mc)\n├── solr/                 # Solr-Konfiguration (Schema, Stopwords)\n├── monitoring/           # Prometheus + Grafana Config\n├── nginx/                # Production Reverse Proxy\n├── docker-compose.yml    # Production Stack\n└── docker-compose.dev.yml # Entwicklungs-Infrastruktur\n```\n\n## Module\n\nModule koennen ueber Konfiguration aktiviert/deaktiviert werden:\n\n| Modul | Config-Property | Standard |\n|-------|----------------|----------|\n| Messaging | `monteweb.modules.messaging.enabled` | `true` |\n| Dateiverwaltung | `monteweb.modules.files.enabled` | `true` |\n| Jobboerse | `monteweb.modules.jobboard.enabled` | `true` |\n| Putz-Organisation | `monteweb.modules.cleaning.enabled` | `true` |\n| Kalender | `monteweb.modules.calendar.enabled` | `true` |\n| Formulare | `monteweb.modules.forms.enabled` | `true` |\n| Fotobox | `monteweb.modules.fotobox.enabled` | `true` |\n| Fundgrube | `monteweb.modules.fundgrube.enabled` | `true` |\n| Lesezeichen | `monteweb.modules.bookmarks.enabled` | `true` |\n| Aufgaben (Kanban) | `monteweb.modules.tasks.enabled` | `true` |\n| Wiki | `monteweb.modules.wiki.enabled` | `true` |\n| Profilfelder | `monteweb.modules.profilefields.enabled` | `true` |\n| Solr-Volltextsuche | `monteweb.modules.solr.enabled` | `false` |\n| E-Mail-Versand | `monteweb.email.enabled` | `false` |\n| OIDC/SSO | `monteweb.oidc.enabled` | `false` |\n| Push Notifications | `monteweb.push.enabled` | `false` |\n\nZusaetzliche DB-Toggles (Admin UI → Module):\n\n| Toggle | Beschreibung |\n|--------|-------------|\n| jitsi | Jitsi-Videokonferenzen |\n| wopi | ONLYOFFICE-Integration |\n| clamav | ClamAV-Virenscanner |\n| maintenance | Wartungsmodus |\n| ldap | LDAP/Active Directory |\n| directoryAdminOnly | Verzeichnis nur fuer Admins |\n\n## Test-Accounts\n\n| Account | Rolle | Passwort |\n|---------|-------|----------|\n| `admin@monteweb.local` | SUPERADMIN | `admin123` |\n| `lehrer@monteweb.local` | TEACHER | `test1234` |\n| `eltern@monteweb.local` | PARENT | `test1234` |\n| `schueler@monteweb.local` | STUDENT | `test1234` |\n| `sectionadmin@monteweb.local` | SECTION_ADMIN | `test1234` |\n\nPlus ~220 realistische Seed-Benutzer (z.B. `anna.mueller@monteweb.local`).\n\n## Docker Profiles\n\nOptionale Services werden ueber Docker Compose Profiles aktiviert:\n\n```bash\ndocker compose --profile backup up -d      # Automatische Backups (taeglich 02:00)\ndocker compose --profile monitoring up -d   # Prometheus + Grafana\ndocker compose --profile ssl up -d          # Caddy Reverse Proxy (Auto-SSL)\ndocker compose --profile office up -d       # ONLYOFFICE Document Server\ndocker compose --profile clamav up -d       # ClamAV Virenscanner\n\n# Mehrere Profile kombinieren\ndocker compose --profile backup --profile monitoring up -d\n```\n\n## Backup \u0026 Restore\n\n```bash\n# Backup-Service aktivieren\ndocker compose --profile backup up -d\n\n# Manuelles Backup\ndocker compose exec backup backup.sh\n\n# Backups auflisten\ndocker compose exec backup restore.sh --list\n\n# Wiederherstellen\ndocker compose exec backup restore.sh latest\ndocker compose restart backend\n```\n\nKonfiguration ueber `.env` (Cron-Schedule, Aufbewahrung, S3-Remote). Details: [BACKUP.md](BACKUP.md)\n\n## Monitoring (optional)\n\n```bash\ndocker compose --profile monitoring up -d\n# Grafana: http://localhost:3000 (admin/admin)\n# Prometheus: http://localhost:9090\n```\n\n## Beitragen\n\nBeitraege sind willkommen! Bitte lies die [CONTRIBUTING.md](CONTRIBUTING.md) fuer Details zu Workflow, Coding-Standards und CLA.\n\n## Lizenz\n\nDieses Projekt ist lizenziert unter der [Apache License 2.0](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphash%2Fmonteweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphash%2Fmonteweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphash%2Fmonteweb/lists"}