← Home
Scheduled
Scheduled
Automations
The best report is the one nobody has to remember to run. These jobs watch other systems on a timetable and send a short email only when something needs attention. A second layer checks that the jobs themselves are still running.
- Tool
- 007 / Automation
- Role
- Designed + built
- Inputs
- Project systems, read-only
- Outputs
- Short emails, tasks, alerts
01 The weekday digest
Subject
Incomplete forms since yesterday 2pm
Covers
Active projects only · Mondays reach back to Friday 2pm
| Project | Form | Started by | Status |
|---|---|---|---|
| Project Alpha | Toolbox talk | Supervisor 1 | In progress |
| Project Alpha | Task observation | Supervisor 2 | Draft |
| Project Bravo | Site walk | Site manager | In progress |
Grouped by project · each form name links straight to the form · no email on a day with nothing to chase
Illustrative sample data
02 What it does
Quiet until it matters.
- Weekday digestEach afternoon it lists the incomplete forms, so loose ends get chased the same day.
- Weekly site checkEach week it checks site diaries, walks, toolbox talks and observations, and drafts one email per project to forward to the site manager.
- Monthly report checkEach month it confirms every active project has filed its safety report for the month just ended, and says which hasn’t.
- Fortnightly updateEvery second week it creates a task to present an update, with the details ready.
03 The monthly report check
| Project | Monthly safety report | What it found |
|---|---|---|
| Project Alpha | Completed | Filed for the right month |
| Project Bravo | Completed | Filed for the right month |
| Project Charlie | Wrong month | The only completed report is logged against the month before |
| Project Delta | Not found | No completed report for the month |
Runs on the 5th at 5pm, or the working day before if it falls on a weekend or holiday · each month is recorded once, so it never sends twice
Illustrative sample data
04 Watching the watchers
| Job | Schedule | Last run | Status |
|---|---|---|---|
| Weekday digest | Mon–Fri 2:00pm | Today 2:00pm | Healthy |
| Weekly site check | Wed 4:00pm | Wed 4:00pm | Healthy |
| Monthly report check | None found | — | Alert emailed |
| Fortnightly update | Every 2nd Monday | Last Monday | Healthy |
A daily check confirms every job still has a live schedule, and emails an alert if one doesn’t
Illustrative sample data
05 Principles
A job that fails silently is worse than no job at all.
- Quiet by defaultNothing is sent when there is nothing to say, so the emails get read.
- Read-only connectionsThe jobs can read other systems and create a task or email, but never delete or overwrite anything.
- Watch the watchersEvery job is checked for a live schedule, because the worst failure is the one nobody notices.
- Never twiceEach run is recorded, so a retry can’t send the same report twice.
06 How it’s built
Small services on a timetable, each built to fail loudly.
- JobsEach automation is its own small Node.js service on Railway’s cron scheduler, with Melbourne-time guards so the same code behaves on holidays and weekends.
- EmailResults go out through the Microsoft Graph mail API as a named sender, in a branded layout grouped by project.
- Source dataThe site-management platform is read through its MCP server, limited to a read-only list of tools, with a rotating sign-in token.
- StateA Postgres record of each run makes jobs idempotent, so a retry can’t send the same report twice.
- MonitoringA daily check calls the hosting platform’s API to confirm every job still has a schedule, and emails an alert if one doesn’t.
StackNode.jsRailway cronPostgresMicrosoft Graph APIMCPOAuthIdempotent jobsDead-cron monitoringGitHub