Deployed project
Askel Job-Search Workspace
Job seekers lose track of applications and interviews buried in their inbox. I built and run Askel, a production app that reads Gmail and Calendar, proposes board updates for review, and keeps every application, interview and contact in one place.
Problem and constraints
A job search spreads across email threads, calendar invites and booking links. Updating a tracker by hand falls behind within a week, and a missed recruiter reply can cost an offer.
Role and ownership
Founder and sole engineer at CIE LTD: product, architecture, code, infrastructure, releases and support.
Key engineering decisions
- Sync proposes, the user accepts: email and calendar changes land in a Review Queue, and opt-in auto-apply for clear cases can always be undone
- Rule-based email classifier first, with optional Claude passes for polish and questions, so the core works without a model call
- Browser working copy plus a Neon-backed board with optimistic concurrency, so two devices stay in step without losing edits
- Gmail access through InboxLink, a separate connector service, instead of mail code inside the app
- Askel Assistant, an in-app help chat with configurable agent versions, per-user spending budgets and response limits, so model costs stay bounded
- Claude Code and Codex set up for the repo with project instructions, reusable skills, memory and tool restrictions; Codex reviews and tests pull requests with read-only access
Tradeoffs and alternatives
- Asking the user to accept changes is slower than full automation, but nothing changes on the board without the user seeing it
- Read-only mail and calendar scopes limit features (no sending on the user's behalf) in exchange for a smaller security surface
Reliability, deployment, and observability
Every pull request runs lint, type checks, the full test suite and a production build; changes go to staging before production, and classifier changes are scored against the real-mail test set before merge.
Results and lessons
- A production app with web, installable PWA and phone builds, shipped by one engineer
- Classifier regressions are caught before release by fixtures taken from real recruiting email
- AI features ship with a cost ceiling per user, set in configuration rather than code