e0f5f241b9
test(dillydallying): testing the ci workflow
2026-05-23 22:06:42 +02:00
60f52f9851
add ci ( #1 )
...
* ci(checks): add pull request workflow and golangci-lint config
* refactor(lint): resolve golangci-lint findings
* style(tui): drop traling blank line for gofmt
* fix(cards): handle crypto/rand.Read error in storeRedirect
2026-05-23 21:43:30 +02:00
a4c446ba3c
fix(tui): change the stripe abandoned payment polling duration from 2 to 10 mins
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
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
Deploy / deploy (push) Has been cancelled
2026-05-23 11:34:27 +02:00
1752ca534f
chore(tui): update some typage
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
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
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
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
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
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
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
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
Deploy / deploy (push) Has been cancelled
2026-05-20 15:07:14 +02:00
f73e1d18da
feat(tui): make tracking url clickable osc 8 hyperlink
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
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
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
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
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
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
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
Deploy / deploy (push) Has been cancelled
2026-05-15 11:27:00 +02:00
c1b3ccf302
feat(notify): add buy label button via slack
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
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
...
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
Deploy / deploy (push) Has been cancelled
2026-05-14 13:47:20 +02:00
ee6e14a424
feat(shipping): shippo webhook fro tracking status updates
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
Deploy / deploy (push) Has been cancelled
2026-05-13 22:14:32 +02:00
ff9615b75a
fix(shippo): fix rate-filter
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
Deploy / deploy (push) Has been cancelled
2026-05-12 21:47:06 +02:00
37ad51949b
fix(shipping): require sender email on shippo address_from
...
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
...
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
...
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
Deploy / deploy (push) Has been cancelled
2026-05-10 21:08:57 +02:00
700ad4926b
feat(models): derive order state from status + tracking
Deploy / deploy (push) Has been cancelled
2026-05-09 16:50:33 +02:00
c5f4e492c0
refactor(orders): embed tracking on orders, drop shipments table
...
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
Deploy / deploy (push) Has been cancelled
2026-05-08 15:15:53 +02:00
c6ff75f2a5
chore. ignore local DB backups and prod backups
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
Deploy / deploy (push) Has been cancelled
2026-05-08 13:43:03 +02:00
1849e324fc
feat: add admin tracking updates
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
Deploy / deploy (push) Has been cancelled
2026-05-06 13:53:38 +02:00
38cdda3d54
cleanup
Deploy / deploy (push) Has been cancelled
2026-05-06 13:41:23 +02:00
c037a6e9f9
removing unused param
Deploy / deploy (push) Has been cancelled
2026-05-05 22:05:29 +02:00
ffb476ec2d
updating variable to camelcase
Deploy / deploy (push) Has been cancelled
2026-05-05 22:04:24 +02:00
177b080117
some change
Deploy / deploy (push) Has been cancelled
2026-05-05 21:04:02 +02:00
9bf57b4048
perf(loadtest): retune overnight scenarios under rate limits
...
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