You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Synced from Winnow plan Quality Assessment and UI/UX mastery (c7b3c344-85c6-40eb-823e-c4e6d3f81bb6).
Section: In Progress Status at sync: open Task key:in-progress/0/execute-implementation-timeline-below-in-order-phases-bundle-parallelizable-work
Details
Execute Implementation timeline below in order (phases bundle parallelizable work; within a phase, prefer top-to-bottom).
Implementation timeline (ordered)
Execute in this order so dialog semantics land before broad keyboard/SR validation, dashboard + footer restore trust early, then forms/theme, then polish/performance, then validation.
Phase 1 — Critical / High: overlays, trust, CRO
Home + treatments modals (A11Y + UX): Implement proper dialog pattern for home contact overlay (apps/web/src/app/page.tsx) and treatment detail overlays (landing/treatments.tsx, treatments-page.tsx): role="dialog" / Radix Dialog, aria-modal, labelled title, focus trap, Escape to close, first focus inside panel on open, backdrop click dismiss (backdrop onClick closes; panel stopPropagation).
Dashboard trust (dashboard.tsx): Remove or dev-only-gate console.log / console.warn on subscription paths; replace placeholder subscription CTAs with disabled + clear copy and/or toast.info until billing is wired.
Footer social CRO + A11Y (footer.tsx): Replace non-interactive social <span>s with real <a href="..." rel="noopener noreferrer"> (URLs aligned with hero Facebook / brand).
Phase 2 — Medium: consultations + shell menus
Consultations form + calendar (consultations-client.tsx): Pair every visible <label> with htmlFor + matching control id (inputs, select, textarea, phone/country); add aria-label="Previous month" / "Next month" on calendar nav buttons; optionally aria-pressed on slot buttons where it aids state.
Consultations UX/perf: Hoist min/max selectable day bounds with useMemo (avoid 42× recompute in cell map); add date-picker popover dismiss (Escape, outside click, optional Cancel / Done).
User menu (user-menu.tsx): Sign-out as DropdownMenuItem + onSelect; show email as DropdownMenuLabel or static text (avoid nested full Button / non-action menu row).
Phase 3 — Medium: theme + motion + global chrome
Theme coherence: Align layout.tsx body background with tokens (bg-background or shared --cream in :root + .dark) so ModeToggle / index.css stay consistent.
Reduced motion: Apply motion-reduce:animate-none (or CSS prefers-reduced-motion) to “scroll down to meet the team” pulse and similar decorative motion.
Phase 4 — Low: quick technical + visual cleanup
Dead code / noise:Remove unused Footer import from apps/web/src/app/page.tsx (done during Q-001); delete or deliberately adopt page-layout.tsx (avoid double header/footer with root layout).
Auth + chrome micro-fixes:sign-in-form.tsx — numeric width/height on next/image; decorative Google <svg> — aria-hidden="true"; sign-up-form.tsx — drop stray text-indigo-600, use link/primary tokens; mode-toggle.tsx — relative on icon trigger container; hero / visuals — descriptive alt (e.g. “Precisione logo”).
Visual consistency (optional batch): Unify desktop vs mobile nav label casing; replace very small arbitrary sizes (text-[11px], fractional rem) with scale tokens (e.g. text-xs minimum for supporting copy) where low-risk.
Phase 5 — Performance + hardening
Images: Add responsive sizes to priority fillnext/image usages on home and treatments (doctor cards, hero sections as applicable).
Home carousel observer: Harden IntersectionObserver setup/cleanup (ref-based or stable deps) so changing slides cannot leak observers.
Phase 6 — Validation + follow-up
Run Validation checklist (keyboard sweep, screen reader on dialogs/forms, Lighthouse A11y + Best Practices on /, /treatments, /consultations, /login, /dashboard, dark mode spot check after theme fix).
Sidequest: After consultation label work, Lighthouse /consultations; file any remaining contrast issues (e.g. text-muted-foreground on translucent cards).
Synced from Winnow plan Quality Assessment and UI/UX mastery (
c7b3c344-85c6-40eb-823e-c4e6d3f81bb6).Section: In Progress
Status at sync: open
Task key:
in-progress/0/execute-implementation-timeline-below-in-order-phases-bundle-parallelizable-workDetails
Implementation timeline (ordered)
Execute in this order so dialog semantics land before broad keyboard/SR validation, dashboard + footer restore trust early, then forms/theme, then polish/performance, then validation.
Phase 1 — Critical / High: overlays, trust, CRO
apps/web/src/app/page.tsx) and treatment detail overlays (landing/treatments.tsx,treatments-page.tsx):role="dialog"/ RadixDialog,aria-modal, labelled title, focus trap, Escape to close, first focus inside panel on open, backdrop click dismiss (backdroponClickcloses; panelstopPropagation).dashboard.tsx): Remove or dev-only-gateconsole.log/console.warnon subscription paths; replace placeholder subscription CTAs with disabled + clear copy and/ortoast.infountil billing is wired.footer.tsx): Replace non-interactive social<span>s with real<a href="..." rel="noopener noreferrer">(URLs aligned with hero Facebook / brand).Phase 2 — Medium: consultations + shell menus
consultations-client.tsx): Pair every visible<label>withhtmlFor+ matching controlid(inputs,select,textarea, phone/country); addaria-label="Previous month"/"Next month"on calendar nav buttons; optionallyaria-pressedon slot buttons where it aids state.min/maxselectable day bounds withuseMemo(avoid 42× recompute in cellmap); add date-picker popover dismiss (Escape, outside click, optional Cancel / Done).user-menu.tsx): Sign-out asDropdownMenuItem+onSelect; show email asDropdownMenuLabelor static text (avoid nested fullButton/ non-action menu row).Phase 3 — Medium: theme + motion + global chrome
layout.tsxbody background with tokens (bg-backgroundor shared--creamin:root+.dark) soModeToggle/index.cssstay consistent.motion-reduce:animate-none(or CSSprefers-reduced-motion) to “scroll down to meet the team” pulse and similar decorative motion.Phase 4 — Low: quick technical + visual cleanup
Remove unused(done during Q-001); delete or deliberately adoptFooterimport fromapps/web/src/app/page.tsxpage-layout.tsx(avoid double header/footer with root layout).sign-in-form.tsx— numericwidth/heightonnext/image; decorative Google<svg>—aria-hidden="true";sign-up-form.tsx— drop straytext-indigo-600, use link/primary tokens;mode-toggle.tsx—relativeon icon trigger container; hero / visuals — descriptivealt(e.g. “Precisione logo”).text-[11px], fractionalrem) with scale tokens (e.g.text-xsminimum for supporting copy) where low-risk.Phase 5 — Performance + hardening
sizesto priorityfillnext/imageusages on home and treatments (doctor cards, hero sections as applicable).IntersectionObserversetup/cleanup (ref-based or stable deps) so changing slides cannot leak observers.Phase 6 — Validation + follow-up
/,/treatments,/consultations,/login,/dashboard, dark mode spot check after theme fix)./consultations; file any remaining contrast issues (e.g.text-muted-foregroundon translucent cards).Next Tasks (summary — detail in timeline)