Product North Star

The canonical product thesis, including the role of JobCache, AI and the open strategic questions, is architecture/PRODUCT-THESIS.md. This page is the concise contributor contract.

CareerVector is a free, no-auth, collaborative job-search workspace. Its core surface is the job-market matrix: tracked opportunities plus facts, judgments, pipeline state, scores, notes, and application outputs.

It is not primarily a CV generator. CV/CL/PDF generation exists to support the workspace and the user's job search.

Non-Negotiables

  • Free for users. No accounts, paywalls, sign-up, captcha, or feature gates.
  • Link is identity. Sharing the workspace URL is the trust decision.
  • Collaborators are peers. There is no helper/seeker role system inside a workspace.
  • Browser UI, REST API, and MCP are all first-class. Agent workflows must not be degraded copies of human workflows.
  • Cost discipline is survival. Push work to client/browser/free tiers whenever possible, and avoid duplicate LLM/scrape/provider calls.
  • Monetization, when it exists, is buyer-side and must pass the trust test: the user should be comfortable being told what is collected and why.

CareerVector And Jobcache

CareerVector is the user-facing workspace and application workflow.

Jobcache is the corpus layer: a global body of ads and derived role facts. It exists to reduce repeated scrape/LLM cost, support RADAR/search, and eventually provide B2B data/API value.

The intended relationship is bidirectional:

  • CV to jobcache: when a user adds or enriches a job URL, public ad/role facts can flow upward into the shared corpus.
  • jobcache to CV: when a workspace renders or imports an ad, public facts can flow downward so the workspace does not re-scrape/re-extract what the corpus already knows.

Workspace-private data never flows up: evaluations, notes, CV/CL content, collaborator activity, tailored docs, and user corrections remain in the workspace layer unless explicitly anonymized/aggregated under a future policy.

Data Model

The final vocabulary is:

role                         hidden shared aggregate
ad                           source listing for one URL/posting
job                          workspace-local tracked item exposed to users/APIs

Workspace storage:

workspace.jobs[job_id] = { url, attributes }

Read order for an attribute:

workspace.jobs[job_id].attributes[attr]
  ?? ad.attributes[attr]
  ?? role.attributes[attr]
  ?? null

Each layer is sparse. Store a value only where that layer has something to say.

ad_id is derived from normalized URL. role_id may start equal to ad_id until matching proves multiple ads describe the same role. The URL hash contract is immutable once shipped.

Source: wiki/content/onboarding/01-north-star.md