incld engineering notes
Practical notes for shipping customer-facing SaaS features.
Deep dives into customer-facing schedules, recurring time, tenant boundaries, signed delivery, retries, and run history.
How to build customer-facing recurring schedules in Next.js
The cron expression is the easy bit. Here is the complete path from a customer choosing a time to your application safely doing the work.
Read the guideLocal promise
Every Monday · 09:00
Australia/Melbourne
Overlap
skip
Misfire
run_once
IANA timezones, DST, misfires, and overlap policies for SaaS schedules
“Every day at 9” is a product promise, not a UTC interval. Model the promise first, then decide what should happen when time or execution gets awkward.
Multi-tenant cron jobs: the authorization boundary most examples omit
A tenant ID in the request body is not an authorization boundary. Follow the identity chain from the signed-in browser to delayed background work.
Human approval for AI agent actions in a multi-tenant SaaS
Let the agent propose the action, then put a named human decision between that proposal and the side effect that changes customer data.