← All projects
2026

Self-hosted job-hunt automation on Oracle Cloud

I moved my job-search automations off my laptop onto a hardened cloud server, behind a zero-trust tunnel, with scheduled daily runs and nightly backups.

~1,000 posts processed → ~80 AI-shortlisted daily · hours of manual work automated · zero open ports
GitHub soon
~1,000posts processed / day
~80shortlisted / day
0open inbound ports
24/7automated
01 Architecture
ORACLE CLOUD · UBUNTU · ARM64docker composeoutbound-only tunnel0 open inbound portsBrowserme · laptop/phoneCloudflareDNS · TLS · edgeCF Accessemail PIN · 1 usercloudflaredn8n · SQLitecron · backup.shnightly · 14-day retentionApifyOpenAIGoogle APIs
02 The problem

Searching LinkedIn, Indeed, Bayt and Workable by hand every day took hours, and my automations only ran while my laptop was on.

03 What I built
  • An ARM server on Oracle Cloud running n8n and cloudflared with Docker Compose, with no app ports published on the host.
  • Cloudflare Tunnel and Access in front of n8n, so the only way in is an email PIN for a single allowed user, then n8n's own login.
  • A daily pipeline that scrapes four job boards, normalizes and de-duplicates posts, pre-scores them in JavaScript, then lets an LLM extract job facts and decide.
  • Nightly backups of workflows and encrypted credentials with 14-day retention, plus a monthly off-server copy.
04 Challenges
  • Google OAuth tokens expired every 7 days in "Testing" mode; moving the consent screen to production fixed it.
  • Re-runs created duplicate rows until de-duplication checked the sheet across runs.
05 Results
  • The daily job pipeline runs unattended in the cloud. My laptop no longer needs to be on.
  • About 1,000 posts in, about 80 ranked and shortlisted out, with zero duplicates on re-runs.
06 Tech stack
Oracle CloudDocker ComposeCloudflare Tunneln8nOpenAIBash
07 Screenshots
The daily job-applications pipeline in n8n
The daily job-applications pipeline in n8n
Selected projects