Documentation
Track applications and keep one resume template per job type. The name at the top of the sidebar is the current template. Apply, Jobs, Progress, Calendar, and Resumes follow that pick.
Pages
| Page | What it does |
|---|
| Apply | Sidebar plus. Opens a modal on any page. Paste a URL or listing. Creates a job, tailors this template, and downloads the PDF. |
| Jobs | Every application for this template. Open a row for details. |
| Progress | Same jobs on a board. Drag to change status. Filter by location. |
| Calendar | Jobs on the day you applied. |
| Resumes | Tailored PDFs for this template, listed by company. Files are generated by Apply, not added by hand. |
| Questions | Answers you reuse on applications. |
| Profile | Facts the tailor should stick to. The name here is what the sidebar footer shows. |
| Documents | Files. With Drive connected, this is Google Drive (Jobless Assets/ on disk is a cache). Connect Drive here. |
| Templates | List of templates. Editor opens the LaTeX for the current one. |
| Documentation | This page. |
Apply creates the job and the resume. Tailored files are named First_Last_Company_Resume.pdf. The Resumes page shows the company name.
Password lock
The app stays open unless you set AUTH_SECRET.
AUTH_SECRET signs the session cookie. Login asks for AUTH_PASSWORD (or AUTH_SECRET if that is unset). Change either by editing env and restarting. There is no password row in the database.
Local vs cloud
Both can run at the same time on the same data.
| Without Turso / Drive | With Turso + Drive |
|---|
| Jobs, questions, templates | Database/tracker.db on this computer | Turso. Local and Vercel share one database. |
| Resumes, LaTeX, profile | Jobless Assets/ on this computer | Drive. Local disk is a cache. Vercel has no durable folder. |
A save on your laptop writes to Turso and Drive, then updates the local cache. The hosted app reads those cloud copies. It does not keep files on the server.
Connect Drive once on this Documents page. That Google login is stored in Turso, so Vercel can keep writing files without signing in again.
Jobless Assets/ and Database/ are not in git. A new clone copies samples/assets/ into Jobless Assets/ only when that folder is empty. Jobs start in a new empty Database/tracker.db.
Run locally
- Copy
.env.example to .env.local.
- Run
npm install then npm run dev.
- Open http://localhost:3000.
PDF: local pdflatex if installed, otherwise TeX Live over HTTP.
You only need a Gemini key to use Apply. Drive and Turso are optional on a laptop. They are required if you want the Vercel deploy to keep jobs and files.
Vercel
- Import the repo in Vercel.
- Set the same env names as
.env.example. You need Gemini, Turso, and Drive for a hosted app that keeps data.
- Add
https://jobless.ibrahimarain.com/api/drive/callback as an OAuth redirect URI, and set GOOGLE_REDIRECT_URI in Vercel to that same URL.
- Deploy.
API keys
Copy .env.example to .env.local, or set the same names in Vercel. Restart the app after you change keys.
| Key | Required | Used for |
|---|
AUTH_SECRET | Optional. Locks the app | Session signing key |
AUTH_PASSWORD | Optional | Login password. Defaults to AUTH_SECRET |
GOOGLE_GENERATIVE_AI_API_KEY | Yes, for Apply | Gemini resume tailoring |
GOOGLE_CLIENT_ID | Only with Drive | Google OAuth |
GOOGLE_CLIENT_SECRET | Only with Drive | Google OAuth |
GOOGLE_REDIRECT_URI | Only with Drive | Must match the site you click Connect on |
TURSO_DATABASE_URL | Cloud database | Jobs, templates, questions, Drive token |
TURSO_AUTH_TOKEN | With Turso | Turso auth |
Not keys: AI_MODEL, AI_MODEL_FALLBACKS, ASSETS_DIR, LATEX_COMPILE_URL.
Gemini
Key: GOOGLE_GENERATIVE_AI_API_KEY.
- Open Google AI Studio.
- Sign in with a Google account.
- Create an API key.
- Paste it as
GOOGLE_GENERATIVE_AI_API_KEY.
- Restart the app.
Google Drive
Keys: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET. Optional: GOOGLE_REDIRECT_URI.
Google requires a one-time sign-in. After that, files live in a Drive folder named Jobless Assets.
- Open Google Cloud Console.
- Create a project or select one.
- Enable the Google Drive API (APIs and Services, then Enable APIs).
- OAuth consent screen: External is fine for personal use. Add your email as a test user.
- Create credentials: OAuth client ID, application type Web application.
- Authorized redirect URIs — add every place you might click Connect:
http://localhost:3000/api/drive/callback
https://jobless.ibrahimarain.com/api/drive/callback
- Copy the client ID and secret into
.env.local and Vercel.
- Set
GOOGLE_REDIRECT_URI to the callback for the site you are connecting from (localhost for npm run dev, your domain on Vercel).
- Restart. Open Documents and click Connect Drive. Sign in with Google once.
If Turso is already set and you connected from local, the hosted app reuses that token. You do not connect twice.
Turso
Keys: TURSO_DATABASE_URL, TURSO_AUTH_TOKEN. With these set, the app uses Turso as the database locally and on Vercel. An existing Database/tracker.db is copied into Turso once.
- Open Turso and create an account.
- Create a database.
- Copy the URL and auth token into
.env.local and Vercel env.