Resumatrix is a single-user resume workspace built with the Next.js App Router.
This project only supports one authenticated user.
- No signup
- No account creation
- No password reset
- No OAuth
-
Install dependencies:
npm install
-
Copy the example environment file and update the values you want to use:
cp .env.example .env
.env.localalso works if you prefer it. -
Start Convex in a separate terminal:
npm run convex:dev
Convex usually writes
NEXT_PUBLIC_CONVEX_URLto.env.localwhen you configure a local or cloud development deployment. If you keep your settings in.env, copy that value there after setup. -
Start the Next.js development server:
npm run dev
-
Open http://localhost:3000.
Resumatrix stores career data, profiles, and CVs in Convex.
- Local development uses the Convex dev deployment you start with
npm run convex:dev. - The app needs
NEXT_PUBLIC_CONVEX_URLset to the target Convex deployment. - Server-side production environments can set
CONVEX_URLinstead of, or alongside,NEXT_PUBLIC_CONVEX_URL. - If Convex also gives you
CONVEX_DEPLOYMENTorNEXT_PUBLIC_CONVEX_SITE_URL, you can keep them, but this app does not require them.
If you used the older local-file storage, you can copy that data into Convex once.
-
Start Convex:
npm run convex:dev
-
Run a dry run first to confirm the importer can see your old files:
npm run import:legacy-data -- --dry-run
-
Import the data:
npm run import:legacy-data
-
If your Convex deployment already has data and you want to overwrite it:
npm run import:legacy-data -- --replace
By default, the importer reads from the old default temp directory, usually /tmp/resumatrix.
You can also point it at a specific folder:
npm run import:legacy-data -- --source-dir=/path/to/resumatrixThe importer looks for:
workspace.jsonprofiles.jsoncvs.json
PDF export uses Puppeteer.
- On Vercel/Linux production, the app uses the bundled serverless Chromium package.
- In local development, if Chrome is installed in a standard location, no extra setup is needed.
- If local Chrome is installed elsewhere, set
PUPPETEER_EXECUTABLE_PATHin.envor.env.local.
Set these environment variables in .env or .env.local:
| Variable | Description |
|---|---|
RESUMATRIX_AUTH_USERNAME |
The only username allowed to sign in |
RESUMATRIX_AUTH_PASSWORD |
The password for that user |
RESUMATRIX_SESSION_SECRET |
A long random string used to sign the session cookie |
NEXT_PUBLIC_CONVEX_URL |
The Convex deployment URL used for app data |
CONVEX_URL |
Optional server-side Convex deployment URL fallback for production runtimes |
AI requests now use an env-based provider switch.
Production AI requests run inside Convex actions, so set these provider variables on the
Convex production deployment with npx convex env set --prod. Setting them only in
Vercel is not enough for AI actions.
| Variable | Description |
|---|---|
AI_PROVIDER |
Active provider: minimax, groq, or nvidia |
AI_REQUEST_TIMEOUT_MS |
Optional request timeout in milliseconds |
| Variable | Description |
|---|---|
MINIMAX_API_KEY |
MiniMax API key |
MINIMAX_BASE_URL |
MiniMax chat completion URL for your account/region |
MINIMAX_MODEL |
MiniMax model ID, for example MiniMax-M2.7 |
This app asks MiniMax to return raw JSON and validates it locally. That keeps MiniMax-M2.7 compatible with the current AI flows even though MiniMax’s response_format JSON Schema support is limited in the current API docs.
| Variable | Description |
|---|---|
GROQ_API_KEY |
Groq API key |
GROQ_BASE_URL |
Groq chat completion URL |
GROQ_MODEL |
Groq model ID |
GROQ_RESPONSE_FORMAT |
json_schema or json_object |
GROQ_JSON_SCHEMA_STRICT |
true or false for Groq structured outputs |
Use GROQ_RESPONSE_FORMAT=json_object for Groq models that do not support
json_schema structured outputs.
| Variable | Description |
|---|---|
NVIDIA_API_KEY |
NVIDIA API key from build.nvidia.com / NIM |
NVIDIA_BASE_URL |
NVIDIA chat completion URL |
NVIDIA_MODEL |
NVIDIA model ID |
NVIDIA_RESPONSE_FORMAT |
json_schema or json_object |
NVIDIA_JSON_SCHEMA_STRICT |
true or false for NVIDIA structured outputs |
Only the active provider needs a working API key. The other provider values can stay unused until you switch AI_PROVIDER.
If you do not set auth credentials in development, the login route falls back to:
- Username:
admin - Password:
password
This fallback is for local development only. Set real values before deploying.
/dashboard,/career-data,/profiles,/cvs,/cv-print/:id, and/personalrequire an active session.- The data APIs under
/api/personal,/api/contacts,/api/experiences,/api/projects,/api/education,/api/skills,/api/templates, and/api/cvs/:id/exportalso require an active session. - Profile and CV create, update, and delete flows use Server Actions instead of internal
/api/profilesand/api/cvsCRUD endpoints. - Visiting
/with a valid session redirects to/dashboard.
/— login page/dashboard— dashboard workspace/career-data— unified career data workspace/profiles— profile management workspace with search, filters, sorting, and multiple views/profiles/new— full-page profile creation flow/profiles/:id— full-page profile editing flow/cvs— CV library with recent exports and editor links/cvs/new— create a CV from a saved profile and template/cvs/:id— CV editor with live preview, section controls, and exports/cv-print/:id— print-friendly CV preview for manual inspection/personal— redirects to/career-dataPOST /api/auth/login— login endpointPOST /api/auth/logout— logout endpointGET, PUT /api/personal— personal details APIGET, POST /api/contacts— contacts collection APIPUT, DELETE /api/contacts/:id— single contact APIGET, POST /api/experiences— experiences collection APIPUT, DELETE /api/experiences/:id— single experience APIGET, POST /api/projects— projects collection APIPUT, DELETE /api/projects/:id— single project APIGET, POST /api/education— education collection APIPUT, DELETE /api/education/:id— single education APIGET, POST /api/skills— skills collection APIPUT, DELETE /api/skills/:id— single skill APIGET /api/templates— available CV templatesGET /api/cvs/:id/export?format=pdf|html|markdown|json— CV export endpoint with server-generated PDF downloads
npm run dev
npm run convex:dev
npm run convex:deploy
npm run import:legacy-data
npm run lint
npm run build
npm run start