feat(help-notifications): in-app troubleshooting, collapsibles, scroll-to-top
- Move NOTIFICATION_TROUBLESHOOTING content into HelpNotificationsView with prose styling - Remove exact-alarms section from doc and view (feature removed from app/plugin) - Add collapsible iOS/Android sections (open by default for current platform) - Add rotating carets on collapsible summaries - Add bullet for 10-minute rollover option in "If it still doesn't work" - Add @tailwindcss/typography plugin for prose classes - Reset #app scroll on route change so Help Notifications opens at top
This commit is contained in:
@@ -57,18 +57,6 @@ If you recently restarted iOS and don’t see the notification, open **TimeSafar
|
||||
3. Turn notifications **on**
|
||||
4. If Android shows notification categories/channels for the app, ensure the relevant channel is allowed.
|
||||
|
||||
### Exact alarms (Android 12+ / some devices)
|
||||
|
||||
Daily notifications may require **Exact alarms** to fire at the precise time.
|
||||
|
||||
- Open **Settings** → **Apps** → **TimeSafari**
|
||||
- Look for **Alarms & reminders** / **Exact alarms** (wording varies)
|
||||
- Turn **Allow** on
|
||||
|
||||
If you don’t see that option:
|
||||
|
||||
- Search Android settings for **Exact alarms**, **Alarms & reminders**, or **Special app access**
|
||||
|
||||
### Battery / background restrictions
|
||||
|
||||
Battery optimization can delay or block scheduled notifications.
|
||||
|
||||
29
package-lock.json
generated
29
package-lock.json
generated
@@ -106,6 +106,7 @@
|
||||
"@commitlint/cli": "^18.6.1",
|
||||
"@commitlint/config-conventional": "^18.6.2",
|
||||
"@playwright/test": "^1.54.2",
|
||||
"@tailwindcss/typography": "^0.5.19",
|
||||
"@types/dom-webcodecs": "^0.1.7",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
@@ -8656,6 +8657,33 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/typography": {
|
||||
"version": "0.5.19",
|
||||
"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz",
|
||||
"integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"postcss-selector-parser": "6.0.10"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
|
||||
"version": "6.0.10",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
|
||||
"integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cssesc": "^3.0.0",
|
||||
"util-deprecate": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@timesafari/daily-notification-plugin": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "git+https://gitea.anomalistdesign.com/trent_larson/daily-notification-plugin.git#b8d9b6247d670929418b12e7135d8dd3c9684277",
|
||||
@@ -26523,6 +26551,7 @@
|
||||
"version": "3.4.17",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
"arg": "^5.0.2",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"@capacitor/share": "^6.0.3",
|
||||
"@capacitor/status-bar": "^6.0.2",
|
||||
"@capawesome/capacitor-file-picker": "^6.2.0",
|
||||
"@timesafari/daily-notification-plugin": "git+https://gitea.anomalistdesign.com/trent_larson/daily-notification-plugin.git#master",
|
||||
"@dicebear/collection": "^5.4.1",
|
||||
"@dicebear/core": "^5.4.1",
|
||||
"@ethersproject/hdnode": "^5.7.0",
|
||||
@@ -162,12 +161,12 @@
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.6",
|
||||
"@jlongster/sql.js": "^1.6.7",
|
||||
"nostr-tools": "^2.15.0",
|
||||
"@peculiar/asn1-ecc": "^2.3.8",
|
||||
"@peculiar/asn1-schema": "^2.3.8",
|
||||
"@pvermeer/dexie-encrypted-addon": "^3.0.0",
|
||||
"@simplewebauthn/browser": "^10.0.0",
|
||||
"@simplewebauthn/server": "^10.0.0",
|
||||
"@timesafari/daily-notification-plugin": "git+https://gitea.anomalistdesign.com/trent_larson/daily-notification-plugin.git#master",
|
||||
"@tweenjs/tween.js": "^21.1.1",
|
||||
"@types/qrcode": "^1.5.5",
|
||||
"@veramo/core": "^5.6.0",
|
||||
@@ -204,6 +203,7 @@
|
||||
"lru-cache": "^10.2.0",
|
||||
"luxon": "^3.4.4",
|
||||
"merkletreejs": "^0.3.11",
|
||||
"nostr-tools": "^2.15.0",
|
||||
"notiwind": "^2.0.2",
|
||||
"papaparse": "^5.4.1",
|
||||
"pinia": "^2.1.7",
|
||||
@@ -235,6 +235,7 @@
|
||||
"@commitlint/cli": "^18.6.1",
|
||||
"@commitlint/config-conventional": "^18.6.2",
|
||||
"@playwright/test": "^1.54.2",
|
||||
"@tailwindcss/typography": "^0.5.19",
|
||||
"@types/dom-webcodecs": "^0.1.7",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
|
||||
@@ -433,8 +433,13 @@ router.beforeEach(async (to, _from, next) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Add navigation success logging
|
||||
// Add navigation success logging and scroll-to-top (app uses #app as scroll container, not window)
|
||||
router.afterEach((to, from) => {
|
||||
const app = document.getElementById("app");
|
||||
if (app) {
|
||||
app.scrollTop = 0;
|
||||
app.scrollLeft = 0;
|
||||
}
|
||||
logger.debug(`[Router] ✅ Navigation completed:`, {
|
||||
from: from?.path || "none",
|
||||
to: to.path,
|
||||
|
||||
@@ -27,6 +27,179 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="prose prose-slate max-w-none prose-h4:uppercase prose-h5:font-semibold"
|
||||
>
|
||||
<h3>Troubleshooting Notifications</h3>
|
||||
|
||||
<h4>1) Check your in-app notification settings</h4>
|
||||
<ul>
|
||||
<li>Tap <strong>Profile</strong> in the bottom bar</li>
|
||||
<li>
|
||||
Under <strong>Notifications</strong>, confirm:
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Daily Reminder</strong> is <strong>enabled</strong>
|
||||
</li>
|
||||
<li>The <strong>time</strong> is set correctly</li>
|
||||
<li>The message looks correct</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
If it’s already enabled, try to:
|
||||
<ul>
|
||||
<li>Turn it <strong>off</strong></li>
|
||||
<li>Turn it <strong>on</strong> again</li>
|
||||
<li>Re-set the time and message</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<details class="prose-details mt-2" :open="isIOS">
|
||||
<summary
|
||||
class="cursor-pointer font-semibold uppercase text-inherit list-none flex items-center gap-2 [&::-webkit-details-marker]:hidden"
|
||||
>
|
||||
<font-awesome
|
||||
icon="chevron-right"
|
||||
class="details-chevron w-[0.75em] flex-shrink-0 transition-transform duration-200"
|
||||
/>
|
||||
2) iOS troubleshooting
|
||||
</summary>
|
||||
<div class="pl-0 mt-2">
|
||||
<h5>Allow notifications for TimeSafari</h5>
|
||||
<ol>
|
||||
<li>
|
||||
Open <strong>Settings</strong> → <strong>Notifications</strong>
|
||||
</li>
|
||||
<li>Tap <strong>TimeSafari</strong></li>
|
||||
<li>Turn <strong>Allow Notifications</strong> on</li>
|
||||
<li>
|
||||
Enable at least one delivery style (recommended):
|
||||
<ul>
|
||||
<li><strong>Lock Screen</strong></li>
|
||||
<li><strong>Notification Center</strong></li>
|
||||
<li><strong>Banners</strong></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
Optional but helpful:
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Sounds</strong> on (if you want an audible reminder)
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<h5>Focus / Do Not Disturb</h5>
|
||||
<p>
|
||||
If you’re using <strong>Focus</strong> or
|
||||
<strong>Do Not Disturb</strong>, notifications may be silenced or
|
||||
hidden.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Open <strong>Settings</strong> → <strong>Focus</strong></li>
|
||||
<li>
|
||||
Check the active Focus mode and ensure
|
||||
<strong>TimeSafari</strong> is allowed (or temporarily disable
|
||||
Focus to test)
|
||||
</li>
|
||||
</ul>
|
||||
<h5>After restarting your phone</h5>
|
||||
<p>
|
||||
If you recently restarted iOS and don’t see the notification, open
|
||||
<strong>TimeSafari</strong> once. (You don’t need to change
|
||||
anything.)
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="prose-details mt-2" :open="isAndroid">
|
||||
<summary
|
||||
class="cursor-pointer font-semibold uppercase text-inherit list-none flex items-center gap-2 [&::-webkit-details-marker]:hidden"
|
||||
>
|
||||
<font-awesome
|
||||
icon="chevron-right"
|
||||
class="details-chevron w-[0.75em] flex-shrink-0 transition-transform duration-200"
|
||||
/>
|
||||
3) Android troubleshooting
|
||||
</summary>
|
||||
<div class="pl-0 mt-2">
|
||||
<h5>Allow notifications for TimeSafari</h5>
|
||||
<ol>
|
||||
<li>Open <strong>Settings</strong> → <strong>Apps</strong></li>
|
||||
<li>
|
||||
Tap <strong>TimeSafari</strong> →
|
||||
<strong>Manage notifications</strong> (wording varies)
|
||||
</li>
|
||||
<li>Turn notifications <strong>on</strong></li>
|
||||
<li>
|
||||
If Android shows notification categories/channels for the app,
|
||||
ensure the relevant channel is allowed.
|
||||
</li>
|
||||
</ol>
|
||||
<h5>Battery / background restrictions</h5>
|
||||
<p>
|
||||
Battery optimization can delay or block scheduled notifications.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Open <strong>Settings</strong> → <strong>Apps</strong> →
|
||||
<strong>TimeSafari</strong> →
|
||||
<strong>Battery usage</strong> (wording varies)
|
||||
</li>
|
||||
<li>
|
||||
If available:
|
||||
<ul>
|
||||
<li>
|
||||
Set <strong>Battery usage</strong> to
|
||||
<strong>Unrestricted</strong>
|
||||
</li>
|
||||
<li>Turn <strong>Allow background usage</strong> on</li>
|
||||
<li>Disable optimization for TimeSafari</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
If your device has lists like <strong>Sleeping apps</strong> /
|
||||
<strong>Restricted apps</strong>, remove TimeSafari from them
|
||||
</li>
|
||||
</ul>
|
||||
<h5>After restarting your phone</h5>
|
||||
<p>
|
||||
Depending on the device manufacturer, Android can clear scheduled
|
||||
notifications during a reboot. If you restarted recently:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Open <strong>TimeSafari</strong> once (you don’t need to change
|
||||
anything)
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<h4>4) If it still doesn’t work</h4>
|
||||
<ul>
|
||||
<li>Ensure you’re on the latest TimeSafari app version.</li>
|
||||
<li>
|
||||
If you denied permission earlier, re-enable notifications in system
|
||||
settings (above).
|
||||
</li>
|
||||
<li>
|
||||
Try the <strong>Use 10-minute rollover (testing)</strong> option at
|
||||
the bottom of this screen to confirm that notifications are firing
|
||||
on your device.
|
||||
</li>
|
||||
<li>
|
||||
As a last resort, uninstall/reinstall the app (you’ll need to enable
|
||||
notifications again and reconfigure the daily reminder).
|
||||
<strong>Important:</strong> Before uninstalling, back up your
|
||||
identifier seed so you can import it back later:
|
||||
<strong>Profile → Data Management → Backup Identifier Seed</strong>.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Fast rollover testing -->
|
||||
<label
|
||||
class="flex items-center justify-between cursor-pointer mt-3 py-2"
|
||||
@click="toggleReminderFastRollover"
|
||||
@@ -76,11 +249,16 @@ export default class HelpNotificationsView extends Vue {
|
||||
notifyingReminderMessage = "";
|
||||
notifyingReminderTime = "";
|
||||
reminderFastRolloverForTesting: boolean = false;
|
||||
isIOS = false;
|
||||
isAndroid = false;
|
||||
|
||||
notify!: ReturnType<typeof createNotifyHelpers>;
|
||||
|
||||
async mounted() {
|
||||
this.notify = createNotifyHelpers(this.$notify);
|
||||
const platform = Capacitor.getPlatform();
|
||||
this.isIOS = platform === "ios";
|
||||
this.isAndroid = platform === "android";
|
||||
|
||||
try {
|
||||
const settings = await this.$settings();
|
||||
@@ -163,3 +341,9 @@ export default class HelpNotificationsView extends Vue {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.prose-details[open] .details-chevron {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -4,5 +4,5 @@ module.exports = {
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [],
|
||||
plugins: [require("@tailwindcss/typography")],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user