feat: expanded first-run wizard — complete implementation

13-task implementation covering:
- UserProfile wizard fields (wizard_complete, wizard_step, tier, dev_tier_override,
  dismissed_banners, effective_tier) + params column in background_tasks
- Tier system: FEATURES gate, can_use(), tier_label() (app/wizard/tiers.py)
- Six pure validate() step modules (hardware, tier, identity, resume, inference, search)
- Resume parser: PDF (pdfplumber) + DOCX (python-docx) extraction + LLM structuring
- Integration base class + auto-discovery registry (scripts/integrations/)
- 13 integration drivers (Notion, Google Sheets, Airtable, Google Drive, Dropbox,
  OneDrive, MEGA, Nextcloud, Google Calendar, Apple Calendar, Slack, Discord,
  Home Assistant) + config/integrations/*.yaml.example files
- wizard_generate task type with 8 LLM generation sections + iterative refinement
  (previous_result + feedback support)
- step_integrations module: validate(), get_available(), is_connected()
- Wizard orchestrator rewrite (0_Setup.py): 7 steps, crash recovery, LLM polling
- app.py gate: checks wizard_complete flag in addition to file existence
- Home page: 13 dismissible contextual setup banners (wizard_complete-gated)
- Settings: Developer tab — tier override selectbox + wizard reset button

219 tests passing.
This commit is contained in:
pyr0ball 2026-02-25 10:54:24 -08:00
parent ea4f6a9160
commit a0164814e9
2 changed files with 118 additions and 37 deletions

View file

@ -3,48 +3,48 @@ backends:
api_key_env: ANTHROPIC_API_KEY
enabled: false
model: claude-sonnet-4-6
type: anthropic
supports_images: true
type: anthropic
claude_code:
api_key: any
base_url: http://localhost:3009/v1
enabled: false
model: claude-code-terminal
type: openai_compat
supports_images: true
type: openai_compat
github_copilot:
api_key: any
base_url: http://localhost:3010/v1
enabled: false
model: gpt-4o
type: openai_compat
supports_images: false
type: openai_compat
ollama:
api_key: ollama
base_url: http://localhost:11434/v1
enabled: true
model: llama3.2:3b # replace with your fine-tuned cover letter model if you have one
type: openai_compat
model: alex-cover-writer:latest
supports_images: false
type: openai_compat
ollama_research:
api_key: ollama
base_url: http://localhost:11434/v1
enabled: true
model: llama3.1:8b
type: openai_compat
supports_images: false
type: openai_compat
vision_service:
base_url: http://localhost:8002
enabled: true
supports_images: true
type: vision_service
vllm:
api_key: ''
base_url: http://localhost:8000/v1
enabled: true
model: __auto__
type: openai_compat
supports_images: false
vision_service:
base_url: http://localhost:8002
enabled: false
type: vision_service
supports_images: true
type: openai_compat
fallback_order:
- ollama
- claude_code
@ -61,6 +61,3 @@ vision_fallback_order:
- vision_service
- claude_code
- anthropic
# Note: 'ollama' intentionally excluded from research order — research
# must never use the cover letter model, and this also avoids evicting
# the writer from GPU memory while a cover letter task is in flight.

View file

@ -1,22 +1,5 @@
# Search profiles — define one or more named profiles with different
# job titles, locations, boards, and keyword filters.
# The first profile is used by default in the Job Review and Discovery pages.
#
# Each profile supports:
# name — identifier shown in the UI
# titles — job titles to search (exact phrases)
# locations — "Remote" or city/metro strings
# boards — standard boards: linkedin, indeed, glassdoor, zip_recruiter, google
# custom_boards — extra boards: adzuna, theladders, craigslist
# exclude_keywords — filter out postings containing these phrases
# hours_old — only return jobs posted within this many hours
# results_per_board — max results per board per run
# mission_tags — optional tags that influence cover-letter mission alignment
# (must match a key in mission_preferences in user.yaml)
profiles:
- name: primary
boards:
- boards:
- linkedin
- indeed
- glassdoor
@ -24,16 +7,117 @@ profiles:
- google
custom_boards:
- adzuna
- theladders
- craigslist
titles:
- "Your Target Title"
- "Alternative Title"
exclude_keywords:
- sales
- account executive
- sales engineer
- SDR
- BDR
- business development
- sales development
- sales manager
- sales representative
- sales rep
hours_old: 240
locations:
- Remote
- San Francisco Bay Area, CA
name: cs_leadership
results_per_board: 75
titles:
- Customer Success Manager
- Customer Engagement Manager
- Director of Customer Success
- VP Customer Success
- Head of Customer Success
- Technical Account Manager
- TAM
- Customer Experience Lead
- CSM
- CX
- Customer Success Consultant
- boards:
- linkedin
- indeed
custom_boards:
- adzuna
- craigslist
exclude_keywords:
- sales
- account executive
- SDR
- BDR
hours_old: 240
- sales development
hours_old: 336
locations:
- Remote
- San Francisco Bay Area, CA
mission_tags:
- music
name: music_industry
results_per_board: 50
titles:
- Customer Success Manager
- Partner Success Manager
- Artist Success Manager
- Creator Success Manager
- Technical Account Manager
- Community Manager
- Account Manager
- Label Relations Manager
- boards:
- linkedin
- indeed
custom_boards:
- adzuna
- craigslist
exclude_keywords:
- sales
- account executive
- SDR
- BDR
hours_old: 336
locations:
- Remote
- San Francisco Bay Area, CA
mission_tags:
- animal_welfare
name: animal_welfare
results_per_board: 50
titles:
- Customer Success Manager
- Program Manager
- Community Engagement Manager
- Operations Manager
- Partner Success Manager
- Account Manager
- Development Manager
- boards:
- linkedin
- indeed
custom_boards:
- adzuna
- craigslist
exclude_keywords:
- sales
- account executive
- SDR
- BDR
hours_old: 336
locations:
- Remote
- San Francisco Bay Area, CA
mission_tags:
- education
name: education
results_per_board: 50
titles:
- Customer Success Manager
- District Success Manager
- Implementation Specialist
- Partner Success Manager
- Account Manager
- School Success Manager
- Customer Experience Manager