37c9642877
Existing app (single-file Tkinter/ttkbootstrap desktop tool for logging blood-drive work assignments and mapping them) plus the first round of improvements: - Data safety: atomic CSV writes (tmp + fsync + os.replace), rotating backups in data/backups/ (startup + before every change, keep 20), fallback to empty/backup on missing/empty/corrupt orte.csv. - Geocoder robustness: per-item try/except so the worker thread survives failures; GeocodingUnavailable + one-time "service unreachable" dialog. - Input: DateEntry calendar picker with parse_date() validation; manual lat/lon fields in the edit dialog; Tab 2 highlights/filters rows without coordinates and adds a right-click "Koordinaten suchen". - Logging to data/app.log; shared autocomplete helpers; config constants; map fit_bounds. docs/ describes current state, architecture, data model, setup (Linux Mint), and the full improvement roadmap. data/orte.csv is gitignored for now. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
DRK Blutspende – Arbeitsorte: Dokumentation
Developer/maintainer documentation for the Arbeitsorte-Logger, a small desktop app that records blood-drive work assignments (date + city + postal code) and plots them on an interactive map.
Context: built as a personal tool for a single user, running locally on a Linux Mint laptop. Ease of use for a non-technical user is the primary design constraint. There is no server, no multi-user story, and no network dependency beyond geocoding and the map tiles.
Documents
| File | Contents |
|---|---|
| overview.md | What the app does, feature by feature |
| architecture.md | Code structure, threading model, data flow |
| data-model.md | The orte.csv schema and how it is read/written |
| setup.md | Install & run on a fresh Linux Mint machine, plus a desktop launcher |
| improvements.md | Prioritized review findings and suggested changes |
| changelog.md | What has changed, newest first |
| dev-notes.md | Assumptions that turned out wrong — read before editing |
At a glance
- Language / stack: Python 3, Tkinter via
ttkbootstrap - Single file:
app.py(~760 lines) - Storage: one CSV file,
data/orte.csv - Map: generated on demand as
data/karte.htmlwith Folium (Leaflet), opened in the default browser - Geocoding: OpenStreetMap Nominatim via
geopy, rate-limited to 1 request/second on a background thread - UI language: German
- Persistence: atomic CSV writes + rotating backups in
data/backups/; log atdata/app.log - Tests: non-GUI smoke checks only (not yet a committed
tests/suite) - Version control: git initialized 2026-09-07