Ga naar inhoud

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/codes stuurt 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.ts voorkomt regressies op confirm() 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. wu3qaa opent https://qr3.app/{shortCode} in een nieuw tabblad.
  • i18n: Tooltip-teksten voor Duits en Engels toegevoegd.
  • Tests: packages/dashboard/tests/dashboard.test.ts beschermt link-href, nieuw tabblad-gedrag, noopener noreferrer en 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 nu qr3.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/pricing niet worden geblokkeerd door de redirect-worker.
  • Tests: packages/redirect/tests/unit/redirect.test.ts controleert 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 alle dpp_scans van de API-key-workspace (active_dpps, scans_by_day, top_dpps met 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 (migratie 0011) — gescheiden van scans (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/:dppId met 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 bevat eu_compliance + preview.changed_fields.
  • Dashboard: Simulatorkaart in het DPP-detail (/dashboard/dpp/:dppId) — chips voor DE/AT/FR/IT/ES/NL + custom, status-dropdown, Preview EU impact / Save changes / Reset. Non-blocking via Remix useFetcher.
  • 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/validate levert bovendien eu_compliance — dezelfde validator als GET /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-compliance met compliant / 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 textile met AGEC-verplichte keten (weven/breien → verven/bedrukken → confectie), per vezel origin_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/import accepteert CSV en XLSX (Worker-compatibel via SheetJS xlsx, ~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|xlsx levert kant-en-klare sjablonen voor batterij en textiel.
  • Dashboard: Drag-and-drop-upload onder /dashboard/dpp/import met template-proxy en inline CSV-download.

Non-breaking — LTS-uitbreidingen

Alle hierboven genoemde wijzigingen zijn additief:

  • Bestaande POST /v1/dpp/validate-clients negeren het nieuwe eu_compliance-veld zonder wijzigingen.
  • Bestaande battery-flows zijn ongewijzigd.
  • market_countries is optioneel en heeft als standaardwaarde [].

Zie API-versiebeheer voor de breaking change-policy.