skills/wellness-app-engagement/SKILL.md
Designs ethical engagement systems for wellness apps — onboarding, habit loops, streaks, re-engagement, and push strategy that serve user health over retention metrics. Grounded in BJ Fogg's Behavior Model, Self-Determination Theory, and the Hook Model applied responsibly. Activate on 'wellness app', 'health app engagement', 'habit formation', 'onboarding flow', 'streak system', 'push notification strategy', 'user retention wellness', 'ethical gamification', 'lapsed user re-engagement', 'daily engagement loop'.
npx skillsauth add curiositech/windags-skills wellness-app-engagementInstall 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.
Expert in designing engagement systems for wellness apps that serve user health outcomes over vanity metrics. Combines behavioral science with ethical design to create genuine value, not addiction.
User Intent Assessment:
├─ NEW USER (first download)
│ ├─ High motivation + specific problem → Direct to solution (skip long onboarding)
│ ├─ High motivation + exploring → Quick tour with immediate micro-win
│ └─ Low motivation + browsing → Single action + value demonstration
├─ RETURNING USER (7-30 days inactive)
│ ├─ Left during onboarding → Fresh start option + simplified flow
│ ├─ Completed setup but stopped → Show what's new + adjust goals option
│ └─ Had active streak → Welcome back warmly, don't mention gap
└─ LAPSED USER (30+ days inactive)
├─ Had high engagement → Show lifetime stats + "pick up where you left off"
├─ Had low engagement → Treat as new user with better onboarding
└─ Churned during trial → Address specific pain point that caused exit
Daily Notification Decision Tree:
├─ User set preferred time?
│ ├─ YES → Send at their time ± 30 min window
│ └─ NO → Use historical pattern or default to 9am
├─ User active in last 24 hours?
│ ├─ YES → Skip daily reminder, send milestone/insight instead
│ └─ NO → Send gentle invitation to return
├─ Inactive 3+ days?
│ ├─ First gap → One "we miss you" message with value
│ ├─ Multiple gaps → Weekly digest only
│ └─ 14+ days → Stop all engagement notifications
└─ User disabled notifications?
└─ Respect choice. Use in-app messaging only.
Session Recommendation Engine:
├─ Time of Day:
│ ├─ Morning (5-10am) → Energizing/intention-setting content
│ ├─ Midday (11am-3pm) → Quick reset sessions (3-5 min)
│ ├─ Evening (4-8pm) → Transition/unwinding content
│ └─ Night (9pm+) → Sleep-focused only
├─ User's Current State:
│ ├─ Mood check = good → Growth/challenge content
│ ├─ Mood check = neutral → Maintenance content
│ ├─ Mood check = poor → Comfort/basic content
│ └─ No mood data → Default to user's most-completed content type
└─ Usage Pattern:
├─ Daily user → Introduce variety/advanced content
├─ Weekly user → Focus on consistency/habit-building
└─ Sporadic user → Keep sessions tiny, celebrate all returns
Symptoms: Declining mood scores after notifications, users disabling alerts, negative app reviews mentioning "pressure" Diagnosis: Your engagement system triggers shame instead of motivation Fix: Audit all copy for obligation language. Replace "You missed..." with "When you're ready..." Reframe streaks as accumulation, not loss prevention.
Symptoms: 60%+ drop-off in first session, users never completing setup, support tickets asking "how do I just start?" Diagnosis: Cognitive overload from showing too much too fast Fix: Implement progressive disclosure. Show only ONE feature at a time. Deliver micro-win before asking for ANY commitment. Test with 3-screen limit.
Symptoms: High DAU but users report no benefit, time-in-app increasing but satisfaction decreasing Diagnosis: Optimizing for engagement metrics instead of health outcomes Fix: Switch primary KPI to outcome achievement rate. Survey users on actual life improvement. Shorten sessions if completion drops below 80%.
Symptoms: High notification open rates but immediate app closes, users mentioning "anxiety" from alerts Diagnosis: Using fear/guilt to drive opens instead of providing value Fix: Test notification copy with therapist review. Remove all loss-framing. Lead with value: "Your 3-min calm break is ready" not "Don't lose your streak!"
Symptoms: High trial-to-paid conversion but immediate cancellations, reviews mentioning "trapped" or "deceived" Diagnosis: Paywalling features users relied on during free trial Fix: Design free tier with genuine long-term value. Premium should add depth, not remove basics. Never paywall features shown in onboarding.
Scenario: Sarah used a meditation app daily for 3 weeks, then stopped for 12 days. She opens the app again.
Novice approach: Show "0-day streak" prominently, list missed sessions, ask "What happened?"
Expert approach:
Decision points navigated:
Trade-offs shown: Could push her back to 10-minute sessions faster, but risking another dropout vs. patient rebuilding that creates sustainable habit.
Scenario: Mike downloads a fitness app but selects "just exploring" and "haven't exercised in months" during intake.
Novice approach: Show full workout library, suggest 30-minute beginner routine, ask for fitness goals.
Expert approach:
Decision points navigated:
Trade-offs shown: Slower progression vs. sustainable engagement. Could lose him with bigger initial asks, but tiny wins compound into lasting behavior change.
Scenario: Jamie used a sobriety tracking app for 45 days, relapsed, stayed away from app for 8 days, now wants to restart.
Novice approach: Reset day counter to 0, show "start over" messaging, ask about the relapse.
Expert approach:
Decision points navigated:
Trade-offs shown: Could emphasize "starting over" motivation, but risking shame-induced abandonment vs. building on existing strengths and resilience.
Pre-launch completion checklist:
This skill is NOT for:
social-media-growth insteadconversion-optimization insteadmobile-onboarding-flow insteadgame-engagement-design insteadproductivity-app-design insteadDelegate when:
crisis-intervention-designchild-safe-app-designhealthtech-compliance-expertaddiction-recovery-experttools
Building resilient distributed systems with circuit breakers, retries with full-jitter exponential backoff, retry budgets (per-request 3-attempt + per-client 10% ratio per Google SRE), deadline propagation, and the cascading-failure math (4 layers × 3 retries = 64x amplification). Grounded in Resilience4j, Microsoft Cloud Patterns, AWS Architecture Blog (Marc Brooker), and Google SRE Book.
testing
Designing HTTP cache headers that work correctly across browsers, CDNs, and shared proxies — `Cache-Control` directives per RFC 9111, `stale-while-revalidate` and `stale-if-error` per RFC 5861, the Vary header for varying responses, and surrogate keys for tag-based purging. Grounded in IETF RFCs and Cloudflare/Fastly docs.
development
Use when designing or fixing a Content Security Policy on a real site, choosing between nonce-based and hash-based CSP, adding strict-dynamic, debugging "Refused to execute inline script" errors, deploying CSP in report-only mode first, configuring report-to / report-uri, or auditing an existing policy for unsafe-inline / unsafe-eval / wildcards. Triggers: "CSP blocks legitimate inline script", strict-dynamic, nonce-{RANDOM}, sha256-{HASH}, object-src none, base-uri none, frame-ancestors, Trusted Types, X-Content-Security-Policy obsolete, report-only vs enforced. NOT for general HTTP security headers (HSTS, COOP/COEP), Trusted Types deep dive, CORS configuration, or building a WAF.
tools
Choosing and operating an HTTP API versioning strategy that doesn't break clients — Stripe's date-based pinned versions, the Deprecation/Sunset header pair (RFC 9745 + RFC 8594), URI vs header vs media-type approaches, and the version-transformer pattern. Grounded in Stripe's published architecture and IETF RFCs.