Inspiration Job hunting is repetitive, slow, and easy to fall behind on — especially when you are applying to dozens of roles across different boards and ATS platforms (Greenhouse, Ashby, Lever, etc.). Every application means tailoring a resume, rewriting a cover letter, and filling the same personal details again and again.
We built Stockfish AI because we wanted an agent that runs 24/7, finds roles that match your profile, prepares documents per job, and handles the tedious form-filling — while keeping you in control via a dashboard and Telegram.
What it does Stockfish AI is an autonomous job application agent that:
Discovers jobs from live sources (Remotive, Arbeitnow, RemoteOK) based on your target roles, skills, location, and work preferences Scores and queues matching opportunities so you apply to the right roles, not every listing Tailors your resume and cover letter for each job before applying Fills application forms using Playwright browser automation and an LLM-powered field mapper Uploads tailored PDFs (resume + cover letter) into ATS forms Answers screening questions using job context and your profile Tracks every application (queued, filled, awaiting review, submitted, failed) in a real-time dashboard Notifies you on Telegram with /start, /stop, /status, and updates after each apply attempt Runs continuously on a VPS (with Hermes) so the agent keeps working while you sleep Think of it as a chess engine for your career — always calculating the next best move.
How we built it We split Stockfish into three layers:
Node.js engine (src/engine/) — the core agent
WebSocket server (port 8765) for dashboard and agent commands Playwright pipeline: navigate → reduce DOM → LLM map fields → fill → optional submit Job discovery, matching, queue, and SQLite-backed profile storage Document tailoring (LLM + PDF generation) and Telegram bot integration React dashboard (src/frontend/) — control center
Candidate profile, document uploads, job filters, agent start/stop Live pipeline logs, application history, and analytics via WebSocket VPS deployment — 24/7 operation
Docker Compose for the engine on Hostinger Hermes agent as optional orchestrator alongside Stockfish Cloudflare-hosted frontend pointing at the engine WebSocket Tech stack: Node.js, Playwright, OpenRouter/OpenAI, SQLite, WebSockets, React, TypeScript, Tailwind, Docker, Telegram Bot API.
Challenges we ran into Job board URLs ≠ apply forms — Remotive and Arbeitnow link to listing pages, not direct ATS URLs. We added URL resolution with fetch + Playwright to find Greenhouse/Ashby apply links. Greenhouse forms live in iframes — The DOM looked empty until we scanned embedded frames and filled inside them. OpenRouter privacy settings blocked all LLM models, causing tailoring and mapping to fail. We added rule-based fallbacks so the agent still runs with master documents and heuristic field mapping. False “success” states — The agent sometimes marked jobs as filled with zero fields. We tightened validation and fail-fast logic. Headless mode blocking forever — Human-review pauses stalled the 24/7 loop. We made review non-blocking in autonomous mode so the queue keeps moving. Stale job queue — Once a URL was seen, it never retried. We added re-queueing of failed applications on agent restart. Accomplishments that we're proud of End-to-end flow working: discover → tailor → navigate → fill → notify Successfully filled real Greenhouse and Ashby applications (e.g. SumUp careers) with name, email, phone, location, resume, and cover letter Built a live dashboard with profile management, filters, and real-time agent telemetry Telegram control for starting/stopping the agent and checking status from your phone Designed for 24/7 VPS deployment with Docker and Hermes integration Graceful LLM fallbacks so the agent keeps running even when the API is blocked Modular architecture: engine, dashboard, and deploy are cleanly separated What we learned Browser automation for job apps is harder than it looks — ATS platforms, iframes, and listing pages all behave differently. An autonomous agent needs clear failure modes; “filled” and “submitted” must mean something concrete. LLM integration is powerful for form mapping and document tailoring, but you always need a fallback path. User trust matters: auto-submit should be opt-in, and Telegram/dashboard updates keep the user in the loop. Splitting orchestration (Hermes) from execution (Stockfish engine) makes the system easier to deploy and debug on a VPS. What's next for Stockfish AI Smarter job sources — More boards with direct ATS links and better apply-URL extraction Full auto-submit mode with confirmation emails and post-submit tracking Smarter screening answers once OpenRouter/LLM privacy is configured for full AI tailoring Multi-user support — separate profiles, queues, and dashboards per candidate Application analytics — response rates, best-performing resume versions, and role match insights Hermes skill integration — one-command deploy and control from the Hermes agent on Hostinger CAPTCHA / human-in-the-loop flow for forms that require manual intervention Chrome extension to queue jobs from any page with one click
Built With
- agent
- hermes
- hostinger
- javascript
- sqlite
Log in or sign up for Devpost to join the conversation.