Skip to content

Phase 7: Polish, Onboarding, and Release #16

@sonnes

Description

@sonnes

Goal

First-run experience, accessibility audit, performance optimization, and release preparation.

Deliverables

Onboarding Flow

  • Welcome screen — explain September's purpose and core features
  • Accessibility permissions — guide user through System Settings > Privacy & Security > Accessibility (required for keystroke injection). Detect permission status, show banner if not granted
  • Microphone permission — request for transcription features
  • Account setup — name, diagnosis info (optional)
  • AI provider wizard — select provider, enter API key, test connection
  • Voice selection — pick TTS voice, preview it

Accessibility Audit

  • VoiceOver — full walkthrough of every screen. Every interactive element has .accessibilityLabel() and .accessibilityHint()
  • Switch Control — test with Switch Control enabled
  • Keyboard-only navigation — every action reachable without mouse
  • Dynamic Type — support where applicable
  • Reduced Motion — respect accessibilityReduceMotion (disable animations)

Performance

  • Profile with Instruments — Time Profiler, Allocations, SwiftUI view body evaluations
  • Keyboard render time — must be under 200ms
  • 60fps animations — key press feedback, panel transitions
  • AI debouncing — prediction calls are cancellable, no redundant requests
  • Memory profiling — no leaks during long sessions

Security

  • Keychain integration — migrate API keys from SwiftData to macOS Keychain. API keys must never be stored in plaintext in the database

Menu Bar Item

  • Status bar icon — optional menu bar presence for quick access
  • Show/hide keyboard shortcut
  • Mode switching from menu bar

Distribution

  • Code signing — Developer ID certificate for distribution outside App Store
  • Notarization — submit to Apple for notarization
  • Auto-update — Sparkle framework integration, OR TestFlight for beta
  • Crash reporting — basic crash reporting (opt-in)
  • Privacy — no content data collected, only interaction patterns (opt-in analytics)

Acceptance Criteria

  • New user can complete onboarding and start typing within 2 minutes
  • Accessibility permission flow clearly guides the user and detects current status
  • VoiceOver user can navigate and use the full keyboard
  • No Instruments warnings for main thread hangs > 200ms
  • API keys stored in Keychain, not visible in SwiftData database
  • App is signed, notarized, and installs cleanly on a fresh Mac

Dependencies

All previous phases (0-6)

Metadata

Metadata

Assignees

No one assigned

    Labels

    phase-7Polish + ReleaseswiftmacOS Swift app

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions