Components
Profile and avatar controls
A display name and optional image supply identity for public boards.
On this page
Purpose and placement
A display name and optional image supply identity for public boards.
Anatomy
- Display-name field
- Save profile action
- Avatar preview / upload dropzone
- Size guidance and error feedback
Contract
| Input or boundary | Behavior |
|---|---|
| Profile | GET/PATCH /api/profile |
| Avatar | POST multipart to /api/profile/avatar |
| Client limits | Image MIME and at most 1,000,000 bytes |
States and feedback
- Empty avatar
- Filled display name
- Dragging
- Uploading
- Save/upload error
Interaction and composition
Saving the display name and uploading the avatar are separate operations. Public boards show the owner row only when both an avatar URL and display name exist. A name alone does not create that row.
Responsive behavior
Dropzone and fields span the inner panel. Long content follows the settings vertical flow.
Accessibility contract
The file input provides browser selection; labels and dropzone keyboard access need audit. Source error paragraphs lack live-region association.
Known implementation gaps
The capture uses no owner photo and does not send files. Actual image processing, B2 authorization and signed avatar delivery are not verified.
Source references
| Repository file | Responsibility |
|---|---|
| app/settings/profile/page.tsx | Profile interactions |
| app/api/profile/avatar/route.ts | Upload boundary |
| app/board/[id]/page.tsx | Conditional owner row |
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