diff --git a/apps/web/src/App.vue b/apps/web/src/App.vue index 628f7a3..51ccfb0 100644 --- a/apps/web/src/App.vue +++ b/apps/web/src/App.vue @@ -1,6 +1,37 @@ @@ -9,6 +40,7 @@ import ToastHost from './components/ToastHost.vue' Jobhunt + Today CV Research Applications diff --git a/apps/web/src/components/CostDisplay.vue b/apps/web/src/components/CostDisplay.vue new file mode 100644 index 0000000..e30ec5a --- /dev/null +++ b/apps/web/src/components/CostDisplay.vue @@ -0,0 +1,55 @@ + + + + + LLM Cost Summary + Loading... + Failed to load cost data. + + + Tokens in: + {{ totalTokensIn.toLocaleString() }} + + + Tokens out: + {{ totalTokensOut.toLocaleString() }} + + + Total cost: + {{ totalCost.toFixed(4) }} + + {{ tasks.length }} task runs + + + \ No newline at end of file diff --git a/apps/web/src/components/InterviewPrepModal.vue b/apps/web/src/components/InterviewPrepModal.vue new file mode 100644 index 0000000..25c5e38 --- /dev/null +++ b/apps/web/src/components/InterviewPrepModal.vue @@ -0,0 +1,121 @@ + + + + + + + + Interview Prep + × + + + + + + + Generate likely interview questions with suggested answers based on your profile and the job posting. + + + Generate Interview Prep + + + + Generating interview prep... + + + + + + {{ saving ? 'Saving...' : 'Save as New Version' }} + + + Regenerate + + + + Artifact ID: {{ artifactId.slice(0, 8) }} + + + + + + \ No newline at end of file diff --git a/apps/web/src/router/index.ts b/apps/web/src/router/index.ts index 2405ae6..5ed2340 100644 --- a/apps/web/src/router/index.ts +++ b/apps/web/src/router/index.ts @@ -2,7 +2,17 @@ import { createRouter, createWebHistory } from 'vue-router' import type { RouteRecordRaw } from 'vue-router' const routes: RouteRecordRaw[] = [ - { path: '/', redirect: '/cv' }, + { path: '/', redirect: '/today' }, + { + path: '/welcome', + name: 'welcome', + component: () => import('@/views/Welcome.vue') + }, + { + path: '/today', + name: 'today', + component: () => import('@/views/TodayView.vue') + }, { path: '/cv', name: 'cv', diff --git a/apps/web/src/views/TodayView.vue b/apps/web/src/views/TodayView.vue new file mode 100644 index 0000000..dc4308e --- /dev/null +++ b/apps/web/src/views/TodayView.vue @@ -0,0 +1,122 @@ + + + + + Today + + Loading... + + + + + + {{ today.pending_approvals }} pending approval{{ today.pending_approvals > 1 ? 's' : '' }} waiting for you. + + + + + + Top Matches Today + No postings in your digest yet. + + + {{ item.title }} + {{ item.company }} + + + Score: {{ item.score }} + + + + + + + + + + Follow-up Nudges + No nudges. You are up to date. + + + + + Sent {{ nudge.days_since_sent }} days ago + + + Open application + + + {{ nudge.suggestion }} + + Copy follow-up draft + + + + + + + + + + \ No newline at end of file diff --git a/apps/web/src/views/Welcome.vue b/apps/web/src/views/Welcome.vue new file mode 100644 index 0000000..d80409b --- /dev/null +++ b/apps/web/src/views/Welcome.vue @@ -0,0 +1,281 @@ + + + + + Welcome to Jobhunt + + + + + {{ i + 1 }}. {{ s }} + + + + + + + Jobhunt helps you discover jobs, score them against your profile, draft application material, and prepare for interviews. + You stay in control: nothing is sent without your explicit approval. + + + Let's set up your profile in a few quick steps. You can skip any step and come back later. + + + Get Started + + + + + + Import Your CV + + Upload a PDF, DOCX, or plain text file. We will extract sections for you to review and confirm. + + + {{ importError }} + + + {{ importing ? 'Importing...' : 'Extract Sections' }} + + + + + Review extracted sections ({{ drafts.length }}) + + {{ draft.title }} ({{ draft.kind }}) + {{ draft.org }}{{ draft.location ? ' - ' + draft.location : '' }} + + {{ b }} + + + {{ t }} + + + + + {{ importing ? 'Saving...' : 'Confirm & Save Sections' }} + + + Skip for now + + + + + + Skip for now + + + + + + Fetch Job Postings + + Search for job postings from the Arbetsformedlingen connector. New postings will be added to your applications. + + + + Search query + + + + Region (optional) + + + + + {{ fetching ? 'Fetching...' : 'Fetch Postings' }} + + + {{ fetchResult.new }} new + postings found, {{ fetchResult.dupes }} duplicates skipped. + + + Continue + + + + + + You are all set! + + Your profile is ready. Head to the Today page to see your daily digest, nudges, and pending approvals. + + + Go to Today + + + + + + Back + + + \ No newline at end of file
+ Generate likely interview questions with suggested answers based on your profile and the job posting. +
{{ artifactId.slice(0, 8) }}
{{ nudge.suggestion }}
+ Jobhunt helps you discover jobs, score them against your profile, draft application material, and prepare for interviews. + You stay in control: nothing is sent without your explicit approval. +
+ Let's set up your profile in a few quick steps. You can skip any step and come back later. +
+ Upload a PDF, DOCX, or plain text file. We will extract sections for you to review and confirm. +
+ Search for job postings from the Arbetsformedlingen connector. New postings will be added to your applications. +
+ Your profile is ready. Head to the Today page to see your daily digest, nudges, and pending approvals. +