Zum Inhalt springen

Changelog

Changelog

Kuratierte Highlights der letzten Releases. Für vollständige API-Versionen und Breaking-Change-Policy siehe die API-Versionierung & LTS-Policy.

Detaillierte Änderungen an einzelnen Endpoints: OpenAPI-Spezifikation und interaktive API-Referenz.


2026-04 · Dashboard-Analytics pro QR-Code

  • Dashboard: Der Analytics-Button in der QR-Code-Liste öffnet jetzt die Statistikseite des jeweiligen QR-Codes unter /dashboard/codes/{id}.
  • Routing: Der Alias /dashboard/codes leitet weiterhin auf /dashboard um, fängt aber keine Detailrouten wie /dashboard/codes/{id} mehr ab.
  • API: Die Detailseite lädt den QR-Code direkt per GET /v1/codes/:id; dadurch ist sie nicht mehr von Listen-Pagination-Limits abhängig.
  • Tests: Regressionstests decken den Alias-Redirect und den direkten Code-Load ab.

2026-04 · Dashboard-Löschdialog für QR-Codes

  • Dashboard: Der Mistkübel in der QR-Code-Liste öffnet jetzt einen eigenen React-Dialog statt eines nativen Browser-Popups.
  • Feedback: Nach dem Löschen erscheint eine Toast-Rückmeldung für Erfolg oder Fehler.
  • Tests: packages/dashboard/tests/dashboard.test.ts verhindert Regressionen auf confirm() im QR-Code-Löschflow.
  • Dashboard: Shortcodes in der QR-Code-Liste sind jetzt direkt als externe Redirect-Links klickbar. Das External-Link-Icon neben z. B. wu3qaa öffnet https://qr3.app/{shortCode} in einem neuen Tab.
  • i18n: Tooltip-Texte für Deutsch und Englisch ergänzt.
  • Tests: packages/dashboard/tests/dashboard.test.ts schützt Link-Href, neues Tab-Verhalten, noopener noreferrer und Icon gegen Regressionen.

2026-04 · Redirect-Worker-Route für dynamische QR-Codes

  • Fix: Dynamische QR-Codes unter https://qr3.app/{shortCode} werden wieder vom Redirect-Worker verarbeitet. Die Production-Route nutzt jetzt qr3.app/*, weil Cloudflare Worker-Routen keine :code-Pfadparameter unterstützen.
  • Härtung: Nicht passende Pfade werden an die Landing-Origin durchgereicht, damit normale Seiten wie /de/pricing nicht vom Redirect-Worker blockiert werden.
  • Tests: packages/redirect/tests/unit/redirect.test.ts prüft die Wildcard-Route, Shortcode-Verarbeitung und Origin-Pass-through.

2026-04 · Workspace-DPP-Scan-Übersicht (Q3.4.2)

  • Neu: GET /v1/workspace/stats/dpp?days=30 — aggregiert alle dpp_scans des API-Key-Workspaces (active_dpps, scans_by_day, top_dpps mit Produktname/Kategorie).
  • Dashboard: Karte auf der Startseite (/dashboard) mit 30-Tage-Balkendiagramm + Top-Listen — parallel zu den QR-Code-Karten.
  • Public: Marketing-Shortlink GET /dpp/dpp_<id> (ein Segment) für Live-Demos, parallel zu /dpp/{gtin}/{serial}.

2026-04 · DPP-Scan-Analytics (Q3.4.1)

  • Neu: GET /v1/dpp/:id/stats?days=30 — aggregierte Scans des öffentlichen GS1-Resolvers pro DPP. Felder: total_scans, period_scans, scans_by_day, top_countries, top_devices, top_representations.
  • Neu: Tabelle dpp_scans (Migration 0011) — getrennt von scans (Redirect-Worker). IP-Adressen werden mit täglich rotierendem Salt gehasht, rohe IPs erreichen nie D1.
  • Dashboard: Mini-Chart-Karte (SVG, keine Chart-Library) auf /dashboard/dpp/:dppId mit 30-Tage-Balken + Top-3-Breakdowns. Empty-State sobald ein DPP live ist aber noch keine Scans hatte.

2026-04 · Live-EU-Compliance-Simulator (Q3.3.7)

  • Neu: POST /v1/dpp/:id/validate-update — simuliert Teil-Updates stateless (Status, Markt-Liste, …) ohne Persistenz. Antwort enthält eu_compliance + preview.changed_fields.
  • Dashboard: Simulator-Karte im DPP-Detail (/dashboard/dpp/:dppId) — Chips für DE/AT/FR/IT/ES/NL + Custom, Status-Dropdown, Preview EU impact / Save changes / Reset. Non-blocking via Remix useFetcher.
  • Härtung: Ausgelagerte Simulator-Helper (readUpdatePatchFromForm, marketCountriesKey) + 18 neue Unit-Tests; Bugfix: Lone-Non-ISO-Input löscht die Marktliste nicht mehr.

2026-04 · Live-EU-Compliance-Preview im Create-Formular (Q3.3.6)

  • Geändert: POST /v1/dpp/validate liefert zusätzlich eu_compliance — derselbe Validator wie GET /v1/dpp/:id/eu-compliance, stateless vor dem Speichern.
  • Dashboard: Preview unter dem bestehenden Validation-Panel + neuer Save-Guard-Banner vor den Submit-Buttons, wenn Errors/Warnings offen sind (i18n-Pluralisierung DE/EN).

2026-04 · EU-Validator + Textil-UI (Q3.3.4 + Q3.3.5)

  • Neu: EU-Compliance-Validator mit 5 Textil-Regeln (TEXTILE_AGEC_REQUIRED, TEXTILE_MICROPLASTICS_CONSISTENCY, TEXTILE_SVHC_THRESHOLD, TEXTILE_GREENWASHING, TEXTILE_ESPR_READY).
  • Neu: GET /v1/dpp/:id/eu-compliance mit compliant / espr_ready / issues[] / summary.
  • Dashboard: EU-Compliance-Section im DPP-Detail (Summary-Tiles, gruppierte Issue-Karten, ESPR-Ready-Badge im Header).

2026-04 · Textil-DPP-Schema (Q3.3.1–Q3.3.3)

  • Neu: Kategorie textile mit AGEC-Pflichtchain (Weben/Stricken → Färben/Drucken → Konfektion), pro Faser origin_country + recycled_pct, svhc_substances[], ESPR-Opt-in (PEF, Lebensdauer, Recyclability).
  • Neu: Basisfeld market_countries: string[] (ISO 3166-1 alpha-2) auf allen DPP-Kategorien — steuert FR-spezifische AGEC-Regeln und die französische Consumer-Pflichtnotiz.
  • Neu: Consumer-HTML-Template mit AGEC-Mikroplastik-Warnbox, 3-stufiger Herkunftskette (Flag-Pills), SVHC-Liste, Durability- und Recyclability-Section.
  • Migration: 0010_dpp_market_countries (D1).

2026-04 · DPP-Bulk-Import (Q3.2.1–Q3.2.5)

  • Neu: POST /v1/dpp/import akzeptiert CSV und XLSX (Worker-kompatibel via SheetJS xlsx, ~283 KB gzip Bundle).
  • Skaliert: planbasiertes Limit (Free 100 → Enterprise 10k) + chunked db.batch() à 100 + 5 MB Body-Limit.
  • Neu: Fehlerreport als CSV im errors_csv-Feld der 201-Antwort; GET /v1/dpp/import/templates/:category?format=csv|xlsx liefert fertige Vorlagen für Batterie und Textil.
  • Dashboard: Drag-and-Drop-Upload unter /dashboard/dpp/import mit Template-Proxy und Inline-CSV-Download.

Nicht-Breaking — LTS-Erweiterungen

Alle oben genannten Änderungen sind additiv:

  • Bestehende POST /v1/dpp/validate-Clients ignorieren das neue eu_compliance-Feld ohne Änderung.
  • Bestehende battery-Flows sind unverändert.
  • market_countries ist optional und defaultet auf [].

Siehe API-Versionierung für die Breaking-Change-Policy.