docs: record Lab offer form polish (drafts, progress, validation, URLs)
This commit is contained in:
parent
3d52f07144
commit
6a0b0695ee
1 changed files with 14 additions and 0 deletions
14
AGENTS.md
14
AGENTS.md
|
|
@ -129,6 +129,20 @@ session with **no other memory of this project**. So:
|
||||||
`/lab` shows a **"Your Lab profiles"** strip. `main.tsx`'s clean-link shim now
|
`/lab` shows a **"Your Lab profiles"** strip. `main.tsx`'s clean-link shim now
|
||||||
also rewrites `/coach/<pubkey>/<d>`. Still open: draft/autosave and a
|
also rewrites `/coach/<pubkey>/<d>`. Still open: draft/autosave and a
|
||||||
multi-step layout.
|
multi-step layout.
|
||||||
|
- **Lab offer form polish (2026-10-04, part 2):** four more gaps closed.
|
||||||
|
**Drafts:** `hooks/useLabDraft` autosaves the form snapshot to localStorage
|
||||||
|
(content-debounced) and only offers it as resumable when it *differs* from the
|
||||||
|
current state (so opening an existing profile never shows a spurious banner
|
||||||
|
and a draft can't clobber a fresh load); `LabDraftBanner` gives Resume /
|
||||||
|
Discard; clears on publish. **Progress:** `LabProfileProgress` is a
|
||||||
|
completeness bar (photo/bio/skills/rate/location/contact) — a progress
|
||||||
|
indicator, not a wizard. **Validation:** `CraftProfileForm` + the coach page
|
||||||
|
split contact validation into per-field inline errors (+ red border) and
|
||||||
|
**scroll to the first invalid field / the skills grid** on submit; required
|
||||||
|
skill sections show an inline message after a submit attempt. **URLs:** Lab
|
||||||
|
profiles now live at **`/lab/<craft>/<pubkey>/<id>`** (`lib/labRoutes.ts`
|
||||||
|
builds it; `/coach/...` still resolves). The bespoke pages have inline contact
|
||||||
|
errors but not the scroll-to behavior (yet).
|
||||||
- **Photos**: `PhotoDropzone` (`src/components/PhotoDropzone.tsx`) is the shared
|
- **Photos**: `PhotoDropzone` (`src/components/PhotoDropzone.tsx`) is the shared
|
||||||
image input — **drag & drop + multi-select**, emits `File[]` to its caller
|
image input — **drag & drop + multi-select**, emits `File[]` to its caller
|
||||||
(which owns uploads/toasts). Used by `CreateSpotPage`, `EditSpotPage` and
|
(which owns uploads/toasts). Used by `CreateSpotPage`, `EditSpotPage` and
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue