Der Meilenstein M9: der Einstieg über den Aufkleber.
Was drin ist
/t/<tagCode> als Weiche — registriertes Gerät → Geräteseite, vorgedruckter Tag → Registrierformular, unbekannter Code → Hinweis mit Weg zur Suche. Groß/klein wird gefaltet (ein Handy schreibt klein), verwechselbare Zeichen nicht.
Geräteseite mit Kopf, „Zugewiesen“, Schnellstart aus den Gerätetyp-Vorgaben, „Vorlage zuweisen“ und Historie — am Handy bedienbar, weil sie dort benutzt wird.
QR und Etiketten: Stapel vorgedruckter Tags, Einzeletikett 62 × 29 mm und A4-Bogen 3 × 8. Im QR steht ausschließlich {APP_URL}/t/{tagCode}.
Scanner mit der BarcodeDetector-API des Browsers, wo es sie gibt, sonst WebAssembly aus dem eigenen Haus — und immer einem Feld für den abgetippten Code.
Gemessen, nicht behauptet
Die Seitengröße stammt aus einem echten PDF (62 × 29 mm bzw. A4), und ein bei 300 dpi gerastertes Etikett wird mit demselben Decoder zurückgelesen, den auch der Scanner benutzt. Ein anderer Leser hätte etwas anderes bewiesen als „unsere Kamera erkennt das“.
Drei Defekte, die erst der gebaute Stand zeigte
Alle drei an den Nähten zwischen den parallel gebauten Teilen: „Starten“ setzte IN_ARBEIT und sprang nicht in den Lauf; „Vorlage zuweisen“ bot Vorlagen an, die der Dienst danach ablehnte; die Geräteliste verlinkte nichts.
Der unabhängige Review: drei Blocker
Der Scanner benutzte nie die native API — die Ponyfill-Fassung gibt immer ihre eigene Klasse zurück, jedes Gerät holte 1,1 MB WebAssembly.
Ein ausgefallener Decoder blieb unsichtbar — dreimal je Sekunde ein Fehler, auf dem Bildschirm unverändert „Halte den Aufkleber ins Bild“.
Die Dokumentation war nur zur Hälfte mitgezogen.
Dazu elf Befunde, darunter: ein Unterpfad in APP_URL fiel aus dem gedruckten QR heraus (auf Papier nicht mehr zu berichtigen), ohne APP_URL druckte jedes Etikett stillschweigend localhost, und der Stapeldruck war die offene Hintertür zu einer Seite mit Schloss. Alle abgearbeitet.
Prüfstand
pnpm lint, typecheck, format:pruefen, pruefe:doku grün · 930 Tests (vorher 879) · 54 Ende-zu-Ende-Tests gegen den gebauten Stand · Screenshots in docs/screenshots/m9/.
Der Meilenstein M9: der Einstieg über den Aufkleber.
## Was drin ist
- **`/t/<tagCode>`** als Weiche — registriertes Gerät → Geräteseite, vorgedruckter Tag → Registrierformular, unbekannter Code → Hinweis mit Weg zur Suche. Groß/klein wird gefaltet (ein Handy schreibt klein), verwechselbare Zeichen nicht.
- **Geräteseite** mit Kopf, „Zugewiesen“, Schnellstart aus den Gerätetyp-Vorgaben, „Vorlage zuweisen“ und Historie — am Handy bedienbar, weil sie dort benutzt wird.
- **QR und Etiketten**: Stapel vorgedruckter Tags, Einzeletikett 62 × 29 mm und A4-Bogen 3 × 8. Im QR steht ausschließlich `{APP_URL}/t/{tagCode}`.
- **Scanner** mit der BarcodeDetector-API des Browsers, wo es sie gibt, sonst WebAssembly aus dem eigenen Haus — und immer einem Feld für den abgetippten Code.
## Gemessen, nicht behauptet
Die Seitengröße stammt aus einem echten PDF (62 × 29 mm bzw. A4), und ein bei 300 dpi gerastertes Etikett wird mit **demselben** Decoder zurückgelesen, den auch der Scanner benutzt. Ein anderer Leser hätte etwas anderes bewiesen als „unsere Kamera erkennt das“.
## Drei Defekte, die erst der gebaute Stand zeigte
Alle drei an den Nähten zwischen den parallel gebauten Teilen: „Starten“ setzte `IN_ARBEIT` und sprang nicht in den Lauf; „Vorlage zuweisen“ bot Vorlagen an, die der Dienst danach ablehnte; die Geräteliste verlinkte nichts.
## Der unabhängige Review: drei Blocker
1. **Der Scanner benutzte nie die native API** — die Ponyfill-Fassung gibt immer ihre eigene Klasse zurück, jedes Gerät holte 1,1 MB WebAssembly.
2. **Ein ausgefallener Decoder blieb unsichtbar** — dreimal je Sekunde ein Fehler, auf dem Bildschirm unverändert „Halte den Aufkleber ins Bild“.
3. **Die Dokumentation war nur zur Hälfte mitgezogen.**
Dazu elf Befunde, darunter: ein Unterpfad in `APP_URL` fiel aus dem gedruckten QR heraus (auf Papier nicht mehr zu berichtigen), ohne `APP_URL` druckte jedes Etikett stillschweigend `localhost`, und der Stapeldruck war die offene Hintertür zu einer Seite mit Schloss. Alle abgearbeitet.
## Prüfstand
`pnpm lint`, `typecheck`, `format:pruefen`, `pruefe:doku` grün · **930 Tests** (vorher 879) · **54 Ende-zu-Ende-Tests** gegen den gebauten Stand · Screenshots in `docs/screenshots/m9/`.
Closes #14
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Der Einstieg, fuer den die Anwendung gebaut ist: scannen, sehen was zu tun ist,
loslegen. `/t/<tagCode>` kennt drei Faelle — registriertes Geraet, vorgedruckter
Tag, unbekannter Code —, die Geraeteseite zeigt Zuweisungen, Schnellstart und
Historie, und beides ist am Handy bedienbar.
Im QR steht ausschliesslich `{APP_URL}/t/{tagCode}`: kein Name, keine
Seriennummer, kein Besitzer. Ein Aufkleber haengt jahrelang sichtbar am Geraet
und wird von jedem Telefon gelesen; was darauf steht, ist veroeffentlicht. Die
Masse sind gemessen, nicht behauptet: ein echtes PDF liefert 62 x 29 mm und A4,
und ein bei 300 dpi gerastertes Etikett wird mit demselben Decoder
zurueckgelesen, den auch der Scanner benutzt.
Drei Defekte zeigte erst der gebaute Stand, alle an den Naehten zwischen den
parallel gebauten Teilen: „Starten“ setzte IN_ARBEIT und sprang nicht, „Vorlage
zuweisen“ bot Vorlagen an, die der Dienst danach ablehnte, und die Geraeteliste
verlinkte nichts. Der unabhaengige Review fand drei Blocker — darunter, dass der
Scanner nie die native BarcodeDetector-API benutzte und dass ein Unterpfad in
APP_URL aus dem gedruckten QR herausfiel.
Closes#14
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Der Meilenstein M9: der Einstieg über den Aufkleber.
Was drin ist
/t/<tagCode>als Weiche — registriertes Gerät → Geräteseite, vorgedruckter Tag → Registrierformular, unbekannter Code → Hinweis mit Weg zur Suche. Groß/klein wird gefaltet (ein Handy schreibt klein), verwechselbare Zeichen nicht.{APP_URL}/t/{tagCode}.Gemessen, nicht behauptet
Die Seitengröße stammt aus einem echten PDF (62 × 29 mm bzw. A4), und ein bei 300 dpi gerastertes Etikett wird mit demselben Decoder zurückgelesen, den auch der Scanner benutzt. Ein anderer Leser hätte etwas anderes bewiesen als „unsere Kamera erkennt das“.
Drei Defekte, die erst der gebaute Stand zeigte
Alle drei an den Nähten zwischen den parallel gebauten Teilen: „Starten“ setzte
IN_ARBEITund sprang nicht in den Lauf; „Vorlage zuweisen“ bot Vorlagen an, die der Dienst danach ablehnte; die Geräteliste verlinkte nichts.Der unabhängige Review: drei Blocker
Dazu elf Befunde, darunter: ein Unterpfad in
APP_URLfiel aus dem gedruckten QR heraus (auf Papier nicht mehr zu berichtigen), ohneAPP_URLdruckte jedes Etikett stillschweigendlocalhost, und der Stapeldruck war die offene Hintertür zu einer Seite mit Schloss. Alle abgearbeitet.Prüfstand
pnpm lint,typecheck,format:pruefen,pruefe:dokugrün · 930 Tests (vorher 879) · 54 Ende-zu-Ende-Tests gegen den gebauten Stand · Screenshots indocs/screenshots/m9/.Closes #14
🤖 Generated with Claude Code
Der Einstieg, fuer den die Anwendung gebaut ist: scannen, sehen was zu tun ist, loslegen. `/t/<tagCode>` kennt drei Faelle — registriertes Geraet, vorgedruckter Tag, unbekannter Code —, die Geraeteseite zeigt Zuweisungen, Schnellstart und Historie, und beides ist am Handy bedienbar. Im QR steht ausschliesslich `{APP_URL}/t/{tagCode}`: kein Name, keine Seriennummer, kein Besitzer. Ein Aufkleber haengt jahrelang sichtbar am Geraet und wird von jedem Telefon gelesen; was darauf steht, ist veroeffentlicht. Die Masse sind gemessen, nicht behauptet: ein echtes PDF liefert 62 x 29 mm und A4, und ein bei 300 dpi gerastertes Etikett wird mit demselben Decoder zurueckgelesen, den auch der Scanner benutzt. Drei Defekte zeigte erst der gebaute Stand, alle an den Naehten zwischen den parallel gebauten Teilen: „Starten“ setzte IN_ARBEIT und sprang nicht, „Vorlage zuweisen“ bot Vorlagen an, die der Dienst danach ablehnte, und die Geraeteliste verlinkte nichts. Der unabhaengige Review fand drei Blocker — darunter, dass der Scanner nie die native BarcodeDetector-API benutzte und dass ein Unterpfad in APP_URL aus dem gedruckten QR herausfiel. Closes #14 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>