Web App¶
The Kairos web app is a React 19 + Vite+ + TypeScript frontend that consumes the same /api/v1/ endpoints as the CLI. The current vertical slice covers job search.
Vite+ is VoidZero's unified toolchain — one vp CLI replaces Vite, Vitest, ESLint, Prettier, and a Node version manager. The vp binary is bundled as the vite-plus npm dep, so npm run * scripts also work for tooling that expects them.
Running it¶
cd frontend
vp install # first-time deps (or `npm install`)
vp dev # Dev server on http://localhost:5173
Or via Docker (full stack: postgres + backend + frontend):
Vite proxies /api/* to the backend at localhost:8880, so relative URLs work in dev and prod (see frontend/vite.config.ts).
Current capabilities¶
- Search — every documented
kairos jobs searchflag has a UI control: country, city, platforms (Adzuna / Seek / LinkedIn), salary minimum, job type, posted-within-N-days, max results. - Submit-on-Enter — filter changes are staged; pressing Enter in the topbar dispatches the search.
- Per-platform error surfacing — if Seek scraping fails but Adzuna succeeds, results from Adzuna still render and the failure is shown as a callout (no all-or-nothing).
- Cursor pagination — "Load more" appends the next page of saved jobs.
- Visa sponsorship filter — quick chip toggle to filter to roles flagged as offering sponsorship.
Design system¶
No third-party UI library. The frontend ships with a small token-based design system in frontend/src/styles/tokens.css and a Primitives.tsx exporting Microlabel, Caption, Button, Card, Badge, Chip, Divider. Inline styles bind to the tokens via var(--…).
Testing & validation¶
vp test run # vitest, headless
vp test # vitest watch mode
vp check # format + lint + type check (the CI gate)
vp check --fix # auto-fix formatting + safe lint issues
Tech stack¶
| Framework | React 19 |
| Toolchain | Vite+ (Vite 8 + Vitest 4 + Oxc lint/fmt) |
| Language | TypeScript 5.7+ |
| Tests | Vitest + @testing-library/react 16 |
| Routing | none yet (single-page job search) |
| State | local hooks (no Redux/Zustand) |
| Styling | inline + CSS custom properties (no Tailwind / no shadcn) |
Planned¶
- Job detail view + JD analysis surface
- Resume tailor diff viewer
- Application tracker board