Files
PodTui/tasks/podcast-tui-app/04-authentication.md
Michael Freno f08afb2ed1 init
2026-02-03 23:29:36 -05:00

2.5 KiB

04. Build Optional Authentication System

meta: id: podcast-tui-app-04 feature: podcast-tui-app priority: P2 depends_on: [03] tags: [authentication, optional, solidjs, security]

objective:

  • Create authentication state management (disabled by default)
  • Build simple login screen with email/password
  • Implement 8-character code validation flow
  • Add OAuth placeholder screens
  • Create sync-only user profile

deliverables:

  • src/stores/auth.ts with authentication state store
  • src/components/LoginScreen.tsx with login form
  • src/components/CodeValidation.tsx with 8-character code input
  • src/components/OAuthPlaceholder.tsx with OAuth info
  • src/components/SyncProfile.tsx with sync-only profile

steps:

  • Create src/stores/auth.ts with Zustand store:
    • user state (initially null)
    • isAuthenticated state (initially false)
    • login() function
    • logout() function
    • validateCode() function
  • Create src/components/LoginScreen.tsx:
    • Email input field
    • Password input field
    • Login button
    • Link to code validation flow
    • Link to OAuth placeholder
  • Create src/components/CodeValidation.tsx:
    • 8-character code input
    • Validation logic (alphanumeric)
    • Submit button
    • Error message display
  • Create src/components/OAuthPlaceholder.tsx:
    • Display OAuth information
    • Explain terminal limitations
    • Link to browser redirect flow
  • Create src/components/SyncProfile.tsx:
    • User profile display
    • Sync status indicator
    • Profile management options
  • Add auth screens to Navigation (hidden by default)

tests:

  • Unit: Test authentication state management
  • Unit: Test code validation logic
  • Integration: Test login flow completes
  • Integration: Test logout clears state

acceptance_criteria:

  • Authentication is disabled by default (isAuthenticated = false)
  • Login screen accepts email and password
  • Code validation accepts 8-character codes
  • OAuth placeholder displays limitations
  • Sync profile shows user info
  • Login state persists across sessions

validation:

  • Run application and verify login screen is accessible
  • Try to log in with valid credentials
  • Try to log in with invalid credentials
  • Test code validation with valid/invalid codes
  • Verify authentication state persists

notes:

  • Authentication is optional and disabled by default
  • Focus on file sync, not user accounts
  • Use simple validation (no real backend)
  • Store authentication state in localStorage
  • OAuth not feasible in terminal, document limitation