shadcn.io is not affiliated with official shadcn/ui
Maintenance Task List Block for React
An upkeep ledger grouped by machine, where every job has an interval, a last-done date and a next-due date, a status in words, a Log as done button with Undo, and an Overdue or Due soon filter.
Installation
Overview
Know what is overdue before it breaks, with this maintenance to-do list block for React with Base UI. Twelve jobs are grouped by the machine they belong to in an Accordion where one machine is open at a time, and each job shows its interval ("Every 30 days"), the day it was last done and the day it is next due, worked out from the two against a fixed today. The status is a glyph and a word, never a colour: Overdue 3 days, Due in 2 days, On schedule. Log as done stamps today as the last-done date and moves the next-due date on by the interval, with a one-line Undo under the list. A Toggle Group filters the open machine's jobs to Overdue or Due soon, the sentence above counts what is overdue and due this week, and the open body keeps its height whichever filter is on. Guides rule the frame. For servers, vehicles, equipment, rentals and anything with an upkeep schedule.
FAQ
How are the statuses decided?
A job is overdue when its next-due date is before today, due soon when it falls within the next seven days (today included), and on schedule otherwise. The next-due date is the last-done date plus the interval, and nothing is typed in as a label.
What does Log as done change?
Only the last-done date, which becomes today. The interval stays, so the next-due date moves by itself. The button answers "already logged for today" instead of doing it twice, and the Undo under the list puts the earlier date back.
How does the accordion work for a keyboard?
Enter or Space opens a machine and closes the one that was open, and one is always open. Tab moves between the machines' buttons; this base does not add arrow-key movement between them.
Why doesn't the height change when I filter?
The open body reserves room for three jobs, the most any machine has, so a filter that leaves one job or none doesn't pull the rest of the frame up. A machine with nothing to show says so in a line.