Changelog
Changelog
Gecureerde highlights van de laatste releases. Zie voor volledige API-versies en de breaking change-policy de API-versiebeheer & LTS-policy.
Gedetailleerde wijzigingen aan afzonderlijke endpoints: OpenAPI-specificatie en interactieve API-referentie.
2026-04 · Dashboard-analytics per QR-code
- Dashboard: De analytics-knop in de QR-codelijst opent nu de statistiekenpagina van de desbetreffende QR-code onder
/dashboard/codes/{id}. - Routing: De alias
/dashboard/codesstuurt nog steeds door naar/dashboard, maar vangt geen detailroutes zoals/dashboard/codes/{id}meer af. - API: De detailpagina laadt de QR-code direct via
GET /v1/codes/:id; hierdoor is deze niet meer afhankelijk van paginalimieten van de lijst. - Tests: Regressietests dekken de alias-redirect en de directe code-load af.
2026-04 · Dashboard-verwijderdialoog voor QR-codes
- Dashboard: De prullenbak in de QR-codelijst opent nu een eigen React-dialoogvenster in plaats van een native browser-popup.
- Feedback: Na het verwijderen verschijnt een toast-melding voor succes of fout.
- Tests:
packages/dashboard/tests/dashboard.test.tsvoorkomt regressies opconfirm()in de QR-code-verwijderflow.
2026-04 · Dashboard-kortelinktest voor dynamische QR-codes
- Dashboard: Shortcodes in de QR-codelijst zijn nu direct klikbaar als externe redirect-links. Het external-link-icoon naast bijv.
wu3qaaopenthttps://qr3.app/{shortCode}in een nieuw tabblad. - i18n: Tooltip-teksten voor Duits en Engels toegevoegd.
- Tests:
packages/dashboard/tests/dashboard.test.tsbeschermt link-href, nieuw tabblad-gedrag,noopener noreferreren icoon tegen regressies.
2026-04 · Redirect-Worker-route voor dynamische QR-codes
- Fix: Dynamische QR-codes onder
https://qr3.app/{shortCode}werden weer verwerkt door de redirect-worker. De productie-route gebruikt nuqr3.app/*, omdat Cloudflare Worker-routes geen:code-padparameters ondersteunen. - Harding: Niet-overeenkomende paden worden doorgegeven aan de landing-origin, zodat normale pagina’s zoals
/de/pricingniet worden geblokkeerd door de redirect-worker. - Tests:
packages/redirect/tests/unit/redirect.test.tscontroleert de wildcard-route, shortcode-verwerking en origin-pass-through.
2026-04 · Workspace DPP-scanoverzicht (Q3.4.2)
- Nieuw:
GET /v1/workspace/stats/dpp?days=30— aggregeert alledpp_scansvan de API-key-workspace (active_dpps,scans_by_day,top_dppsmet productnaam/categorie). - Dashboard: Kaart op de startpagina (
/dashboard) met 30-dagen-staafdiagram + toplijsten — parallel aan de QR-codekaarten. - Public: Marketing-shortlink
GET /dpp/dpp_<id>(één segment) voor live demo’s, parallel aan/dpp/{gtin}/{serial}.
2026-04 · DPP-scan-analytics (Q3.4.1)
- Nieuw:
GET /v1/dpp/:id/stats?days=30— geaggregeerde scans van de openbare GS1-resolver per DPP. Velden:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Nieuw: Tabel
dpp_scans(migratie0011) — gescheiden vanscans(redirect-worker). IP-adressen worden gehasht met een dagelijks roterende salt, ruwe IP’s bereiken D1 nooit. - Dashboard: Mini-chartkaart (SVG, geen chart-bibliotheek) op
/dashboard/dpp/:dppIdmet 30-dagen-staven + top-3-breakdowns. Empty-state zodra een DPP live is maar nog geen scans heeft gehad.
2026-04 · Live EU-compliance-simulator (Q3.3.7)
- Nieuw:
POST /v1/dpp/:id/validate-update— simuleert gedeeltelijke updates stateless (status, marktlijst, …) zonder persistentie. Antwoord bevateu_compliance+preview.changed_fields. - Dashboard: Simulatorkaart in het DPP-detail (
/dashboard/dpp/:dppId) — chips voorDE/AT/FR/IT/ES/NL+ custom, status-dropdown, Preview EU impact / Save changes / Reset. Non-blocking via RemixuseFetcher. - Harding: Uitbestede simulator-helpers (
readUpdatePatchFromForm,marketCountriesKey) + 18 nieuwe unit-tests; bugfix: een losse niet-ISO-invoer wist de marktlijst niet meer.
2026-04 · Live EU-compliance-preview in aanmaakformulier (Q3.3.6)
- Gewijzigd:
POST /v1/dpp/validatelevert bovendieneu_compliance— dezelfde validator alsGET /v1/dpp/:id/eu-compliance, stateless vóór het opslaan. - Dashboard: Preview onder het bestaande validation-panel + nieuwe Save-Guard-banner vóór de submit-knoppen als er errors/warnings openstaan (i18n-pluralisatie DE/EN).
2026-04 · EU-validator + textiel-UI (Q3.3.4 + Q3.3.5)
- Nieuw: EU-compliance-validator met 5 textielregels (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Nieuw:
GET /v1/dpp/:id/eu-compliancemetcompliant/espr_ready/issues[]/summary. - Dashboard: EU-compliance-sectie in het DPP-detail (summary-tiles, gegroepeerde issue-kaarten, ESPR-Ready-badge in de header).
2026-04 · Textiel-DPP-schema (Q3.3.1–Q3.3.3)
- Nieuw: Categorie
textilemet AGEC-verplichte keten (weven/breien → verven/bedrukken → confectie), per vezelorigin_country+recycled_pct,svhc_substances[], ESPR-opt-in (PEF, levensduur, recyclability). - Nieuw: Basisveld
market_countries: string[](ISO 3166-1 alpha-2) op alle DPP-categorieën — stuurt FR-specifieke AGEC-regels en de Franse verplichte consumentennotitie aan. - Nieuw: Consumenten-HTML-sjabloon met AGEC-microplastic-waarschuwingsbox, herkomstketen in 3 stappen (vlag-pills), SVHC-lijst, durability- en recyclability-sectie.
- Migratie:
0010_dpp_market_countries(D1).
2026-04 · DPP bulk-import (Q3.2.1–Q3.2.5)
- Nieuw:
POST /v1/dpp/importaccepteert CSV en XLSX (Worker-compatibel via SheetJSxlsx, ~283 KB gzip-bundel). - Geschaald: limiet op basis van abonnement (Free 100 → Enterprise 10k) + chunked
db.batch()à 100 + 5 MB body-limiet. - Nieuw: Foutrapportage als CSV in het
errors_csv-veld van het 201-antwoord;GET /v1/dpp/import/templates/:category?format=csv|xlsxlevert kant-en-klare sjablonen voor batterij en textiel. - Dashboard: Drag-and-drop-upload onder
/dashboard/dpp/importmet template-proxy en inline CSV-download.
Non-breaking — LTS-uitbreidingen
Alle hierboven genoemde wijzigingen zijn additief:
- Bestaande
POST /v1/dpp/validate-clients negeren het nieuweeu_compliance-veld zonder wijzigingen. - Bestaande
battery-flows zijn ongewijzigd. market_countriesis optioneel en heeft als standaardwaarde[].
Zie API-versiebeheer voor de breaking change-policy.