Customers who cannot see when their order will arrive either abandon checkout or open support tickets after purchase, both of which erode margin. Delivery-date visibility is a core commerce UX expectation set by Amazon and reinforced across every major retailer; its absence signals an amateur storefront. Gift buyers, event buyers, and deadline-driven purchases all require a concrete arrival window to convert. Missing or identical timeframes across methods also defeats the purpose of offering tiered shipping in the first place.
Medium because it reduces conversion and inflates support load without causing data loss, security impact, or legal exposure.
Compute a delivery estimate per shipping method from processing days plus transit days, skip weekends (and optionally holidays) during the walk, and render the resulting date or day range next to each method label in the checkout selector. Centralize the logic in lib/shipping.ts so order confirmation emails and product pages can reuse it:
export function estimateDelivery(method, orderedAt = new Date()) {
// walk business days: processingDays + method.transitDays
}
ID: ecommerce-shipping-tax.shipping-calc.delivery-timeframe
Severity: medium
What to look for: Count the number of shipping methods that display a delivery timeframe estimate. For each method, classify whether the estimate includes: (1) processing days, (2) transit days, (3) total estimated delivery date. Verify estimates are shown before payment confirmation.
Pass criteria: At least 2 shipping methods display delivery timeframe estimates including a date or day range (e.g., "Arrives Jan 15-17" or "3-5 business days") visible in the checkout UI before payment confirmation. Estimates must vary by shipping method. Report even on pass: list each method and its displayed timeframe.
Fail criteria: No delivery timeframe estimates are shown in checkout, or estimates are identical across all methods, or timeframes are shown only after purchase on the confirmation page.
Skip (N/A) when: The store offers only digital products or same-day local pickup with no shipping.
Detail on fail: "0 of 3 shipping methods display a delivery timeframe. Customer sees only method name and cost, no estimated date." or "All 2 methods show '5-7 days' — timeframes do not vary by method."
Remediation: Calculate and display delivery estimates in lib/shipping.ts:
function calculateDeliveryDate(shippingMethod: ShippingMethod, orderDate: Date = new Date()): Date {
const processingDays = 1
const transitDays = shippingMethod.days
const totalDays = processingDays + transitDays
let deliveryDate = new Date(orderDate)
let daysAdded = 0
while (daysAdded < totalDays) {
deliveryDate.setDate(deliveryDate.getDate() + 1)
// Skip weekends (5 = Friday, 6 = Saturday, 0 = Sunday)
if (deliveryDate.getDay() !== 0 && deliveryDate.getDay() !== 6) {
daysAdded++
}
}
return deliveryDate
}