Mohsin IqbalProduct-minded Full-Stack Engineer
60-second view
← Back to work
10Independent system · Browser automation

Human-in-the-Loop Job Automation

Automation should remove repetition without removing human responsibility.

ResultA working, review-first workflow validated against modern ATS forms.

Role
System design, product decisions, and implementation
Period
2026
Context
Personal workflow tooling
Publication status
Independent work

At a glance

Problem

Automation should remove repetition without removing human responsibility.

Contribution

Designed and built a review-first application assistant across the browser extension, local bridge, MCP, and Playwright, including resilient field lookup and explicit human submission.

Result

A working, review-first workflow validated against modern ATS forms.

Decision spotlight

The choice behind the implementation.

Challenge
Removing repetitive form work could also remove the human judgment required before an application is submitted.
Decision
Automate inspection, mapping, and drafting while preserving a visible review state and explicit human submission.
Trade-off
The workflow is slower than unsupervised submission, but responsibility and access-control boundaries remain clear.

The problem

Job application forms repeat the same factual work while presenting it through inconsistent labels, custom controls, generated identifiers, and different ATS conventions. The easy answer is a bot that fills and submits everything. That was deliberately rejected.

The useful system needed to accelerate the repetitive parts while preserving a clear human decision at the end.

The safety boundary is a product feature: prepare the draft, expose uncertainty, and stop before submit.

System shape

A reviewable application pipeline
  1. 01Application URL

    A user selects a real job form.

  2. 02Field extraction

    The browser reads labels, types, constraints, and stable identifiers.

  3. 03Structured mapping

    A model maps known professional facts and flags uncertainty.

  4. 04Guarded actions

    Small action batches fill safe fields and attach the selected résumé.

  5. 05Review state

    Visual markers separate completed fields from manual attention.

  6. 06Human submission

    The system stops. The user verifies and submits explicitly.

Decision 01: two execution paths, one contract

The browser companion works inside an existing Chrome session through a Manifest V3 extension and local WebSocket bridge. A separate MCP service can run Playwright in a visible browser. Both paths use the same product rule: inspect, map, fill, review.

Decision 02: selectors that survive generated IDs

Some ATS pages generate identifiers that begin with digits or contain characters with special CSS meaning. Feeding those strings into querySelector can produce invalid-selector exceptions even when the element exists.

The resilient lookup sequence uses document.getElementById first, then an exact [id="…"] attribute selector with safely quoted input. Semantic fallbacks are used only after direct identity lookup fails.

Decision 03: work with the service worker

Manifest V3 service workers can become inactive during long model calls. A small heartbeat keeps the local bridge state observable, while actions are divided into micro-batches so large forms do not exceed the command timeout.

This is not an attempt to keep uncontrolled automation running forever. It is bounded coordination for a user-visible task.

Guardrails

  • Unknown or open-ended questions remain unfilled and are labeled for review.
  • CAPTCHA and access-control challenges trigger a handoff rather than a bypass attempt.
  • Rate limiting reduces repeated traffic to the same domain.
  • Application history prevents accidental duplicate work.
  • No submission occurs without a separate human action.

What remains imperfect

Every ATS can introduce new custom controls. The system therefore treats field discovery as fallible, preserves an audit record, and makes uncertainty visible instead of pretending that arbitrary forms can be automated perfectly.

Independent workflow · Review first

How application assistance stays human-owned.

The system stops here. Submission remains a human action.

Source boundary

Source publication remains deliberate.

This is independent work. Public links remain opt-in until repository history, documentation, licensing, secrets, and reproducibility have been reviewed.