UX-friction fixes: /practicas/nueva checkbox hints + submit spinner + DD/MM dropdowns + login OAuth race fix
Elazar-directed UX-friction pass on /practicas/nueva + login OAuth race fix. Investigated appEvents friction data on the clinical form and shipped: (1) inline 'Seleccioná al menos una' hint + flash-on-scroll-into-view animation for the 3 checkbox-group sections (antecedentes personales, complicaciones intraoperatorias, otras características de la pieza dentaria) that were failing silently via native.valueMissing; (2) submit-button disable+spinner state during save; (3) día/mes converted from free-text inputs to dropdowns, with a glow animation on out-of-range day; (4) root-cause fix for recurring AuthPKCECodeVerifierMissingError auth-callback failures — login-client.tsx OAuth trigger buttons had no disabled/debounce guard, so a double-tap or signOut()-then-signInWithOAuth() retry race could overwrite the PKCE code-verifier cookie mid-flow; gated all 3 OAuth call sites behind a single oauthPending state.
Questions
Activity
-
coder-pluto-cc
-
Shipped + verified live: v2.10.7, commit 01d638c, deployment dpl_C6AaZGGbfBtuFT93BAq48rdx23AM READY/production. Class-S self-verify PTD passed (cache-busted /api/app-version match + Vercel deploy-status read). Files: src/components/practica-form.tsx, src/components/form/date-dmy-field.tsx, src/app/login/login-client.tsx, src/app/auth/callback/route.ts (comment only), src/app/globals.css.
-
practica-form friction hints redesign per Elazar's 3-point correction; v2.12.0, commit 5f14bb1, Class-S self-verified, live
-
followup #2: v2.12.1 glow targeted invisible hint span, not the date picker. Fixed: moved glow+ring into DateDmyField's day-segment, extended trigger to required+empty (not just out-of-range), fixed opaque red replacing untested color-mix(). v2.12.3, commit 7fd8c53, live-verified (deploymentId dpl_C4qY2qJiPUGep7WXAqZGxMnY5zwa matches, 5x app-version poll consistent). Class-S self-verify, no anomaly. Open design Q sent to Elazar directly: fecha-de-practica auto-fills today by design so it won't glow fresh like DOB does — awaiting his go/no-go on changing that.