Mail recipe: note the unanswered-leads check route and its comparison rule (details)
Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu) (details)
Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected) (details)
Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab (details)
Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns (details)
Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font (details)
Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay (details)
Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode (details)
Locator catalog: bins created per organization on first use (mobile + desktop) (details)
Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged) (details)
DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement (details)
Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included (details)
Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets (details)
Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with "send step to mobile device" (details)
- /users/leads header restyled into one toolbar row: phone lookup (with its picker), quick search, offer / contract filters, reset, shown/total counter on the left; blank questionnaire DE|EN, the new 'Unanswered' button, New and Delete on the right (replaces HeaderAction + the two extra filter rows; labels collapse to icons on narrower screens) - New button 'Unanswered' opens <MailLeadFollowupModal>: leads created within the last N days (default 30, editable, remembered per browser) whose latest e-mail in the mailpiler archive came FROM the lead and got no reaction since (no outgoing mail to that address, no C_ContactActivity logged after it). Result table: lead, latest mail + waiting days (colour-coded), our last reaction before it, buttons to open the lead tab or the archive mail history - GET /api/mail/lead-followups?days= (staff only, archive only, no IMAP): bounded lead + activity queries, one archive lookup per address with concurrency 5, auto-replies / bounce notices skipped when picking the latest inbound mail; searchArchive() got an optional row limit - translation keys leads_phone_* / lfm_* (en, de, es)
Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns
Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font
Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay
Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode
Locator catalog: bins created per organization on first use (mobile + desktop)
iDempiere needs one warehouse per org and every locator per warehouse; instead of pre-creating all ~500 bins for every merchant, the master org (LogYou 1000000, runtimeConfig.locatorMasterOrgId / LOCATOR_MASTER_ORG_ID) is the template catalog and a merchant gets a bin the moment it is used.
- server/utils/locatorCatalog.ts: listLocatorCatalog() = org bins + master-only bins as virtual preview entries (isVirtual, id `new:<code>`); ensureLocator() = find in org or create from the master template (Value, X/Y/Z, PriorityNo, locator type) in the org's own warehouse; codes unknown to the master stay 404; roles 'default' / 'return' copy the master's default / return bin - new POST /api/mobile/locators (catalog) and /api/mobile/locator-ensure - locator-lookup, locator-by-xyz create on miss (response `created`), default-locator-lookup creates the org default when the org has no bin at all, reconditioning/target-locators and product-lookup carry the preview - app/composables/useLocatorCatalog.ts: fetchLocators / resolveLocator / ensureLocator + notifyLocatorCreated toast; LocatorRow `is-virtual` → "neu" tag - wired: mobile movement, receive, inventory, return, reconditioning and the desktop ports movement/receive/inventory/returns under /integrations (pickers load the catalog, picking a virtual bin creates it before use; scans create server-side); fix-locator-owner (both) covered via locator-by-xyz - recipe .claude/rules/materials/locator-catalog.md
DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement
- C_Order.IsDHLTransportInsurance (checkbox on OrderForm for DHL-Paket shippers; quick-order modal / partners/add with 500 € notice + mandatory extra-cost confirmation, all roles incl. merchants) - server/utils/dhlInsurance.ts: amount = order GrandTotal incl. tax → services.additionalInsurance; skipped for Kleinpaket (V62KP), Packstation/Postfiliale/Paketshop addresses and ≤ 500 €; > 2.500 € = tier B (Filiale only), > 25.000 € capped at the DHL maximum with a warning; multi-parcel splits the total by parcel item value - booked amount stored in M_InOut.DHL_InsuranceValue (cleared by the commission reset) - tier-B parcels get an internal 102×152 mm "NICHT IN DIE DHL-ABHOLUNG / NUR DHL FILIALE" label printed right after the DHL label (desktop, modal and mobile commissioning), plus toasts for every outcome - operator banner on both commission pages before the label, badges on the order status flow and the DHL commission list; recipe in .claude/rules/fulfillment/commissioning.md
Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included
Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets
Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with "send step to mobile device"
- <SalesOrderRoadmap> panel between the status timeline and the form (staff only, shown only when the order needs extra steps): per BOM position Produktion angelegt → Produziert → Produktions-Aufgabe, for relabel orders Etiketten-Codes → FBA-Etiketten drucken → Umetikettierung (Lager); colour state (open / in progress / done / not yet), global numbering, "next step" marker, progress summary, collapsible, responsive down to phone width - GET /api/orders/:id/roadmap aggregates order, lines (BOM flag, printLabelCode), productions and order tickets; POST /api/orders/:id/roadmap/push-step reuses the step's open ticket (relabel summary prefix / M_Production_ID) or creates one (relabel / production ticket) and pushes it to the worker - push logic extracted to server/utils/pushTask.ts (shared with requests/[id]/push-task), push modal extracted to <RequestsPushTaskModal> (MyTicketDetail switched over) - mobile pushed-task list carries the production link and shows a production card - createRelabelTicket returns the ticket id; createProductionTicket works without a production - i18n en/de/es, recipe .claude/rules/sales/order-roadmap.md