Components
Authentication card
Focused sign-in, signup and reset forms connect users to the private workspace.
On this page
Purpose and placement
Focused sign-in, signup and reset forms connect users to the private workspace.
Anatomy
- Brand icon above card
- Title and supporting guidance
- Associated credential fields
- Primary submit and return links
Contract
| Input or boundary | Behavior |
|---|---|
| Sign in | next-auth credentials response; verified email required |
| Signup | Name, email, password; eight-character minimum |
| Reset | Request form and token-based password update |
| Button markup exists but showGoogleAuth=false |
States and feedback
- Ready
- Submitting
- Invalid/unverified credentials
- Email confirmation prompt
- Reset requested
Interaction and composition
Use the actual credential forms, not an invented social-auth variant. The migration notice tells pre-2026 accounts to reset their password. Confirmation copy describes a next step rather than proof the email was delivered.
Responsive behavior
Card max-width 448px with 32px padding. Full-page phone examples retain content when the form exceeds the viewport.
Accessibility contract
Auth labels have htmlFor/id, unlike several dashboard/settings fields. Error messages still need live-region and field association work.
Known implementation gaps
Turnstile is deliberately excluded from offline captures and is not shown as passed. OAuth, tokens and mail delivery remain provider-dependent source contracts.
Source references
| Repository file | Responsibility |
|---|---|
| app/auth/sign-in/SignInClient.tsx | Login form |
| app/auth/sign-up/SignUpClient.tsx | Signup form |
| app/auth/forgot-password/ForgotPasswordClient.tsx | Recovery request |
Examples from the app
Actual Startboard source UI with isolated fictional records; both native themes at 2× resolution or higher. No live integrations or account writes. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-08 · Revision 08fa2595a668 · Documentation v1.0.0