Automated job scraper that runs every weekday and updates jobs/jobs.json with fresh remote, Berlin-based, React/Next.js roles — filtered for English-only listings and visa sponsorship where available.
| Platform | Method | Visa Filter | Salary |
|---|---|---|---|
| Arbeitnow | Public API ✅ | ✅ Yes | ❌ |
| Wellfound | HTML scrape | Partial | ✅ Yes |
| EnglishJobs.de | HTML scrape | ❌ | ❌ |
| RSS feed | ❌ | ❌ |
Go to your repo → Actions tab → Enable workflows.
All sources are scraped publicly. No API keys required.
Go to Actions → 🔍 Daily Job Search → Run workflow.
Runs Monday–Friday at 9:00 AM Berlin time (8:00 UTC).
All jobs are saved to jobs/jobs.json with this structure:
[
{
"id": "arbeitnow-senior-react-developer-berlin",
"source": "Arbeitnow",
"title": "Senior React Developer",
"company": "Acme GmbH",
"location": "Berlin (Remote)",
"remote": true,
"visa_sponsorship": true,
"salary": null,
"url": "https://...",
"tags": ["react", "typescript", "remote"],
"posted_at": "2025-03-01",
"fetched_at": "2025-03-02"
}
]npm run fetch- Keywords:
react,next.js,nextjs,frontend,front-end - Location: Berlin / Remote
- Deduplication: Jobs are never added twice (tracked by
id) - History: Keeps up to 500 most recent listings
When you update the resume PDF at public/Lucas-Johnson-Frontend-Engineer-Resume.pdf, run:
pnpm update-resumeThis invokes Claude Code to read the PDF and update:
app/lib/resumeData.ts— skills, experience, education, and summaryapp/lib/docgen/coverLetter.ts— fit points and opening paragraph
You can also pass a custom PDF path:
pnpm update-resume -- path/to/resume.pdf