Build an accessible week scheduler in React. The starter already renders the complete 7-day by 10-hour calendar and four seeded events. Your job is to make its data, controls, announcements, and keyboard navigation work together.
events and the live-region status in React state. New ids must start at 5 and increase monotonically.{ id, day, hour, title: 'Meeting' }. Selecting a booked cell removes that event. Guard the add path so a programmatic duplicate cannot overwrite a booking.<button>. Empty cells are named Add Meeting on {FullDay} at {hour}:00; booked cells are named Remove {title} from {FullDay} at {hour}:00.{title} added on {FullDay} at {hour}:00. or {title} removed from {FullDay} at {hour}:00. in the role="status" region.5, color class e0, and the add announcement. Activating it again removes it and announces removal.(event.id - 1) % 4, so removing one event never recolors another.preventDefault() only when they handle one of those keys.styles.css.The full solution is part of Premium
Walkthrough, edge cases, complexity notes, and the runnable editor unlock with a Premium subscription.
Submissions are part of Premium
Unlock community code, comments, reactions, and framework-specific approaches.
Build an accessible week scheduler in React. The starter already renders the complete 7-day by 10-hour calendar and four seeded events. Your job is to make its data, controls, announcements, and keyboard navigation work together.
events and the live-region status in React state. New ids must start at 5 and increase monotonically.{ id, day, hour, title: 'Meeting' }. Selecting a booked cell removes that event. Guard the add path so a programmatic duplicate cannot overwrite a booking.<button>. Empty cells are named Add Meeting on {FullDay} at {hour}:00; booked cells are named Remove {title} from {FullDay} at {hour}:00.{title} added on {FullDay} at {hour}:00. or {title} removed from {FullDay} at {hour}:00. in the role="status" region.5, color class e0, and the add announcement. Activating it again removes it and announces removal.(event.id - 1) % 4, so removing one event never recolors another.preventDefault() only when they handle one of those keys.styles.css.The full solution is part of Premium
Walkthrough, edge cases, complexity notes, and the runnable editor unlock with a Premium subscription.
Submissions are part of Premium
Unlock community code, comments, reactions, and framework-specific approaches.
Unlock the solution & editor
Runnable editor + tests
Solve in the browser with instant Jest feedback.
Detailed solutions
Walkthroughs, edge cases, and complexity notes.
Multi-framework variants
React, Vue, Vanilla, Angular — same question, different stacks.