Oncall Management

Operations & IoT · React + Node (Express) · 18 @molecule/* packages

PagerDuty-like on-call management with rotation schedules, escalation policies, incident alerting, acknowledge/resolve workflow, and postmortems — with built-in Stripe-backed subscription tiers

Open in Molecule

Try it

Opens instantly. Runs on sample data, so changes reset on reload.

Open preview in a new tab ↗View workspace ↗

What is inside

Screens (23)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Dashboard /dashboard (signed in)
  • Incidents /incidents (signed in)
  • IncidentDetail /incidents/:id (signed in)
  • Schedules /schedules (signed in)
  • ScheduleDetail /schedules/:id (signed in)
  • EscalationPolicies /escalation-policies (signed in)
  • Postmortems /postmortems (signed in)
  • PostmortemDetail /postmortems/:id (signed in)
  • Team /team (signed in)
  • Notifications /notifications (signed in)
  • Settings /settings (signed in)
  • Profile /profile (signed in)
  • Pricing /pricing
  • PlanUpdated /plan-updated (signed in)
  • About /about
  • Privacy /privacy
  • Terms /terms
  • NotFound /404

Data model (17 tables)

  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • notifications — id, createdAt, updatedAt, user_id, kind, severity, title, detail, …
  • team_members — id, user_id, member_id, name, email, role, timezone, oncall, …
  • team_invites — id, user_id, email, role, status, created_at
  • user_api_keys — id, user_id, name, prefix, last_used_at, last_used_label, created_at, revoked_at
  • user_sessions_view — id, user_id, user_agent, ip_address, city, is_current, last_seen_at, created_at
  • connected_accounts — id, user_id, provider, provider_username, connected, connected_at
  • org_settings — id, user_id, org_name, region, retention_days, created_at, updated_at
  • org_integrations — id, user_id, name, detail, connected, created_at
  • schedules — id, user_id, name, description, timezone, rotation_type, handoff_time, members, …
  • schedule_shifts — id, user_id, schedule_id, member_id, start_at, end_at, is_override, note, …
  • escalation_policies — id, user_id, name, description, repeat_cycles, is_active, created_at, updated_at
  • escalation_rules — id, user_id, policy_id, position, notify_member_id, notify_channel, wait_minutes, created_at
  • incidents — id, user_id, title, description, severity, status, service, assigned_member_id, …
  • incident_events — id, user_id, incident_id, kind, actor, text, at, created_at
  • postmortems — id, user_id, incident_id, title, summary, contributing_factors, status, created_at, …
  • postmortem_action_items — id, user_id, postmortem_id, description, owner_member_id, status, due_at, created_at, …

API (11 handlers)

  • \_roster api/src/handlers/_roster.ts
  • \_seed api/src/handlers/_seed.ts
  • escalation-policies api/src/handlers/escalation-policies.ts
  • incidents api/src/handlers/incidents.ts
  • notifications api/src/handlers/notifications.ts
  • overview api/src/handlers/overview.ts
  • postmortems api/src/handlers/postmortems.ts
  • profile api/src/handlers/profile.ts
  • schedules api/src/handlers/schedules.ts
  • settings api/src/handlers/settings.ts
  • team api/src/handlers/team.ts

Subscription tiers

free / pro / team — gated by: maxPolicies, maxSchedules, maxOpenIncidents, maxPostmortems, advancedFeatures, canExport, retentionDays

Built from 18 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • STRIPE_SECRET_KEY Stripe secret API key (sk_test_... in test mode)
  • STRIPE_WEBHOOK_SECRET Stripe webhook signing secret (whsec_...)

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing