Änderungsprotokoll¶
Das Änderungsprotokoll wird nicht mehr in der Web-App gepflegt. Release-Notizen und größere Produktänderungen werden ab jetzt hier auf docs.targetshot.app gesammelt.
Aktueller Release¶
v0.15.1 · 2026-09-20¶
- Beim Kauf von Pro führen Nutzungsbedingungen und Datenschutzerklärung jetzt zu den Fassungen der App selbst. Bisher zeigten die beiden Links in der Bestellübersicht auf targetshot.app — dieselben Texte, aber eine zweite, getrennt ausgelieferte Veröffentlichung. Zugestimmt wurde damit an einer anderen Stelle, als das Dokument zu lesen war. Für englischsprachige Nutzerinnen und Nutzer war das mehr als eine Formsache: die Zustimmungszeile gibt es auf Englisch, die verlinkten Seiten dort nur auf Deutsch. Ab jetzt öffnen beide Links die Fassung der App, in der eingestellten Sprache, und weiterhin in einem neuen Tab — die begonnene Bestellung bleibt stehen.
- Intern: Ein Test hält das künftig fest. Er prüft die Bestellübersicht so, wie sie im Browser erscheint, und nicht nur die hinterlegten Texte — ein Link, der ins Leere zeigt, fällt in der Anwendung sonst stillschweigend auf die angemeldete Ansicht zurück, ohne Fehlermeldung.
v0.15.0 · 2026-09-16¶
- Minderjährige bekommen TargetShot Pro ab jetzt kostenlos über ihren Verein. Wer noch keine achtzehn ist, bekommt Pro über die Club-Plus-Lizenz seines Vereins gestellt — ohne Kauf, ohne Abonnement, ohne Vertrag. Damit entsteht für Minderjährige gar kein Vertragsverhältnis, das die Zustimmung der Eltern bräuchte; die Frage nach einer Eltern-Freigabe stellt sich nicht mehr. Mit dem achtzehnten Geburtstag endet der Anspruch von selbst, und ab dann entscheidet die Person selbst, ob sie Pro kaufen möchte. Für Vereine ist das zugleich ein Argument für Club Plus: die Jugend des Vereins bekommt den vollen Funktionsumfang, ohne dass jemand etwas bezahlt.
- Der Anspruch endet von selbst — niemand muss ihn entziehen. Er wird bei jeder Anfrage neu ermittelt: aktive Vereinslizenz, bestehende Mitgliedschaft, Alter unter achtzehn. Fällt eines davon weg — der Geburtstag, ein Vereinswechsel, eine gekündigte Lizenz — endet der Zugang im selben Moment. Es gibt keinen Nachtlauf, der das erledigen müsste, und damit auch keinen, der ausfallen könnte.
- Wer minderjährig ist, kann Pro nicht mehr kaufen. Bisher hätte ein Jugendlicher auf der Preisseite ein Abonnement abschließen können — ein Vertrag, den er ohne seine Eltern gar nicht wirksam schließen kann. Das ist jetzt gesperrt, und zwar auf dem Vertragsweg selbst, nicht nur durch ausgeblendete Schaltflächen. Gesperrt wird ausschließlich, wer nachweislich minderjährig ist: fehlt in den Vereinsdaten ein Geburtsdatum, bleibt der Kauf möglich — sonst träfe die Sperre Erwachsene, deren Verein das Datum nicht gepflegt hat.
- Und wer doch einmal zu Unrecht gesperrt wird, erfährt den Grund. Steht in den Vereinsdaten ein falsches Geburtsdatum, sagt die Meldung das ausdrücklich und verweist an den Verein — dort lässt es sich korrigieren. Eine allgemeine Störungsmeldung wäre hier die falsche Auskunft: die Sperre geht nicht von selbst weg.
- Das Profil bietet Minderjährigen kein Abonnement mehr an. Wer Pro über den Verein gestellt bekommt, sah dort bisher „Abo verwalten" und „Pro kündigen" — für ein Abonnement, das es gar nicht gibt. Stattdessen steht dort jetzt, woher der Zugang kommt und bis wann er gilt. Mit achtzehn erscheint das Kaufangebot von selbst wieder.
- Intern: Ein Weg, über den ein angemeldeter Nutzer eigene Kennungen in seinem Einstellungsdokument überschreiben konnte, ist geschlossen. Der Testversand der Berichte war die einzige Stelle, die den Inhalt einer Anfrage nicht gefiltert hat — und sie speicherte, bevor sie die Berechtigung prüfte. Über diesen Weg ließ sich eine fremde Startnummer hinterlegen, an der anschließend Berichte und die Altersermittlung hängen.
- Intern: Zwei ältere Fallen beseitigt, die bisher niemandem geschadet, aber auf den nächsten gewartet haben. Eine Funktion zur Bewertung von Vereinslizenzen hätte eine gekündigte Lizenz als gültig gemeldet, sobald man sie mit dem Wert aus der Datenbank statt mit dem aus der Oberfläche aufruft. Und der gespeicherte Tarif eines Nutzers wurde an zwei Stellen unterschiedlich gelesen — ein Altbestand hätte dadurch beim nächsten Speichern still seinen Zugang verloren. Eine lesende Messung auf der Produktivdatenbank hat bestätigt, dass kein einziges Konto davon betroffen war.
v0.14.1 · 2026-09-16¶
- Niemand kann sich selbst befördern. Wer Mitglieder verwalten darf — also auch Trainerinnen und Trainer — konnte die eigene Rolle in einem Klick auf „Vereinsleitung" setzen. Daran hängt einiges: das Geburtsdatum der Mitglieder, das Abonnement des Vereins samt Kündigung, der Vereinskalender und die Verwaltung der Vereinsbox. Die Erhöhung wirkte sofort, ohne neue Anmeldung, und hinterließ keine Spur — für Rollenänderungen wird bis heute kein Protokolleintrag geschrieben. Künftig lehnt die Plattform das ab: eine höhere Rolle vergibt jemand anderes. Sich selbst herabzustufen bleibt möglich, und an fremden Rollen ändert sich nichts. Dieselbe Sperre greift an allen drei Stellen, an denen eine Vereinsrolle geschrieben wird — auch bei der Einladung auf die eigene Adresse und beim Mitglieder-Abgleich.
- Intern: Die iOS-App startete auf iOS 27 überhaupt nicht mehr. Ursache war kein Fehler im App-Code, sondern eine Pflicht, die Apple mit dem neuen Entwicklungswerkzeug scharfgeschaltet hat: Apps müssen den sogenannten Szenen-Lebenszyklus übernehmen, sonst bricht das System den Start ab, bevor die erste Zeile der App läuft. Auf älteren iOS-Fassungen fällt das nicht auf — der Testbau lief, das Gerät stürzte ab. Behoben und nachweislich auf einem iOS-27-Gerät geprüft; der Testflug-Vorlauf prüft die Übernahme jetzt selbst, im Quellstand und im fertigen Paket.
v0.14.0 · 2026-09-15¶
- Die Mitgliederliste sagt jetzt, wer minderjährig ist. Bisher stand das Alter nirgends: Vorstand und Administration mussten jede Zeile einzeln öffnen, dort ein Geburtsdatum lesen und im Kopf rechnen — und auf schmalen Bildschirmen war auch das nicht zu sehen. Künftig steht neben dem Namen ein Hinweis „Minderjährig", in der Liste, in der Kartenansicht und in der App. Bei Erwachsenen steht dort nichts; die Liste bleibt ruhig, damit der eine Fall hervortritt, um den es geht. Führt die Vereinssoftware kein verwertbares Geburtsdatum, steht „Alter unbekannt" — auch das ist wichtig zu wissen, denn dort greift die Eltern-Abfrage nicht.
- Das Geburtsdatum selbst ist ebenfalls sichtbar — und wenn nicht, steht der Grund dabei. Eine leere Zelle hat mehrere Ursachen, und sie führen an verschiedene Orte: „Nicht hinterlegt" heißt, in der Vereinssoftware fehlt es; „Widersprüchlich" heißt, zwei Vereine melden verschiedene Daten für dieselbe Person; „Nicht geprüft" heißt, die Abfrage selbst ist gescheitert. Bisher stand dort nur ein Gedankenstrich. Sichtbar ist das Geburtsdatum ausschließlich für Vorstand und Administration des Vereins, dem die Person angehört — Trainerinnen und Trainer sehen es nicht.
- Ein Widerruf der Schießdaten-Freigabe ist ab jetzt endgültig. Bisher ließ er sich ungewollt wieder aufheben: Eine widerrufene Freigabe blieb als „minderjährig" eingestuft, und über diese Einstufung stand der Weg über die erziehungsberechtigte Person weiter offen. Wurde er benutzt, galt die Freigabe wieder als erteilt und die Löschung der Schießdaten hörte auf — ohne dass jemand das beabsichtigt hätte. Das ist geschlossen. Wer nach einem Widerruf wieder sichtbar sein möchte, stimmt selbst erneut zu; Dritte können einen Widerruf nicht aufheben.
- Und wer durch eine falsche Einstufung feststeckte, kommt wieder heraus. War jemand versehentlich als minderjährig eingestuft und hatte widerrufen, ging es weder vorwärts noch zurück. Der Verein kann diese Einstufung jetzt aufheben, ohne den Widerruf anzutasten: Die Löschung läuft weiter, und die betroffene Person kann anschließend selbst neu entscheiden. Aufheben lässt sich die Einstufung nur, wenn das Geburtsdatum aus der Vereinssoftware sie belegt.
- Die Altersgrenze steht fest bei 16 Jahren und ist jetzt an allen Stellen dieselbe — auch in der Datenschutzerklärung, die den Umgang mit dem Geburtsdatum nun ausdrücklich beschreibt: woher es kommt, wozu es verwendet wird und wer es sehen kann. Ein vorbereitetes Anschreiben an Mitglieder nannte versehentlich 18 und ist berichtigt.
- Intern: Die Kontaktadresse des Verantwortlichen war in Impressum und Datenschutzerklärung unterschiedlich. Vereinheitlicht auf die Adresse aus dem Impressum, und ein Wächter im Testlauf hält die beiden künftig zusammen.
v0.13.23 · 2026-09-15¶
- Die Vereinseinstellungen zeigen jetzt, was der Kalender-Abgleich aufgeräumt hat. Der Abgleich hält seit v0.13.15 fest, wie viele Termine er entfernt hat — und warum er es gegebenenfalls nicht getan hat. Gelesen hat das bisher niemand: die Oberfläche nannte nur „zuletzt abgeglichen" und „übernommen". Nach einem automatischen Lauf — und der ist der Normalfall, alle 15 Minuten — sah ein Vorstand das Ergebnis also gar nicht; die Zahl stand nur in der Rückmeldung, wenn er selbst auf den Knopf drückte. Web und App zeigen jetzt beides: die entfernte Anzahl in der Statuszeile und, falls nicht aufgeräumt wurde, den Grund in einer eigenen Zeile.
- Intern: Der Starterlisten-Kanal der Vereinsbox nimmt keine Schein-Angaben mehr an. Meldete die Anlage für eine Liste keine Kennung oder keinen Namen, machte die Plattform daraus bisher still eine echte Adresse — bei dieser Vereinssoftware sind 0 und 1 gültige Listenkennungen, und aus „nichts gemeldet" wurde so eine 0. Das war nicht folgenlos: die Meldung schreibt den Namen einer Liste auch dann, wenn es sie schon gibt, ein Schein-Name hätte also eine vorhandene, benannte Starterliste überschrieben — ohne eine Zeile Protokoll. Künftig fällt die einzelne unbrauchbare Zeile, die gesunden Zeilen derselben Meldung kommen an, und eine unbrauchbare Nebenangabe wird zu „nicht gemeldet" statt zu einer erfundenen Zahl. Echte Nullen bleiben echt — die erste angebundene Anlage meldet sie tatsächlich.
- Intern: Eine einzelne unbrauchbare Zeile lässt nicht mehr die ganze Meldung scheitern. Bisher antwortete die Plattform in dem Fall mit einem Fehler für die komplette Lieferung, und ein unveränderter zweiter Versuch scheiterte genauso — die gesunden Listen kamen nie an. Gefunden in der Gegenprüfung.
v0.13.22 · 2026-09-14¶
- Die dritte Stelle, an der jemandem sein Verein wegkam, ist zu. „Vereine bearbeiten" in der Mitgliederverwaltung schrieb die Vereinszugehörigkeit einer Person komplett neu — und hat damit still jeden Verein entfernt, der außerhalb des eigenen Bereichs lag. Kein Fehler, kein Hinweis, und die betroffene Person merkte es erst beim nächsten Anmelden. Damit machte diese eine Stelle die beiden Korrekturen aus v0.13.21 bei der nächsten Mitgliederpflege wieder rückgängig. Künftig gilt dieselbe Regel wie dort: Im eigenen Verein entscheidet der Vorstand, auch entfernend. Ein fremder Verein, in dem die Person noch Mitglied ist, wird durchgereicht statt überschrieben. Ein Rest ohne Mitgliedschaft wird weiterhin aufgeräumt.
- Lässt sich das nicht sicher entscheiden, wird gar nichts geschrieben. Fehlt beim Speichern eine der beiden Auskünfte — der bisherige Stand oder die Mitgliedschaften —, kann niemand unterscheiden, was belegt ist und was ein Rest. Die Änderung wird dann abgelehnt statt geraten; der Vorstand bekommt eine Fehlermeldung und kann es erneut versuchen. Lieber ein sichtbarer Fehlschlag als eine stille Löschung.
- Intern: Das Admin-Portal führt Vereine aus der Vereinssoftware jetzt mit ihrem Landesverband und erkennt Doppeleinträge. Hintergrund: Die Vereinssoftware eines Vereins führt denselben Nachbarverein oft mehrfach — einmal mit seiner echten Verbandsnummer und zusätzlich als Gasteintrag, den jemand für einen Wettkampf angelegt hat. Beim ersten angebundenen Verein sind das 106 Einträge für 64 tatsächliche Vereine. Der Katalog benennt diese Doppel jetzt, entscheidet aber nichts und löscht nichts. Eine fehlende Verbandsangabe heißt dort ausdrücklich „nicht gemeldet" und nicht „gehört keinem Verband an" — sie fehlt auch bei echten Vereinen.
- Intern: Für diese Anzeige meldet die Vereinsbox zusätzlich die Verbandsnummer und deren Klartext. Weiterhin ohne Personenbezug: übertragen werden ausschließlich Nummer und Name des Vereins.
v0.13.21 · 2026-09-14¶
- Eine Einladung nimmt niemandem mehr seinen Verein weg. Wer bereits in einem TargetShot-Verein war und anschließend woanders eingeladen wurde — etwa als erster Vorstand seines eigenen, neu dazukommenden Vereins —, verlor den bisherigen Verein: Die Mitgliedschaft stand zwar noch da, der Zugriff war trotzdem weg. Künftig kommt der neue Verein dazu, statt den alten zu ersetzen. Hinweis: Der bisherige Hauptverein bleibt dabei der Hauptverein; nach dem Anmelden landet man also weiterhin dort und wechselt bei Bedarf.
- Auch „Mitglied abgleichen" nimmt keinen fremden Verein mehr weg. Das war die zweite Hälfte desselben Falls: Wer als Vorstand seines eigenen Vereins eingeladen wurde, verlor ihn beim nächsten Abgleich seines anderen Vereins wieder.
- Die Handicap-Faktoren kommen jetzt von der Anlage. Auflage gegen Freihand, Luftpistole gegen Luftgewehr — diese Faktoren mussten bisher von Hand eingetragen werden, obwohl die Anlage sie kennt. Künftig übernimmt die Plattform sie, sichtbar im Feld und jederzeit überschreibbar. Übernommen wird nur, was eindeutig ist: Rechnet eine Veranstaltung nach einem anderen Schema als „Auflage mal, Luftpistole geteilt", bleibt die bisherige Einstellung stehen — beim ersten angebundenen Verein betrifft das den Ringkönig, der beide Seiten fein gegeneinander justiert statt auszugleichen.
- Intern: Die Release-Wege für App Store und Play Store liegen jetzt als Skripte im Repository statt nur in Runbooks. Sie beantworten, wer einen Build tatsächlich bekommt — die Runbooks waren an dieser Stelle überholt.
v0.13.20 · 2026-09-14¶
- Die Anlage sagt jetzt selbst, wie ein Preisschießen gewertet wird. Bisher musste der Vorstand für jede Veranstaltung von Hand einstellen, ob nach bestem Teiler oder nach Ringen rangiert wird — obwohl die Anlage es längst weiß. Künftig übernimmt die Plattform diese Angabe, sichtbar im Feld und jederzeit überschreibbar. Wer eine Veranstaltung selbst einstellt, behält seine Entscheidung.
- Übernommen wird nur, was eindeutig ist. Eine Liste kann auf der Anlage mehrere Wertungen führen — etwa eine Einzel- und eine Mannschaftswertung, die verschieden rechnen. Die Mannschaftswertung bleibt außen vor, sie bestimmt keine Einzelrangliste. Sind sich die übrigen einig, gilt ihre Angabe. Widersprechen sie sich, wird nichts übernommen und die bisherige Einstellung bleibt stehen. Beim ersten angebundenen Verein betrifft das genau eine Veranstaltung: Beim Kirchweih- und Königsschießen laufen zwei verschiedene Preisschießen nebeneinander — „Blattl" nach Teiler, „Ring" nach Ringen. Da wäre jede automatische Antwort geraten.
- Nicht übernommen wird, wie viele Schüsse zählen. Die Anlage sagt, was gemessen wird — Teiler, Ringe, Zehntelringe —, aber nicht, ob das beste Zehn-Schuss-Ergebnis oder die Gesamtsumme rangiert. Diese Angabe gibt es dort schlicht nicht. Sie bleibt deshalb eine Einstellung des Vereins.
- Intern: Eine Veranstaltung, deren Einstellung nur angezeigt und unverändert zurückgespeichert wurde, galt danach als ausdrücklich entschieden. Bei Listen, die erst durch die Anlage zum Preisschießen wurden, hätte das ihre Ergebnisse sichtbar gemacht, ohne dass jemand sie freigegeben hat. Behoben.
v0.13.19 · 2026-09-14¶
- Schießen ohne Startliste taucht endlich in den Vereinseinstellungen auf. Wer an der Anlage schießt, ohne dass eine Startliste läuft, erzeugt Ergebnisse, die die Anlage unter „keine Liste" führt. Diese Ergebnisse zählten in Übersicht, Bestenliste, Berichten und Herausforderungen schon immer mit — in den Einstellungen waren sie aber nicht zu sehen, und damit ließ sich auch nichts daran ändern. Beim ersten angebundenen Verein sind das rund 8 von 100 Scheiben, laufend. Künftig steht dafür eine eigene Zeile in der Starterlisten-Übersicht, ausdrücklich gekennzeichnet als kein Eintrag der Anlage. Sie lässt sich wie jede andere Liste zuordnen oder ausblenden.
- Warum das wichtig ist: Ohne Namen kann die Plattform nicht erkennen, worum es sich handelt — sie nimmt Training an. Das ist in aller Regel richtig, war aber bisher eine stille Annahme, die niemand prüfen oder korrigieren konnte. Jetzt ist beides möglich.
- Intern: Ein Verein, der eine Liste ausblendet, tat das bisher auf fünf von sechs Flächen wirksam — im Mitglieder-Dashboard wirkte es für Listen ohne Namen nicht. Behoben.
v0.13.18 · 2026-09-14¶
- Die Anlage meldet jetzt auch, wie sie wertet. Bisher kannte die Plattform nur, dass eine Liste ein Preisschießen ist — nicht, ob die Anlage nach bestem Teiler, nach Ringen oder nach Zehntelringen rangiert, und mit welchem Faktor sie Auflage gegen Freihand und Luftpistole gegen Luftgewehr verrechnet. Genau diese Angaben werden jetzt übernommen und aufbewahrt, samt ihrer Bezeichnung auf der Anlage („Allgemein", „Auflage", „Mannschaft").
- Ausgewertet wird davon weiterhin nichts, und das mit Absicht. Eine Liste führt auf der Anlage oft mehrere Wertungen nebeneinander — bei manchen widersprechen sie sich sogar in der Wertungsart. Welche davon eine Veranstaltung bestimmt, ist eine Entscheidung des Vereins und keine, die die Plattform hinter dem Rücken trifft. Erst wenn die Zahlen da sind, lässt sich darüber überhaupt sinnvoll entscheiden. Bis dahin ändert sich an Ranglisten und Ergebnissen nichts.
- Intern: Beim Übernehmen von Anlagendaten konnte eine fehlende oder unbrauchbare Angabe stillschweigend zu einer echten Kennung werden und damit einen vorhandenen Datensatz überschreiben — bei den Starterlisten-Stammdaten hätte das den Listentyp und beide Datumsangaben überschrieben. Die Übernahme prüft jetzt durchgängig auf echte Zahlen; eine unbrauchbare Zeile fällt, eine unbrauchbare Einzelangabe bleibt leer, und der Rest einer Lieferung geht unverändert durch.
- Intern: Auf den Anlagen ist der neue Teil des Kanals noch nicht freigeschaltet — er wird in einem eigenen Schritt ausgerollt. Bis dahin liefern die Boxen unverändert weiter.
v0.13.17 · 2026-09-13¶
- Das Enddatum eines Preisschießens kommt jetzt von der Anlage. Wer den Freigabemodus „Nach Veranstaltungsende" nutzt, musste das Datum bisher für jede Veranstaltung von Hand eintragen — ohne Datum endete sie nie von selbst. Künftig füllt die Anlage das Feld, sobald sie den Termin kennt. Die eigene Eingabe bleibt die stärkere: Wer ein Datum selbst setzt oder bewusst herausnimmt, behält seine Entscheidung, und keine Auffrischung dreht sie zurück. Das übernommene Datum ist sichtbar im Feld — es wirkt nichts im Verborgenen. Hinweis für Vereine mit Freigabe „Nach Veranstaltungsende": Veranstaltungen, deren Termin noch in der Zukunft liegt, zeigen ihre Ergebnisse ab jetzt erst nach diesem Termin. Vorher waren sie ohne Datum durchgehend sichtbar.
v0.13.16 · 2026-09-13¶
- Die Preisschieß-Einstellungen wirken wieder. Wer in den Vereins-Einstellungen für eine einzelne Veranstaltung etwas eingestellt hat — Wertung, Freigabe, Auflage-Faktor, Enddatum —, bekam „Gespeichert" zu sehen, und gespeichert wurde nichts. Jede Zeile zeigte dieselben Vorgaben, und der Vorstand hatte keine Möglichkeit, das zu bemerken. Das ist behoben: Die Einstellung einer Zeile kommt an, wird beim nächsten Öffnen wieder angezeigt, und lässt sich auch wieder zurücknehmen. Kann eine Einstellung ausnahmsweise nicht gespeichert werden, sagt die Oberfläche es jetzt, statt Erfolg zu melden. Während eines laufenden Speichervorgangs ist die Preistabelle gesperrt — was man nicht ändern kann, geht auch nicht verloren.
- Die Plattform kann die Zuordnung von der Anlage übernehmen. Bisher wurde am Namen geraten, ob eine Liste Training, Wettkampf oder Preisschießen ist — ein „Blattlschießen" oder „Adventsschießen" galt damit als Training. Künftig zählt die Angabe der Anlage selbst. Die ausdrückliche Zuordnung des Vereins bleibt in jedem Fall die stärkere: Wer die Jahresmeisterschaft als normalen Trainingsabend führt, stellt sie um, und keine Auffrischung dreht das zurück. Wird eine Liste erst durch die Anlage zum Preisschießen, bleiben ihre Ergebnisse zurückgehalten, bis der Vorstand sie freigibt — es wird also nichts veröffentlicht, was vorher nie ein Preisschießen war. Wirksam wird das alles erst, wenn der Kanal auf der Anlage freigeschaltet ist; bis dahin ändert sich nichts.
- Intern: Der Stammdatenkanal nimmt jetzt auch die Auswertungsvorschrift und die Handicap-Faktoren einer Anlage entgegen. Ausgewertet wird davon noch nichts.
v0.13.15 · 2026-09-13¶
- Im Kalender gelöschte Termine verschwinden jetzt auch aus der App. Der Vereinskalender wurde bisher nur ergänzt, nie aufgeräumt: Wer einen Termin in seinem Kalender löschte, sah ihn in der App trotzdem weiter — dauerhaft. Der Abgleich entfernt solche Termine jetzt, und ebenso ausdrücklich abgesagte. Aufgeräumt wird aber nur, wenn der Abgleich sich seiner Sache sicher ist: War ein Kalender nicht erreichbar, unvollständig oder nicht auswertbar, ließen sich die Einstellungen nicht lesen, oder ist für den Verein gar kein eigener Kalender eingetragen, bleibt der Bestand unangetastet — und die Vereinseinstellungen sagen, warum. Von Hand angelegte Termine und alles Vergangene werden nie angefasst, Termine anderer Vereine ebenso wenig, und wenn auf einmal ungewöhnlich viele Termine wegfielen, verweigert der Abgleich lieber, statt einen Kalender leerzuräumen. Die entsprechende Meldung in der App kommt mit dem nächsten App-Update; im Web ist sie sofort da.
- Der Meyton-Stammdatenkatalog kommt auf die Plattform. Erste Stufe: Die Plattform kann Disziplinen, Scheibenbilder und Preisscheiben einer Anlage entgegennehmen und aufbewahren. Ausgewertet wird davon noch nichts, und auf den Anlagen ist der Kanal weiterhin abgeschaltet — er wird in einem eigenen Schritt freigegeben.
- Intern: Ein fehlgeschlagenes Speichern einer Kalender-Einstellung wird nicht mehr als Erfolg gemeldet. Bisher konnte eine Einstellung als „gespeichert" quittiert werden, obwohl sie nur flüchtig abgelegt war und beim nächsten Neustart verschwunden wäre.
v0.13.14 · 2026-09-10¶
- Profilbild in der App: Auswählen, aufnehmen, zuschneiden und entfernen geht jetzt direkt in der App — bisher ging das nur im Web. Das Bild wird vor dem Hochladen auf ein vernünftiges Maß gebracht, damit es auch bei schwachem Empfang am Stand durchkommt. Die App-Fassung dafür liegt in der internen Testverteilung.
- Der Bildwechsel verliert nichts mehr. Bisher wurde das bisherige Bild entfernt, bevor der neue Stand gespeichert war: ging beim Speichern etwas schief, zeigte das Profil auf ein Bild, das es nicht mehr gab. Jetzt wird erst der neue Stand festgeschrieben und das alte Bild danach entfernt. Und wer sein Bild auf zwei Geräten gleichzeitig ändert, verliert keines davon mehr — bisher konnte das zweite Bild hochgeladen werden und trotzdem unauffindbar bleiben.
- Vereinsbezug in den Starterlisten: Ein abgelehnter Vereins-Zugriff wird nicht mehr stillschweigend überschrieben, Vereinseinstellungen werden nie mehr für „alle Vereine" gespeichert, ein fehlender Vereinsbezug wird verständlich gemeldet statt als roher Schlüssel, und Speicherfehler landen nicht mehr im Kanal für Ladefehler.
v0.13.13 · 2026-09-10¶
- „Profilbild entfernen" sagt jetzt die Wahrheit. Der Weg meldete an mehreren Stellen Erfolg, obwohl das Bild liegen blieb. Lag kein lokales Bildverzeichnis vor — und das ist der Fall, sobald die Bilder im Cloud-Speicher liegen —, scheiterte der Löschversuch mit einem Serverfehler. Verweigerte der Bildspeicher die Löschung oder war er gerade nicht verbunden, verschwand das Bild trotzdem aus dem Profil und blieb unter seiner alten Adresse abrufbar, samt der einzigen Angabe, mit der man es je wieder hätte treffen können. Wer sein Bild löschte, während auf einem anderen Gerät gerade ein neues hochlud, verlor das neue still. Und wenn sich Anmeldename oder Sportpass-Nummer nach dem Hochladen geändert hatten, suchte der Weg eine Datei, die es nie gab. Jetzt wird nur geleert, was auch gelesen wurde; was nicht sicher gelöscht werden konnte, meldet einen ehrlichen Fehlschlag statt eines falschen Erfolgs — ein zweiter Versuch räumt dann auf. Die Bedienung dazu — Profilbild in der App auswählen, aufnehmen, entfernen — kommt mit dem nächsten App-Update.
- Intern: Die Aufbewahrungsfrist der Client-Protokolle steht nur noch an einer Stelle. Standen dort zwei Zahlen, konnten die beiden Lesepfade auf dieselben Daten auseinanderlaufen, sobald jemand nur eine davon anfasst.
v0.13.12 · 2026-09-07¶
- Intern: Die Log-Suche im Verwaltungsbereich findet eine Route jetzt unabhängig von der Schreibweise. Bisher verglichen Meldung und Absenderkennung ohne Rücksicht auf Groß- und Kleinschreibung, Route und Nutzerkennung daneben aber nicht — eine Suche nach „/training" ließ eine Zeile mit „/Training" einfach aus, ohne Fehler und ohne leeres Ergebnis. Derselbe Fehler stand im zweiten Lesepfad auf dieselben Daten und wurde mitgezogen; sonst hätte die eine Abfrage gefunden, was die andere übersieht. Keine Änderung an der Anwendung.
v0.13.11 · 2026-09-07¶
- Intern: Die Abnahme des Prod-Ingest-Ausrollens prüft den Zeitgeber jetzt an der richtigen Stelle — die Azure-Verwaltungsschnittstelle listet Zeitgeber-Auslöser nicht, was am 06.09. einen fehlerfreien Ausrollvorgang rot gemeldet hat. Keine Änderung an der Anwendung.
v0.13.10 · 2026-09-06¶
- Vereine, die eine Box kennt, werden im Verwaltungsbereich sichtbar: Bisher tauchte ein Verein dort erst auf, wenn jemand in ihm eingewilligt und geschossen hatte — eine frisch angeschlossene Anlage blieb unsichtbar, obwohl sie die Vereine ihres Kreises längst kennt. Ein eigener Kanal meldet jetzt Vereinsnummer und Vereinsname. Bewusst ohne Personenbezug: Wer dort schießt und wie, bleibt vollständig einwilligungspflichtig. Der Kanal ist auf den Anlagen per Vorgabe abgeschaltet und hat von Anfang an einen Löschweg — was eine Anlage nicht mehr meldet, gilt als entfallen.
- Die Aufnahme auf Prod meldet ihren Zustand: Bis jetzt stand die Station „Plattform" der Vereinskarte ohne Anhaltspunkt da, weil nur die Staging-Aufnahme einen Zustand schrieb. Der neue Zettel unterscheidet die Betriebsart: Für eine ereignisgetriebene Aufnahme heißt „seit Stunden nichts verarbeitet" nicht „steht", sondern „gerade schießt niemand" — sonst stünde die Station an jedem schießfreien Abend auf Warnung. Ob Daten fehlen, obwohl welche kommen müssten, beantwortet weiterhin der Frische-Wächter. Wird nach diesem Release auf der Anlage freigeschaltet.
v0.13.9 · 2026-09-06¶
- Die Aufnahme aus der Cloud verliert keine Nachricht mehr: Jede Nachricht einer Charge wird für sich verarbeitet; eine fehlerhafte reißt die übrigen nicht mehr mit. Fehler nennen Partition, Position und Fehlercode im Protokoll, und die Charge wird bis zu zehnmal über rund fünfundzwanzig Minuten wiederholt. Bisher verwarf eine einzige werfende Nachricht den Rest der Charge, während der Lesezeiger weiterrückte.
- Eigener Ausrollweg für die Aufnahme-Funktion: Ein Arbeitsablauf baut, verteilt und prüft die vier Funktionen, mit einem Wächter, der nicht ausrollt, solange auf dem Treffer-Kanal Nachrichten ankommen. Bleibt die Messreihe leer, gilt das als „läuft" und der Lauf bricht ab.
- Frische-Wächter nachgezogen: Der Zeitversatz wird vorzeichenbehaftet gerechnet, und die Datumsprüfung deutet keine Zeichenketten mehr um.
- Offline heißt jetzt offline: Teilen-Knöpfe sagen bei fehlender Verbindung „keine Verbindung" statt „keine Freigabe".
v0.13.8 · 2026-09-03¶
- Der Frische-Wächter ist scharf:
GET /healthz/data-freshnessmeldet, ob nach dem letzten Trainingsabend Schießdaten in der Cloud angekommen sind; ein täglicher, von Box und Runner unabhängiger Lauf mailt bei Ausbleiben. Das Alter wird gegen die Server-Uhr gerechnet, nicht gegen die Sitzungszeitzone der Datenbank. Bekannter Blindfleck: An Abenden, an denen kein eingewilligter Schütze schießt, meldet er zu Recht „nichts angekommen" — bis die Box den Nenner liefert, ist ein roter Lauf ein Prüfauftrag, kein Alarm. - Zurück-Navigation in der App: Der System-Zurück auf Android und ein Kantenwisch am linken Rand auf iOS tun jetzt dasselbe wie der Zurück-Pfeil; die Android-Kopfzeile ist aufgeräumt (Pfeil nicht mehr in der Statusleiste, Titel zentriert). Wirksam mit dem nächsten App-Update.
- Intern: Reste der Confluent-Zeit aus Backend und Doku entfernt; zwei stille Fehler behoben (doppelte Maskierung in der Dashboard-Antwort, Vereinsname im Web-Profil erst ab der zweiten Mannschaftszeile); die Prod-Ingest-Doku nennt jetzt die richtige Ressourcengruppe.
v0.13.7 · 2026-09-02¶
- „Meine Daten anfordern": die Datenauskunft nach Art. 15 DSGVO ist da. Ein Knopf im Profil liefert eine JSON-Datei mit allen eigenen Daten — samt Pflichtangaben zu Zwecken, Empfängern und Speicherdauer. Streng auf die eigene Person begrenzt: Schießdaten kommen nur aus den eigenen Vereinen, fremde Kennungen sind maskiert. Im Web sofort, in der App mit dem nächsten Update.
- Die Kontolöschung räumt jetzt auch die Standaufsicht: Listeneintrag, Schicht-Zuweisungen und Tauschanfragen einer gelöschten Person verschwinden vom Brett — vorher blieben Name und Sportpass-Nummer dort stehen.
v0.13.6 · 2026-09-01¶
- Die ersten drei Saisons haben Namen: Season 1 „Precision" (ab 01.10.2026), Season 2 „The Duel", Season 3 „Champions" — die Vorsaison bleibt „First Shot".
- Die App meldet Fehler künftig automatisch an denselben geschützten Kanal, den die Weboberfläche schon nutzt — sparsam gebündelt, ohne persönliche Daten, mit 30 Tagen Aufbewahrung. Wirksam mit dem nächsten App-Update; dieses Release bringt die Serverseite samt Unterscheidung von Web- und App-Meldungen in der Admin-Ansicht.
- Intern: Aufräum-Werkzeug für verwaiste Fotos jetzt auch für die Produktivumgebung; reine Doku-Änderungen blockieren die Prüfkette nicht mehr.
v0.13.5 · 2026-09-01¶
- Die Bestellbestätigung für TargetShot Pro trägt jetzt die vollständige Widerrufsbelehrung — samt Muster-Widerrufsformular und dem Kündigungslink, der ohne Anmeldung funktioniert. Bisher stand dort nur der Hinweis auf das Erlöschen des Widerrufsrechts.
v0.13.4 · 2026-09-01¶
- Nach jedem Kauf kommt jetzt eine Vertragsbestätigung per E-Mail — mit Leistung, Preis, Zeitpunkt, Kündigungslink, Widerrufsbelehrung und Muster-Widerrufsformular (§ 312f BGB). Für Pro-Abos und Club Plus gleichermaßen.
- Rechnungen kommen künftig aus Lexware Office. Jede bezahlte Abo-Abbuchung erzeugt automatisch eine ordentliche Rechnung mit fortlaufender Nummer und Kleinunternehmer-Hinweis; das PDF kommt per E-Mail. Die Stripe-Belegmails sind dafür abgeschaltet — es gibt nur noch eine Rechnung je Zahlung.
v0.13.3 · 2026-09-01¶
- Das Personenprofil zeigt, woher die Punkte kommen. Neuer Abschnitt „Herausforderungen": jede SP-Buchung der laufenden Saison mit Grund, Datum und Punktzahl — Trainingsabende, Wochenziele, Duelle. Der bisherige Abschnitt „Abgeschlossen" heißt jetzt „Auszeichnungen", denn genau das zeigt er.
v0.13.2 · 2026-08-30¶
- Profilbilder in der Saison-Rangliste. Wer ein Bild hinterlegt hat, wird jetzt auch mit Bild geführt — in der Rangliste, auf der Startseite der Saison und im Profil. Es gilt dieselbe Regel wie für den Namen: sichtbar ausschließlich bei Mitgliedern, die ihre Ergebnisse für den Verein freigegeben haben.
- Das Profil einer Person zeigt jetzt die Duell-Bilanz. Gewonnen, verloren und — falls vorhanden — unentschieden, über alle Zeiten. Geisterduelle gegen die eigene Bestleistung zählen nicht mit.
- Und welche Auszeichnungen jemand bereits erreicht hat. Aufgeführt sind die dauerhaft vergebenen Auszeichnungen mit Stufe und Datum — nicht die Wochen- und Monatsaufgaben, die sich ohnehin jede Periode zurücksetzen.
v0.13.1 · 2026-08-30¶
- Die Saison-Rangliste erscheint jetzt schon, wenn sich zwei messen. Bisher blieb sie verborgen, bis mindestens drei weitere Vereinsmitglieder ihre Ergebnisse freigegeben hatten. Für kleine Vereine hieß das: kein Vergleich, obwohl beide Beteiligten längst freigegeben hatten. Es genügt jetzt ein weiteres freigebendes Mitglied. Am Schutz ändert sich nichts — es erscheint weiterhin ausschließlich, wer seine Ergebnisse für den Verein freigegeben hat, und nur innerhalb des eigenen Vereins. Dasselbe gilt für die Ehrentafel.
v0.13.0 · 2026-08-30¶
- Der Rang wird sichtbar, wo man ihn sieht: am Profilbild. Wer im TargetPass Ränge sammelt, trägt sie jetzt als Rahmen um das eigene Bild — in der Rangliste, im Duell, im Profil. Ab Elite kommt ein Lorbeerkranz dazu. Entscheidend: der Rahmen zeigt den höchsten je erreichten Rang, nicht den der laufenden Saison. Er verschwindet also nicht, wenn am 1. Oktober eine neue Saison beginnt.
- Neu: die Ehrentafel des Vereins. Sie führt den höchsten Rang jedes Mitglieds — saisonübergreifend, nach Rang gruppiert und ohne Platzziffern. Sie erscheint, sobald mindestens drei weitere Mitglieder ihre Ergebnisse freigegeben haben; bis dahin sieht man die eigene Zeile.
- Neu: eine Urkunde für jede abgeschlossene Saison. Sie hält fest, welchen Rang man erreicht hat, mit wie vielen Punkten und auf welchem Platz. Wer Legendary erreicht, bekommt die ausgezeichnete Fassung. Die erste Urkunde entsteht mit dem Ende der Vorsaison am 30. September.
- Neu: Profile der Vereinsmitglieder. Aus Rangliste und Duellen führt jetzt ein Weg zu einer Person: Rang, Saisonpunkte, Platz, frühere Saisons und die gemeinsame Duell-Bilanz. Sichtbar ausschließlich für Mitglieder, die ihre Ergebnisse freigegeben haben — ohne Freigabe gibt es das Profil nicht.
- Die Saison-Rangliste zeigte Mitglieder, die gar nicht mitspielen konnten. Saisonpunkte werden nur für Konten mit Pro gebucht; in der Liste standen trotzdem alle Vereinsmitglieder, die meisten mit null Punkten. Das ist behoben — die Rangliste führt jetzt nur, wer auch Punkte sammeln kann.
v0.12.0 · 2026-08-28¶
- Der Saison-Pass geht bis Stufe 18 statt bis 15. Drei Stufen kommen oben dazu; die bisherigen fünfzehn bleiben punktgenau, wie sie waren — niemand springt dadurch auf eine andere Stufe, und bereits verdiente Auszeichnungen bleiben unberührt. Neu ist eine Diamant-Auszeichnung für den vollen Pass. Die Stufen tragen jetzt außerdem Ränge: von Rookie über Marksman, Sharpshooter, Expert und Elite bis Legendary, jeweils in drei Abstufungen.
- Die Saison hat einen Namen. Die Vorsaison heißt First Shot. Der Name steht künftig über der Saison, die Nummer bleibt daneben stehen.
- Für die TargetShot-App (geschlossene Testphase): Die Saison-Fläche heißt jetzt TargetPass und ist von Grund auf neu gestaltet — mit eigenem Zeichen, eigener Schrift und einem Rangabzeichen, das mit jeder Stufe wächst. Statt vier gleich aussehender Kacheln zeigt die Startseite jetzt, wo du stehst und was dir noch fehlt: die Wochenaufgaben mit ihrem Fortschritt, die laufenden Duelle mit Spielstand, deine Nachbarn in der Rangliste. Neu sind eine Rangleiter mit allen achtzehn Stufen auf einen Blick und ein Moment beim Stufenaufstieg. Die Fläche gibt es jetzt in hell und dunkel, passend zur eingestellten Darstellung. Erreicht die Testgeräte mit dem nächsten App-Build.
v0.11.5 · 2026-08-28¶
- Der Vereinspreis auf der Preisseite war falsch — jetzt stimmt er. Dort standen 179 € im Monat und 1.890 € im Jahr. Tatsächlich abgerechnet werden 149 € im Monat oder 1.690 € im Jahr, dazu einmalig 349 € für die Einrichtung. Die Zahlen stammten aus einem alten, nie genutzten Preismodell und waren seit März nicht mehr an die Abrechnung angeglichen worden. Für bestehende Vereinslizenzen ändert sich dadurch nichts — abgerechnet wurde immer schon der richtige Betrag.
- Zurückgezogene Ergebnisse zählen nicht mehr in Berichten mit. Wird ein Blatt an der Anlage annulliert, verschwindet es damit auch aus dem Vereinsbericht an Trainer und Vorstand sowie aus dem Bericht zu einer einzelnen Session. Bisher tauchte es dort weiterhin auf und verfälschte die Auswertung.
- Für die TargetShot-App (geschlossene Testphase): Die Nachfrage, ob du Mitteilungen erlauben möchtest, blieb bisher nur einen Augenblick sichtbar und verschwand dann von selbst — man kam gar nicht dazu, sie zu beantworten. Sie bleibt jetzt stehen, bis du entscheidest. Erreicht die Testgeräte mit dem nächsten App-Build.
v0.11.4 · 2026-08-25¶
- E-Mails über Tauschanfragen und Duelle kommen jetzt an. Bisher waren E-Mail-Benachrichtigungen standardmäßig abgeschaltet — wer seine Einstellungen nie geändert hatte, erfuhr von einer Standaufsicht-Tauschanfrage oder einer Duell-Einladung erst beim nächsten Öffnen der App. Genau diese vier Nachrichten (Tauschanfrage und Antwort darauf, Duell-Einladung und Antwort darauf) kommen jetzt von sich aus per E-Mail. Abbestellen lässt sich das weiterhin in den Einstellungen, und wer dort bereits abbestellt hatte, bleibt abbestellt. An allen übrigen Benachrichtigungen ändert sich nichts.
- Die Preisseite sagt endlich, dass Pro die Saison enthält. Wer ohne Pro auf „Herausforderungen" klickte, landete auf der Preisseite — und las dort fünf Punkte über Statistiken, Export und Ziele, aber kein Wort über Saison, Duelle oder Rangliste. Genau das, wofür er gekommen war, stand nicht auf der Karte. Jetzt steht es dort, und zwar an erster Stelle.
- Für die TargetShot-App (geschlossene Testphase): Die App fängt sich jetzt selbst, statt bei einem Fehler wegzureißen. Bisher führte eine Störung in einer Ansicht dazu, dass die App verschwand — ohne Hinweis, und ohne dass wir davon erfuhren. Jetzt erscheint eine Seite mit einer Erklärung, einem Knopf zum erneuten Versuchen und einem Bericht, den du uns direkt schicken kannst. Erreicht die Testgeräte mit dem nächsten App-Build.
v0.11.3 · 2026-08-24¶
- Ein gelöschtes Konto kündigt jetzt auch sein Pro-Abo. Wurde ein Mitglied vom Verein entfernt und sein Konto nach der 30-Tage-Frist endgültig gelöscht, lief das persönliche Pro-Abo bei unserem Zahlungsdienstleister weiter — es wurde also weiter abgebucht, obwohl es das Konto nicht mehr gab. Das Abo wird jetzt gekündigt, bevor das Konto verschwindet. Wer nur den Verein wechselt, behält Konto und Abo unverändert: gekündigt wird ausschließlich, was mit dem Konto selbst untergeht.
- Ein Verein kann seine letzte Vereinsleitung nicht mehr verlieren. Bisher ließ sich die letzte Person mit Verwaltungsrechten löschen oder auf ein einfaches Mitglied zurückstufen. Danach konnte niemand mehr die Mitglieder oder das Vereinsabo verwalten — auch nicht kündigen. Beide Wege sind jetzt gesperrt, mit einer Meldung, die sagt, was zu tun ist: erst jemand anderen zur Vereinsleitung machen.
- Beim Löschen bleibt nichts Persönliches zurück. Namen aus Duell-Titeln, Duell-Ergebnissen und den Benachrichtigungen der Mitspieler werden jetzt mit entfernt oder neutralisiert; dasselbe gilt für Protokoll- und Versanddaten. Der Vereinspfad räumt damit genauso gründlich auf wie die Selbstlöschung.
- Kein unerwartetes Abmelden mehr bei Serverproblemen. Konnte der Server kurzzeitig die Anmeldedaten nicht nachschlagen, wurde man behandelt, als sei die Anmeldung ungültig — die App warf einen hinaus. Jetzt wird sauber unterschieden: eine ungültige Anmeldung bleibt eine ungültige Anmeldung, eine Serverstörung meldet sich als Störung, und man bleibt angemeldet.
v0.11.2 · 2026-08-23¶
- Saisonpunkte gibt es jetzt fürs Training — nicht fürs App-Öffnen. Bisher wurden Wochen- und Monatspunkte nur gutgeschrieben, wenn man die Saison-Fläche in genau dieser Woche öffnete; wer eine Woche nicht hineinsah, verlor die Punkte rückwirkend. Jetzt werden abgeschlossene Wochen und Monate automatisch nachgebucht — auch ganz ohne App-Öffnen, im Hintergrund alle paar Stunden. Auch die letzten Tage einer Saison gehen nicht mehr verloren, und an der Saisongrenze (30.09./01.10.) zählt jede Trainingseinheit genau einmal, in der Saison ihres Tages.
- Saison-Meilenstein-Abzeichen bleiben je Saison eigenständig. Wer in der Vorsaison (Season 0) einen Meilenstein erreicht, bekommt denselben Meilenstein in Season 1 wieder — vorher hätten sich die Abzeichen der beiden Saisons gegenseitig blockiert.
- Zugriffsschutz an mehreren Stellen nachgeschärft. Kalender-Feed, Einstellungen, Mitgliederverwaltung, Bestenliste und die öffentlichen Status-Endpunkte prüfen jetzt strenger, wer was sehen und ändern darf; Identität und Vereinszugehörigkeit bestimmt durchgehend der Server. Für per App eingeladene Mitglieder ohne besondere Konto-Attribute funktioniert die Web-Bestenliste dadurch erstmals zuverlässig.
- Vereins-Löschungen räumen vollständig ab. Der Papierkorb-Ablauf des Vereins konnte an Saisonpass-Daten hängenbleiben — dann wurde still gar kein fälliges Konto gelöscht. Jetzt wird alles Zugehörige mit entfernt.
- Benachrichtigungen: Aufgaben mit Antwort-Knöpfen und eine überarbeitete Fläche. Standaufsicht-Tauschanfragen lassen sich direkt aus der Benachrichtigung beantworten, die zugehörigen E-Mails gehen wieder zuverlässig raus, und eine offene Anfrage stellt ihren Posteingangs-Eintrag beim nächsten Planaufruf selbst wieder her.
- Für die TargetShot-App (geschlossene Testphase): die Berichte kommen als letztes Pro-Feature in die App, und eine freundliche Push-Nachfrage hilft, abgeschaltete Mitteilungen wieder zu aktivieren — inklusive Reparatur-Fall. Erreicht die Testgeräte mit dem nächsten App-Build.
v0.11.1 · 2026-08-20¶
- Duelle lassen sich nur noch an Gegner richten, die auch mitspielen können. Die Gegner-Auswahl (Web und App) zeigt jetzt nur Vereinsmitglieder mit TargetShot-Konto und Pro-Zugang. Bisher konnte man jedes Mitglied herausfordern — wer kein Pro hatte, konnte die Einladung aber nie annehmen oder ablehnen, und die Herausforderung hing für immer. Wer nicht in der Liste steht, kann derzeit schlicht nicht antreten; der Plan-Status anderer Mitglieder wird dabei nicht angezeigt.
- Für die TargetShot-App (geschlossene Testphase): die erweiterten Statistiken kommen in die App — Entwicklung, freier Vergleich (Gruppen wie „Alle Trainings" oder einzelne Sessions, auch Training gegen Training) und Trefferbild-Diagnose, samt Bereichs- und Disziplin-Filtern. Die Vereinsübersicht wird zur Trainer-Fläche: Kennzahlen, Klartext-Auffälligkeiten („Serie 4 fällt ab — Fokus am Ende beobachten"), Serien-Profil, wählbares Trefferbild und eine nach Training/Wettkampf/Preisschießen getrennte Historie mit Starterlisten-Namen — je Schütze filterbar nach Disziplin, auch für die Jugend. Dazu: fortlaufende Schuss-Nummern in der Gesamt-Ansicht, die Bestenlisten-Kachel mit klarer Überschrift und Pro-Kennzeichnung, die Session-Suche direkt unter der Kopfzeile und eine flüchtige Disziplin-Sicht auf dem Dashboard. Alles erreicht die Testgeräte mit dem nächsten App-Build.
v0.11.0 · 2026-08-19¶
- Neue Namen für die Herausforderungen. Die freiwilligen Karten heißen jetzt durchgehend deutsch: aus „Trainingsstreak" wird die Wochenkette, aus „Highscore Hunter" der Bestwert-Jäger, aus „Duelist" der Duellant und aus „Konstanz Light" der Solide Schnitt. An Aufgaben, Punkten und Fortschritt ändert sich nichts — nur die Sprache stimmt jetzt.
- Vorbereitung für Apple Pay und Google Pay. Die Web-App liefert die nötige Verifikationsdatei für Apple aus. Sobald die Freischaltung beim Zahlungsdienst abgeschlossen ist, erscheinen die Wallet-Knöpfe im Pro-Checkout von selbst — auf passenden Geräten (Safari mit Karte im Wallet bzw. Chrome mit hinterlegter Karte).
- Der Kauf-Einstieg merkt sich deine Wahl. Wer von außen mit einer vorgewählten Zahlweise auf die Preisseite kommt (etwa aus der App), sieht Monatlich oder Jährlich direkt richtig eingestellt.
- Genauere Auskünfte bei fehlendem Zugriff. Die Schnittstelle unterscheidet jetzt sauber, WARUM etwas nicht erlaubt ist (fehlende Rolle, fremder Verein, kein Vereinszugang …) — die Apps können damit hilfreiche Sätze zeigen statt eines pauschalen „kein Zugriff".
- Das Profil kennt jetzt die Vereinslogos. Grundlage dafür, dass die App das eigene Vereinswappen im Kopf der Flächen zeigt.
- Für die TargetShot-App (geschlossene Testphase): die Saison-Fläche ist komplett neu aufgebaut — eigene Unterseiten für Herausforderungen, Arena, Rangliste und Auszeichnungen in einem goldenen Bühnen-Look mit Lade-Choreografie und VS-Momenten; freie Konten sehen dort jetzt das Pro-Angebot (jährlich als Empfehlung); der Sprachumschalter wirkt (Deutsch/Englisch); die Standaufsicht lässt sich in der App pflegen. All das erreicht die Testgeräte mit dem nächsten App-Build.
v0.10.5 · 2026-08-15¶
- Neu: freiwillige Herausforderungen — annehmen, wenn du willst, und dafür Saisonpunkte bekommen. Neben den Pflicht- und Wochenaufgaben gibt es je Zweimonats-Zeitraum fünf Karten, die niemand automatisch bekommt: Präzisionsserie, Comeback, Highscore Hunter, Duelist und Konstanz Light. Du nimmst an, was dich reizt, und lässt liegen, was nicht passt.
- Was sie bringen: 100 Saisonpunkte für die silbernen, 150 für die goldenen, 200 für den Highscore Hunter. Alle fünf eines Zeitraums zusammen sind 700 Punkte — zum Vergleich: eine komplett gespielte Woche bringt 120 bis 150. Die bisherigen XP bleiben unverändert erhalten, die Saisonpunkte kommen dazu.
- Fair bleibt fair: Wer eine Karte annimmt, die durch vergangene Trainings bereits erfüllt wäre, bekommt dafür keine Saisonpunkte — die gibt es für die Aufgabe, nicht für die Vergangenheit. Die XP-Gutschrift ist davon nicht berührt.
- In den Sommermonaten läuft keine Saison. Karten, deren Zeitraum ganz in die Sommerpause fällt, weisen deshalb keine Saisonpunkte aus, sondern wie bisher nur XP. Was dort steht, stimmt also in jedem Fall.
- Bereits abgeschlossene Karten werden nachträglich gutgeschrieben — einmalig, beim ersten Aufruf nach diesem Update.
- In der Web-App ist der Bereich noch nicht zu sehen. Er erscheint zuerst in der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar) und erreicht die Testgeräte mit dem nächsten App-Build.
v0.10.4 · 2026-08-15¶
- Behoben: beendete Duelle wurden bei jedem Aufruf neu in die Datenbank geschrieben. Sichtbar war das nie — das Ergebnis blieb ja dasselbe. Ein Schutz dagegen war eingebaut, verglich aber zwei Texte, deren Reihenfolge die Datenbank selbst verändert, und griff deshalb nie. Am Ergebnis, an den Saisonpunkten und an den Benachrichtigungen ändert sich dadurch nichts.
- Neu: Es läuft nur noch ein Geisterduell gleichzeitig. Bisher galt allein die allgemeine Grenze von drei aktiven Duellen, sodass man drei Geisterduelle nebeneinander starten konnte. Ein beendetes oder abgebrochenes Geisterduell zählt ausdrücklich nicht mit — sobald das laufende endet, ist der Platz wieder frei.
- Sonst ändert sich in der Web-App nichts Sichtbares.
v0.10.3 · 2026-08-14¶
- Die Herausforderungen laden jetzt deutlich schneller. Der Bereich brauchte knapp drei Sekunden zum Öffnen — rund zehnmal so lang wie alle anderen Saison-Ansichten. Ursache war nicht eine langsame Abfrage, sondern hunderte kleine Nachfragen an die Datenbank, die nacheinander abgewartet wurden. Dreiviertel davon waren doppelte Arbeit: dieselbe Auskunft wurde bis zu 54-mal pro Aufruf geholt, und der Vorlagen-Katalog der Saison wurde bei jedem Seitenaufruf komplett neu geschrieben, obwohl er für alle Mitglieder gleich ist und sich höchstens einmal am Tag ändert.
- Und ein stiller Schreib-Sturm ist beendet. Bei jedem Aufruf wurden 17 Fortschrittswerte in die Datenbank geschrieben, auch wenn sich kein einziger geändert hatte. Ein Schutz dagegen war eingebaut, hat aber nie gegriffen: er verglich zwei Texte, deren Reihenfolge die Datenbank selbst verändert. Fortschritt wird jetzt nur noch geschrieben, wenn er sich wirklich geändert hat.
- Für dich ändert sich am Verhalten nichts — dieselben Herausforderungen, derselbe Fortschritt, taggenau wie bisher. Nur eben schneller.
v0.10.2 · 2026-08-14¶
- Behoben: „Bestes 40er" stand im Rekordbuch mit dem Zehnfachen. Statt 351 Ringen zeigte die Zeile 3.510. Die Ringsumme wird intern in Zehnteln geführt; an dieser einen Stelle fehlte die Umrechnung, während Bestserie und Bester Teiler daneben richtig standen. Die zugrundeliegenden Werte waren nie falsch, nur ihre Darstellung.
- Sonst ändert sich in der Web-App nichts Sichtbares.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): die Arena öffnet jetzt in Sekundenbruchteilen statt nach knapp drei Sekunden. Sie hatte auf vier Auskünfte gewartet, die sie gar nicht anzeigt — darunter die Liste aller Herausforderungen, mit Abstand die langsamste. Sie holt jetzt nur noch, was sie zeigt. Erreicht die Testgeräte erst mit dem nächsten App-Build.
v0.10.1 · 2026-08-14¶
- Behoben: die Saison-Fläche hat für einen Teil der Mitglieder gar nichts gezählt. Wochen- und Saison-Herausforderungen blieben bei null, es entstanden keine Saisonpunkte, die Sammlung und das Rekordbuch blieben leer, und in Duellen stand bei beiden Seiten 0. Ursache war eine stille Verwechslung im Programm: die Sportpass-Nummer, über die deine Trainings dir zugeordnet werden, wurde an einer Stelle nicht gelesen — obwohl sie vorlag. Als Ersatz blieb nur ein Abgleich über die E-Mail-Adresse, die in den Vereinsdaten der Schießanlage hinterlegt ist. Wo sie dort fehlt, war die Zuordnung nicht herstellbar, und die Auswertung las schlicht nichts.
- Warum das niemandem aufgefallen ist: der Ausfall sah aus wie ein Ergebnis. Statt einer Fehlermeldung stand überall eine Null — und eine Null ist von „noch nichts erreicht" nicht zu unterscheiden.
- Was das für dich bedeutet: Die Auswertung greift ab sofort wieder auf deine Trainingshistorie zu. Bereits vergebene Punkte und Auszeichnungen bleiben erhalten; rückwirkend werden keine Wochen nachgetragen, deren Zeitraum vorbei ist. Saison-Ziele, die aus der Historie rechnen (Saison-Treue, Bestleistungen), stimmen wieder.
- Behoben: die Bestenliste rechnete Trainings und Wettkämpfe zusammen. Bei einigen Auswertungen fiel die Einschränkung „nur Trainings" unbemerkt weg, sodass Wettkampf-Ergebnisse mitzählten. Hat ein Verein gar keine Starterliste als Training gekennzeichnet, wurde umgekehrt gar nichts gezählt — dort greift jetzt dieselbe Namenserkennung wie in der Bestenliste.
- Sonst ändert sich in der Web-App nichts Sichtbares.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): das Geisterduell entsteht nicht mehr ohne Grundlage. Wer noch keine gewertete Trainingsrunde hat, bekommt jetzt eine klare Auskunft, statt ein Duell gegen einen Zielwert von null zu starten, das jeder einzelne Schuss gewinnt. Duelle im Modus „Best of 3" werden nach dem gebuchten Ergebnis angezeigt statt bei jedem Aufruf neu gerechnet — Detailseite und Bilanz können damit nicht mehr auseinanderlaufen.
v0.10.0 · 2026-08-14¶
- Behoben: Saison- und Herausforderungs-Fristen standen einen Tag zu spät. Das Ende der Vorsaison wurde als „01.10." angezeigt, obwohl sie am 30. September endet — und dasselbe galt für jede Wochen- und Monatsfrist. Die Fenster enden um Mitternacht (UTC); in deutscher Zeit gelesen fiel dieser Zeitpunkt bereits auf den Folgetag. Die angezeigten Fristen stimmen jetzt mit den tatsächlichen überein; an den Fristen selbst hat sich nichts geändert.
- Behoben: Duell-Benachrichtigungen führten ins Leere. Wer eine Duell-Meldung angetippt hat, blieb stehen, wo er war — die Meldung trug eine vollständige Web-Adresse, und die Benachrichtigungsliste nimmt nur interne Ziele an. Neue Meldungen führen wieder auf das Duell.
- Sonst ändert sich in der Web-App nichts Sichtbares. Kein neuer Bereich, keine geänderten Werte.
- Unter der Oberfläche: eine neue Auskunft über die persönliche Duell-Bilanz (Siege, Niederlagen, Serie, Bilanz je Gegner). Sie führt bewusst keine Ringzahlen, nur Ausgänge und Namen. Genutzt wird sie vorerst nur von der App.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): die Arena ist ein eigener Ort geworden — Duelle anlegen, annehmen und ablehnen, laufende und beendete Duelle, dazu die neue Bilanz unter allem. Neu außerdem die Bestenliste des Vereins als Unterseite des Dashboards, mit Rang-Kachel auf der Startseite: vier Wertungen (Gesamtringe, Ø je Schuss, Bester Teiler, Meiste Trainings) je Disziplin, Zeitraum und Kategorie. Geisterduelle zählen bewusst nicht in die Gesamtbilanz, sondern stehen für sich. Erreicht die Testgeräte erst mit dem nächsten App-Build.
v0.9.10 · 2026-08-13¶
- Neu: Season 0 — die Vorsaison läuft. Der Saison-Pass startet in eine Testsaison: Season 0 läuft rückwirkend ab dem 1. August bis zum 30. September, die reguläre Season 1 beginnt am 1. Oktober und läuft bis zum 30. April. In der Vorsaison wird der komplette Pass einmal im Echtbetrieb durchgespielt — Wochen-Herausforderungen, Saisonpunkte, Rangliste, Auszeichnungen.
- Die Saison-Ziele passen sich der Saisonlänge an. „In 12 Wochen trainiert" wäre in einer neunwöchigen Vorsaison von Anfang an unerreichbar gewesen — in Season 0 gilt: Treue ab 4 Wochen, Gold ab 6. Volle Sportjahre bleiben bei den gewohnten Zielen, und der Teiler-Anspruch bleibt unverändert: Klasse skaliert nicht.
- Was rückwirkend zählt: Saison-Treue und Bestserien rechnen aus deiner Trainingshistorie und zählen ab dem 1. August. Die Wochen-Punkte gibt es je laufender Woche — ab jetzt, nicht für vergangene Wochen.
- In der Web-App ändert sich sonst nichts Sichtbares. Die Saison-Flächen (Challenges, Rangliste) zeigen ab sofort Season 0 statt der Sommerpause.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): der bisher leere Pro-Tab ist jetzt die Saison-Fläche — Saison-Pass mit Stufen und Medaillen-Meilensteinen, Herausforderungen der Woche, Duelle, Saison-Rangliste und verdienbare Auszeichnungen mit eigenem Artwork. Dazu behoben: der bezahlte Bereich wurde in der App auch zahlenden Konten nie angezeigt (der Plan kam nur aus dem Anmelde-Token, das ihn nie trägt — jetzt zählt der Server-Stand). Erreicht die Testgeräte erst mit dem nächsten App-Build; die Season-0-Daten sind ab sofort live.
v0.9.9 · 2026-08-12¶
- Behoben: die Standaufsicht blieb bei einer Person hängen. Der Plan verteilt die Schichten reihum über alle Standaufsichten. Beim Weiterrücken des Plans bekam die jeweils neu hinzukommende Woche jedoch immer dieselbe Person — sichtbar wurde das erst, seit der Plan ein ganzes Jahr im Voraus reicht. Ab jetzt läuft die Reihe sauber weiter: die nächste freie Schicht bekommt, wer nach der zuletzt eingeteilten Person an der Reihe ist.
- Neu: die Standaufsicht ist eine gepflegte Liste statt eines Häkchens je Mitglied. Bisher konnte nur eingeteilt werden, wer bereits ein Konto hat — am Schwarzen Brett stehen aber auch Mitglieder, die noch nicht eingeladen sind. Sie können jetzt in der Liste stehen und erscheinen mit ihrem Namen im Plan. Die Reihenfolge der Liste ist die Rotation, sie lässt sich also so führen, wie der Verein es gewohnt ist.
- Und das Beste daran: die Einträge verknüpfen sich von selbst. Ein Eintrag merkt sich die Sportpass-Nummer. Wird die Person später eingeladen und meldet sich zum ersten Mal an, zeigt derselbe Eintrag auf ihr Konto — „deine nächste Schicht", Tauschanfragen und Benachrichtigungen beginnen zu wirken, ohne dass jemand die Liste anfassen muss. Tauschen kann weiterhin nur, wer ein Konto hat: eine Anfrage braucht jemanden, der antworten kann.
- Bestehende Einteilungen bleiben erhalten. Wer bisher als Standaufsicht markiert war, steht automatisch in der neuen Liste, in derselben Reihenfolge wie vorher — der Plan sieht nach dem Update aus wie davor.
- Sonst ändert sich für dich nichts Sichtbares. Die Web-App ist gegenüber v0.9.8 inhaltlich unverändert.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): der Sessions-Bereich öffnet wieder mit „Alle" statt mit dem Bereich der zuletzt geschossenen Session — wer einmal ein Preisschießen hatte, fand ihn sonst wochenlang darauf eingestellt vor und sah seine Trainings nicht. Erreicht die Testgeräte erst mit dem nächsten App-Build.
v0.9.8 · 2026-08-12¶
- Behoben: Termine aus einem Vereinskalender kamen nirgends an. Wer im Vereinsbereich eine Kalender-Adresse hinterlegt und abgeglichen hat, bekam gemeldet, dass Termine übernommen wurden — zu sehen waren sie trotzdem nirgends. Zwei Ursachen: die importierten Termine wurden keinem Verein zugeordnet, und jede Ansicht filtert nach Verein; außerdem sah der automatische Abgleich nur in einer veralteten, vereinsübergreifenden Einstellung nach und hat einen im Verein eingetragenen Kalender nie angefasst. Beides ist behoben. Bereits importierte Termine werden beim nächsten Abgleich übernommen, nicht verdoppelt.
- Sonst ändert sich für dich nichts Sichtbares. Die Web-App ist mit dieser Version inhaltlich unverändert — kein neuer Bereich, keine geänderten Werte, keine andere Darstellung. Wenn dir etwas anders vorkommt, liegt es nicht an diesem Release.
- Unter der Oberfläche: Mitglieder dürfen jetzt den Standaufsichtsplan ihres Vereins lesen — er hängt ohnehin im Schützenhaus aus, und bisher kam nicht einmal die eigene Einteilung durch. Der Plan reicht jetzt ein Jahr voraus statt acht Wochen. Dazu eine schmale neue Auskunft über Vereinsname, Vereinslogo und die eigene Mannschaft, die bisher nur Vorstand und Trainer abrufen konnten.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): der Verein-Tab ist neu aufgebaut — Termine, Standaufsicht mit Tauschanfrage und die eigene Mannschaft; die Vereinseinstellungen sind hinzugekommen, inklusive Starterlisten-Zuordnung und Preisschießen-Wertung; Session-Ansicht und Session-Auswahl wurden überarbeitet. All das erreicht die Testgeräte erst mit dem nächsten App-Build, nicht mit diesem Release.
v0.9.7 · 2026-08-10¶
- Neu: eine Erinnerung, wenn deine Woche noch offen ist. Hast du in der laufenden Woche noch nichts geschossen, meldet sich TargetShot einmal mit „Diese Woche noch nichts geschossen" — ohne Zahlen und ohne Vergleich, weil so eine Nachricht auf dem Sperrbildschirm liegt und jeder sie sehen kann, der aufs Display schaut. Sie kommt nur, wenn du sonst auch trainierst: wer längere Zeit gar nicht geschossen hat, wird nicht angestupst. Ohne erteilte Freigabe deiner Schießdaten kommt sie ebenfalls nicht, und mehr als einmal pro Woche kommt sie nie.
- Neu: ein neuer Bestwert wird als solcher angekündigt. Übertrifft eine ausgewertete Session dein bisher bestes Ergebnis, steht über der Auswertungs-Meldung „Neuer Bestwert" statt „Training ausgewertet". Es ist keine zweite Nachricht — es bleibt bei einer Meldung je Session, sie heißt nur anders. Beim Preisschießen bleibt es bewusst bei der gewohnten Überschrift, weil dort auch die Ringzahl nicht genannt wird.
- Beide neuen Meldungen gehören zur Benachrichtigungs-Art „Trainings-Auswertung" und lassen sich zusammen mit ihr abschalten. Ein eigener Schalter nur für die Wochen-Erinnerung oder nur für den Bestwert-Hinweis existiert nicht.
- Behoben: Duell- und Standaufsichts-Meldungen haben deinen Push-Schalter übergangen. Wer Push in den Einstellungen ausgeschaltet hatte, bekam diese beiden trotzdem aufs Gerät, obwohl daneben stand, dass die Einstellung kontoweit gilt. Ab jetzt hält sich jede Benachrichtigung an den Schalter.
- Aus einem Schalter werden mehrere Arten — Trainings-Auswertung, Wettkämpfe & Termine, Duelle, Aus dem Verein, Konto & Abo. Für dich ändert sich damit zunächst nichts: alle Arten stehen auf „an", und wer bisher Push aktiviert hatte, bekommt genau dieselben Meldungen wie vorher. Neu ist nur, dass du einzelne Arten abbestellen kannst, statt nur alles oder nichts zu haben.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): Android führt diese Arten als eigene Einträge in den Systemeinstellungen, sodass sich Ton und Wichtigkeit je Art getrennt einstellen lassen.
- Unter der Oberfläche, ohne sichtbare Wirkung: Alle Benachrichtigungen laufen jetzt durch eine einzige gemeinsame Stelle — vorher lag dieser Weg viermal im Code, und zwei dieser vier Kopien waren es, die den Push-Schalter übergingen. Dazu drei Absicherungen im Bauprozess, die Fehler künftig vor der Auslieferung sichtbar machen statt danach.
v0.9.6 · 2026-08-10¶
- Für dich ändert sich mit dieser Version nichts Sichtbares — keine neue Funktion, keine geänderten Werte, keine andere Darstellung. Wenn dir etwas anders vorkommt, liegt es nicht an diesem Release.
- Unter der Oberfläche: Die Live-Anzeige aus der letzten Version fragt beim Schießen im Sekundentakt nach. Bei jeder dieser Anfragen hat der Server bisher auch dann in die Datenbank geschrieben, wenn sich an deinen Kontodaten gar nichts geändert hatte — das geschieht jetzt nur noch bei einer echten Änderung. Deine Daten bleiben dabei genauso aktuell wie vorher: ändert sich dein Name, deine E-Mail-Adresse oder deine Sportpass-Nummer, wird das wie bisher sofort übernommen. Dazu eine Abfrage weniger, die versehentlich doppelt gestellt wurde, und ein zusätzlicher Datenbank-Index, der erst bei deutlich mehr Mitgliedern greift.
v0.9.5 · 2026-08-10¶
- Dein Dashboard zählt jetzt live mit, während du schießt. Sobald an der Anlage Treffer ankommen, erscheint ganz oben ein Bereich „Läuft gerade": die Zahl deiner Schüsse, die Ringe und dein bester Teiler, und jeder neue Schuss erscheint innerhalb weniger Sekunden. Lässt die Disziplin erkennen, wie viele Schüsse vorgesehen sind, steht dort „27 von 40" — sonst nur die Trefferzahl, weil eine geratene Zahl schlechter wäre als keine.
- Außerhalb des Schießens ändert sich nichts. Läuft gerade nichts, ist der Bereich gar nicht da — kein leerer Kasten, kein Hinweis. Und kommt eine Weile kein Treffer mehr an, verschwindet er von selbst wieder; er wartet nicht darauf, dass eine Schusszahl erreicht wird.
- Unter der Oberfläche, ohne sichtbare Wirkung: Die Abfrage für die Live-Ansicht passt ihr Tempo an. Während geschossen wird, fragt sie im Sekundentakt; liegt das Dashboard nur offen herum, geht sie schrittweise auf bis zu 30 Minuten zurück und ist sofort wieder schnell, sobald du hinsiehst oder ein Schuss ankommt. Dazu eine Aufteilung der Bauprüfung, die nur die Entwicklung betrifft.
v0.9.4 · 2026-08-10¶
- Zurückgezogene Trainings zählen nirgends mehr mit — und deine Werte können dadurch sinken. Wird ein Blatt an der Anlage nachträglich zurückgezogen, blieb es in deinem Dashboard bisher enthalten: in der Trainingsliste, im Durchschnitt, im Trend und bei den Bestwerten. Ab jetzt wird es überall ausgeblendet, zusammen mit vier weiteren Flächen, die es ebenfalls noch mitgezählt haben (Wettkampfhistorie, Berichte, Vereinsauswahl und die Punkte des Saison-Passes). Wenn ein Bestwert, ein Durchschnitt oder ein „letztes Training" bei dir anders aussieht als vorher, ist das der Grund. Der neue Wert ist der richtige — der alte enthielt Ergebnisse, die es offiziell nicht mehr gibt.
- Blendet ein Filter alle Trainings aus, sagt das Dashboard das jetzt auch im Web. Bisher stand dort „Keine Trainings gefunden" — derselbe Satz wie für ein Konto, das noch nie geschossen hat. Jetzt steht da, welche Einstellung gerade schneidet: die Kategorie oder die Disziplin. In der App war das bereits so.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): Beim Wechsel des Kontos können die Dashboard-Einstellungen des vorherigen Kontos nicht mehr ins neue geraten.
- Unter der Oberfläche, ohne sichtbare Wirkung: Die Live-Ansicht aus dem letzten Release stützt sich jetzt ausschließlich auf die im Anmeldekonto hinterlegte Sportpass-Nummer, damit eine gemeinsam genutzte E-Mail-Adresse — etwa eine Familienadresse — niemals fremde Trainings in die eigene Ansicht zieht. Dazu ein zusätzlicher Datenbank-Index für die Live-Abfrage.
v0.9.3 · 2026-08-09¶
- Zurückgezogene Scheiben zählen im Preisschießen nicht mehr mit. Wurde eine Scheibe nachträglich aus den Vereinsdaten entfernt, ging sie in Teilnehmerzahl und Rangliste eines Preisschießens weiterhin ein. Das ist behoben — Platzierungen und Teilnehmerzahlen können sich dadurch ändern. Es ist die Korrektur, kann für Teilnehmende aber wie ein neuer Fehler aussehen.
- Vorarbeit für die Live-Ansicht: Das Backend kann jetzt beantworten, welche der eigenen Sessions gerade läuft — mit Schusszahl und Ergebnis, aber bewusst ohne die einzelnen Treffer, damit eine Fläche das später im Sekundentakt abfragen darf, ohne die Anlage oder die Datenbank zu belasten. An dieser Stelle ändert sich für dich noch nichts; die sichtbare Anzeige folgt in einem späteren Release.
v0.9.2 · 2026-08-07¶
- Du kannst dein Dashboard jetzt nach Disziplin filtern. In den Einstellungen unter „Dashboard" lässt sich Luftgewehr, Luftpistole und alles Übrige einzeln ein- und ausblenden. Unter jedem Schalter stehen die Disziplinen, die du tatsächlich geschossen hast, damit erkennbar bleibt, was er ausblendet. Wer nur eine Disziplinart schießt, bekommt den Filter gar nicht erst zu sehen — ein Schalter ohne Wirkung hilft niemandem. Die Einstellung gilt für Web und App gemeinsam und wirkt nur im Dashboard; die Kategorie-Seiten zeigen weiterhin alles.
- Blendet ein Filter alles aus, sagt das Dashboard jetzt, welcher. Bisher verwies der Hinweis immer auf die Kategorien, auch wenn der neue Disziplin-Filter geschnitten hatte — wer dann in die Einstellungen ging, fand dort alle Kategorien aktiv und suchte vergeblich.
- In der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): Eine angetippte Benachrichtigung führt nur noch zu Seiten, die es in der App auch gibt, statt ins Leere zu laufen. Schalter mit Erklärzeile werden Screenreadern jetzt vollständig vorgelesen.
v0.9.1 · 2026-08-05¶
- Du kannst dein Konto jetzt selbst löschen. Im Profil unter „Konto löschen": Der Zugang wird sofort gesperrt, endgültig entfernt werden Konto und Daten nach 30 Tagen — das genaue Datum steht auf der Bestätigungsseite und in der E-Mail, die du bekommst. Innerhalb dieser Frist nimmst du die Löschung über den Link in dieser E-Mail wieder zurück. Ein laufendes Pro-Abo wird dabei gekündigt.
- Eine Benachrichtigung führt dich direkt zum Training. Ein Klick auf „Training ausgewertet" öffnet jetzt die Auswertung — in der Web-App, aus der Push-Nachricht heraus und in der TargetShot-App.
- Push-Meldungen nennen das Ergebnis. Die Überschrift sagt, um welche Kategorie es geht, der Text nennt Schusszahl und Ergebnis in ganzen Ringen. Bisher stand dort nur, dass etwas ausgewertet wurde.
- Gelöschte Treffer verfälschen die Trainerflächen nicht mehr. Wurden Treffer nachträglich aus einer Session entfernt, zählten sie in den Vereins- und Jugendflächen weiter in Summen und Durchschnitte hinein. Das ist behoben.
- Sicherere Zuordnung zwischen Anmeldekonto und Profil: Eine Verknüpfung entsteht nur noch, wenn sie sich über die hinterlegte E-Mail belegen lässt. Bleibt die Zuordnung unklar, wird ein Löschantrag mit einer verständlichen Meldung abgelehnt und an den Support verwiesen, statt möglicherweise das falsche Konto zu treffen.
- Vorbereitung der TargetShot-App (geschlossene Testphase, in keinem Store verfügbar): Serien erscheinen als Raster, „Bester Teiler" steht auch im Session-Detail, und Dashboard-Kategorien sowie ein persönlicher Vereinsfilter lassen sich in den Einstellungen setzen. Behoben: unvollständig angezeigte Serien in der Übersicht, ein nicht übertragener Lesestatus bei Benachrichtigungen, und Einstellungen, die still überschrieben werden konnten.
v0.9.0 · 2026-08-04¶
- Vorbereitung der Android-App: Der Versand von Benachrichtigungen kann jetzt auch Android-Geräte erreichen. Die App selbst ist noch in Arbeit und in keinem Store verfügbar — an der Web-Anwendung ändert sich mit diesem Release nichts.
- Interne Härtung der Benachrichtigungs-Zustellung: Ein Gerät wird nur noch dann abgemeldet, wenn der Push-Dienst es ausdrücklich als ungültig meldet. Eine Störung beim Dienst oder ein Fehler auf unserer Seite kostet damit keine Zustellungen mehr.
v0.8.0 · 2026-08-03¶
- Benachrichtigung, wenn dein Training ausgewertet ist. Sobald eine Session vollständig eingelesen ist, erscheint sie in deinen Benachrichtigungen — mit Disziplin und Schusszahl, und ein Klick führt direkt zur Auswertung. Als Push kommt sie nur, wenn du Push in den Einstellungen eingeschaltet hast. Ohne erteilte Freigabe deiner Schießdaten wird nichts verschickt, und ältere Sessions aus einem Datenabgleich lösen nachträglich keine Meldungen aus.
- Die Seitenleiste verdichtet sich bei niedrigem Fenster, statt unten abgeschnitten zu werden. Auf flachen Bildschirmen und in geteilten Fenstern bleiben damit alle Einträge erreichbar.
- Vorbereitung für die TargetShot-App: Push-Benachrichtigungen gehen jetzt auch an iPhones. Die App befindet sich in geschlossener Testphase.
v0.7.2 · 2026-08-03¶
- Push-Benachrichtigungen funktionieren. Erinnerungen an Termine, Duell-Ergebnisse und Standaufsichts-Hinweise kommen jetzt wirklich auf dem Gerät an — bisher wurde nichts verschickt. Aktivieren geht in den Einstellungen unter Benachrichtigungen; dein Browser fragt dabei einmal nach Erlaubnis.
- Benachrichtigungs-Einstellungen lassen sich wieder ändern. E-Mail an/aus, Event-Mails, Einladungen, Push, Push-Ton und die E-Mail-Kategorien sprangen nach dem Speichern auf den alten Wert zurück. Das ist behoben.
- Abgelaufene Push-Anmeldungen (deinstallierter Browser, entzogene Erlaubnis) werden automatisch entfernt, statt bei jeder Benachrichtigung erneut angefragt zu werden.
v0.7.1 · 2026-08-03¶
- Verträge kündigen — ohne Anmeldung. Unter „Verträge hier kündigen" (im Footer, auf der Anmeldeseite und auf targetshot.app) kündigst du dein Pro-Abo direkt, auch wenn du gerade nicht an dein Konto kommst. Du erhältst sofort eine Eingangsbestätigung per E-Mail mit Datum, Uhrzeit und dem Enddatum deines Vertrags, und kannst die Erklärung zum Aufheben herunterladen.
- Kündigung mit einem Klick zurücknehmen. War die Kündigung ein Versehen oder nicht von dir, nimmst du sie über einen Link direkt aus dieser E-Mail zurück — 30 Tage lang, einmalig. Danach bestätigen wir dir die Rücknahme und nennen dir die nächste Abrechnung.
- Bestellbestätigung per E-Mail. Nach dem Abschluss von Pro bekommst du eine Bestätigung mit allen Vertragsangaben im TargetShot-Design.
- Laufzeit immer sichtbar. Auf der Preisseite und im Profil steht jetzt, bis wann dein Abo läuft und wann die nächste Abrechnung ansteht — und bei gekündigtem Abo, wann es endet.
- Behoben: „Kündigung rückgängig machen" schlug fehl. Behoben: die Free-Karte zeigte einen Kündigen-Knopf. Behoben: Umlaute in Bestätigungsmails wurden falsch dargestellt.
- Interne Härtung der Kündigungsstrecke und der E-Mail-Zustellung.
v0.7.0 · 2026-07-24¶
- TargetShot Pro ist da: das persönliche Abo für 5,99 € im Monat oder 59 € im Jahr, direkt in der App abschließbar. Die Zahlung läuft sicher über Stripe, ohne die App zu verlassen; verwalten, wechseln und kündigen kannst du dein Abo jederzeit selbst.
- Statistiken (Pro): neu aufgebaut mit direktem A×B-Vergleich zweier Zeiträume, Trefferbild-Vergleich und einer Tiefe-Schublade für die Details. Vergleichswerte aus dem Verein erscheinen nur, wenn genügend Schützen dahinterstehen — niemand ist einzeln herauslesbar.
- Berichte (Pro): schlankere Seite, PDF-Berichte in der TargetShot-Designlinie mit Logo. Geplante Berichte berücksichtigen die Einwilligungen aller enthaltenen Schützen; fehlt eine, werden die betroffenen Daten nicht versendet.
- Bestenliste (Pro): fair neu entworfen — getrennte Ranglisten je Disziplin (Luftgewehr/Luftpistole) und Wertung im Schnitt je Schuss, damit unterschiedlich lange Serien vergleichbar bleiben. Die eigene Position ist immer sichtbar.
- Herausforderungen (Pro): kompletter Neubau als Saison-Pass über das Sportjahr — wöchentliche, monatliche und saisonale Aufgaben mit klarer Anzeige, was gerade läuft und was noch offen ist, dazu Sammlung und Rekordbuch. Duelle gibt es in vier Varianten: direkt, nach Teiler, gegen die eigene Bestleistung (Geisterduell) und als Best-of-3 über drei Runden. Duelle werden nur ausgewertet, wenn beide Seiten eingewilligt haben.
- Preise: die Preisseite wurde auf das neue Design umgestellt und auf das reduziert, was für einzelne Schützen zählt.
v0.6.1 · 2026-07-20¶
- Mobile-Feinschliff auf dem Handy: Die Filter-Leiste der Kategorie-Seiten bricht sauber um, Serien werden mit ihrer Nummer beschriftet (S1 · S2 · S3 · S4), Diagramm-Beschriftungen bleiben auf schmalen Bildschirmen lesbar, die Preisschießen-Rangliste stapelt sich als Karten, und Bedienelemente halten die Mindestgröße für Touch ein.
- Standaufsichtsplanung: Die Von/Bis-Zeitfelder liefen auf dem iPhone über den Kartenrand hinaus — jetzt behoben.
- Persönliches Dashboard: Die in den Einstellungen gewählten sichtbaren Kategorien werden schon beim ersten Laden berücksichtigt (vorher konnte kurz eine ausgeblendete Kategorie erscheinen, bis die Einstellungen einmal geöffnet wurden).
- General: Version bump to v0.6.1 for backend and web app.
v0.6.0 · 2026-07-19¶
- Persönliches Dashboard neu geschnitten: Das Ergebnis-Band des letzten Trainings führt die Seite an (Ganzringe vor Zehntelwertung), darunter „Als Nächstes" (laufende Preisschießen mit Endtermin; allgemeine Vereinstermine neutral), ein ehrlicher Leistungs-Trend mit sauber benanntem Zeitfenster und die Bestwerte als eine kompakte Fläche.
- Training, Wettkampf und Preisschießen teilen jetzt ein gemeinsames Seiten-Gerüst: Ergebnis-Band, Bestwerte-Zeile, Saison-Verlauf und ein nach Monaten gruppierter Verlauf. Preisschießen zeigt laufende Veranstaltungen mit Endtermin-Countdown und eigener Platzierung, die Historie nach Jahren.
- Vereinsübersicht und Schützen-Profile sind statistik-getrieben neu gebaut (Kennzahlen-Band, Verteilung mit Statistik-Box, sortierbare Tabelle; Einzel-Ansicht mit Auffälligkeiten und Serien-Profil); der Jugend-Bereich nutzt dieselbe Struktur.
- Die Session-Detailseite ist eine schlichte Schützen-Sicht: Ergebnis, Dauer, Serien, bester Teiler und der Umschalter Probe / Serie 1–4 / alle Wertungsschüsse.
- Jugend-Onboarding: informierte Elterneinwilligung mit klarem Einwilligungsumfang und Status-Prüfung; der Eltern-Kontakt kann direkt beim Einladen hinterlegt werden, die Mitgliederliste zeigt den Freigabe-Status.
- Kategorie-Darstellung vereinheitlicht: ein Badge-System mit einheitlichen Begriffen app-weit; Wettkampf erscheint nicht mehr in einer Warnfarbe.
- Korrektheit: Ring-Skala-Fehler in mehreren Serien-Fallbacks behoben (Werte waren teils um den Faktor 10 zu hoch), „Beste Serie" zählt keine Probeschüsse mehr, und Trend-Zeiträume werden nur noch ausgewiesen, wenn die geladenen Daten sie wirklich abdecken.
- Zuverlässigkeit: Der Daten-Ingest überwacht seinen Kafka-Consumer jetzt selbst und startet sich bei Hängern automatisch neu; ein täglicher Health-Check meldet Auffälligkeiten.
- General: Version bump to v0.6.0 for backend and web app. Releases werden ab jetzt automatisch getaggt (Version-Wächter in der Prod-Pipeline + GitHub-Release mit generierten Notes). Die Zwischenstände v0.5.0/v0.5.1 (Mai 2026) wurden ohne Protokolleintrag ausgeliefert.
v0.4.33 · 2026-04-15¶
- Health Contract: Die Hauptplattform stellt den Ingest-Status jetzt als eigenen leichten Endpoint unter
/healthz/ingestbereit, statt ihn nur im vollen aggregierten/healthzzu verstecken. - Ops Reliability: Admin-Portal und Connector-Ops ziehen fuer Ingest-Diagnose und Runbook-Pruefung jetzt den dedizierten Endpoint, sodass langsame Gesamt-Checks nicht mehr faelschlich wie ein Ingest-Ausfall aussehen.
- Diagnostics UX: Timeout-Faelle werden im Backoffice weiterhin sauber als
unknownstatt als harter Ausfall dargestellt, aber der Normalfall liefert jetzt wieder den echten Live-Worker-Zustand. - General: Version bump to v0.4.33 for backend and web app.
v0.4.32 · 2026-04-15¶
- Ingest-Sicherheitsvertrag: Normalisierte Topics verlangen jetzt einen konsistenten expliziten Herkunftsvertrag aus
source_topicundsource_club_id; Konflikte zwischen Payload, Headern und Topic-Scope werden explizit als Contract-Rejects abgelehnt. - Ingest-Ops: Der Worker fuehrt jetzt Reject-, Burst-, Quarantaene- und Recovery-Zustaende mit, sodass Source-Drift von echtem Worker-Ausfall getrennt sichtbar bleibt und spaetere akzeptierte Events einen Incident wieder sauber auf
recoveredsetzen koennen. - Test & Runbook: Neue Backend-Tests decken Reject-/Quarantaene-Pfade ab, und das Ingest-Runbook dokumentiert Incident-Matrix, Reprocessing-Reihenfolge und Rollback fuer Source-Drift-Faelle.
- General: Version bump to v0.4.32 for backend and web app.
v0.4.31 · 2026-04-15¶
- Release Gate: Staging fuehrt vor dem eigentlichen Image-Build und Deploy jetzt einen expliziten
release-preflightaus, der Runtime-Pflichtwerte, URL-Vertrag, CORS, Keycloak-Basis-URLs, Audience-Trennung, Upload-Storage und Mail-Sender fail-closed prueft. - Deploy Ops: Der Staging-Workflow legt den Preflight-Bericht als eigenes Artefakt ab und blockiert den eigentlichen Deploy frueh, wenn Auth-, App- oder Storage-Konfiguration nicht zum erwarteten Betriebsvertrag passt.
- Docs & Planning: Web-Release-Runbook, Deploy-Doku, Production-Readiness-Checklist und Sprint-Stand fuehren den neuen Gate-Vertrag jetzt explizit mit.
- General: Version bump to v0.4.31 for backend and web app.
v0.4.30 · 2026-04-14¶
- Schießdaten-Freigaben sind jetzt als eigener Produktpfad mit Selbstfreigabe, Widerruf, Elternfreigabe-Flow und fail-closed Sichtbarkeitsregeln im Backend und Web verankert.
- Vereinsübersicht, Jugendpfade und Reports liefern ohne gültige Freigabe jetzt bewusst keine personenbezogenen Schießdaten mehr aus; das Profil zeigt den Freigabestatus und verwaltet den Zugang separat.
- Geburtstage aus der Spiegelstrecke werden als Debezium-
DATEkorrekt aus Epoch-Days gelesen, inklusive Replay-/Backfill-Pfad für bestehende Vereinsdaten und Profilanzeige. - General: Version bump to v0.4.30 for backend and web app.
v0.4.29 · 2026-04-09¶
- Das Jugend-Dashboard ist serverseitig an denselben Club- und Rollen-Scope wie die übrigen Vereins- und Report-Pfade gebunden; Frontend-only-Zugriffe reichen dafür nicht mehr aus.
- Regression-Tests decken jetzt explizit die erlaubten und verbotenen Rollenpfade für
/api/youth/dashboardab. - General: Version bump to v0.4.29 for backend and web app.
v0.4.27 · 2026-04-03¶
- Vereinsreports fuer Trainer und Jugendtrainer sind als eigene Club-Flaeche auf einem gemeinsamen serverseitigen Managed-Report-Vertrag ausgeliefert, inklusive PDF-Export.
- Die Vereinsreports zeigen jetzt nur noch Schuetzinnen und Schuetzen mit aktiver
ClubMember-Zuordnung des gewaehlten Vereins; alte ScoreSheet-Daten allein reichen nicht mehr aus. - Die Web-Hotpaths in
Dashboard,StatisticsundSettingswurden weiter entkoppelt, damit nachfolgende Feature-Bloecke nicht direkt wieder in die groessten Dateien kippen.
v0.4.26 · 2026-04-03¶
sportpassIdist jetzt die kanonische Personenidentitaet im Backend; alte Keycloak-sub-Werte werden als Alias gemappt, damit Rollen und persoenliche Daten bei Legacy- oder Duplikat-Accounts nicht mehr auseinanderlaufen.- Der persoenliche Vereinsfilter ist serverseitig in den Einstellungen verankert und unterstuetzt Mehrfachauswahl gezielt fuer persoenliches Archiv, Reports und Statistik.
- FAQ und Aenderungsprotokoll liegen jetzt oeffentlich in den Docs; die Feedback-Webflaeche ist entfernt und die Konto-Navigation in der Sidebar kompakter gebuendelt.
BestenlisteundPreisschiessenbleiben bewusst auf ihren konservativen Produktzuschnitten, waehrend der persoenliche Filter und das Event-Scoping technisch gehaertet wurden.
v0.4.25 · 2026-04-03¶
- Multi-Club-Auth und Rollen-Gating folgen jetzt dem aktiven Verein plus
ClubMember.rolestatt den alten Keycloak-Club-Rollen. - Mitglieder- und Identitätslogik wurden für Multi-Club-Fälle bereinigt, inklusive klarerer Profil- und Vereinszuordnung.
- Plattform-Admin-Flächen wurden deutlicher von club-spezifischen Verwaltungswegen getrennt.
- Laufzeit-, Billing- und Routen-Härtung wurden für den produktionsnahen Backend-Pfad erweitert.
Weitere Historie¶
- Frühere Release-Einträge werden schrittweise aus dem bisherigen Web-Änderungsprotokoll hierher überführt.
- Für technische Artefakte und Tags siehe auch die GitHub Releases.