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
.icsfile 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
- Open
/app. - Select
Schedule. - In
New reminder, choose aJob. - Enter a
Title. - Set
DateandTime. - Set
Lead minutes. - Choose a
Channel:In-app,PushorCalendar. - Add
Notesif needed. - Select
Add reminder.
Update a reminder
- Open
/app. - Select
Schedule. - In
Upcoming reminders, find the reminder row. - Change
ChannelorStatus.
Download a calendar file
- Open
/app. - Select
Schedule. - Find the reminder row.
- Select
Calendar. - Import the downloaded
.icsfile into your calendar app.
Share a reminder calendar file
- Open
/app. - Select
Schedule. - Find the reminder row.
- Select
Share calendar. - 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
- Open
/app. - Select
Schedule. - In the
Schedule and remindersheading, selectSchedule calendar. - Import the downloaded
.icsfile 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
- Open
/app. - Select
Schedule. - In the
Schedule and remindersheading, selectShare calendar. - 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
- Open
/app. - Sign in through the hosted Pro/access panel.
- Select
Schedule. - In
Calendar feed, selectPublish feed. - When the feed URL appears, select
Copy feed URL. - 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
- Open
/app. - Sign in through the hosted Pro/access panel.
- Confirm the current
Workspace slughas been saved as a shared organisation workspace. - Select
Schedule. - In
Shared calendar feed, selectPublish shared feed. - When the feed URL appears, select
Copy shared URL. - 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
- Open
/appinside the iOS or Android Capacitor app. - Select
Schedule. - Find the reminder row.
- Select
Notify. - 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
- Open
/appinside the iOS or Android Capacitor app. - Sign in through the hosted Pro/access panel.
- Select
Schedule. - In
Push registration, selectRegister push device. - 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
- Open
/app. - Sign in through the hosted Pro/access panel.
- Select
Schedule. - Find the reminder row in
Upcoming reminders. - 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.
- Configure
SUPABASE_SERVICE_ROLE_KEY. - Configure
CRON_SECRETfor Vercel Cron and optionallyMECHANICDESK_NOTIFICATION_WORKER_SECRETfor manual runs. - Configure FCM credentials for Android delivery and APNS credentials for iOS delivery.
- Deploy with the Vercel Root Directory set to
apps/web. - Vercel calls
GET /api/notifications/dispatches/processevery 15 minutes fromapps/web/vercel.json. - For a manual run, call
GET /api/notifications/dispatches/processorPOST /api/notifications/dispatches/processwith the worker secret. - Check the JSON response for
sent,partial,failed,skippedandproviderMissingcounts.
Remove a reminder
- Open
/app. - Select
Schedule. - Find the reminder row.
- 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
Calendaras the channel when you plan to export a reminder into a calendar app. - Use
Pushwhen 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,skippedorprovider_missingafter the worker runs. - Calendar files use the reminder due date/time and include linked job details where available.
- The
Schedule calendarand headingShare calendaractions include all reminders withScheduledstatus in one.icsfile. - 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
.icsfeed, not forms, invoices, templates or full workspace exports. - Use
Publish feedfor the current browser schedule. UsePublish shared feedwhen the calendar should come from the saved shared organisation snapshot. - Select
Publish feedagain 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
Notifyagain 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