- install.sh: one-time Linux Mint setup (apt, .venv, requirements, .desktop
entry with absolute paths). Re-runnable.
- run.sh: launches the app from .venv (called by the menu entry).
- icon.png: bundled 256px red-cross launcher/window icon; app prefers it over
the runtime-drawn fallback (data/icon.png).
- requirements.txt: fully pinned incl. transitive deps, tested on Python 3.12;
numpy held at 2.2.6 so it installs on Python 3.10 too.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
New Updater class + "Hilfe" menubar:
- "Nach Update suchen": git fetch + count of new upstream commits.
- Quiet background check on start; surfaces via status bar + menu label.
- Install: git merge --ff-only, pip install if requirements.txt changed,
then restart via os.execv. data/ is git-ignored and untouched.
- Fast-forward only; diverged history or offline -> clear message, no action.
- Inert unless run from a git clone with git on PATH.
Also: "Version…" menu item shows the installed commit.
Verified against throwaway git repos (check / ff-update / diverged / no-op /
non-clone) and via GUI build on Python 3.14 / Tk 9.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Items 1–12 of the interface review:
- Larger UI font (UI_FONT_SIZE) across widgets, menus, dialogs, Treeview rows.
- DRK-red header bar; window title shows entry count; runtime-drawn red-cross
icon (also written to data/icon.png for the launcher).
- Status bar colour-coded by severity; transient messages auto-clear after 8 s,
queue-count messages stay.
- Tab 1: more form spacing, digits-only PLZ, explicit "Auswahl entfernen" +
Delete key for queue rows, confirm on "Warteschlange leeren", modal on
duplicate save.
- Tab 2: raw lat/lon columns replaced by one "Karte" column (checkmark / red
"fehlt"); ▲/▼ arrow on the active sort column; hint line always shows the
saved-entry count.
- "Karte öffnen" with no coordinates shows a dialog, not just a status line.
- Window size/position remembered between sessions (data/window.json).
Verified by building and driving the window under Homebrew Python 3.12 / Tk 9;
non-GUI smoke tests still pass. Docs updated (changelog, overview, improvements,
data-model, setup, dev-notes).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>