12 KiB
TASKS.md — AHK-Ehrenamtsmanagement
Status: Phase 0 freigegeben zur Umsetzung
Stand: 13.08.2026
Source of Truth:PROJECT_DESIGN.md
Arbeitsweise: kleine Sessions mit klar prüfbarem Ergebnis
Wichtig: Dieses Dokument darf keine neue Architektur erfinden. Offene Entscheidungen werden markiert und gemeinsam entschieden.
Phase 0 — Greenfield-Projektbasis
Ziel der Phase
Das Projekt wird komplett neu von Grund auf aufgebaut.
Der bestehende CheckPoint-/Legacy-Prototyp ist kein Migrationsziel. Es gibt keine erhaltenswerten Produktivdaten und keine bestehende Codebasis, auf deren Kompatibilität Rücksicht genommen werden muss.
Bestehender Legacy-Code wird nicht übernommen, nur weil er bereits existiert. Falls später einzelne Ideen oder Implementierungen als Referenz dienen, müssen sie zuerst gegen PROJECT_DESIGN.md geprüft werden.
Am Ende von Phase 0 existiert eine minimale, lauffähige und getestete Flask-Anwendung mit:
- sauberem Git-Repository,
- festgelegter Python-3.14-Projektumgebung über
pyenv, - eigenem
pyenv-virtualenv, - Flask App Factory,
- eigenem Core-Blueprint für
/health, - getrennten Runtime- und Development-Abhängigkeiten,
- erstem automatisierten Test.
Noch nicht Teil dieser Phase:
- Datenbank,
- SQLAlchemy,
- Flask-Migrate / Alembic,
- Accounts oder Rollen,
- Authentifizierung,
- Teams oder Organisation,
- Templates / Dashboard,
- CSS / Branding,
- Docker / Gunicorn / Caddy,
- Fachmodule.
0.1 — Projektidentität festlegen
Entscheidungen
- Produktname: AHK-Ehrenamtsmanagement
- Technischer Name:
ahk-ehrenamtsmanagement - Greenfield-Neustart statt Legacy-Migration
- Lokale Shell: Bash
- Entwicklungsbetriebssystem: EndeavourOS / Arch Linux
- Python-Serie: 3.14
- Python-Versionierung: pyenv
- Virtuelle Umgebung: pyenv-virtualenv
Konvention
Der technische Name ahk-ehrenamtsmanagement soll später konsistent für Repository, App-Verzeichnis, Stack-Verzeichnis und Container verwendet werden.
Prüfergebnis
Phase 0.1 ist abgeschlossen, wenn keine weiteren Namensentscheidungen für den Projektstart notwendig sind.
Status: ✅ entschieden
0.2 — Neues Git-Projekt initialisieren
Ziel
Ein sauberes lokales Git-Repository ohne Legacy-Code und ohne vorweggenommene Anwendungsstruktur.
Aufgaben
- Neuen Projektordner
ahk-ehrenamtsmanagementanlegen. - In den Projektordner wechseln.
- Neues Git-Repository initialisieren.
PROJECT_DESIGN.mdin den Projektroot übernehmen.- Vor-Ort-Mockup als visuelle Referenz in den Projektroot übernehmen.
- Minimale
.gitignoreanlegen. - Prüfen, dass keine lokalen Secrets oder Entwicklungsdaten versioniert werden.
- Ersten Baseline-Commit erstellen.
Beispiel
mkdir ahk-ehrenamtsmanagement
cd ahk-ehrenamtsmanagement
git init
Die beiden Ausgangsdateien anschließend in den Projektroot kopieren.
.gitignore
# Python
__pycache__/
*.py[cod]
# Optional local virtual environments
.venv/
venv/
# Local application data
instance/
# Environment / secrets
.env
# OS / editor noise
.DS_Store
Danach:
git add .
git status
git commit -m "Initialize AHK-Ehrenamtsmanagement project"
Noch nicht tun
- keinen Remote erzwingen,
- kein GitHub/Gitea-Setup vorwegnehmen,
- kein Flask installieren,
- keine komplette spätere Verzeichnisstruktur leer vorbauen.
Prüfergebnis
git status
soll einen sauberen Arbeitsbaum zeigen.
Done wenn: Projektroot + Source-of-Truth + Mockup + .gitignore sauber versioniert sind.
0.3 — Python 3.14 als Projektbasis festlegen
Ziel
Die Anwendung wird bewusst auf Python 3.14 entwickelt.
Aufgaben
- Python-Major/Minor festgelegt: 3.14
- Konkreten installierten
3.14.x-Patchstand für die Projektumgebung verwenden. - Sicherstellen, dass dieser Interpreter über
pyenvverfügbar ist.
Die konkrete Patchversion wird nicht in
TASKS.mderfunden. Verwendet wird der bewusst ausgewählte/installierte Python-3.14-Patchstand.
Prüfergebnis
pyenv versions
zeigt einen geeigneten Python-3.14-Interpreter.
Done wenn: Python 3.14 lokal über pyenv bereitsteht.
0.4 — Projekt-Virtualenv mit pyenv-virtualenv anbinden
Ziel
Das Projekt besitzt eine eigene isolierte Python-Umgebung und aktiviert sie projektbezogen über .python-version.
Voraussetzung
pyenv und pyenv-virtualenv funktionieren auf dem Entwicklungsrechner bereits und wurden mehrfach getestet. Die globale Bash-Konfiguration wird deshalb in dieser Phase nicht erneut umgebaut.
Aufgaben
- Virtualenv für das Projekt auf Basis des gewählten Python-3.14-Interpreters erzeugen.
- Environment-Name:
ahk-ehrenamtsmanagement - Environment im Projektroot mit
pyenv localzuweisen. - Prüfen, dass
.python-versionentstanden ist. .python-versionversionieren.- Prüfen, dass
pythontatsächlich aus dem Projekt-Environment kommt.
Beispiel
<PYTHON_3_14_X> durch die tatsächlich verwendete pyenv-Version ersetzen:
pyenv virtualenv <PYTHON_3_14_X> ahk-ehrenamtsmanagement
pyenv local ahk-ehrenamtsmanagement
Prüfen:
python --version
which python
pyenv version
Erwartung
python --versionzeigt Python 3.14.x.pyenv versionzeigtahk-ehrenamtsmanagement..python-versionliegt im Projektroot.
Prüfergebnis
Done wenn: Das Projekt verwendet automatisch sein eigenes pyenv-virtualenv.
0.5 — Minimale Python-Abhängigkeiten einführen
Ziel
Runtime- und Development-Abhängigkeiten werden von Beginn an getrennt gepflegt.
Entscheidungen
- Runtime-Abhängigkeiten:
requirements.txt - Development-/Test-Abhängigkeiten:
requirements-dev.txt - Entwicklungsdatei bindet Runtime-Abhängigkeiten mit
-r requirements.txtein.
Aufgaben
requirements.txtanlegen.- Nur Flask als erste Runtime-Abhängigkeit eintragen.
requirements-dev.txtanlegen.requirements.txtdarin referenzieren.pytestals erste Development-Abhängigkeit eintragen.- Development-Abhängigkeiten im aktiven pyenv-Environment installieren.
- Keine späteren Pakete vorsorglich hinzufügen.
requirements.txt
Flask
requirements-dev.txt
-r requirements.txt
pytest
Installation:
python -m pip install -r requirements-dev.txt
Konvention
Für Paketbefehle bevorzugen wir:
python -m pip ...
statt eines unqualifizierten pip ..., damit eindeutig der Paketmanager des aktiven Python-Interpreters verwendet wird.
Prüfergebnis
python -c "import flask; print(flask.__version__)"
python -m pytest --version
Beide Befehle müssen funktionieren.
Done wenn: Flask und pytest im Projekt-Environment verfügbar sind und die Abhängigkeiten getrennt dokumentiert sind.
0.6 — Minimale Flask-App mit App Factory bauen
Ziel
Die erste Anwendung startet über eine Flask App Factory und besitzt einen eigenen Core-Blueprint für den Healthcheck.
Architekturentscheidung
/health wird nicht direkt in app/__init__.py definiert.
Stattdessen erhält die Betriebsinfrastruktur einen kleinen eigenen Core-Bereich:
app/
├── __init__.py
└── core/
├── __init__.py
└── health/
├── __init__.py
└── routes.py
Die Factory baut die App zusammen; der Blueprint besitzt die Route.
Aufgaben
- Verzeichnis
app/core/health/anlegen. - notwendige
__init__.py-Dateien anlegen. - Health-Blueprint definieren.
/health-Route definieren.create_app()inapp/__init__.pyimplementieren.- Health-Blueprint in der Factory registrieren.
- Flask Development Server starten.
/healthmanuell prüfen.
Verzeichnisse anlegen
mkdir -p app/core/health
touch app/__init__.py
touch app/core/__init__.py
touch app/core/health/__init__.py
touch app/core/health/routes.py
app/core/health/__init__.py
from flask import Blueprint
bp = Blueprint("health", __name__)
from app.core.health import routes
app/core/health/routes.py
from app.core.health import bp
@bp.get("/health")
def health():
return {"status": "ok"}, 200
app/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
from app.core.health import bp as health_bp
app.register_blueprint(health_bp)
return app
Starten
flask --app 'app:create_app' run --debug
In einem zweiten Terminal:
curl -i http://127.0.0.1:5000/health
Erwartung
HTTP-Status:
200 OK
JSON:
{"status": "ok"}
Der Endpoint enthält keine personenbezogenen, sensiblen oder unnötigen Systeminformationen.
Noch nicht tun
- keine Datenbank,
- keine Konfigurationsarchitektur vorwegnehmen,
- keinen
SECRET_KEYerfinden, - keine Templates,
- keinen Startseiten-Blueprint,
- keine Fachmodule.
Done wenn: create_app() startet und /health zuverlässig 200 liefert.
0.7 — Testbasis mit pytest aufsetzen
Ziel
Die erste Funktion der App wird sofort automatisiert getestet.
Aufgaben
- Verzeichnis
tests/anlegen. tests/test_health.pyanlegen.- Flask-App über
create_app()im Test erzeugen. - Flask Test Client verwenden.
- HTTP-Status von
/healthprüfen. - JSON-Antwort prüfen.
- Gesamte Testsuite mit
python -m pytestausführen.
tests/test_health.py
from app import create_app
def test_health_endpoint():
app = create_app()
client = app.test_client()
response = client.get("/health")
assert response.status_code == 200
assert response.get_json() == {"status": "ok"}
Ausführen:
python -m pytest
Erwartung
Mindestens:
1 passed
Done wenn: Der Healthcheck automatisiert getestet wird und die komplette aktuelle Testsuite grün ist.
0.8 — Phase-0-Checkpoint
Ziel
Einen klaren, reproduzierbaren Ausgangspunkt schaffen, bevor Datenbank, Core-Domänenmodelle oder Authentifizierung beginnen.
Aufgaben
- Projektstruktur kontrollieren.
git statusprüfen..python-versionist versioniert..env,instance/und lokale Daten sind nicht versioniert.python --versionzeigt Python 3.14.x.pyenv versionzeigt das Projekt-Environment.python -m pytestist grün./healthfunktioniert manuell.- Keine fachliche Funktionalität wurde vorweg implementiert.
- Phase-0-Stand committen.
Beispiel:
git add .
git status
git commit -m "Build minimal Flask application foundation"
Erwartete Struktur am Ende von Phase 0
ahk-ehrenamtsmanagement/
├── app/
│ ├── __init__.py
│ └── core/
│ ├── __init__.py
│ └── health/
│ ├── __init__.py
│ └── routes.py
├── tests/
│ └── test_health.py
├── PROJECT_DESIGN.md
├── PROJECT_DESIGN_VOR_ORT_MOCKUP.png
├── .gitignore
├── .python-version
├── requirements.txt
└── requirements-dev.txt
Definition of Done — Phase 0
Phase 0 ist abgeschlossen, wenn alle folgenden Aussagen wahr sind:
- Das Projekt ist ein neuer Greenfield-Codebestand.
- Der technische Projektname ist
ahk-ehrenamtsmanagement. - Das Projekt liegt in einem eigenen Git-Repository.
PROJECT_DESIGN.mdist im Repository die verbindliche Source of Truth.- Das Vor-Ort-Mockup liegt als visuelle Referenz vor.
- Python 3.14 wird über pyenv verwaltet.
- Das Projekt nutzt ein eigenes
pyenv-virtualenv. .python-versionbindet die lokale Projektumgebung.- Runtime- und Development-Abhängigkeiten sind getrennt.
- Flask wird über
create_app()erzeugt. /healthliegt in einem eigenen Core-Blueprint./healthliefert200und nur einen minimalen Status.- pytest ist eingerichtet.
- Der Healthcheck besitzt einen automatisierten Test.
- Alle Tests sind grün.
- Der Stand ist sauber committed.
- Es wurden noch keine nicht entschiedenen Architekturdetails vorweggenommen.
Danach
Nach Phase 0 wird nicht automatisch weiterimplementiert.
Die nächsten Phasen werden zuerst gemeinsam anhand von PROJECT_DESIGN.md durchgesprochen. Offene Produkt- oder Betriebsentscheidungen werden ausdrücklich geklärt, bevor daraus Aufgaben entstehen.