No description
Find a file
Markus 6986d5b27e
Some checks failed
i18n Check / i18n (push) Successful in 10s
Tests / phpunit (push) Failing after 1m25s
Build & Push Docker Image / build (push) Successful in 41s
v1.377.0: Spenden-Status erwartet/eingegangen - Zusagen erfassbar, 'als eingegangen verbuchen'; erwartet zaehlt nicht als Einnahme + keine Zuwendungsbestaetigung; Forecast rechnet erwartete Einzelspenden ein
2026-06-15 19:04:35 +00:00
.forgejo/workflows CI: Node-freier Checkout (git clone statt actions/checkout), damit Runner ohne Node funktioniert 2026-06-13 21:04:00 +00:00
app v1.377.0: Spenden-Status erwartet/eingegangen - Zusagen erfassbar, 'als eingegangen verbuchen'; erwartet zaehlt nicht als Einnahme + keine Zuwendungsbestaetigung; Forecast rechnet erwartete Einzelspenden ein 2026-06-15 19:04:35 +00:00
bootstrap Feature: Stripe-Checkout mit Webhook-basiertem automatischem Zahlungsabgleich (v1.219.0) 2026-06-10 20:36:11 +00:00
config v1.377.0: Spenden-Status erwartet/eingegangen - Zusagen erfassbar, 'als eingegangen verbuchen'; erwartet zaehlt nicht als Einnahme + keine Zuwendungsbestaetigung; Forecast rechnet erwartete Einzelspenden ein 2026-06-15 19:04:35 +00:00
database v1.377.0: Spenden-Status erwartet/eingegangen - Zusagen erfassbar, 'als eingegangen verbuchen'; erwartet zaehlt nicht als Einnahme + keine Zuwendungsbestaetigung; Forecast rechnet erwartete Einzelspenden ein 2026-06-15 19:04:35 +00:00
docker Infra: Servermodus per VEREO_SERVER_MODE waehlbar (Default classic), Octane opt-in (v1.195.0) 2026-06-10 08:18:10 +00:00
docs docs: Anwender-Anleitung fuer Zahlungsebene, Offene Posten, EUER, CSV/CAMT-Abgleich, Mahnhistorie und DATEV-Export (verwaltung/zahlungen-euer-datev.md) + Index/Querverweise 2026-06-14 20:05:45 +00:00
lang v1.360.0: Navigation - Gruppe 'Auswertungen & Laeufe' aufgeteilt in 'Laeufe & Abgleich' (Vorgaenge) und 'Auswertungen' (Berichte), eindeutige Sortierung, neuer nav.laeufe-Key de/en 2026-06-14 19:05:39 +00:00
public Mittelfluss: ECharts lokal ausliefern statt CDN (v1.305.0) 2026-06-12 09:01:21 +00:00
resources v1.376.0: Optik vereinheitlicht - Ausgaben-Abgleich+Belegpruefung responsiv (1/2/4), Hinweistexte auf Mittelfluss/Matrix/Charts/DATEV auf Inline-Styles 2026-06-15 18:38:22 +00:00
routes v1.344.0: Aufnahme-Abstimmung Etappe 2+3 - zielgerichtete Abstimmende, Einladung per persoenlichem Link, oeffentliche Abstimmseite ohne Login, Auto-Schliessung 2026-06-14 15:31:06 +00:00
scripts QS: Uebersetzungs-Verwendungspruefung (undefinierte/ungenutzte vereo.*-Keys) + CI-Schritt 2026-06-07 14:57:54 +00:00
storage App-Geruest: Laravel 13 + Filament 5, Modul Mitglieder (Person/Org, Soft delete), vereo:ensure-admin; Dockerfile/Entrypoint aktiviert 2026-06-06 17:55:37 +00:00
tests v1.377.0: Spenden-Status erwartet/eingegangen - Zusagen erfassbar, 'als eingegangen verbuchen'; erwartet zaehlt nicht als Einnahme + keine Zuwendungsbestaetigung; Forecast rechnet erwartete Einzelspenden ein 2026-06-15 19:04:35 +00:00
.editorconfig App-Geruest: Laravel 13 + Filament 5, Modul Mitglieder (Person/Org, Soft delete), vereo:ensure-admin; Dockerfile/Entrypoint aktiviert 2026-06-06 17:55:37 +00:00
.env.example Doku: .env.example um Rechnungs-/Angebots-/Automatik-/Bezahl-Variablen erweitert; Rechnungs-Doku um Katalog, Angebote, Abos, Abschlagsrechnungen und Online-Bezahlung (Stripe) ergaenzt 2026-06-10 20:42:26 +00:00
.gitattributes App-Geruest: Laravel 13 + Filament 5, Modul Mitglieder (Person/Org, Soft delete), vereo:ensure-admin; Dockerfile/Entrypoint aktiviert 2026-06-06 17:55:37 +00:00
.gitignore feat: Backup-Wiederherstellung (vereo:restore + UI-Aktion) - DB via psql + Dateien zurueck nach storage/app 2026-06-08 05:18:56 +00:00
artisan App-Geruest: Laravel 13 + Filament 5, Modul Mitglieder (Person/Org, Soft delete), vereo:ensure-admin; Dockerfile/Entrypoint aktiviert 2026-06-06 17:55:37 +00:00
CHANGELOG.md v1.377.0: Spenden-Status erwartet/eingegangen - Zusagen erfassbar, 'als eingegangen verbuchen'; erwartet zaehlt nicht als Einnahme + keine Zuwendungsbestaetigung; Forecast rechnet erwartete Einzelspenden ein 2026-06-15 19:04:35 +00:00
CLAUDE.md Doku: schlanke CLAUDE.md mit Release-Workflow, Verifikation und Fallen fuer KI-Assistenten 2026-06-12 23:55:16 +00:00
composer.json Performance: Laravel Octane (FrankenPHP-Worker) + OPcache-Tuning; Settings pro Request anwenden (v1.184.0) 2026-06-10 06:21:15 +00:00
composer.lock Performance: Laravel Octane (FrankenPHP-Worker) + OPcache-Tuning; Settings pro Request anwenden (v1.184.0) 2026-06-10 06:21:15 +00:00
DECISIONS.md Versionierung: SemVer + CHANGELOG (Keep a Changelog), Releases als annotierte Tags 2026-06-06 17:59:37 +00:00
docker-compose.quickstart.yml fix: automatische Sicherungen - eigener Scheduler-Container statt 'schedule:work & queue:work'; Backup-Tasks immer registriert (->when); DEPLOY-Doku 2026-06-08 12:58:43 +00:00
docker-compose.yml fix: automatische Sicherungen - eigener Scheduler-Container statt 'schedule:work & queue:work'; Backup-Tasks immer registriert (->when); DEPLOY-Doku 2026-06-08 12:58:43 +00:00
Dockerfile v1.334.0: Beleg-Auslesen (OCR) beim Upload - Betrag/Datum automatisch, Lieferant bei eindeutigem Treffer (Tesseract+poppler im Image), Vorschlag mit Kontrolle 2026-06-14 11:28:19 +00:00
package.json App-Geruest: Laravel 13 + Filament 5, Modul Mitglieder (Person/Org, Soft delete), vereo:ensure-admin; Dockerfile/Entrypoint aktiviert 2026-06-06 17:55:37 +00:00
PHASE1.md Phase-1-Schnitt (MVP) festgezurrt 2026-06-06 17:49:22 +00:00
phpunit.xml Tests: erste PHPUnit-Suite (16 Tests) + CI tests.yml Workflow 2026-06-07 15:33:22 +00:00
README.md docs: Doku nach Zielgruppen umstrukturiert (Anwender/Verwaltung/Betrieb/Entwicklung) + Überblick, Mitglieder & Kontakte, Entwickler-Leitfaden, Diagramme, 4-Container-Stand 2026-06-09 06:39:41 +00:00
ROADMAP.md feat: eigene Felder fuer Kontakte (Form/Tabelle/Self-Service) 2026-06-07 16:32:23 +00:00
SCOPE.md Unabhaengigkeit/Datensouveraenitaet als Prinzip; zentrales SSO verworfen, Auth pro Instanz 2026-06-06 17:15:58 +00:00
vite.config.js App-Geruest: Laravel 13 + Filament 5, Modul Mitglieder (Person/Org, Soft delete), vereo:ensure-admin; Dockerfile/Entrypoint aktiviert 2026-06-06 17:55:37 +00:00

Vereo

Schlanke, eigenständige Vereinsverwaltung — eine Instanz pro Verein, self-hosted, kostenlos für nutzende Vereine.

Konzept, Grundsätze und Scope: siehe DECISIONS.md und SCOPE.md. Bitte vor dem Mitarbeiten lesen.

Schnellstart (lokal/Test)

Drei Schritte läuft direkt im Browser (App + Worker + PostgreSQL):

cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.quickstart.yml up -d
# Danach: http://localhost:8080
  • Anmeldung als Administrator: Das initiale Passwort steht im App-Log (docker compose logs app | grep Initial-Passwort), sofern ADMIN_EMAIL/ ADMIN_PASSWORD in der .env nicht gesetzt sind. Standard-Login ist dann admin@vereo.local.
  • APP_KEY darf leer bleiben er wird beim ersten Start erzeugt und im Storage-Volume persistiert (stabil über Neustarts).
  • Port änderbar über QUICKSTART_PORT in der .env (Standard 8080).
  • Migrationen, RBAC, Admin und Grundkonfiguration richtet der Container beim ersten Start automatisch ein.

Produktion: Hinter Coolify/Traefik ohne das Quickstart-Overlay starten (nur docker-compose.yml); dort übernimmt der Reverse-Proxy Port/TLS, und APP_KEY sollte fest in der Umgebung gesetzt werden.

Updates & Betrieb: Aktualisieren einer laufenden Instanz, Versions-Check und Fehlersuche bei „Update lädt nicht" siehe Deployment & Betrieb.

Dokumentation

Eine ausführliche Bedien- und Betriebsdokumentation liegt unter docs/ u. a. Beiträge, SEPA-Lastschrift inkl. Testfunktion, Self-Service & Portal, Spenden, Veranstaltungen, Mitteilungen & Newsletter, Rechnungen & Steuer und Dokumentvorlagen/PDF & E-Mail.

Stack

  • Laravel (PHP) + Filament (Admin-UI)
  • PostgreSQL
  • Jobs/Scheduler über Laravel (DB-Queue-Driver, kein Redis im Standard)
  • Deploy über Docker / Coolify

Begründung der Wahl (Zuverlässigkeit & Langlebigkeit, wenige bewegliche Teile): siehe DECISIONS.md → Tech-Stack.

Leitplanken (Kurzfassung)

  • Single-Tenant: eine Instanz = ein Verein. Keine Mandantentrennung.
  • Unabhängig & datensouverän: Betreiber sieht nicht in Vereinsdaten; Instanz ist eigenständig betreibbar.
  • Marginaler Wartungsaufwand ≈ 0: Migrations & Admin-Provisioning automatisch beim Start; Backups & Health je Instanz.
  • 12-Factor: alles über Env-Variablen; keine festen Ports; Reverse-Proxy-bewusst.

Funktionsumfang

Vereo ist eine vollständige Vereinsverwaltung. Wesentliche Module:

  • Mitglieder & CRM: Mitglieder, Konten und Personen, Ansprechpartner mit Funktionen/Rollen, eigene Felder (Custom Fields), CSV-Import/-Export, Serienbrief-Adressexport, Mitglieds-Stammblatt (PDF), 360°-Blick je Mitglied.
  • Beiträge & SEPA: Beitragsmodelle, Sollstellung (Jahreslauf mit Vorschau, Einzel- und Sammel-Sollstellung), SEPA-Lastschrift-Lauf, Rücklastschrift, Mahnwesen, Beitragsbescheinigung & -quittung (PDF, einzeln und als Jahres-ZIP).
  • Rechnungen: Rechnungsstellung mit GoBD-Nummernkreis, PDF inkl. ZUGFeRD, Mahnautomatik, Versand per E-Mail.
  • Veranstaltungen: Events mit Kapazität/Warteliste, öffentliche und Portal- Anmeldung (einbettbar), Teilnehmerlisten (PDF/CSV), Anmelde-Benachrichtigung.
  • Self-Service-Portal: Login für Kontakte, Profil-/Kontodaten-Pflege, Event-An-/Abmeldung, Belege (Rechnungen, Beitragsbescheinigungen, freigegebene Dokumente), Übersichts-Dashboard.
  • Newsletter: Segmente, Double-Opt-in mit Anmeldeformular (einbettbar), Abmeldung/Opt-out, Abonnenten-Verwaltung, Versand über die Queue.
  • Spenden: Erfassung (Mitglied oder extern), Zuwendungsbestätigung (§ 10b EStG, einzeln und als Jahres-Sammelbestätigung), Dankesmail, Import/Export.
  • Dashboards: Kennzahlen-Kacheln und Diagramme (Mitgliederentwicklung, Beitrags- und Spendeneinnahmen).
  • Auswertungen/Export: Offene-Posten-Liste, Jahresabschluss-Export (ZIP), globale Suche, Audit-Log mit Filtern.

Lokales Setup

cp .env.example .env
# Container bauen & starten
docker compose up -d --build
# Migrations, RBAC und Konfigurationslisten laufen automatisch über den Entrypoint

Deploy via Coolify

  • Repo als Quelle, docker-compose.yml verwenden.
  • APP_URL auf die externe Domain/Subdomain setzen — wird respektiert, damit Cookies, Redirects, absolute Links und OIDC-Redirects funktionieren.
  • Routing/TLS macht Coolify/Traefik. Die App bindet keine festen Host-Ports.
  • Persistente Daten liegen in Volumes (DB + hochgeladene Dokumente).

Konfiguration pro Verein (wichtig)

Jede Instanz gehört genau einem Verein. Mindestens setzen:

  • APP_URL — die externe HTTPS-Adresse der Instanz.
  • ADMIN_EMAIL / ADMIN_PASSWORD — initialer Admin (ohne Passwort wird eines generiert und einmalig ins Container-Log geschrieben).
  • ORG_NAME (+ optional ORG_ADDRESS, ORG_ZIP_CITY) — Branding/PDF.

Für den SEPA-Lastschrift-Lauf zusätzlich (Daten des einziehenden Vereins):

  • SEPA_CREDITOR_NAME — Vereinsname.
  • SEPA_CREDITOR_IBAN — Konto, von dem eingezogen wird.
  • SEPA_CREDITOR_IDGläubiger-Identifikationsnummer (Format DE…ZZZ…), bei der Deutschen Bundesbank zu beantragen.
  • SEPA_CREDITOR_BIC — optional.

Ohne die SEPA_CREDITOR_*-Werte stoppt der SEPA-Knopf bewusst mit einem Hinweis, statt eine unbrauchbare Datei zu erzeugen.

Rollen & Rechte

Zugriffe werden über Berechtigungen (spatie/permission) gesteuert. Die Rolle super_admin umgeht alle Prüfungen. Vorhandene Berechtigungen:

  • Mitglieder verwalten
  • Finanzen verwalten
  • Veranstaltungen verwalten
  • Newsletter versenden
  • Benutzer verwalten
  • Audit-Log einsehen

Geplante Aufgaben (Scheduler)

Beim Containerstart aktiv (über den Laravel-Scheduler, gesteuert per Einstellungen unter Konfiguration → Automatik):

  • vereo:contributions-run — Beitrags-Sollstellung
  • vereo:sepa-run — SEPA-Lastschrift-Lauf
  • vereo:invoice-dunning-run — Rechnungs-Mahnungen
  • vereo:dunning-run — Beitrags-Mahnungen

Wartungsbefehle

  • php artisan vereo:ensure-rbac — Berechtigungen/Rollen sicherstellen
  • php artisan vereo:ensure-config — Konfigurationslisten (Lookups) sicherstellen

Beide laufen automatisch über den Entrypoint und sind idempotent.

Versionierung

Es gilt Semantic Versioning; Änderungen werden in CHANGELOG.md nach dem Format Keep a Changelog gepflegt. Die laufende Version steht in config/vereo.php (version) und erscheint im Footer.