skills/generators/quick-win-session/SKILL.md
Generates guided first-action flows that help users achieve a meaningful result within 60 seconds to boost retention. Use when user wants quick win onboarding, time-to-value optimization, or first success moments.
npx skillsauth add rshankras/claude-code-apple-skills quick-win-sessionInstall 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.
Generate a "quick win" session system that guides users to complete a meaningful action within their first 60 seconds. Reduces time-to-value by surfacing the simplest high-impact task, walking the user through it step by step, and celebrating completion. Critical for onboarding retention — users who achieve a quick win in the first minute are significantly more likely to return.
Use this skill when the user:
Search for existing onboarding code:
Glob: **/*Onboarding*.swift, **/*Welcome*.swift, **/*QuickWin*.swift, **/*FirstRun*.swift
Grep: "onboarding" or "firstLaunch" or "hasCompletedSetup" or "isNewUser"
If existing onboarding found:
Search for existing user defaults or state tracking:
Grep: "UserDefaults" or "@AppStorage" or "isFirstLaunch"
Determine how to persist quick win completion status (UserDefaults, AppStorage, SwiftData, etc.).
Ask user via AskUserQuestion:
Quick win type?
Guidance style?
Celebrate on completion?
Track as activation metric?
Read templates.md for production Swift code.
Generate these files:
QuickWinTask.swift — Model for a quick win task and its stepsQuickWinSession.swift — @Observable session manager: task selection, step tracking, timing, completionQuickWinGuideView.swift — Overlay that shows instructions and progressSpotlightHintView.swift — Spotlight cutout overlay with callout arrowQuickWinCelebrationView.swift — Completion celebration with statsQuickWinModifier.swift — ViewModifier that triggers the quick win for new usersCheck project structure:
Sources/ exists → Sources/QuickWin/App/ exists → App/QuickWin/QuickWin/After generation, provide:
QuickWin/
├── QuickWinTask.swift # Task model with steps
├── QuickWinSession.swift # Session manager (progress, timing)
├── QuickWinGuideView.swift # Step-by-step overlay UI
├── SpotlightHintView.swift # Spotlight cutout with callout
├── QuickWinCelebrationView.swift # Completion celebration
└── QuickWinModifier.swift # ViewModifier for root view
Attach to your root view:
// In your main ContentView or post-onboarding view
ContentView()
.quickWinSession(task: .createFirstNote)
Define your app's quick win task:
extension QuickWinTask {
static let createFirstNote = QuickWinTask(
id: "create-first-note",
title: "Create Your First Note",
description: "Let's get started — it only takes a few seconds.",
estimatedSeconds: 30,
steps: [
QuickWinStep(instruction: "Tap the + button to create a new note", actionType: .tap, targetView: "addButton"),
QuickWinStep(instruction: "Type a title for your note", actionType: .input, targetView: "titleField"),
QuickWinStep(instruction: "Tap Done to save", actionType: .tap, targetView: "doneButton")
],
completionCriteria: "firstNoteCreated",
iconName: "note.text.badge.plus"
)
}
With spotlight hints:
// Mark target views for spotlight
TextField("Title", text: $title)
.quickWinTarget(id: "titleField")
Button("Done") { save() }
.quickWinTarget(id: "doneButton")
Start session programmatically (after existing onboarding):
struct PostOnboardingView: View {
@State private var session = QuickWinSession()
var body: some View {
MainView()
.onAppear {
if !session.hasCompletedQuickWin {
session.start(task: .createFirstNote)
}
}
.quickWinOverlay(session: session)
}
}
@Test
func quickWinSessionTracksProgress() async {
let session = QuickWinSession(storage: MockStorage())
let task = QuickWinTask.testTask(stepCount: 3)
session.start(task: task)
#expect(session.currentStepIndex == 0)
#expect(session.isActive)
session.completeCurrentStep()
#expect(session.currentStepIndex == 1)
session.completeCurrentStep()
#expect(session.currentStepIndex == 2)
session.completeCurrentStep()
#expect(session.isCompleted)
#expect(session.isActive == false)
}
@Test
func quickWinRecordsCompletionTime() async {
let session = QuickWinSession(storage: MockStorage())
let task = QuickWinTask.testTask(stepCount: 1)
session.start(task: task)
// Simulate time passing
try? await Task.sleep(for: .milliseconds(500))
session.completeCurrentStep()
#expect(session.completionTimeSeconds > 0)
#expect(session.completionTimeSeconds < 5)
}
@Test
func quickWinSkipsForReturningUsers() async {
let storage = MockStorage()
storage.set(true, forKey: "quickWin_create-first-note_completed")
let session = QuickWinSession(storage: storage)
session.start(task: .createFirstNote)
#expect(session.isActive == false) // Already completed, skip
}
@Test
func quickWinHandlesAbandonment() async {
let session = QuickWinSession(storage: MockStorage())
let task = QuickWinTask.testTask(stepCount: 3)
session.start(task: task)
session.completeCurrentStep()
session.abandon()
#expect(session.isActive == false)
#expect(session.isCompleted == false)
#expect(session.abandonedAtStep == 1)
}
// After onboarding completes
session.start(task: .createFirstNote)
// Session automatically advances through steps
// Each step shows instruction + highlights target
QuickWinGuideView(session: session)
// Automatically shown when all steps complete
QuickWinCelebrationView(
taskTitle: session.completedTask?.title ?? "",
completionTime: session.completionTimeSeconds
)
app-store/originality-check before submitting.generators/onboarding-generator — Full onboarding flow generationgenerators/milestone-celebration — Celebration UI for achievements beyond first actiondevelopment
US web checkout via the StoreKit External Purchase Link entitlement — currently 0% Apple commission (litigation ongoing), how to ship it safely, and how to architect for a commission flip so a future ruling is a config change, not a rewrite. Use when adding external purchase links, weighing web checkout vs IAP, or planning US-storefront pricing strategy.
tools
Revenue beyond the single-app price tag — own-app bundles, Family Sharing as a conversion lever, cross-developer bundles & suites, and institutional licensing via Group Purchases / Apple School & Business Manager. Use when a developer has multiple apps, a subscription worth sharing, complementary indie partners, or school/clinic/business buyers.
testing
Run a structured accessibility audit on an iOS/macOS app — automated XCUITest audits, Accessibility Inspector, manual VoiceOver/Dynamic Type passes, and App Store Accessibility Nutrition Label evaluation. Use before release, when preparing Nutrition Label declarations, or for EU Accessibility Act compliance.
tools
Stage-by-stage audit of an app's App Store growth machinery against a 54-item P0–P9 playbook — every item scored from an App Store Connect MCP call, a codebase check, or an explicit question to the user, then routed to the skill or command that fixes it. Read-only on App Store Connect. Use for a growth audit or scorecard, a pre-launch growth plan, a quarterly re-audit, or "which growth levers am I missing."