PunctuOwlity lets you attach a reminder to any event. How that reminder is delivered depends on the platform — the Android app requestsDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/punctuowlity/llms.txt
Use this file to discover all available pages before exploring further.
SEND_SMS permission to enable SMS-based alerts, while the browser version uses the Web Notifications API to fire desktop or mobile notifications. In both cases the user is asked for permission on first launch and can choose to allow or deny it.
Android SMS Permission
The app declares the SMS permission and the optional telephony feature inAndroidManifest.xml:
android:required="false" on the telephony feature means the app can still be installed on devices without a cellular radio (for example, Wi-Fi-only tablets).
After a successful login, MainActivity.onCreate checks whether SEND_SMS has already been granted. If it has not, SmsPermissionActivity is launched:
SmsPermissionActivity, the user is presented with two buttons — Allow and Deny. Tapping Allow triggers the system permission dialog via ActivityCompat.requestPermissions; tapping Deny skips the request entirely. Either way, the activity finishes and the user proceeds to MainActivity:
Browser Notifications
First-Launch Permission Prompt
Whenevents.html loads, app.js checks for the punctuowlity-sms key in localStorage. If the key is null (i.e. the user has never been asked), they are redirected to sms.html before the dashboard is shown:
sms.html, the user can tap Allow SMS Notifications or No, thanks. Each button carries a data-sms attribute ("allowed" or "denied") that is written directly to localStorage['punctuowlity-sms'], and the user is then sent to events.html:
Requesting the Browser Notification Permission
Back on the dashboard, if the user chose'allowed' and the browser permission is still 'default' (neither granted nor denied), Notification.requestPermission() is called to trigger the browser’s own permission dialog:
Firing Today’s Notifications
On every dashboard load,app.js checks for events due today and fires a Notification for each one that has alert: true. A sessionStorage key keyed to the event’s ID and today’s date prevents the same notification from firing twice within a single browsing session:
Scheduled for <time>, where <time> is the formatted display time (e.g. "01:30PM" or "ALL DAY").
Toggling Reminders on Events
Browser: Every event card on the dashboard displays an alarm icon that reflects the event’s currentalert value — a filled alarm icon when alert is true, a muted one when false. To change the reminder setting, click the edit button on the card to open add-event.html. The form includes a toggle switch:
#eventAlert is pre-checked according to the stored alert value:
Event model stores id, title, date, and time — the four columns defined in DatabaseHelper. Reminder delivery on Android is gated on the SEND_SMS permission granted (or denied) through SmsPermissionActivity.
The browser notification check runs once each time the dashboard page loads. If you add a new event with
alert: true for today’s date, navigate away, and then return to events.html, the notification will fire on that return visit — unless the punctuowlity-notified-<id>-<date> key is already present in sessionStorage from an earlier load in the same tab session.