Introduction
What Skiffr is made of and where to find things.
skiffr is an open-source Chrome extension that fills job applications from your own profile, and never submits anything for you. A dashboard keeps your profile, answers, a job queue and stats. You host the api and the database yourself. It is in early development and not released: the extension detects forms, asks, fills them and learns from your edits today, with the limits listed in how skiffr learns.
The repo is a turborepo with a landing page, a dashboard with login, an api, and the extension, wired to postgres with pgvector, auth and typed rpc. Edit these pages in apps/docs/content/docs, they are plain mdx.
What is in the repo
apps/web: the landing page. It only talks to the apiapps/dashboard: profile, answers, queue, stats, Gmail, sources and tokens. It only talks to the apiapps/api: orpc on bun. The only app that touches the database, auth and providersapps/extension: the Chrome extension (WXT, React, Manifest V3). It calls the api with a tokenapps/e2e: the Playwright suite that drives the built extensionapps/docs: this sitepackages/*: shared code, see structure
Where to go next
Setup
Install, start postgres, run the apps.
Environment
Every key in the root
.env.Structure
Apps, packages and the rules between them.
The extension
Install it, connect it, what it does on a page.
The dashboard
Answers, queue and stats.
Gmail job emails
Turn job alerts into queued jobs.
Job sources
Watch careers pages and feeds.
Deploy
Vercel, Docker or Dokploy.
How skiffr learns
Lookup order, what is learned, what never is.
Privacy and data flow
Exactly what leaves your machine.