Compliance wizard — ESPR gate, EV fields, and UX improvements
A broad set of improvements to the DPP creation wizard covering ESPR compliance gating, eight new EV battery fields, a redesigned step order, and a range of UX improvements including date pickers, country dropdowns, and company profile auto-fill.
Added
ESPR compliance gate
DPP submission now includes a binary ESPR approval gate as the final step before publishing. The gate evaluates all mandatory ESPR fields and blocks publication if any are missing or incomplete — replacing the previous percentage-based completeness check. ESPR-mandated fields are marked inline with a help link to the relevant regulatory requirement.
New EV battery fields
Eight additional fields added to the EV battery DPP template: rated voltage (minimum, maximum, nominal), manufacturer phone number, product model identifier, and three compliance declaration fields. These fields align with the full field set required under EU Regulation 2023/1542 for electric vehicle batteries.
DPP wizard redesign — 11 compliance-ordered steps
The DPP creation wizard has been reorganised into eleven steps ordered to match the regulatory compliance workflow — identity and classification first, technical performance mid, supply chain and compliance last. A template preview is now shown on the opening step so operators can see the full field scope before beginning.
Date picker with year and month navigation
Date fields across all DPP templates now use a calendar picker with year and month dropdown navigation, making it practical to select historical dates (certificate issue dates, audit dates, manufacture dates) without clicking through months one at a time.
EU country dropdowns
Country fields that are restricted to EU member states now use a 27-country dropdown rather than a free-text field. This ensures published DPPs contain correctly formatted, machine-readable country values.
Company profile auto-fill
The DPP wizard now pre-fills manufacturer and operator contact fields from the company profile, reducing repetitive data entry for operators managing multiple products.
DPP ID collision prevention
Product identifiers now include a random offset component when auto-generated, preventing collisions between products created close together in time.
Storage access controls
Draft and submitted DPPs are no longer accessible via direct storage URLs. Only published DPPs are publicly readable; in-progress records require an authenticated session.
Signed URL validation
The public DPP viewer now validates that file references use correctly signed URLs before rendering, preventing broken asset references in published passports.
Email template redesign
Transactional emails (invitations, OTP, data request notifications) have been redesigned with a gradient header and improved layout, aligned with the Traceable brand.
Changed
- Non-ESPR mandatory fields have been reclassified from hard-required to soft-required, allowing operators to publish a DPP that satisfies ESPR requirements even if non-ESPR fields are incomplete. The completeness score reflects the total fill rate.
- Auto-save no longer resets the form after each save. Previously, auto-save was calling form reset, which caused data entered between saves to be lost in some edge cases.
- The wizard Next button advances immediately; saving happens in the background and does not block navigation.
- Optional array fields (lists of hazardous substances, certifications, etc.) are now collapsed by default, reducing visual clutter for operators who don't need them.
- File upload fields are treated as soft-required — the ESPR gate evaluates them, but the wizard does not block step-by-step navigation if a file hasn't been uploaded yet.
- Carbon footprint values are now expressed as kg CO₂e (a number) rather than as a percentage, matching the unit specified in the EU Battery Regulation.
Fixed
- Auto-save data loss — form reset after save was causing in-flight field values to be discarded.
- Circular dependency in form watch causing a stack overflow on certain field configurations.
- Login redirect stuck state — the post-login redirect now correctly resolves in all session states.
- Select field TypeError on Radix UI during account signup resolved.
- CSV template generation error now surfaces clearly rather than failing silently.