Skip to content

Changes

Started by timer
Started 5 days 21 hr ago
Took 1 min 7 sec on built-in

Summary

  1. BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows) (details)
  2. Leads + users: KI-Konsole readable bubbles and "Als E-Mail senden" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes (details)
  3. Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide (details)
  4. Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces (details)
  5. Orders: manual customs (CN23) tax note on the order popup and the order edit form (details)
  6. Offers: editable article name + description for the monthly fee line in the quote PDF (details)
  7. Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance) (details)
  8. Offers: monthly fee €/M. + article name on one row, description as a larger textarea below (details)
  9. Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type (details)
  10. Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses (details)
  11. Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery (details)
  12. Products: dimensions are mm — unit notice + plausibility check with 'Convert to mm' on the form and the grid; storage-usage BI dimension check card (details)
  13. Products: label weight fields as kg (same unit policy as the mm dimensions) (details)
  14. Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer (details)
  15. Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar (details)
  16. Storage usage: merchant/warehouse/month/invoiced/product filters (SelectBox) + current m³ list per product with €/day and €/month; mobile product: camera photo capture into the Strapi gallery; dashboard calls card: show call time (details)
  17. Android app 1.0.73 (versionCode 74): photo capture on the product page (details)
  18. Mobile product: in-page camera (getUserMedia, back camera) for product photos instead of the file-chooser capture; Capture section with equal EAN / Foto buttons (details)
  19. Mobile product: capture buttons pause the scanner focus monitor on pointerdown (lost taps); camera start timeout + Systemkamera fallback; EAN overlay closes via one helper (details)
  20. Android app version bump (release script) (details)
  21. Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN) (details)
  22. Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows (details)
  23. Order sources: Adobe Commerce brand tile (Adobe A on red) + OTTO red-on-white in MarketplaceIcon; sales-orders source column draws brand tiles for amazon/ebay/otto/shopify/shopware/etsy/kaufland/zalando/adobe-commerce instead of hardcoded images (details)
  24. Price sheet: keep disabled services listed (resolve returns all services; unchecked service vanished and stayed hidden via localStorage), sticky country/service search in the matrix (German DHL names, / focuses, Esc clears, per-section counts), internal row notes no longer printed on the merchant PDF (details)
  25. Demo tooling: VONROC merchant (vonroc.de Magento GraphQL catalog builder, masters by model code, stock top-up / zero-stock scripts, return reasons), seed-orders-returns MIX=shipped with DHL-style tracking numbers, printed-only shipments, REASONS_FILE; README (details)
  26. Contract/AGB: carrier cases under LogYou's shipping contract (Nachforschungsauftrag, damage/loss claims, address/delivery clarifications, complaints) billed by time at the hourly rate (contract Versandkosten DE/EN + offer footnote); AGB § 13.6 Schwundtoleranz 1 % → 0,5 % p. a. (only place it is defined, contract placeholder default aligned) (details)
  27. Quote: three configurable fulfillment plans (Start / Wachstum / Premium with name, price, description, feature list, per-plan 'im PDF' flag) edited as cards in the modal and printed as brand cards under the monthly costs; selected plan drives the Servicepauschale for forecast/contract; legacy saved fee maps onto Start (details)
  28. Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling (details)
  29. Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan' (details)
  30. Quote plans: no selection — the first plan ticked 'im PDF' supplies the Servicepauschale (chip on its card), PDF shows the plans without any highlight (details)
  31. Quote PDF: plan cards with spacing (white gap columns in the equal-height table), orange accent bar, navy header with orange price, feature list below (details)
  32. Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned) (details)
  33. Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger (details)
  34. Lead page offer group: narrower buttons (tighter padding, smaller font) (details)
  35. Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons) (details)
  36. Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width (details)
  37. Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group (details)
  38. Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height (details)
  39. Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above (details)
  40. Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline (details)
  41. Android app 1.0.75 (versionCode 76): release-script version bump (details)
  42. Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates) (details)
Commit 17347f6d0640c6ce40944d6afe25d4a7e94090d4 by info
BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)
The file was addedapp/composables/useShippingPerformancePdf.ts
The file was modifiedapp/pages/bi/shipping-performance.vue (diff)
The file was modified.claude/rules/bi/shipping-performance.md (diff)
Commit 62585d99e20d86d93cbcc6116a61055f63e7793d by info
Leads + users: KI-Konsole readable bubbles and "Als E-Mail senden" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes

- KI-Konsole: explicit bubble text colours (global `*` colour rule made the user bubble unreadable); new
  "Als E-Mail senden" on assistant turns extracts subject/body and opens the lead mail composer on top,
  pre-filled and editable (composer `draft` prop, templateKey 'ai-chat', signature/footer as usual)
- AD_User.FullName: used for the staff mail signature (fallback Name), carried in the logship_user cookie,
  written by store/update (update only when the key is sent), field on /create/user and /edit/user-:id
- User pages rebuilt on Nuxt UI (hero with avatar/badges, UTabs, card groups, USwitch with track fix);
  edit page now reads/writes IsAddMailTextAutomatically correctly
- Dashboard "Neueste Leads": expired leads (LeadStatus E) no longer listed
- /create/lead: company name, website and AiScore were dropped on the initial save (client + store route)
- Recipes: console hand-off, REST cache reset for new columns, USwitch gap
The file was modifiedapp/pages/users/users/[id]/edit.vue (diff)
The file was modifiedapp/components/leads/ChatConsoleModal.vue (diff)
The file was modifiedapp/pages/users/leads/create.vue (diff)
The file was modifiedapp/pages/users/users/create.vue (diff)
The file was modifiedapp/components/leads/MailComposeModal.vue (diff)
The file was modifiedserver/api/admin/users/leads/latest.get.ts (diff)
The file was modifiedserver/api/admin/users/store.post.ts (diff)
The file was modifiedserver/utils/trimCookieData.ts (diff)
The file was modified.claude/rules/leads/ai-assessment.md (diff)
The file was modifiedserver/utils/mail/staffMail.ts (diff)
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
The file was modified.claude/rules/nuxt/ui-components.md (diff)
The file was modifiedapp/components/admin/UserForm.vue (diff)
The file was modifiedserver/api/admin/users/update.put.ts (diff)
The file was modified.claude/rules/idempiere/write-casing-and-flags.md (diff)
Commit bdb551d64cbbacbf95b0663f213ecd7d9ed711ed by info
Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide

The universal `* { color: var(--theme-text-primary) }` in public/css/styles.css painted every element
without its own colour dark, so text inside navy hero cards, chat bubbles and dark badges was unreadable.
Colour now cascades from html/body; form controls keep the explicit theme colour, buttons inherit.
User page: ext. badge and card titles get explicit colours (Bulma strong colour on dark cards).
The file was modifiedapp/components/admin/UserForm.vue (diff)
The file was modifiedapp/pages/users/users/[id]/edit.vue (diff)
The file was modifiedapp/pages/users/users/create.vue (diff)
The file was modified.claude/rules/nuxt/nuxt4-conventions.md (diff)
The file was modifiedpublic/css/styles.css (diff)
Commit 52e3abbc96b47192b0d0076a03136dc9e4cd2041 by info
Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces

- v_orders_summary rewritten as LEFT JOIN LATERAL (applied on prod 2026-10-27); DDL now versioned in
  reference/sql with backup/apply/restore scripts (node + pg, .env PG_* keys, PG tunnel on dev)
- summary.post.ts: step 1 ids-only page (cheap deep $skip), step 2 rows by id in step-1 order; shared query
  builder server/utils/orders/summaryQuery.ts; single-flight per identical block, no row cache
- totals moved to orders/ag-grid/summary-totals.post.ts (60 s cache + single-flight), page calls it debounced
  on grid ready / switch / column filter / card reload; blocks never wait for it
- AgGridServer: cacheBlockSize / maxBlocksInCache props + filterChanged emit (orders page uses 100/20)
- SSE stream seeds globalLastOrderId from the newest order on a fresh process (no replay of old orders
  + push notifications after a PM2 restart)
- fix: external reference links for Shopware, Shopify, Amazon and JTL were dead on the list — $select on the
  view only carried plentyone_order_id; all marketplace id columns AgMarketplaceLink.vue uses are selected now
The file was modified.claude/rules/sales/orders-grid.md (diff)
The file was modifiedreference/README.md (diff)
The file was addedreference/sql/v_orders_summary.rollback.sql
The file was modifiedserver/api/orders/ag-grid/summary.post.ts (diff)
The file was addedreference/sql/_db.cjs
The file was addedreference/sql/apply-view.cjs
The file was addedreference/sql/backup-view.cjs
The file was modifiedapp/pages/sales/orders/index.vue (diff)
The file was modifiedserver/api/orders/sales/stream.get.ts (diff)
The file was addedserver/utils/orders/summaryQuery.ts
The file was addedreference/sql/v_orders_summary.sql
The file was addedreference/sql/restore-view.cjs
The file was addedreference/sql/backups/v_orders_summary.20261027-210422.sql
The file was modifiedapp/components/AgGridServer.vue (diff)
The file was addedserver/api/orders/ag-grid/summary-totals.post.ts
Commit 7fb15e7a47701993350ea564bb4661290393654b by info
Orders: manual customs (CN23) tax note on the order popup and the order edit form

- "Zoll (CN23): Steuer bereits abgeführt (IOSS/OSS)" block (paid via / amount / currency / scheme / code) writes the
  same sentence the eBay import writes as the FIRST line of C_Order.Description —
  "Tax of {amount} {currency} has been paid via {paidVia} ({scheme}) with Code: {code}" — which the DHL customs
  routes forward as CN23 exportDescription; other Description text is kept below it
- composables/useCustomsTaxNote.ts (build/parse/apply, tolerant to codes with spaces and the " | ** Voided" suffix)
  + components/sales/CustomsTaxNoteFields.vue (floating-label layout, preview with 80-char counter)
- shown only for DHL-Paket shippers (isCustomsTaxNoteShipper — single place to extend for DPD); popup strips the
  note when the shipper leaves DHL, edit form hides without touching the Description; editable on completed orders
- quick-add.post.ts now sends description; DHL customs routes collapse whitespace before the 80-char cut
- translations en/de/es/ne, recipe in .claude/rules/fulfillment/commissioning.md
The file was modified.claude/rules/fulfillment/commissioning.md (diff)
The file was modifiedapp/components/partners/PartnerQuickForm.vue (diff)
The file was modifiedserver/api/commission/parcels/dhl/index.post.ts (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
The file was addedapp/composables/useCustomsTaxNote.ts
The file was modified.gitignore (diff)
The file was modifiedserver/api/commission/parcels/dhl/multi.post.ts (diff)
The file was modifiedserver/api/partners/partners/quick-add.post.ts (diff)
The file was addedapp/components/sales/CustomsTaxNoteFields.vue
The file was modifiedapp/components/OrderQuickAddModal.vue (diff)
The file was modifiedapp/components/sales/OrderForm.vue (diff)
Commit c73bfd66b65d8d789541d831ef337c8ee84fbf20 by info
Offers: editable article name + description for the monthly fee line in the quote PDF

- pricing.monthlyFeeLabel (default "Start") and pricing.monthlyFeeNote (default "Der komplette Fulfillment-Kern
  für Ihren Einstieg.") — two text inputs next to the €/M. field in QuoteModal.vue
- quotePdf.ts prints them in the "Monatliche Kosten" row; empty label falls back to "Servicepauschale", legacy
  offers without the keys keep the old "inkl. …" subtext, an explicitly emptied note prints nothing
- applySavedQuoteConditions keeps both strings verbatim (fillNonEmpty would re-apply the default)
- translations en/de/es, recipe note in .claude/rules/offers/pdf-generation.md
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
The file was modified.claude/rules/offers/pdf-generation.md (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
Commit 5e95cb27bf54fe21ea4b340b17ab76d813217af4 by info
Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)

Left external, the amcharts "exporting" plugin's bare `import 'tslib'` survived into .output, Nitro's tracer
copied only tslib.js / tslib.es6.mjs, and Node resolved the ESM import to the missing modules/index.js
(package exports "import" → "node"): "Cannot find module …/node_modules/tslib/modules/index.js" on every
SSR render of the page, while client-side navigation worked. nitro.externals.inline: ['tslib'] bundles it;
verified by importing the built chunk in Node. vite.ssr.noExternal has no effect on this builder.
Recipe note incl. the custom-buildDir gotcha (Nitro esbuild "symbol R already declared").
The file was modifiednuxt.config.ts (diff)
The file was modified.claude/rules/nuxt/nuxt4-conventions.md (diff)
Commit da5f7325bc63f0e5483258ac03f79b29d83a1424 by info
Offers: monthly fee €/M. + article name on one row, description as a larger textarea below
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
Commit f6a5ec04ead3d57d656e01ca2e89626a12576f25 by info
Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type

The hero "Angebot" button reopened the last-used offer type (per-lead localStorage) and the second button
flipped its meaning accordingly, so "Angebot" opened the LogShip Cloud offer once that had been used on the
lead. Each button now names its type and always opens exactly that modal; the in-modal type switch stays.
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 306bcb3fa81860440fb70ee4af5514c8e6b10e7d by info
Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses

Contract (contractTexts DE+EN, contractPdf):
- term: contract starts with signature, operational start = first goods receipt, integration/setup free,
  running fees only from the operational start (was: integration could start billing while pricing said
  "no costs until first goods receipt")
- pricing: "Basispreis pro Versandauftrag", shipment counts at status "versendet", explicit pick inclusion
  ({pickInclusion} = quote.pricing.qtyPickfree) and a definition of "Pick" (base unit or packaging unit with
  own barcode), NEW "Wareneingang" item driven by the offer ({inboundPricing} = quote.inbound.mode:
  included / hourly / custom) with the included scope and the on-request count check, returns scope
  defined once (SLA item now refers to it; blocked stock + photos, customer decides refunds),
  carrier tariff pass-through, no packaging costs for pre-packed goods, nominal storage dimensions,
  service fee named like the offer, annex 1 validity note
- NEW clause "Barcodes & Artikelkennzeichnung": scannable code per sales unit, relabelling by time +
  material, no liability / no 13.6 tolerance when the customer waives relabelling
- {noticeAgbNote} whenever noticeMonths differs from the AGB's 3-month fallback
- ContractModal: "Angebot vom (Anlage 1)" mirrors the attached offer's date, select "Wareneingang (lt. Angebot)"
- Annex 1: a newer saved quote wins over a stale sent PDF; regenerated offer keeps cut-off + validity

Offer PDF (quotePdf DE+EN): base price per Versandauftrag with "Picks nicht enthalten / inkl. n Picks",
pick definition footnote, goods receipt = Packstückkontrolle (count per SKU on request), returns scope
subtext, storage nominal dimensions, packaging only by consumption; flyer + modal hint aligned.

AGB seed (agbDefault.ts): Pick / Versandauftrag definitions, B2C limit 31,5 kg + Sperrgut, barcode rule +
pallet 120×80×150 = offer pallet space, shrinkage only in 13.6, returns scope, payment = contract, notice
period follows the contract. Recipe section "Offer ↔ contract ↔ AGB consistency".
The file was modifiedapp/composables/useOfferContract.ts (diff)
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was modifiedapp/components/offers/ContractModal.vue (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
The file was modifiedserver/utils/offers/contractTexts.ts (diff)
The file was modified.claude/rules/offers/contract-and-quote-portals.md (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedserver/utils/offers/agbDefault.ts (diff)
The file was modifiedserver/utils/offers/flyerTexts.ts (diff)
The file was modifiedserver/utils/offers/offerAttachments.ts (diff)
The file was modifiedserver/utils/offers/contractPdf.ts (diff)
Commit 72dc026b8156bfcc49bc672a524bd52b114bef9b by info
Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery

- app/components/mobile/Header.vue + StepGuide.vue: every /mobile/* page now starts with a sticky Nuxt UI
  header and a Zebra-style pictogram step guide driven by one `stepGuide` computed per page (commission,
  digital-picking, fix-locator-owner, generate-shipments, inventory, locator-articles/-labels, movement,
  picklist, print-labels, product, receive, reconditioning, return, tasks); shared DigitalPicklist overlay
  gets the compact `.dp-guide` variant; mobile-theme.css + ReturnLabelPrinterPicker adjusted
- android: versionCode 73 / 1.0.72 ("Enhance Styling and new Icon Explanation")
- server/utils/ticketAutoClose.ts + plugins/ticket-auto-close.ts + requests/[id]/auto-close.post.ts:
  merchant-action tickets idle for TICKET_AUTOCLOSE_DAYS (10) are completed with an [Auto-Close] note and
  a merchant mail (6 h timer on PM2 instance 0, off on nuxt dev, dry-run endpoint for staff)
- notifications: action-notification / push-task-status pass the acting user; stream.get.ts and
  pushNotifier skip the actor; orgRoleAccessCache fix for roles with org 0; notificationBus tweaks
- recipes: mobile/capacitor-app-build.md (page skeleton), requests/tickets.md (auto-close, who gets
  toast/push/mail); reference: Hive contract PDF (template ancestor), scanner.png
The file was modifiedapp/pages/mobile/print-labels.vue (diff)
The file was modifiedapp/pages/mobile/product.vue (diff)
The file was addedreference/Monkatech x Hive - 20240701 - Vertrag.pdf
The file was modifiedandroid/app/build.gradle (diff)
The file was modifiedapp/pages/mobile/locator-labels.vue (diff)
The file was modifiedserver/utils/orgRoleAccessCache.ts (diff)
The file was modifiedapp/pages/mobile/locator-articles.vue (diff)
The file was modifiedapp/assets/css/mobile-theme.css (diff)
The file was modifiedapp/pages/mobile/receive.vue (diff)
The file was modifiedapp/pages/mobile/return.vue (diff)
The file was modifiedandroid/update-files/version.json (diff)
The file was modifiedapp/components/fulfillment/DigitalPicklist.vue (diff)
The file was addedserver/plugins/ticket-auto-close.ts
The file was addedapp/components/mobile/Header.vue
The file was addedapp/components/mobile/StepGuide.vue
The file was modifiedapp/components/rmas/ReturnLabelPrinterPicker.vue (diff)
The file was addedreference/DPS_15222_04_Hive_Delivery_Prices.pdf
The file was addedserver/utils/ticketAutoClose.ts
The file was modifiedserver/api/requests/requests/[id]/action-notification.post.ts (diff)
The file was modified.claude/rules/mobile/capacitor-app-build.md (diff)
The file was modifiedserver/utils/notificationBus.ts (diff)
The file was modified.claude/rules/requests/tickets.md (diff)
The file was modifiedserver/api/notifications/stream.get.ts (diff)
The file was modifiedapp/pages/mobile/fix-locator-owner.vue (diff)
The file was modifiedapp/pages/mobile/inventory.vue (diff)
The file was addedreference/scanner.png
The file was addedserver/api/requests/requests/auto-close.post.ts
The file was modifiedapp/pages/mobile/commission.vue (diff)
The file was modifiedapp/pages/mobile/picklist.vue (diff)
The file was modifiedapp/pages/mobile/reconditioning.vue (diff)
The file was modifiedapp/pages/mobile/tasks.vue (diff)
The file was modifiedserver/utils/pushNotifier.ts (diff)
The file was modifiedapp/pages/mobile/generate-shipments.vue (diff)
The file was modifiedapp/pages/mobile/digital-picking.vue (diff)
The file was modifiedapp/pages/mobile/movement.vue (diff)
The file was modifiedserver/api/requests/requests/[id]/push-task-status.post.ts (diff)
Commit ba7235d029e64c3409f637f0baaea71c239ae7c5 by info
Products: dimensions are mm — unit notice + plausibility check with 'Convert to mm' on the form and the grid; storage-usage BI dimension check card

Storage rent (m³) is billed from L×W×H×stock; cm/m entries were billed 1 000× too little (wonderhome 2026-10).
analyzeDimensions() is the single check used by ProductForm, the products grid (highlighted cells + warning
toast with a convert action after an inline edit) and the new dimension-check route/card on /materials/storage-usage.
The file was added.claude/rules/materials/product-dimensions-storage-volume.md
The file was addedapp/utils/productDimensions.ts
The file was removedreference/DPS_15222_04_Hive_Delivery_Prices.pdf
The file was modifiedapp/pages/materials/storage-usage.vue (diff)
The file was modifiedapp/pages/materials/products/index.vue (diff)
The file was addedserver/api/materials/storage-usage/dimension-check.get.ts
The file was addedreference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf
The file was modifiedapp/components/materials/ProductForm.vue (diff)
Commit 5393f1afd6314b3afb837a46594b99cd9c0161a8 by info
Products: label weight fields as kg (same unit policy as the mm dimensions)
The file was modifiedapp/components/materials/ProductForm.vue (diff)
The file was modifiedapp/pages/materials/products/index.vue (diff)
Commit 94dc5392a4ff32103efafda16511c83bb057a74d by info
Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer

Lead hero: upload/replace/remove logo, capture the website screenshot; quote modals (fulfillment + LogShip
Cloud) take both from the prefill, persist what they capture/upload on the lead and show 'am Lead gespeichert'.
The file was modifiedapp/composables/useOfferSoftwareQuote.ts (diff)
The file was modified.claude/rules/offers/contract-and-quote-portals.md (diff)
The file was addedserver/api/leads/[id]/visuals.put.ts
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
The file was modifiedapp/components/offers/SoftwareQuoteModal.vue (diff)
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was addedapp/composables/useOfferVisuals.ts
The file was modifiedapp/composables/useOfferQuote.ts (diff)
Commit bfd587797b626ffcb8189cafc41d8f773094976b by info
Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar
The file was addedapp/components/settings/price-sheet/PriceSheetCellEditor.vue
The file was addedserver/api/settings/carrier-rates/destroy.delete.ts
The file was addedserver/api/settings/price-sheet/resolve.post.ts
The file was addedserver/api/settings/price-sheet/row-persist.post.ts
The file was modifiedapp/assets/langs/shared.js (diff)
The file was addedapp/components/settings/price-sheet/PriceSheetOptions.vue
The file was addedserver/api/settings/carrier-rates/[id].get.ts
The file was addedserver/utils/shipping/withIdempiere.ts
The file was modifiedapp/composables/menu/admin/settings.ts (diff)
The file was addedserver/api/settings/carrier-rates/fixtures.get.ts
The file was addedapp/pages/settings/carrier-rates/[id]/edit.vue
The file was addedreference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf
The file was addedreference/test-scripts/price-sheet-pdf-smoke.mts
The file was addedserver/api/settings/carrier-rates/update.put.ts
The file was addedserver/assets/shipping/dhl-contract-2025-07.json
The file was addedapp/utils/shippingPriceSheet.ts
The file was addedapp/components/settings/CarrierRateForm.vue
The file was addedapp/composables/useShippingRateFilter.ts
The file was addedapp/components/settings/CarrierRateImportModal.vue
The file was addedserver/api/settings/price-sheet/cell.post.ts
The file was addedapp/components/settings/CarrierRateAction.vue
The file was addedapp/components/settings/price-sheet/PriceSheetMatrix.vue
The file was addedapp/utils/shippingCountryMap.ts
The file was modifiedreference/template-cleanup/01-idempiere-truncate.sql (diff)
The file was addedserver/api/settings/carrier-rates/import.post.ts
The file was added.claude/rules/fulfillment/carrier-rates.md
The file was addedapp/pages/settings/carrier-rates/index.vue
The file was addedreference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx
The file was addedreference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf
The file was addedreference/test-scripts/dhl-contract-parse.mts
The file was addedserver/utils/shipping/priceSheetTexts.ts
The file was addedapp/components/settings/price-sheet/PriceSheetPreviewModal.vue
The file was addedserver/utils/shipping/priceSheet.ts
The file was addedapp/pages/settings/carrier-rates/create.vue
The file was modifiedapp/pages/settings/commission-tables/index.vue (diff)
The file was addedserver/api/settings/carrier-rates/index.get.ts
The file was addedreference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf
The file was addedserver/api/settings/carrier-rates/store.post.ts
The file was addedserver/api/settings/price-sheet/pdf.post.ts
The file was addedserver/utils/shipping/carrierRates.ts
The file was modifiedapp/pages/settings/shipping-cost-overrides/index.vue (diff)
The file was addedapp/pages/settings/price-sheet/index.vue
The file was addedapp/components/settings/ShippingRateFilterBar.vue
The file was addedserver/utils/shipping/priceSheetPdf.ts
The file was modifiedapp/pages/settings/shipping-costs/index.vue (diff)
The file was addedserver/utils/shipping/carrierRateImport.ts
Commit ee4a8f43944460d843d740f23a266aa194d1c73c by info
Storage usage: merchant/warehouse/month/invoiced/product filters (SelectBox) + current m³ list per product with €/day and €/month; mobile product: camera photo capture into the Strapi gallery; dashboard calls card: show call time
The file was addedserver/api/materials/products/[id]/capture-image.post.ts
The file was modifiedapp/pages/mobile/product.vue (diff)
The file was modifiedapp/components/dashboard/RecentCallsCard.vue (diff)
The file was modifiedapp/pages/materials/storage-usage.vue (diff)
Commit 88cc51e42c41b52b0ef6a2a50044bf3e47e00da5 by info
Android app 1.0.73 (versionCode 74): photo capture on the product page
The file was modifiedandroid/update-files/version.json (diff)
The file was modifiedandroid/app/build.gradle (diff)
Commit a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8 by info
Mobile product: in-page camera (getUserMedia, back camera) for product photos instead of the file-chooser capture; Capture section with equal EAN / Foto buttons
The file was modifiedapp/pages/mobile/product.vue (diff)
Commit f507276e33a2a2b4e602c4f169152302ee3a632a by info
Mobile product: capture buttons pause the scanner focus monitor on pointerdown (lost taps); camera start timeout + Systemkamera fallback; EAN overlay closes via one helper
The file was modifiedapp/pages/mobile/product.vue (diff)
Commit 516568ccc124baa6cb47f97aa42e11df10f8fc2c by info
Android app version bump (release script)
The file was modifiedandroid/update-files/version.json (diff)
The file was modifiedandroid/app/build.gradle (diff)
Commit 6114d50ab9e4bbe374d82c3b520e6199a8208f1f by info
Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
Commit 216f0bd0224bbc8f4b06813093be696bebd6e2fc by info
Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows

public/flags SVGs bundled as Nitro server asset assets:flags, rasterised once per process with sharp
(flagImages.ts, 36 px PNG, 1 px border, fixed-width flag column so names align); smoke script mocks the
flags storage; recipe note in carrier-rates.md.
The file was modified.claude/rules/fulfillment/carrier-rates.md (diff)
The file was modifiedserver/utils/shipping/priceSheetPdf.ts (diff)
The file was modifiednuxt.config.ts (diff)
The file was addedserver/utils/shipping/flagImages.ts
The file was modifiedreference/test-scripts/price-sheet-pdf-smoke.mts (diff)
Commit 15f8fe46047dba042a4911aa0b769540a9be9bcf by info
Order sources: Adobe Commerce brand tile (Adobe A on red) + OTTO red-on-white in MarketplaceIcon; sales-orders source column draws brand tiles for amazon/ebay/otto/shopify/shopware/etsy/kaufland/zalando/adobe-commerce instead of hardcoded images
The file was modifiedapp/components/MarketplaceIcon.vue (diff)
The file was modifiedapp/components/AgGrid/SalesOrder/AgCustomOrderSource.vue (diff)
Commit a5bd7fc3a443fb233b9f7fcadd66769573b13c53 by info
Price sheet: keep disabled services listed (resolve returns all services; unchecked service vanished and stayed hidden via localStorage), sticky country/service search in the matrix (German DHL names, / focuses, Esc clears, per-section counts), internal row notes no longer printed on the merchant PDF
The file was modifiedserver/utils/shipping/priceSheet.ts (diff)
The file was modified.claude/rules/fulfillment/carrier-rates.md (diff)
The file was modifiedserver/utils/shipping/priceSheetPdf.ts (diff)
The file was modifiedapp/components/settings/price-sheet/PriceSheetMatrix.vue (diff)
Commit e1c8a33447062451463ed92771ea36c16c30cf2c by info
Demo tooling: VONROC merchant (vonroc.de Magento GraphQL catalog builder, masters by model code, stock top-up / zero-stock scripts, return reasons), seed-orders-returns MIX=shipped with DHL-style tracking numbers, printed-only shipments, REASONS_FILE; README
The file was addedreference/demo-instance/vonroc/build-catalog.py
The file was addedreference/demo-instance/vonroc/zero-open-order-stock.sh
The file was addedreference/demo-instance/vonroc/return-reasons.txt
The file was modifiedreference/demo-instance/README.md (diff)
The file was modifiedreference/demo-instance/seed-orders-returns.sh (diff)
The file was addedreference/demo-instance/vonroc/topup-stock.sh
The file was addedreference/demo-instance/vonroc/catalog.json
The file was addedreference/demo-instance/vonroc/masters.json
Commit e9d5d032dbf89df1468a6065886429bd8bda05b4 by info
Contract/AGB: carrier cases under LogYou's shipping contract (Nachforschungsauftrag, damage/loss claims, address/delivery clarifications, complaints) billed by time at the hourly rate (contract Versandkosten DE/EN + offer footnote); AGB § 13.6 Schwundtoleranz 1 % → 0,5 % p. a. (only place it is defined, contract placeholder default aligned)
The file was modifiedserver/utils/offers/contractTexts.ts (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
The file was modifiedserver/utils/offers/agbDefault.ts (diff)
The file was modifiedserver/utils/offers/contractPdf.ts (diff)
The file was modified.claude/rules/offers/contract-and-quote-portals.md (diff)
Commit 36ef84187503ca39d09327215d4b104159004f63 by info
Quote: three configurable fulfillment plans (Start / Wachstum / Premium with name, price, description, feature list, per-plan 'im PDF' flag) edited as cards in the modal and printed as brand cards under the monthly costs; selected plan drives the Servicepauschale for forecast/contract; legacy saved fee maps onto Start
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was modified.claude/rules/offers/pdf-generation.md (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
Commit 0472dd21e8a930038306cbc34c56bd760b9910b9 by info
Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
Commit 149ef56dcf85a8d99be10f4bd3104da5d9792ebf by info
Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'
The file was modified.claude/rules/offers/pdf-generation.md (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
Commit bd25164b7c24d06932995a04f1fff305d56fa18d by info
Quote plans: no selection — the first plan ticked 'im PDF' supplies the Servicepauschale (chip on its card), PDF shows the plans without any highlight
The file was modified.claude/rules/offers/pdf-generation.md (diff)
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
Commit 6ab80acd4a821be044b75056685275663a51b831 by info
Quote PDF: plan cards with spacing (white gap columns in the equal-height table), orange accent bar, navy header with orange price, feature list below
The file was modified.claude/rules/offers/pdf-generation.md (diff)
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
Commit 133b0c683d401045311c049876d4218a418398cf by info
Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit f8511bdf3ea0936dda5be78c565f74da1a31bd1c by info
Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 72d31977548a17161c0350bef51f8c59487ce9ca by info
Lead page offer group: narrower buttons (tighter padding, smaller font)
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 5641d417aaf99cd8d9ccc47a2611055544ba49c5 by info
Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 7554b436e68e1b7a580814ed8efbbf56612eab8c by info
Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78 by info
Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 85d1c963b6992c503910a04fee161e1c25070db4 by info
Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 220e6c3bb9740e9d1f142a9a9654c937fba6a0ca by info
Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit fcb4ba6d7801d359d7f1993e109d7df3bb05d367 by info
Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
Commit 61b2a9fa700dd32b7fe2e145948060e4a6dc335b by info
Android app 1.0.75 (versionCode 76): release-script version bump
The file was modifiedandroid/app/build.gradle (diff)
The file was modifiedandroid/update-files/version.json (diff)
Commit fda427288fed8d5a34d1c745e37c23ca041c9a3d by info
Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)
The file was modifiedapp/pages/mobile/product.vue (diff)