Schrebergarten-Management für kleine Gruppen. Verwaltet Finanzen, Ernten, Bewässerung, Gartenstunden und mehr – alles in einer Webapp, auch auf dem Handy.
- Finanzsystem – Ausgaben, Umlagen, Daueraufträge, Einzahlungen, automatische Kostenaufteilung
- Gartenstunden – Vereinsarbeit tracken, Ausgleichszahlungen berechnen
- Ernte-Tracking – Was wurde wann wo geerntet, mit Fotos
- Bewässerung – Gieß-Events mit Uhrzeit, Menge, Wetter, Dünger
- Gartenkarte – Beete auf Satellitenbildern zeichnen und verwalten (Leaflet)
- Nachrichten – Internes Nachrichtensystem mit automatischen Benachrichtigungen
- Dashboard – Statistiken und Übersichten auf einen Blick
- Admin-Panel – Nutzerverwaltung, Audit-Logs, Backup, Alerts
- PWA – Installierbar auf Android/iOS, funktioniert auch offline
- REST-API – Vollständig dokumentiert (OpenAPI/Swagger), API-Key Support
- Audit-Logging – Jeder API-Zugriff wird protokolliert
(Bisher geht nur das Finanzsystem halbwegs!!!)
- 📸 Rechnungs-OCR (Qwen-VL, lokal serverseitig)
- 🌿 Pflanzenerkennung per Kamera (TensorFlow.js, clientseitig)
- 💧 Automatische Bewässerungs-KI (Sensordaten + Wetter)
| Schicht | Technologie |
|---|---|
| Backend | Python 3.12, FastAPI, SQLAlchemy 2.0 (async) |
| Datenbank | SQLite (migrierbar auf PostgreSQL) |
| Frontend | Vue 3, Vuetify 3, Pinia, Leaflet |
| Auth | JWT (Access + Refresh Tokens) + API-Keys |
| DevOps | Docker Compose, Nginx, GitHub Actions |
| Testing | pytest, Vitest, Playwright |
- Docker & Docker Compose
- Git
git clone https://github.com/youruser/gartenapp.git
cd gartenappcp .env.example .envBearbeite .env und setze mindestens:
SECRET_KEY=dein-geheimer-schluessel-hier-aendern
FIRST_ADMIN_USERNAME=admin
FIRST_ADMIN_PASSWORD=sicheres-passwortTipp: Einen sicheren Key generieren:
python -c "import secrets; print(secrets.token_urlsafe(64))"
docker compose up -d --buildDie App ist jetzt erreichbar unter:
| URL | Was |
|---|---|
http://localhost |
Frontend (GartenApp) |
http://localhost/api/docs |
Swagger API-Dokumentation |
http://localhost/api/redoc |
ReDoc API-Dokumentation |
Melde dich mit den in .env konfigurierten Admin-Credentials an.
Der Admin-Account wird beim ersten Start automatisch erstellt.
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Datenbank initialisieren
alembic upgrade head
# Dev-Server starten
uvicorn app.main:app --reload --port 8000cd frontend
npm install
npm run dev# Backend
cd backend
ruff check .
ruff format .
# Frontend
cd frontend
npm run lint
npm run formatcd backend
pytest # Alle Tests
pytest -v # Verbose
pytest --cov=app # Mit Coverage
pytest -k test_finance # Nur Finance-Testscd frontend
npm run test:unit # Vitest (Unit Tests)
npm run test:e2e # Playwright (E2E Tests)
npm run type-check # vue-tscTests laufen automatisch bei jedem Push/PR via GitHub Actions.
Siehe .github/workflows/ für Details.
- Einloggen als Admin
- Administration → Backup
- "Export" klickt → DB-Dump wird heruntergeladen
- "Import" → DB-Dump hochladen zum Wiederherstellen
# Export
curl -H "X-API-Key: dein-key" http://localhost/api/backup/export -o backup.db
# Import
curl -X POST -H "X-API-Key: dein-key" \
-F "file=@backup.db" \
http://localhost/api/backup/import# Export
docker exec gartenapp-backend python -m app.backup.service export /app/data/backup.db
# Vom Container auf den Host kopieren
docker cp gartenapp-backend:/app/data/backup.db ./backup.dbEmpfehlung: Richte einen täglichen Cron-Job ein:
0 3 * * * docker exec gartenapp-backend python -m app.backup.service export /app/data/backups/$(date +\%Y\%m\%d).db
Die API ist vollständig dokumentiert via OpenAPI/Swagger.
Nach dem Start erreichbar unter /api/docs.
Browser/Frontend: JWT Bearer Token
# Login
curl -X POST http://localhost/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "passwort"}'
# Geschützter Request
curl -H "Authorization: Bearer <access_token>" \
http://localhost/api/finance/fund-overviewScripts/Automationen: API-Key
curl -H "X-API-Key: dein-api-key" \
http://localhost/api/finance/fund-overviewAPI-Keys können im Admin-Panel erstellt und verwaltet werden.
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/auth/login |
Login |
| POST | /api/auth/refresh |
Token erneuern |
| GET | /api/users/ |
Alle Nutzer |
| GET | /api/garden/ |
Garten-Info |
| GET/POST | /api/beds/ |
Beete verwalten |
| GET/POST | /api/plants/ |
Pflanzen-Katalog |
| GET/POST | /api/harvest/ |
Ernten eintragen/abrufen |
| GET/POST | /api/watering/ |
Bewässerung eintragen/abrufen |
| GET/POST | /api/finance/expenses |
Ausgaben |
| GET/POST | /api/finance/payments |
Einzahlungen |
| GET/POST | /api/finance/standing-orders |
Daueraufträge |
| GET | /api/finance/fund-overview |
Kassenübersicht + Balances |
| GET/POST | /api/finance/recurring-costs |
Laufende Kosten (Admin) |
| GET/POST | /api/duty/ |
Gartenstunden |
| GET | /api/messages/ |
Nachrichten |
| GET | /api/backup/export |
DB-Backup herunterladen (Admin) |
| POST | /api/backup/import |
DB-Backup einspielen (Admin) |
Vollständige Dokumentation: /api/docs (Swagger) oder /api/redoc (ReDoc)
gartenapp/
├── docker-compose.yml
├── .env.example
├── .github/workflows/ # CI/CD
├── backend/
│ ├── Dockerfile
│ ├── pyproject.toml
│ ├── alembic/ # DB Migrations
│ ├── app/
│ │ ├── main.py # FastAPI App
│ │ ├── config.py # Settings
│ │ ├── database.py # DB Engine
│ │ ├── auth/ # Login, JWT, API-Keys
│ │ ├── users/ # Nutzerverwaltung
│ │ ├── garden/ # Garten
│ │ ├── beds/ # Beete
│ │ ├── plants/ # Pflanzen-Katalog
│ │ ├── harvest/ # Ernte-Tracking
│ │ ├── watering/ # Bewässerung
│ │ ├── finance/ # Finanzsystem
│ │ ├── duty/ # Gartenstunden
│ │ ├── sensors/ # Sensoren (vorbereitet)
│ │ ├── messaging/ # Nachrichten
│ │ ├── backup/ # Export/Import
│ │ └── middleware/ # Audit-Log, CORS
│ └── tests/
├── frontend/
│ ├── Dockerfile
│ ├── src/
│ │ ├── views/ # Seiten
│ │ ├── components/ # UI-Komponenten
│ │ ├── stores/ # Pinia State
│ │ ├── api/ # API Client
│ │ └── composables/ # Vue Composables
│ └── tests/
├── nginx/
│ └── default.conf
└── docs/
├── ARCHITECTURE.md
├── API.md
└── SETUP.md
Für Details zur Architektur siehe ARCHITECTURE.md.
Alle Einstellungen werden über Umgebungsvariablen gesteuert (.env Datei):
| Variable | Beschreibung | Default |
|---|---|---|
SECRET_KEY |
JWT Signing Key | Pflichtfeld |
DATABASE_URL |
SQLAlchemy DB URL | sqlite+aiosqlite:///./data/gartenapp.db |
FIRST_ADMIN_USERNAME |
Admin-Username beim ersten Start | admin |
FIRST_ADMIN_PASSWORD |
Admin-Passwort beim ersten Start | Pflichtfeld |
ACCESS_TOKEN_EXPIRE_MINUTES |
JWT Access Token Gültigkeit | 30 |
REFRESH_TOKEN_EXPIRE_DAYS |
JWT Refresh Token Gültigkeit | 7 |
CORS_ORIGINS |
Erlaubte Origins (kommagetrennt) | * |
UPLOAD_DIR |
Verzeichnis für Uploads | ./data/uploads |
- Fork erstellen
- Feature-Branch anlegen (
git checkout -b feature/mein-feature) - Änderungen committen (
git commit -m "feat: mein neues feature") - Branch pushen (
git push origin feature/mein-feature) - Pull Request erstellen
Commit-Konvention: Conventional Commits
feat: neues Feature
fix: Bugfix
docs: Dokumentation
refactor: Code-Umbau ohne Funktionsänderung
test: Tests hinzufügen/ändern
chore: Build, CI, Dependencies
Dieses Projekt ist privat. Alle Rechte vorbehalten.
Gebaut mit ❤️ und diesen großartigen Open-Source-Projekten: