Profile
Display name and avatar. The per-user settings that show up everywhere — sidebar, comments, presence avatars, share dialogs.
Your profile is the per-user identity visible to anyone you share a doc with. It’s two fields: a display name and an avatar. Settings page → top section.
Profile
Shown to collaborators on comments, cursors, and shares.
Where it lives
| Location | Path |
|---|---|
| Settings → Profile (top section) | /app/settings |
| Header subtitle | Below the Profile heading |
The profile is a profiles row keyed on your user ID. It’s editable in-place.
Display name
What you write here is what other collaborators see — in:
- The sidebar (your “you” tile)
- Real-time cursors (the small flag above your caret)
- Comments (as the author)
- The History panel (as the actor on edits, restores, etc.)
- The share dialog (your row in the People list)
- Audit log entries
Leave it blank and we fall back to the part of your email before @.
Display name has no uniqueness constraint — two users can share a name. The internal user ID is the unique identifier; the display name is purely cosmetic.
Avatar
| Aspect | Behavior |
|---|---|
| Format | Any image type the browser recognizes (PNG, JPEG, WebP, etc.) |
| Size cap | 2 MB |
| Storage | Uploaded to our avatars Supabase Storage bucket under <your-user-id>/avatar-<timestamp>.<ext> |
| Per-upload URL | The timestamp in the filename ensures each new upload gets a fresh URL, so browser caches don’t keep showing the old image |
| Display | Resized to a circle wherever it appears |
| No avatar | An initials avatar shows on a colored background (color derived from your user ID — same color you get for your real-time cursor) |
To upload: click the camera button on your avatar circle in Settings → Profile → pick an image. The upload happens immediately. To remove: there’s no explicit remove button in v1; upload a different image to replace.
Your account email is not edited from the Profile section. It’s bound to your authentication credentials — see Sign-in methods for how email is changed (via Supabase Auth).
The email is visible in the Settings page header for reference but isn’t directly editable here.
Identity color
Each user has a stable, deterministic color derived from a hash of their user ID. This color drives:
- Your real-time cursor flag in shared docs
- The background of your initials avatar (when no image is set)
- The avatar border in the toolbar’s presence stack
The color is computed client-side via userColor(userId) — no DB column. Same person gets the same color across sessions and devices.
Sync
Profile changes save immediately to the profiles row. They propagate via realtime to every other tab and device — your new avatar shows up in a collaborator’s presence stack within seconds.
What’s not in v1
| Missing | Notes |
|---|---|
| Bio / about field | Not in v1 |
| Pronouns | Not in v1 |
| Location / time zone | Not in v1 (timestamps are rendered in the viewer’s local time everywhere) |
| Custom identity color (override the auto-hashed one) | Not in v1 |
| Profile visibility settings (private profile) | All workspace members can see all other members’ display names + avatars |
| Account deletion from the Profile section | Coming in Phase 4 — see Plans for status |