Scheduling

How to set service & MOT reminders and calendar feeds

Create job-linked reminders, download or share .ics calendar files, publish personal or shared organisation calendar feeds and schedule native notifications.

MechanicDesk can now store reminder records for booked jobs in the hosted /app workspace. These records can download or share one calendar file per reminder, download or share one file for the full scheduled reminder set, publish personal or shared organisation calendar feed URLs for signed-in users, schedule local device notifications in Capacitor app builds, register native push device tokens, queue reminders for server push dispatch and process due dispatches through a protected APNS/FCM worker route.

What it does

  • Creates reminders linked to jobs.
  • Stores reminder date, time, lead time, channel, status and notes.
  • Shows scheduled, due-today, overdue and calendar-ready counts.
  • Schedules a native local notification in iOS/Android Capacitor builds.
  • Registers iOS/Android push device tokens against the signed-in account and organisation.
  • Queues reminder dispatch records for the hosted notification backend.
  • Processes queued dispatch records through a protected server worker route.
  • Downloads or shares a calendar .ics file for one reminder or all scheduled reminders.
  • Publishes tokenized personal or shared organisation calendar feed URLs that external calendar apps can subscribe to.

Current limitation: native local notifications, native calendar sharing and push registration require an iOS or Android Capacitor build with permission granted where the device asks. Hosted calendar feed publishing requires Supabase setup, sign-in and the server-only service role for token reads. Shared organisation feeds also require a saved shared organisation snapshot and active organisation view access. The feed URL and .ics files are calendar handoffs, not direct Google, Apple or Microsoft provider API sync. The hosted web/PWA browser path does not register web push yet, and the protected worker still needs live APNS/FCM credentials and deployed Vercel proof before production delivery is complete.

Where to find it

  • URL: /app
  • Navigation: Schedule
  • Section: Schedule and reminders

Step by step

Add a reminder

  1. Open /app.
  2. Select Schedule.
  3. In New reminder, choose a Job.
  4. Enter a Title.
  5. Set Date and Time.
  6. Set Lead minutes.
  7. Choose a Channel: In-app, Push or Calendar.
  8. Add Notes if needed.
  9. Select Add reminder.

Update a reminder

  1. Open /app.
  2. Select Schedule.
  3. In Upcoming reminders, find the reminder row.
  4. Change Channel or Status.

Download a calendar file

  1. Open /app.
  2. Select Schedule.
  3. Find the reminder row.
  4. Select Calendar.
  5. Import the downloaded .ics file into your calendar app.

Share a reminder calendar file

  1. Open /app.
  2. Select Schedule.
  3. Find the reminder row.
  4. Select Share calendar.
  5. In an iOS or Android Capacitor build, choose the calendar app or another destination from the platform share sheet.

In a browser or PWA, Share calendar uses browser file sharing where supported, or downloads the .ics file if sharing cannot complete.

Download the whole schedule calendar

  1. Open /app.
  2. Select Schedule.
  3. In the Schedule and reminders heading, select Schedule calendar.
  4. Import the downloaded .ics file into your calendar app.

The file includes reminders with Scheduled status. Dismissed or sent reminders are left out of the exported schedule.

Share the whole schedule calendar

  1. Open /app.
  2. Select Schedule.
  3. In the Schedule and reminders heading, select Share calendar.
  4. Choose the calendar app or sharing destination.

The shared schedule file includes reminders with Scheduled status. If the browser cannot share files, MechanicDesk downloads the .ics file instead.

Publish a personal hosted calendar feed

  1. Open /app.
  2. Sign in through the hosted Pro/access panel.
  3. Select Schedule.
  4. In Calendar feed, select Publish feed.
  5. When the feed URL appears, select Copy feed URL.
  6. Subscribe to or import that URL in the external calendar app.

Publishing updates the server copy of the current schedule feed payload. The hosted feed stores only the business settings needed for the calendar name, scheduled reminders and the jobs referenced by those reminders. Repeat Publish feed after changing reminders until direct calendar-provider sync exists.

Publish a shared organisation calendar feed

  1. Open /app.
  2. Sign in through the hosted Pro/access panel.
  3. Confirm the current Workspace slug has been saved as a shared organisation workspace.
  4. Select Schedule.
  5. In Shared calendar feed, select Publish shared feed.
  6. When the feed URL appears, select Copy shared URL.
  7. Subscribe to or import that URL in the external calendar app.

Publishing a shared feed reads the saved shared organisation snapshot on the server. It requires active organisation view access and stores only the schedule data needed for the .ics feed. Repeat Publish shared feed after saving shared schedule changes.

Schedule a native notification

  1. Open /app inside the iOS or Android Capacitor app.
  2. Select Schedule.
  3. Find the reminder row.
  4. Select Notify.
  5. Grant notification permission when the device asks.

In a normal desktop/mobile browser, Notify reports that native notifications are available in the iOS and Android app builds. Use Calendar, Share calendar or the hosted feed as the web/PWA reminder handoff until web push is added.

Register a device for server push

  1. Open /app inside the iOS or Android Capacitor app.
  2. Sign in through the hosted Pro/access panel.
  3. Select Schedule.
  4. In Push registration, select Register push device.
  5. Grant push notification permission when the device asks.

In a normal desktop/mobile browser, registration reports that push registration is available in the iOS and Android app builds.

Queue a reminder for server push

  1. Open /app.
  2. Sign in through the hosted Pro/access panel.
  3. Select Schedule.
  4. Find the reminder row in Upcoming reminders.
  5. Select Queue push.

The hosted API creates a queued dispatch record for the reminder. The protected worker route can then process due queued records and update their status.

Process queued server pushes

This is an operator or platform task, not an in-app button.

  1. Configure SUPABASE_SERVICE_ROLE_KEY.
  2. Configure CRON_SECRET for Vercel Cron and optionally MECHANICDESK_NOTIFICATION_WORKER_SECRET for manual runs.
  3. Configure FCM credentials for Android delivery and APNS credentials for iOS delivery.
  4. Deploy with the Vercel Root Directory set to apps/web.
  5. Vercel calls GET /api/notifications/dispatches/process every 15 minutes from apps/web/vercel.json.
  6. For a manual run, call GET /api/notifications/dispatches/process or POST /api/notifications/dispatches/process with the worker secret.
  7. Check the JSON response for sent, partial, failed, skipped and providerMissing counts.

Remove a reminder

  1. Open /app.
  2. Select Schedule.
  3. Find the reminder row.
  4. Select Remove.

What each screen shows

Area What it shows
Schedule and reminders heading Scheduled, due-today and overdue counts, status messages, the Schedule calendar export action and Share calendar handoff.
Push registration Push device registration status and the Register push device action.
Calendar feed Personal hosted feed status, the published feed URL, Publish feed and Copy feed URL.
Shared calendar feed Organisation-hosted feed status, the published shared feed URL, Publish shared feed and Copy shared URL.
New reminder Job, title, date, time, lead minutes, channel and notes fields.
Upcoming reminders Reminder title, job details, channel, status, native notification scheduling, calendar download/share, server push queueing and remove action.
Next native step Reminder that live push provider proof and calendar provider sync still need to be completed.

Tips and good to know

  • Use Calendar as the channel when you plan to export a reminder into a calendar app.
  • Use Push when the reminder should be queued for server dispatch after devices are registered.
  • Reminder records are included in JSON export/import and hosted workspace snapshots.
  • Push device records and dispatch queue rows live in Supabase, not in the exported JSON backup.
  • Dispatch rows can end as sent, partial, failed, skipped or provider_missing after the worker runs.
  • Calendar files use the reminder due date/time and include linked job details where available.
  • The Schedule calendar and heading Share calendar actions include all reminders with Scheduled status in one .ics file.
  • Calendar sharing uses the native platform share sheet inside iOS/Android Capacitor builds, browser file sharing where available and download fallback otherwise.
  • Treat hosted feed URLs as private links. Anyone with the URL can read the published reminder feed.
  • Hosted feed publishing stores only schedule data needed to build the .ics feed, not forms, invoices, templates or full workspace exports.
  • Use Publish feed for the current browser schedule. Use Publish shared feed when the calendar should come from the saved shared organisation snapshot.
  • Select Publish feed again after adding, editing or removing reminders so the hosted feed reflects the latest schedule.
  • Local notifications are re-scheduled with a stable notification ID for the reminder, so selecting Notify again updates the pending device notification.

Troubleshooting

Problem What to try
No job appears in the reminder form Create a job first in Operations.
Calendar import shows the wrong time Check the reminder Date and Time, then download the reminder or schedule calendar file again.
Schedule calendar or heading Share calendar is disabled Add at least one reminder with Scheduled status.
Share calendar downloads instead of opening a share sheet The current browser does not support calendar file sharing, or the app is not running inside a Capacitor iOS/Android shell. Use the downloaded .ics file or test through a native build.
Publish feed is disabled Sign in through the hosted Supabase access panel first.
Publishing says the calendar feed backend is not configured Re-run docs/backend/supabase-setup.sql, then set NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY and server-only SUPABASE_SERVICE_ROLE_KEY for the web workspace.
A copied feed URL does not show recent reminder changes Return to /app -> Schedule and select Publish feed again.
Publish shared feed is disabled Sign in first, then check organisation access. Disabled or non-member roles cannot publish a shared feed.
Publish shared feed says no shared organisation snapshot was found Save the shared organisation workspace from Data import and export before publishing the shared feed.
A copied shared feed URL does not show recent shared changes Save the shared organisation snapshot again, then return to /app -> Schedule and select Publish shared feed.
Notify says native notifications are available in app builds You are using the browser/PWA route. Open the Capacitor iOS or Android build, or use the .ics calendar file as the web reminder handoff.
Register push device is disabled Sign in through the hosted Supabase access panel first.
Push registration says it is only available in app builds Open the hosted platform through the iOS or Android Capacitor shell.
Queue push reports zero registered devices Register at least one iOS/Android device for the current signed-in account or organisation.
Worker response shows providerMissing Add FCM credentials for Android tokens and APNS credentials for iOS tokens, then queue a fresh dispatch or reset the existing dispatch status to queued.
No notification appears on the device Confirm the reminder is in the future, notification permission is granted, the app was run from a synced iOS/Android Capacitor build, the worker route ran successfully and live provider credentials are configured.

Related guides

Ready to try it? Open the workspace and follow along — it works in your browser, installs as an app and runs offline.

Open the workspace