Engineering
On-call rotation
Track who is on call as one small app: a schedule, a big "who is on now" answer, an override button, and a weekly reminder emailed to the team.
Your on-call rotation is a pinned Slack message and a shared calendar that disagree with each other. Someone swapped last week and told two people but not the calendar. When production breaks at 2am, the honest answer to "who is on call?" is "let me check three places." A rotation is the one internal tool where being slightly wrong is expensive, and it is almost always run on the tools least able to be right.
You do not need PagerDuty to fix this. You need a small app that knows who is on now, lets someone claim an override in one click, and reminds the team on a clock. That has been too much plumbing to justify. On fuast it is one file.
What it is on fuast
One capsule. It stores the rotation, shows a single unambiguous "on call right now" answer at the top, and gives anyone a button to override the current shift when they swap. A scheduled job posts the week's on-call to the team every Monday morning by email, so the source of truth announces itself instead of drifting. Deploy once and share it with the whole eng workspace.
Steal this prompt
Paste this to your AI. It writes the capsule; you run fuast deploy.
Build an on-call rotation capsule on fuast. Store shifts with a person, a start date, and an end date. The home screen shows who is on call right now, big and unambiguous, plus the upcoming schedule. Any signed-in workspace member can click "I'll take it" to override the current shift with themselves and a reason, which is recorded with their verified identity. Add a scheduled job that emails the team the current and next on-call every Monday at 9am UTC. Use built-in auth and read the acting person from ctx.auth, never from the client.
What makes it real
The override button only works because the app sees a verified identity. When
someone clicks "I'll take it," the capsule writes ctx.auth.userId from
built-in auth, so the record of who covered the
shift is trustworthy, not a name someone typed. The
schedule that emails the team every Monday is
schedule("0 9 * * 1", handler), running on fuast with no separate cron service to
stand up.
import { capsule, table, string, mutation, schedule } from "fuast/server";
export default capsule({
schema: {
shifts: table({
personId: string(),
personName: string(),
startsAt: string(),
endsAt: string(),
note: string(),
}).index("by_start", ["startsAt"]),
},
mutations: {
takeOver: mutation(async (ctx, shiftId: string, reason: string) => {
if (ctx.auth.isGuest) throw new Error("sign in first");
await ctx.db.shifts.update(shiftId, { personId: ctx.auth.userId, personName: ctx.auth.displayName ?? "someone", note: reason });
}),
},
schedules: {
weekly: schedule("0 9 * * 1", async (ctx) => {
const upcoming = await ctx.db.shifts.withIndex("by_start", (q) => q).take(2);
await ctx.email.send({ to: "eng@you.com", subject: "On-call this week", text: upcoming.map((s) => s.personName).join(", then ") });
}),
},
});
One capsule: schedule, override, reminder. No three sources of truth. If your team keeps building tools like this by hand, read internal tools without a platform team.
Give your rotation one honest answer. Build it on fuast.