VeriWorkly is an open-source career workspace: a resume and cover letter editor, a portfolio website builder, an ATS checker and AI writing help. Everything starts from one Master Profile.
It is local-first. Documents live in your browser's localStorage, and you can build, edit and export with no account. Signing in adds cloud sync, sharing, AI features, ATS deep analysis and imports.
- Local-first editor. Resumes and cover letters save to the browser as you type. Guest mode is remembered by a 30-day
veriworkly-guest-modecookie, set in the browser withdocument.cookie. - Master Profile. One record of your career history. New documents start from it; editing a document never changes it.
- Portfolios. Website templates Signal and Atelier (free, with a "Built with VeriWorkly" badge), Nimbus and Cipher (paid). Publishing is not yet enabled in production.
- ATS checker. A deterministic scan from the open-source
@veriworkly/ats-engine, plus optional AI analysis against a job description. - Exports in the browser. PDF (
@react-pdf/renderer), DOCX (docx), HTML, Markdown, plain text and JSON. No headless browser on the server. - Cloud sync. Per-document sync to PostgreSQL with revision numbers, conflict detection and a "keep local only" option.
- Developer API. Scoped API keys and an OpenAPI reference at docs.veriworkly.com/api-reference.
Precision ATS |
Executive Clarity |
|
Bold Impact |
Modern Minimal |
The studio ships 7 resume templates and 5 cover letter templates.
An npm workspaces monorepo: 6 apps and 2 shared packages.
veriworkly/
├── apps/
│ ├── site/ # Marketing site, port 3000 (Next.js 16)
│ ├── studio/ # Editor, Master Profile, ATS, billing, admin, port 3001 (Next.js 16)
│ ├── docs-platform/ # Documentation and API reference, port 3002 (Next.js 16, Fumadocs)
│ ├── blog-platform/ # Blog, port 3003 (Next.js 16, Fumadocs)
│ ├── portfolio/ # Portfolio builder and public portfolios, port 3004 (Next.js 16)
│ └── server/ # Express API, sync, billing, scheduled jobs, port 8080 (Node.js 22)
└── packages/
├── profile-core/ # Shared profile and document schemas (@veriworkly/profile-core)
└── ui/ # Shared design system (@veriworkly/ui)
Each app has its own README with setup details, for example apps/studio/README.md and apps/server/README.md.
| Part | Technology |
|---|---|
| Frontends | Next.js 16 (App Router), React 19, Tailwind CSS 4 |
| UI | @veriworkly/ui, in-house components |
| Browser state | Zustand for UI state; documents saved by a hand-written localStorage service |
| Export | @react-pdf/renderer and docx, in the browser |
| API | Node.js 22, Express 4, TypeScript, clustered with throng |
| Database | PostgreSQL with Prisma 7 |
| Cache | Redis 7: sessions, rate limits, quotas, view counts, job locks |
| Auth | Better Auth: email one-time code, plus Google, GitHub and LinkedIn sign-in |
| Payments | Dodo Payments |
| File storage | Cloudflare R2, for portfolio images |
| Docs and blog | Fumadocs and MDX |
You need:
- Node.js 22.12 or later
- npm 11 (
npm@11.16.0) - PostgreSQL and Redis 7, for the API only
The site and the studio run without the API. The studio works in guest mode; sign-in and sync need the API.
-
Clone and install:
git clone https://github.com/VeriWorkly/veriworkly.git cd veriworkly npm installnpm installalso generates the Prisma client (the rootpostinstallscript). -
Copy each app's environment file. Each app reads only its own
.env.cp apps/server/.env.example apps/server/.env cp apps/site/.env.example apps/site/.env cp apps/studio/.env.example apps/studio/.env cp apps/portfolio/.env.example apps/portfolio/.env cp apps/docs-platform/.env.example apps/docs-platform/.env cp apps/blog-platform/.env.example apps/blog-platform/.env
Every variable is described in the
.env.examplecomments and in the app's README. -
For the API: set
DATABASE_URLandREDIS_URLinapps/server/.env, then apply the migrations:npm run db:migrate
-
Start what you need, each in its own terminal:
npm run dev:site # http://localhost:3000 npm run dev:studio # http://localhost:3001 npm run dev:docs # http://localhost:3002 npm run dev:blog # http://localhost:3003 npm run dev:portfolio # http://localhost:3004 npm run dev:server # http://localhost:8080
API health checks:
| URL | Checks |
|---|---|
| http://localhost:8080/api/v1/health | The API process answers |
| http://localhost:8080/api/v1/health/ready | The API can reach PostgreSQL and Redis |
npm run lint
npm run format
npm test -w @veriworkly/server
npm run test:contracts -w @veriworkly/site
npm test -w @veriworkly/portfolio
npm test -w @veriworkly/ui
npm run test:contracts -w @veriworkly/studio
npm run test:browser -w @veriworkly/studio
npm run test:parity -w @veriworkly/studio
npm run buildThe studio's browser and parity suites drive your installed Chrome (or Edge), not Playwright's bundled Chromium. See apps/studio/README.md.
| Topic | Where |
|---|---|
| Overview | docs.veriworkly.com/docs/overview |
| Architecture | docs.veriworkly.com/docs/architecture/monorepo |
| API | docs.veriworkly.com/api-reference |
| Local setup | docs.veriworkly.com/docs/getting-started/local-setup |
| Docker | README.Docker.md |
| Contributing | CONTRIBUTING.md |
- Star the repository.
- Claim an issue: comment on it and wait to be assigned before you start.
- Name commits with conventional prefixes (
feat:,fix:,docs:,refactor:). - Read CONTRIBUTING.md before you open a pull request.
- Guest documents are stored only in your browser. Signed-in users can keep any document local only.
- No heatmaps, mouse tracking or third-party behavioural tracking. Product metrics are aggregate only.
- Report security issues to
info@veriworkly.com, not in a public issue. See SECURITY.md.
VeriWorkly is open-source software under the MIT License.

