Commit Graph

158 Commits

Author SHA1 Message Date
b5ad61eca6 chore/any-pragmatism (#1)
Some checks failed
Deploy / deploy (push) Has been cancelled
Reviewed-on: http://gitea/marcusDenslow/terminalShop/pulls/1
2026-06-06 13:02:02 +00:00
a4c446ba3c fix(tui): change the stripe abandoned payment polling duration from 2 to 10 mins
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-23 13:15:15 +02:00
491f70e935 fix: add 2-minute timeout to browser payment poll so abandoned stripe checkout sessions stop polling
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-23 12:50:35 +02:00
153e487155 chore: add reconcile-cards script to detach orphan stripe pms from customers
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-23 11:34:27 +02:00
1752ca534f chore(tui): update some typage
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-22 22:18:44 +02:00
b2bd6ed623 fix(cards): advance tui after duplicate card detection by pollin on updated_at instead of count
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-22 22:09:55 +02:00
96400ede14 fix(cards): dedupe saved cards via local-db last4+brand+exp match in checkout.sessions.completed webhook
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-22 21:38:18 +02:00
30cf46370c fix(cards): duplicate card entries after adding card through stripe webhook fixed
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-22 21:21:02 +02:00
31f0698d63 chore(gitignore): update gitignore 2026-05-22 21:19:32 +02:00
910b7f3141 chore(gitignore): update .gitignore with the claude skill to map codebase
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-22 20:05:20 +02:00
19e493a3d5 feat(bring): send X-Bring-Client-URL header on booking reqs, defaulting to https://sshops.uk and overridable via BRING_CLIENT_URL env var 2026-05-22 20:02:43 +02:00
2e6dda190f feat(audit): persist every order-scoped audit.X(...) call to a new order_events table alongside the existing slog line, builds the foundation for an admin order timeline view without changing the slog primary path 2026-05-22 20:01:29 +02:00
96e76f7e5b feat(slack): add slack mark status buttons for bring orders, post-label thread now block kit, synthesize shippo webhook over loopback to reuse state-date guard and delivered transition
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-20 18:09:34 +02:00
9d3ac9761d feat(tui): add tracking redirect endpoint, render the short uril in the tui order detail instead of the old broken stuff ive been trying. this change is made by claude code and has not been reviewed carefully, this might break
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-20 15:26:38 +02:00
e49fa01ca9 feat(tui): use BEL terminator for tracking url osc 8 link - hopefully this works
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-20 15:12:56 +02:00
d9e9895913 revert(tui): render raw tracking url, last change wouldnt render the url for some reason
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-20 15:07:14 +02:00
f73e1d18da feat(tui): make tracking url clickable osc 8 hyperlink
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-20 14:55:32 +02:00
29f57000a7 feat(notify): pin paid order messages in the #orders channel in slack, unpin on label purchase
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-20 14:01:28 +02:00
1aaf82d7d6 feat(tui): poll orders every 10 seconds so that the order status refreshes live in the tui without logging out and in
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-19 20:12:03 +02:00
9515603b32 feat(tui): split account orders into active and history tabls
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-19 19:50:21 +02:00
bfd183bfbf fix(ci): remove go module cache step since its redundant
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-15 15:34:21 +02:00
e43040f702 feat(notify): post order vents into per-order slack threads - made by claude
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-15 12:25:45 +02:00
2966474ff5 feat(notify): render slack order notification as block kit receipt with line items
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-15 12:11:16 +02:00
0e4d267adb fix(orders): write NULL instead of empty string for unpopulated shipp_transaction_id
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-15 11:27:00 +02:00
c1b3ccf302 feat(notify): add buy label button via slack
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-15 10:57:23 +02:00
f6eed76456 feat(notify): post Slack message when an order is paid
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-15 08:54:23 +02:00
e5ec247a6b feat(orders): customer-facking tracking labels and webhook response body
Some checks failed
Deploy / deploy (push) Has been cancelled
the big colored status on the order detail page used to just say
"Shipped" the moment i bought the label, which didnt really feel right
since the carrier hadnt actually picked anything up yet. now it walks
through "Label created" -> "In transit" -> "Delivered" as real scans
come in, and keeps the "Delivery Issue" / "Returned to sender" labels
for unhappy paths

also wired up the existing tracking_status_details column to the tui. i
skipped it before but the response actually includes a description of
the delivery, that is now subtext under the colored statu.

and the shippo webhook now returns a small json body instead of an empty
200. this is just for the operator that runs the curls commands to
     update the shipment, which makes debugging a lot less guesswork
2026-05-14 21:17:50 +02:00
e29dd6b30d fix(middleware): redact query strings from access logs
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-14 13:47:20 +02:00
ee6e14a424 feat(shipping): shippo webhook fro tracking status updates
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-14 13:30:37 +02:00
387758aa13 feat(shipping): add Bring booking client and country dispatch for label purchase
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-13 22:14:32 +02:00
ff9615b75a fix(shippo): fix rate-filter
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-13 08:58:09 +02:00
a2afc47f32 refactor(shipping): check ALREADY_LABELED before INVALID_STATE in PurchaseLabel
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-12 21:47:06 +02:00
37ad51949b fix(shipping): require sender email on shippo address_from
Some checks failed
Deploy / deploy (push) Has been cancelled
Shippo's transaction validation rejects labels where the from-address
has no email — fails at the poll step with
"Attribute address_from.email must not be empty."

Add Email to Address, plumb it into addrPayload, and read
SHIP_FROM_EMAIL alongside the other SHIP_FROM_* env vars.
2026-05-12 21:17:32 +02:00
99f34788ea fix(shipping): round weights before posting to shippo
Some checks failed
Deploy / deploy (push) Has been cancelled
Shippo's /v1/orders endpoint rejects >2 decimal places on parcel
weight and >4 on line_items[].weight. Converting ounces to kg
(oz * 0.0283495) routinely produces 6-decimal values, so the first
real label purchase 400'd with "Ensure that there are no more than
N decimal places".

Round at the payload boundary in createShippoOrder rather than in
the caller — keeps the precision of the source (Coffee.Ounces) and
only loses it when the wire format demands it.
2026-05-12 21:12:31 +02:00
c22b64d6fa feat(shipping): shippo label purchase endpoint
Some checks failed
Deploy / deploy (push) Has been cancelled
Adds POST /api/v1/orders/{id}/label (admin-only) that buys a shipping
  label through Shippo and writes carrier + tracking + label fields back
  onto the order, transitioning paid -> shipped.
2026-05-12 20:57:11 +02:00
a71f72ad71 chore: update typing
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-10 21:08:57 +02:00
700ad4926b feat(models): derive order state from status + tracking
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-09 16:50:33 +02:00
c5f4e492c0 refactor(orders): embed tracking on orders, drop shipments table
Some checks failed
Deploy / deploy (push) Has been cancelled
realized per-shipment table is kinda bad, switched to single embedded tracking blob. since im only
shipping from my house  no split is needed. adds tracking_status, tracking_status_details,
tracking_status_updated_at columns. reverse-backfills any historical shipments rows back onto orders
(idempotent, table-guarded). UpdateTracking rewritten to write to otder columns direcly
2026-05-09 10:08:32 +02:00
f88fe1d8d3 fix: preload shipments on view init endpoint
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-08 15:15:53 +02:00
c6ff75f2a5 chore. ignore local DB backups and prod backups
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-08 14:59:47 +02:00
add6e573b3 feat: extract shipments to dedicated table 2026-05-08 14:54:17 +02:00
9b45fb5138 updating
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-08 13:43:03 +02:00
1849e324fc feat: add admin tracking updates
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-08 10:47:57 +02:00
c90dadf9ad test was failing after some AI change. this should fix it
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-06 13:53:38 +02:00
38cdda3d54 cleanup
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-06 13:41:23 +02:00
c037a6e9f9 removing unused param
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-05 22:05:29 +02:00
ffb476ec2d updating variable to camelcase
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-05 22:04:24 +02:00
177b080117 some change
Some checks failed
Deploy / deploy (push) Has been cancelled
2026-05-05 21:04:02 +02:00
9bf57b4048 perf(loadtest): retune overnight scenarios under rate limits
Some checks failed
Deploy / deploy (push) Has been cancelled
Document and respect per-IP rate limits (200/min global, 20/min auth,
60/min webhooks) by holding scenarios well below the ceilings so the
histogram captures real handler latency instead of 429s. Total combined
~148 req/min over ~10h. Adds summaryTrendStats so reports include
p95/p99/max alongside avg.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 09:51:27 +02:00
c96f922c70 refactor(tui): rebuild header with lipgloss/table
Replaces the manual string-concat + separator layout with a
lipgloss/table row, mirroring the reference TUI structure. Drops the
parallel bold-vs-gray styling for a single-weight accent/base scheme,
extracts a small tab() closure to remove the duplicated active/inactive
branches, and uses m.renderer.NewStyle() for the border so per-session
color profiles render correctly under SSH.

Cart label still tracks inCartFlow() (covers shipping/payment/review/
confirm), which the reference doesn't need since it has no multi-step
checkout.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 09:51:21 +02:00