← All work

JobSync

A local-first, self-hosted personal career knowledge base and AI-assisted application workbench.

Status
active
Period
TODO — confirm start date
Role
Sole developer
Placeholder hero image for JobSync — TODO: replace with a real screenshot of the evidence bank or application workbench UI

What it does

JobSync is a personal career knowledge base, not an AI CV generator. The evidence bank — a structured record of career achievements, each with its own provenance — is the source of truth; CVs, personal statements and (for Civil Service roles) Behaviour statements are drafted from that evidence rather than invented fresh for each application. It works across both Civil Service and non-Civil Service applications: Success Profiles and Behaviours are an add-on layer for a given vacancy, not a separate tool.

How it works

The application runs local-first: a Next.js frontend over a Prisma/SQLite datastore that stays as plain text on the machine it runs on, with encryption planned for if and when it moves to a hosted deployment. An MCP server exposes the evidence bank directly to MCP-capable models, so a job advert or a Success Profile can be turned into a structured, evidenced draft without a bespoke chat interface in between. The AI layer runs through Vercel’s AI SDK against several providers rather than one, so drafting isn’t locked to a single model vendor.

What’s shipped in this fork

Since forking, the codebase has grown substantially beyond the upstream project: a data settings panel with encrypted backup export, guarded import (with a pre-import snapshot and rollback), PDF export with two templates and customisable fonts/margins/spacing, activity break tracking, and — most recently — a PWA capture/share-target feature and an agent-chat layer where write actions sit behind an explicit approval step before touching the database. This is maintained as an active personal project, not a one-off fork.

The interesting problem

TODO (James) — the section a technical reviewer reads first. What was genuinely hard here, and how was it solved?

Stack and why

SQLite and a local-first architecture were chosen so the evidence bank — which necessarily contains detailed personal and career history — stays under direct control before any question of hosting arises. The MCP server exists so the evidence bank can be queried by any MCP-capable model directly, rather than building and maintaining a bespoke assistant UI. Running AI drafting through a provider-agnostic SDK avoids being locked to one model vendor as the underlying models change.

What I would do differently

TODO (James) — short, in your own words. Nothing signals engineering maturity faster than this section, so it isn’t one to draft on your behalf.

Stack

Next.js 15 / React 19 / TypeScript
Application and UI
Prisma 6 + SQLite
Local-first datastore — plain text while local, encrypted once hosted
NextAuth v5
Authentication
Vercel AI SDK v6
Multi-provider AI layer (OpenAI, Gemini, DeepSeek, OpenRouter, Ollama)
MCP server
Exposes the evidence bank directly to MCP-capable models
Docker
Local-first deployment
  • Repository — private repository