The create-proposal submit had no error handling, so failures (e.g.
crypto.subtle unavailable outside a secure context) silently reset the
button with no feedback. Also set interactiveWidget so the mobile
keyboard resizes the layout instead of covering the sticky submit button.
Senders no longer need to fill in two activities to publish; one is
now enough (still capped at 5). Each activity can also specify a
place, which flows into the generated Google Calendar link and .ics
file when the recipient picks a slot.
ProposalForm:
- Step tabs -> Radix Tabs (roving tabindex, arrow-key nav, proper
ARIA) driven by the same `step` state as before.
- Evasive-no toggle -> Switch, wrapped in a <label> so the whole row
(not just the small control) is tappable.
- All raw <input>/<textarea> -> Input/Textarea; buttonVariants
'primary' -> 'default' to match the new variant names.
- New StepActions wrapper makes Back/Next/Publish sticky to the
viewport bottom on mobile (safe-area aware) so the wizard never
requires scrolling to find the next action; reverts to normal
inline flow at sm+.
CreateClient / ManageClient:
- Card/Button/Input swapped to shadcn equivalents.
- Copy-link feedback moved from a per-button `copied` boolean +
setTimeout to a single sonner toast call, removing the duplicated
state pattern.
- ManageClient's delete confirmation moved from window.confirm() to
an AlertDialog, matching the skill's accessible-primitives guidance
and giving it proper focus trapping on mobile.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Captures the existing lovelope.app codebase (Next.js App Router,
custom Tailwind components, Prisma) as a rollback point prior to
adopting shadcn/ui and a mobile-first redesign.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>