shadcn.io is not affiliated with official shadcn/ui
Cron Jobs Dashboard Block for Solid
Six scheduled jobs as 24-hour lanes with a tick for every run today, worked out from each cron expression, an input that redraws the day and says what it means in words, a history of the latest runs and a Run now.
Installation
Overview
Check what a cron expression really does before you ship it, with this scheduler panel for Solid with Ark UI. A hairline frame with a plus mark on each corner draws six Tickwright jobs as 24-hour lanes with a tick for every run scheduled today, solid for runs that have happened and light for the ones still to come, either side of a dashed "now" line. The ticks come from a small expander that reads the minute and hour fields of each job's expression: stars, steps such as */15, lists, ranges and ranges with steps. Choosing a job opens its expression in an Input: typing redraws the lane and writes the schedule in words ("Every 15 minutes", "Every day at 08:30 and 17:30") with the runs today and the next run, and an expression that can't be read says why while the lane keeps the last schedule that could. A history lists the latest five runs, and a Shine Button adds a "Manual run 14:03" row. It's built from Input, Shine Button, Button and Guides. For job schedulers, platform consoles and ops reviews.
FAQ
How do I fill it with my own jobs?
Edit JOBS: an id, the saved cron expression and, if you want one failed run in the history, its time in failsAt. Everything else, the ticks, the words, the counts and the history rows, is worked out from the expression.
Which cron syntax does it read?
Five fields. The minute and hour fields take *, a number, a range (9-17), a step (*/15 or 0-30/10) and comma lists of those. The day, month and weekday fields must be *; the input says so if they aren't. Names such as MON and shortcuts such as @daily aren't read.
What happens while I'm typing something that doesn't parse?
The input is marked invalid, a sentence says which field and why ("Minute: 61 is outside 0 to 59"), and the lane, the next run and the history keep using the last schedule that did read, so the day never goes blank mid-edit. Reset puts back the saved expression.
What stays local, and how do I wire it for real?
Everything. The clock is fixed at 14:03, the history is seeded, edits aren't saved, and Run now only adds a row and says nothing ran. To use it for real, save the expression with your scheduler's API, take the history from its run log and call its trigger endpoint from Run now.
Can I use it without a pointer?
Yes. Each lane's label is a button with the chosen job marked aria-current, the drawn ticks are hidden from screen readers in favour of the words and counts in text, the input has a label and its description is the words, and the history is a table with a caption and row headers.