Commit Graph

  • 28932d552b fix(deploy): run cloudflared tunnel instead of image default version cmd chore/lfs-cloudflare-tunnel marcusDenslow 2026-10-21 14:43:01 +02:00
  • ead51c640d chore(deploy): run prod compose on lfs box behind cloudflare tunnel marcusDenslow 2026-10-21 14:34:23 +02:00
  • f61d9118a0 feat(slack): show mark status buttons on all labeled orders fix/slack-mark-status-all-carriers marcusDenslow 2026-06-30 20:02:17 +02:00
  • d7f2189394 fix(slack): fix carried-gated nonsense marcusDenslow 2026-06-30 19:47:06 +02:00
  • ebd3e20285 chores/random chores (#60) master marcus06 2026-06-29 20:14:05 +02:00
  • 9d5096b270 fix(privacy): forget saved card after privacy-mode checkout (#59) marcus06 2026-06-19 10:04:35 +02:00
  • 85ed872c28 feat(privacy): add privacy mode (#58) marcus06 2026-06-19 09:31:44 +02:00
  • 2c12ba586e feat(sca): charge checkout as customer-initiated transaction (#57) marcus06 2026-06-18 10:48:00 +02:00
  • 0c0b8e8059 fix(tui): accept spend limit input in dollars (#56) marcus06 2026-06-17 15:34:03 +02:00
  • 7148ff1d4d feat(sca): add customer-set spend limit (#55) marcus06 2026-06-17 13:25:04 +02:00
  • 22eeeeeac1 feat(sca): enforce user self-limit as lower-only cap in convert-cart (#54) marcus06 2026-06-17 10:24:55 +02:00
  • aa446cdfa5 feat(sca): add per-user spend cap override (#53) marcus06 2026-06-16 14:56:38 +02:00
  • 8df1058932 test(api): cover everyTick helper (#52) marcus06 2026-06-16 13:34:55 +02:00
  • 64b6f0d91a refactor(api): extract everyTick helper for reconciler goroutines (#51) marcus06 2026-06-15 10:17:02 +02:00
  • 5dd196834f feat/sca pay redirects sweep (#50) marcus06 2026-06-15 00:39:31 +02:00
  • e85dc7fd4d fix(webhook): fail closed when stripe webhook secret is not set (#45) marcus06 2026-06-14 22:12:36 +02:00
  • ff562c7427 docs(docs): update docs to get rid of gopls warnings. update some code to newer standards (#49) marcus06 2026-06-14 21:42:02 +02:00
  • aa34043e9b feat(tuie): drive roast meter from product roast_level field (#48) marcus06 2026-06-11 16:28:04 +02:00
  • 5dd22fb8be style(tui): update rest of tui to new ui pattern (#47) marcus06 2026-06-11 15:53:48 +02:00
  • 52d533703b feat(tui): remake parts of the tui (#46) marcus06 2026-06-11 11:24:56 +02:00
  • c9f8b1e674 test(test): smoke test deploy script with dirty box tree (#44) marcus06 2026-06-09 19:39:09 +02:00
  • d592249efb fix: fail deploy loudly on stale pull or HEAD mismatch (#43) marcus06 2026-06-09 19:20:08 +02:00
  • cfc97eb1ff fix/temp disable sshCardAdd button (#42) marcus06 2026-06-09 14:33:09 +02:00
  • c112797875 refactor(sca): thread context.Context through reconciler entry points (#41) marcus06 2026-06-09 00:31:56 +02:00
  • 75225548ae feat(sca): emit abandoned_3ds_sweep_total counter from stale 3ds sweep (#40) marcus06 2026-06-08 23:11:44 +02:00
  • 53e934be3b chore(cap): raise per-order spend cap default from 200 to 500 (#39) marcus06 2026-06-07 23:47:43 +02:00
  • fc02f331d2 feat(audit): emit cart_rejected event when per-order cap blocks checkout (#38) marcus06 2026-06-07 23:25:30 +02:00
  • bb960c31f8 feat(sca): sweep abandoned 3ds requires_action orders to failed (#37) marcus06 2026-06-07 18:16:33 +02:00
  • 8b753e4f4b feat(sca): add requires_action orde status for 3ds in flight sate (#36) marcus06 2026-06-06 21:06:25 +02:00
  • 90645958e5 chore(repo): change all instances of interface{} to any as of newer go standards (#35) marcus06 2026-06-06 13:59:09 +02:00
  • 135f1361e4 fix(products): update pricing on products (#34) marcus06 2026-06-05 23:49:03 +02:00
  • 64deba7e03 feat(sca): wire retry-auth keybind on authfailed review screen (#33) marcus06 2026-06-05 22:52:54 +02:00
  • 732353d9a4 fix(tui): fix the menu always selecting the first entry in the refund page (#32) marcus06 2026-06-04 00:09:07 +02:00
  • 3420c8dce0 feat(sca): add retry-auth endpoint for failed 3ds challenges (#31) marcus06 2026-06-03 23:42:27 +02:00
  • f3b94c3271 chore(test): add gotestsum + tparse runner with ci wiring (#30) marcus06 2026-06-02 23:17:03 +02:00
  • 67e19eca98 feat(sca): expire inactive saved cards (#29) marcus06 2026-06-02 21:49:48 +02:00
  • 728ac24c96 fix(sca): return over-limit checkout errors to cart (#28) marcus06 2026-06-02 10:28:56 +02:00
  • 1096c85b10 chore(ops): add nightly backup verification scripts (#27) marcus06 2026-06-02 00:02:27 +02:00
  • 2f65cf0d90 feat(sca): cap per-order total ro prevent oversize charges (#26) marcus06 2026-06-01 22:40:20 +02:00
  • c3e6eb2b84 fix(ci): pin deploy go-version to go.mod to match ci.yml (#25) marcus06 2026-05-30 23:29:19 +02:00
  • 03009ea6df chore(ci): bump checkout and setup-go to node24-ready majors (#24) marcus06 2026-05-30 23:19:29 +02:00
  • c8b7545ca6 chore(ci): skip golangci-lint under act to avoid node path issue (#23) marcus06 2026-05-30 19:48:20 +02:00
  • 3a3c7ee80b feat(sca): persist redirect tokens to sqlite with 10min ttl (#22) marcus06 2026-05-30 14:12:57 +02:00
  • 7c8a2b562f feat(sca): handle 3ds checkout end to end with qr poll and race fix (#21) marcus06 2026-05-28 12:41:36 +02:00
  • 1c5765d25b fix(sca): pass payment method on reconfirm so 3ds next_action surfaces (#20) marcus06 2026-05-28 12:20:35 +02:00
  • e6301e662f fix(sca): re-confirm payment intent on-session to surface 3ds next_action (#19) marcus06 2026-05-28 12:05:41 +02:00
  • 8b2889a524 fix(sca): re-fetch payment intent when error response omits next_action (#18) marcus06 2026-05-28 11:53:54 +02:00
  • c2b2b6e834 fix: allow redirect next_action so 3ds challenge url surfaces (#17) marcus06 2026-05-28 11:37:55 +02:00
  • bba5a0dfa0 feat(sca): return 202 + 3ds redirect token when checkout requires auth (#16) marcus06 2026-05-28 11:20:16 +02:00
  • a8e45bc82b feat(sca): map stripe error codes to user-facing copy in tui (#15) marcus06 2026-05-28 10:28:47 +02:00
  • 95b9fa91b1 feat(sca): add order status endpoint adn SCA error code mapping (#14) marcus06 2026-05-27 19:23:29 +02:00
  • 0fe013c399 feat(cart): pass off_session=true on PaymentIntent for SCA exemption eligibility (#13) marcus06 2026-05-27 18:09:50 +02:00
  • d9404ab31e style(tui): update refund page ui (#12) marcus06 2026-05-25 23:18:42 +02:00
  • a21485f91d fix(tui): way to much to write (#11) marcus06 2026-05-25 22:34:25 +02:00
  • bce94b6d10 feat(refund): add refund request flow (#10) marcus06 2026-05-25 22:04:03 +02:00
  • dee6172875 refactor(tui): port to charm v2 (#9) marcus06 2026-05-25 19:09:16 +02:00
  • b404303f84 feat(notify): daily slack reminder for paid orders awaiting labels (#8) marcus06 2026-05-25 16:45:15 +02:00
  • 48d65c48fa feat(tui): render customer-facing event timeline in order detail veiew (#7) marcus06 2026-05-24 20:14:14 +02:00
  • c78021f520 docs(comments): add some comments (#6) marcus06 2026-05-24 18:57:58 +02:00
  • c429c1966e docs(comments): add some comments (#5) marcus06 2026-05-24 18:44:25 +02:00
  • 50e1ba32f3 docs(comments): add some comments (#4) marcus06 2026-05-24 12:26:34 +02:00
  • 85b0c53c0a docs(comments): cleanup comments (#3) marcus06 2026-05-24 12:02:50 +02:00
  • 366d80a9ee test(dillydallying): testing the ci workflow (#2) marcus06 2026-05-23 22:12:46 +02:00
  • 60f52f9851 add ci (#1) marcus06 2026-05-23 21:43:30 +02:00
  • a4c446ba3c fix(tui): change the stripe abandoned payment polling duration from 2 to 10 mins marcusDenslow 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 marcusDenslow 2026-05-23 12:50:35 +02:00
  • 153e487155 chore: add reconcile-cards script to detach orphan stripe pms from customers marcusDenslow 2026-05-23 11:34:27 +02:00
  • 1752ca534f chore(tui): update some typage marcusDenslow 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 marcusDenslow 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 marcusDenslow 2026-05-22 21:38:18 +02:00
  • 30cf46370c fix(cards): duplicate card entries after adding card through stripe webhook fixed marcusDenslow 2026-05-22 21:21:02 +02:00
  • 31f0698d63 chore(gitignore): update gitignore marcusDenslow 2026-05-22 21:19:32 +02:00
  • 910b7f3141 chore(gitignore): update .gitignore with the claude skill to map codebase marcusDenslow 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 marcusDenslow 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 marcusDenslow 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 marcusDenslow 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 marcusDenslow 2026-05-20 15:26:38 +02:00
  • e49fa01ca9 feat(tui): use BEL terminator for tracking url osc 8 link - hopefully this works marcusDenslow 2026-05-20 15:12:56 +02:00
  • d9e9895913 revert(tui): render raw tracking url, last change wouldnt render the url for some reason marcusDenslow 2026-05-20 15:07:14 +02:00
  • f73e1d18da feat(tui): make tracking url clickable osc 8 hyperlink marcusDenslow 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 marcusDenslow 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 marcusDenslow 2026-05-19 20:12:03 +02:00
  • 9515603b32 feat(tui): split account orders into active and history tabls marcusDenslow 2026-05-19 19:50:21 +02:00
  • bfd183bfbf fix(ci): remove go module cache step since its redundant marcusDenslow 2026-05-15 15:34:21 +02:00
  • e43040f702 feat(notify): post order vents into per-order slack threads - made by claude marcusDenslow 2026-05-15 12:25:45 +02:00
  • 2966474ff5 feat(notify): render slack order notification as block kit receipt with line items marcusDenslow 2026-05-15 12:11:16 +02:00
  • 0e4d267adb fix(orders): write NULL instead of empty string for unpopulated shipp_transaction_id marcusDenslow 2026-05-15 11:27:00 +02:00
  • c1b3ccf302 feat(notify): add buy label button via slack marcusDenslow 2026-05-15 10:57:23 +02:00
  • f6eed76456 feat(notify): post Slack message when an order is paid marcusDenslow 2026-05-15 08:54:23 +02:00
  • e5ec247a6b feat(orders): customer-facking tracking labels and webhook response body marcusDenslow 2026-05-14 21:17:50 +02:00
  • e29dd6b30d fix(middleware): redact query strings from access logs marcusDenslow 2026-05-14 13:47:20 +02:00
  • ee6e14a424 feat(shipping): shippo webhook fro tracking status updates marcusDenslow 2026-05-14 13:30:37 +02:00
  • 387758aa13 feat(shipping): add Bring booking client and country dispatch for label purchase marcusDenslow 2026-05-13 22:14:32 +02:00
  • ff9615b75a fix(shippo): fix rate-filter marcusDenslow 2026-05-13 08:58:09 +02:00
  • a2afc47f32 refactor(shipping): check ALREADY_LABELED before INVALID_STATE in PurchaseLabel marcusDenslow 2026-05-12 21:47:06 +02:00
  • 37ad51949b fix(shipping): require sender email on shippo address_from marcusDenslow 2026-05-12 21:17:32 +02:00
  • 99f34788ea fix(shipping): round weights before posting to shippo marcusDenslow 2026-05-12 21:12:31 +02:00
  • c22b64d6fa feat(shipping): shippo label purchase endpoint marcusDenslow 2026-05-12 20:57:11 +02:00
  • a71f72ad71 chore: update typing marcusDenslow 2026-05-10 21:08:57 +02:00
  • 700ad4926b feat(models): derive order state from status + tracking marcusDenslow 2026-05-09 16:48:10 +02:00