skills/push-notification-planner/SKILL.md
Plan end-to-end push notification strategies using APNs and FCM. Design payloads, define permission request timing, architect silent pushes vs. rich notifications, and structure analytics tracking.
npx skillsauth add fatih-developer/fth-skills push-notification-plannerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Implementing push notifications correctly involves much more than asking for permission on launch and wiring up Firebase Cloud Messaging (FCM). It requires empathy for the user's attention, right-timed permission requests, robust payload design, and proper routing when the app is in foreground, background, or killed state.
Core principle: A push notification must be timely, personal, and actionable. Unprompted "We miss you" pushes are spam.
1. Define the business goal for the notifications
2. Design the permission request strategy (When and How to ask)
3. Architect the payload structures (Data vs. Notification)
4. Plan handling logic (Foreground vs. Background/Killed)
5. Define key metrics to track success
Categorize the type of push needed:
Never ask for push permissions on app launch.
Distinguish between Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM) structures.
didReceiveRemoteNotification (iOS).Define what happens when the user clicks the notification.
# 🔔 Push Notification Strategy Plan
## 🎯 Use Case & Goal
**Type:** [Transactional / Marketing / Silent]
**Description:** [What are we telling the user?]
## 🗣 Permission Request Strategy
- **When to Ask:** [E.g., After submitting the first order]
- **Soft Prompt Copy:** "Enable notifications so we can tell you the minute your food arrives."
- **Fallback:** If they decline the native prompt, allow them to enable it later in app Settings.
## 📦 Payload Architecture (FCM Example)
```json
{
"message": {
"token": "DEVICE_REGISTRATION_TOKEN",
// Use 'notification' block for standard alerts
"notification": {
"title": "Your order is arriving!",
"body": "Driver is 2 minutes away."
},
// Use 'data' block for deep-linking and silent processing
"data": {
"type": "ORDER_UPDATE",
"orderId": "12345",
"route": "/orders/12345/tracking"
}
}
}
data.route and navigate to /orders/12345/tracking.To measure success, track these specific custom events:
push_prompt_shownpush_prompt_accepted / push_prompt_declinedpush_received (if measurable)push_opened
---
## When to Skip
- The User is asking about backend server architecture for millions of concurrent socket connections (this skill is focused on the mobile push client & strategy).
---
## Guardrails
- **No Launch Prompts:** Always correct developers who try to shove the `requestPermissions()` call inside `useEffect` or `viewDidLoad` on the main screen.
- **FCM 'notification' vs 'data':** Explain the critical difference between these two payload types. A `notification` block in FCM when the app is backgrounded will NOT wake up your JavaScript/App logic until the user taps it. You must use `data` only if you need to run background logic immediately upon receipt.
---
## References
See `references/EXAMPLES.md` for a worked case.
tools
Create, optimize, critique, and programmatically structure prompts for AI systems. Use this skill whenever the user is designing or improving a static prompt, system prompt, coding prompt, agent prompt, workflow prompt, MCP-oriented prompt package, or an algorithmic prompt optimization pipeline. Also use it when the user asks to turn vague AI behavior into a precise instruction set, tool policy, agent spec, evaluation metric, or prompt architecture.
testing
Assumption-first architecture review skill to stress-test project plans and expose hidden risks.
testing
Enforce and manage DESIGN.md specifications, extract design systems from URLs, and combine design reasoning with token roles to prevent drift.
testing
Forces the agent to act with a Claude-like product mindset, prioritizing user journey, UX states, and visual quality before coding.