From 0e40750450df6de57753119a33656c88bb83fa54 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sun, 3 May 2026 01:11:06 -0700 Subject: [PATCH] feat: add WizardTrainingStep opt-in consent step to onboarding Inserts a new optional Training Export step between Resume and Identity in the setup wizard. Users can opt in to saving cover letters for fine-tuning dataset export. Consent copy distinguishes local vs. cloud storage. WIZARD_STEPS bumped to 7; router, and adjacent step back/next navigation updated accordingly. --- web/src/router/index.ts | 1 + web/src/stores/wizard.ts | 2 +- web/src/views/wizard/WizardIdentityStep.vue | 2 +- web/src/views/wizard/WizardResumeStep.vue | 2 +- web/src/views/wizard/WizardTrainingStep.vue | 74 +++++++++++++++++++++ 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 web/src/views/wizard/WizardTrainingStep.vue diff --git a/web/src/router/index.ts b/web/src/router/index.ts index bb98b35..dab3efc 100644 --- a/web/src/router/index.ts +++ b/web/src/router/index.ts @@ -46,6 +46,7 @@ export const router = createRouter({ { path: 'hardware', component: () => import('../views/wizard/WizardHardwareStep.vue') }, { path: 'tier', component: () => import('../views/wizard/WizardTierStep.vue') }, { path: 'resume', component: () => import('../views/wizard/WizardResumeStep.vue') }, + { path: 'training', component: () => import('../views/wizard/WizardTrainingStep.vue') }, { path: 'identity', component: () => import('../views/wizard/WizardIdentityStep.vue') }, { path: 'inference', component: () => import('../views/wizard/WizardInferenceStep.vue') }, { path: 'search', component: () => import('../views/wizard/WizardSearchStep.vue') }, diff --git a/web/src/stores/wizard.ts b/web/src/stores/wizard.ts index e2dba47..1824a60 100644 --- a/web/src/stores/wizard.ts +++ b/web/src/stores/wizard.ts @@ -44,7 +44,7 @@ export interface WizardInferenceData { } // Total mandatory steps (integrations step 7 is optional/skip-able) -export const WIZARD_STEPS = 6 +export const WIZARD_STEPS = 7 export const STEP_LABELS = ['Hardware', 'Tier', 'Resume', 'Identity', 'Inference', 'Search', 'Integrations'] export const STEP_ROUTES = [ '/setup/hardware', diff --git a/web/src/views/wizard/WizardIdentityStep.vue b/web/src/views/wizard/WizardIdentityStep.vue index 3a46237..907f7e4 100644 --- a/web/src/views/wizard/WizardIdentityStep.vue +++ b/web/src/views/wizard/WizardIdentityStep.vue @@ -74,7 +74,7 @@ const form = reactive({ careerSummary: wizard.identity.careerSummary, }) -function back() { router.push('/setup/resume') } +function back() { router.push('/setup/training') } async function next() { validationError.value = '' diff --git a/web/src/views/wizard/WizardResumeStep.vue b/web/src/views/wizard/WizardResumeStep.vue index 1fab58f..e86aa2a 100644 --- a/web/src/views/wizard/WizardResumeStep.vue +++ b/web/src/views/wizard/WizardResumeStep.vue @@ -216,7 +216,7 @@ async function next() { experience: wizard.resume.experience, ...(wizard.resume.parsedData ?? {}), }}) - if (ok) router.push('/setup/identity') + if (ok) router.push('/setup/training') } diff --git a/web/src/views/wizard/WizardTrainingStep.vue b/web/src/views/wizard/WizardTrainingStep.vue new file mode 100644 index 0000000..994e5b8 --- /dev/null +++ b/web/src/views/wizard/WizardTrainingStep.vue @@ -0,0 +1,74 @@ + + + + +