16 Commits
Author SHA1 Message Date
mizorewww 002e42d962 Restore queue positions after refresh and protect in-flight payments 2026-10-06 19:06:59 +08:00
mizorewww 3840bad7f0 Preserve payment queues across restarts and use three-minute windows 2026-10-06 17:31:42 +08:00
mizorewww a5667bbbb2 fix: verify public checkout links and add a paced queue with Material status cards 2026-10-06 16:00:12 +08:00
mizorewww 7a5d4c8db0 feat: protect public submissions with Cloudflare Turnstile 2026-10-04 18:07:48 +08:00
mizorewww f7c21669bf feat: add isolated public Stripe checkout links in homepage FAQ 2026-10-04 17:56:52 +08:00
mizorewww ef83f0e396 feat: generate manual Stripe payment links by username and duration 2026-10-04 17:34:32 +08:00
mizorewww f355d1557d feat: split admin recovery panel into node and payment card cards
Move the Stripe node pool and per-card status out of the recovery card
into two dedicated panels with skeleton, empty, paused, and
failure-and-retry states. Translate backend card problem and block
reasons into Chinese, explain the rotation cadence and pair cooldowns,
warn when no card can currently pay, and drive the pause warning from
the real PaymentPaused flag instead of the site-wide switch.

Refresh the preview mock with realistic rotation values, real reason
strings, and a PREVIEW_NETWORK=direct switch; rebuild the assets.
2026-10-04 14:27:36 +08:00
mizorewww 83ac3f00ae feat: add card rotation, customer lookup, and concurrent eligibility checks
Add encrypted card pool management, persisted card and outbound rotation, and per-card decline cooldowns. Improve customer and redemption-code lookup, recovery controls, and filtering; rebuild frontend assets and refresh mock screenshots.

Give read-only eligibility checks four independent slots so payment processing no longer blocks them. Cover concurrency, slot cleanup, card rotation, and lookup behavior with tests.
2026-10-04 11:44:38 +08:00
mizorewww 56c606ca40 feat: add pre-redemption eligibility check
POST /api/check runs the read-only X gifting-eligibility query for
a username under the shared work semaphore with its own 8/min rate
bucket, so visitors can verify their account before redeeming. The
redeem page gains an advisory check button with loading and result
states.
2026-10-03 17:29:32 +08:00
mizorewww a4f37555d6 feat: add client-side expression filter to the codes table
Compose folder and status conditions with and/or/parentheses in the
admin UI (typed or assembled from helper chips). In filter mode all
pages are fetched and matched client-side with local pagination, so
no backend changes are needed. Invalid expressions show precise
Chinese errors without fetching.
2026-10-03 14:16:48 +08:00
mizorewww a31de399ad feat: add admin statistics dashboard and polling resume
Add GET /api/admin/stats aggregating code counts, redemption and
success rates, per-plan totals, a 30-day activity series, and review
stage distribution. Render a collapsible stats panel with summary
cards and an accessible SVG bar chart on the admin page, show total
count and pages in pagination, and let users resume status polling
after the 5-minute timeout without re-redeeming.
2026-10-03 11:38:34 +08:00
mizorewww 7162039c6d feat: resume unsubmitted review orders through explicit user action 2026-10-03 10:53:39 +08:00
mizorewww ba162cb7d1 fix: use batch folders and explicit icon actions with row copying 2026-10-02 19:26:31 +08:00
mizorewww c06fbe466d feat: manage redemption folders from the admin dashboard 2026-10-02 19:15:18 +08:00
mizorewww 2cc8d8acde fix: centralize theme colors and use neutral gray surfaces 2026-10-02 19:04:08 +08:00
mizorewww b4b9d2a36d feat: migrate redemption and admin UI to themed React and MUI 2026-10-02 19:02:21 +08:00