The Stripe payment flow in the widget was half-built and fully shipped. Card forms, pay-later checkboxes, a save-payment-method endpoint — infrastructure for a payment model the business hadn't settled on yet. Customers were confused by payment options they weren't supposed to see. The code got removed: CheckoutStep stripped of Stripe Elements, the store stripped of payment state, the controller stripped of the endpoint, the route stripped from the API. Checkout now collects name, phone, notes, and completes the order. Clean.
Status labels had been lying. Orders with status quoted displayed as "Sold." Orders with status sold displayed as "Complete." The formatter config had them swapped — a pure labeling bug where the database was correct but the UI told a different story. Corrected across the formatter, the Kanban board columns, and the filter dropdown.
Row-click came to the orders DataTable. Previously you had to find and click a specific expand button to see order details. Now clicking anywhere on the row opens it. The address column changed from a full-row link to inline text with a small external-link icon for Google Maps — with @click.stop so clicking the map link doesn't also toggle the row.
The quote page inherited the tenant's full brand: background, foreground, accent, font family, button text color, button radius. All three child components — header card, map card, products card — now use the --brand-* CSS variable system with color-mix() for consistent theming. Previously, only the button color was branded. Now the entire quote page looks like it belongs to the business sending it.