v2.5.0
Latest
28 April 2026
Granular damage capture, scrollytelling marketing, and a global portal search
Receiving
- Edit form on a Current Skid box now matches the initial scan UI: granular Damaged / Missing / Good unit inputs per line, with auto-recalculating totals on every keystroke.
- Skid row visibly reflects damage: alert-red card background and per-line "
N good / M" chips when a box has any damage or missing units. - Inbound tab ETA now uses the most up-to-date date available — pickup completion → scheduled pickup → estimated arrival → flight + 8 days — instead of always reading the stale wizard-time estimate.
- Variant dropdown in the edit row stays inside the container even with long product names.
Production & Stamps
- Production allocation (
getShipmentAvailable,getShipmentTotalRemaining,getShipmentStampableRemaining) now respects per-boxgoodQtyinstead of raw packing-list quantity. Damaged and missing units no longer over-allocate stamps. - Customer portal inventory mirrors the same calculation — customers can no longer request a PO for damaged units.
- Truck capacity capped at 12 skids (down from 13) per pickup trip — the warning toast and capacity calculator follow.
Customer Portal
- New global search bar in the topbar — searches the customer's own shipments by AWB / supplier / status and production orders by PO number / linked AWB. Click a result to open it.
- Portal sidebar carries a build-version chip so you can verify exactly what build is running.
Compliance & Reporting
- NOA upload modal auto-fills the Schedule Pickup Date as Arrival + 1 day, and updates live if you change the arrival date.
- All calendar tiles and event pills are now read-only across Dashboard, Shipping, Logistics, Production and Outbound — the calendar shows what's happening, dedicated module pages do the navigation.
Fixes
- Damage report save no longer leaves the Logistics inbound view stale — re-renders whichever host container is currently mounted.
- Receiving edit form clobbered the "Good units" display on row 0 when launching the edit (brittle
div:last-childselector replaced with an explicit id). - Section render errors no longer take down the whole app — the Router now renders an inline error placeholder per section (admin + portal).
- Cache-busted all
<script src>and<link href>tags inindex.htmlandportal.htmlso a Cmd-Shift-R always reaches your users.
