## Summary
- Closes #31
- Public `/signup/` page (Sign In–matched UI): register → JWT → `POST /api/finance/checkout/` → redirect to Stripe hosted Checkout
- `/billing/success` and `/billing/cancel` return URLs
- Sign In ↔ Sign Up links; Sign Up link only when backend `enable_account_registration` is true
Depends on backend PR: registration flag + public settings + gated `/user/create/`
## Test plan
- [ ] `cd llm-fe && CI=true npm run test:ci -- --testPathPattern='SignIn|SignUp'`
- [ ] With registration disabled: `/signup/` shows unavailable; Sign In has no Sign up link
- [ ] With registration enabled: form validates, happy path redirects to Checkout URL
- [ ] Cancel return explains retry; success prompts continue / sign-in
Public /signup/ registers via backend, starts Checkout, and handles success/cancel return URLs. Sign-up link on Sign In is gated by ENABLE_ACCOUNT_REGISTRATION.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
/signup/page (Sign In–matched UI): register → JWT →POST /api/finance/checkout/→ redirect to Stripe hosted Checkout/billing/successand/billing/cancelreturn URLsenable_account_registrationis trueDepends on backend PR: registration flag + public settings + gated
/user/create/Test plan
cd llm-fe && CI=true npm run test:ci -- --testPathPattern='SignIn|SignUp'/signup/shows unavailable; Sign In has no Sign up link