Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/rshankras-quick-win-session/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 145% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 100% | 0% |
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:
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 viewAttach to your root view:
swift// In your main ContentView or post-onboarding view ContentView() .quickWinSession(task: .createFirstNote)
Define your app's quick win task:
swiftextension 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:
swift// Mark target views for spotlight TextField("Title", text: $title) .quickWinTarget(id: "titleField") Button("Done") { save() } .quickWinTarget(id: "doneButton")
Start session programmatically (after existing onboarding):
swiftstruct PostOnboardingView: View { @State private var session = QuickWinSession() var body: some View { MainView() .onAppear { if !session.hasCompletedQuickWin { session.start(task: .createFirstNote) } } .quickWinOverlay(session: session) } }
swift@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) }
swift// After onboarding completes session.start(task: .createFirstNote)
swift// Session automatically advances through steps // Each step shows instruction + highlights target QuickWinGuideView(session: session)
swift// 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 actionOther measured skills in the registry, with their headline benchmark lift.