JobPilot AI is a working web application that automates a single job seeker's end-to-end job search and application workflow. The product intent is a supervised autonomous agent: it finds jobs, checks match, customizes resumes, prepares applications, asks for approval, submits, tracks results, and monitors replies — working automatically as much as possible while interrupting the owner only for missing or uncertain information, login/CAPTCHA/MFA/manual verification, websites that do not support automation, and final application approval.
The governing rule is: the AI searches, prepares, and manages everything possible automatically; the owner controls what is finally submitted or sent. No application is ever submitted automatically, and no email is ever sent without approval.
The audience is a single technically literate job seeker (the Job Seeker (Owner)) who runs an autonomous agent across job portals, ATS platforms, company career pages, and Gmail, and who needs dense, stateful, approval-gated software — a control room, not a marketing site.
JobPilot AI is delivered as a first-party web application with an application-owned identity, a backend that performs scheduled and long-running automation, and secure provider integrations for job portals and Gmail. The current delivery includes:
Actors are the Job Seeker (Owner) as the sole active human persona, plus typed non-persona actors: supported job sources and ATS platforms (LinkedIn, Naukri, Indeed, Glassdoor, Foundit, Wellfound, company career pages, recruitment agencies, Workday, Greenhouse, Lever), Gmail, and the backend automation/scheduler.
Narrow exclusions: the product never bypasses CAPTCHA, MFA, anti-bot protection, authentication restrictions, or website security controls; it never invents missing information or email addresses; it never submits an application or sends an email without explicit approval; it never marks an application as submitted without confirmation; and it prevents duplicate applications.
JobPilot AI is a supervised automation console. The agent does the searching, matching, tailoring, form-filling, and monitoring; the human holds the trigger. Everything that requires a human decision — final submission, sending a recruiter email, resolving an unknown application question, completing a login/CAPTCHA/MFA step, or supplying missing information — is surfaced to the owner as an explicit interruption with a clear next action.
Delivery is first-party web software with application-owned identity: the owner enrolls themselves, verifies on return, and then owns durable career, application, integration, and approval state. Provider-owned work (portal authorization, Gmail authorization, portal-side submission mechanics) stays with the provider via OAuth, APIs, or permitted integrations. Backend scheduling owns recurring monitoring when configured, so monitoring continues while the dashboard is closed.
Current scope is the full workflow described in this document. No future-horizon features are claimed; anything not stated here is out of current scope.
Not applicable — no reference directive declares content_source.
.xlsx file with filters, frozen headers, clickable job links, proper date/currency formatting, and separate sheets where useful..xlsx..xlsx with filters, frozen headers, clickable job links, proper date/currency formatting, and separate sheets where useful); error (export failure shown inline with the record set preserved); recovery (retry export; correct filters).Each requirement is a distinct story point with provenance, lifecycle facts, and observable acceptance.
FR-1 — End-to-end automated workflow (explicit). As the Job Seeker (Owner), I should have JobPilot AI run the workflow find jobs → check match → customize resume → prepare application → ask for my approval → submit → track result → monitor replies, so that the whole search is managed for me. Lifecycle: initiated by the owner or by a scheduled run; the agent performs each stage; the owner is interrupted only for missing or uncertain information, login/CAPTCHA/MFA/manual verification, websites that do not support automation, and final application approval. Observable acceptance: each stage produces a visible state in the console, and the workflow advances without owner action until an interruption condition is met. Failure/recovery: if a stage cannot continue, progress is saved and Open & Continue is offered. Continuation: the workflow resumes from the saved stage.
FR-2 — Minimal interruption policy (explicit). As the Job Seeker (Owner), I should be interrupted only for missing or uncertain information, login/CAPTCHA/MFA/manual verification, websites that do not support automation, and final application approval, so that the agent works automatically as much as possible. Observable acceptance: no other interruption is raised during normal operation. Failure/recovery: an interruption always states what is needed and offers the action to resolve it. Continuation: after resolution, the agent resumes the interrupted work.
FR-3 — Floating AI chat on every page (explicit). As the Job Seeker (Owner), I should have a floating AI chat button on every page that can find relevant jobs, search company career pages, check visa sponsorship, customize resumes, prepare applications, check Gmail for recruiter replies, update application tracking, and prepare follow-up emails, so that I can drive the agent from anywhere. Observable acceptance: the button is present on every page and each listed action is invocable from it. Failure/recovery: if an action cannot be performed, the chat states why and what is needed. Continuation: the chat returns the result and the owner continues in the relevant page.
FR-4 — Job search across supported sources (explicit). As the Job Seeker (Owner), I should search supported sources — LinkedIn, Naukri, Indeed, Glassdoor, Foundit, Wellfound, company career pages, recruitment agencies, and ATS platforms such as Workday, Greenhouse, and Lever — so that I see relevant openings in one place. Observable acceptance: results are returned per source with the source identified. Failure/recovery: a failing source is reported without discarding results from other sources. Continuation: the owner refines filters or opens a listing.
FR-5 — Job search filters (explicit). As the Job Seeker (Owner), I should filter by role, country, experience, salary, date posted, remote/hybrid/onsite, and visa sponsorship, so that results match my constraints. Observable acceptance: each filter narrows the result set and the active filters are visible. Failure/recovery: an over-narrow filter set produces an explicit empty state with a reset action. Continuation: the owner opens a result or adjusts filters.
FR-6 — Career Profile storage (explicit). As the Job Seeker (Owner), I should store my verified personal details, experience, education, skills and tools, certifications, preferred roles and locations, salary expectations, notice period, work authorization, visa sponsorship requirement, and master resume, so that the agent always works from verified facts. Observable acceptance: each listed section is stored and editable, and unset fields are visibly unset. Failure/recovery: a failed save preserves the entered value and reports the failure. Continuation: the owner retries or continues editing.
FR-7 — Never invent missing information (explicit). As the Job Seeker (Owner), I should never have missing information invented on my behalf, so that everything the agent produces is truthful. Observable acceptance: unset profile fields remain unset and are never filled with fabricated values in resumes, applications, or answers. Failure/recovery: when information is missing or uncertain, the agent stops and asks. Continuation: the owner supplies the information and the agent resumes.
FR-8 — Job-specific ATS-friendly resume (explicit). As the Job Seeker (Owner), I should get a job-specific ATS-friendly resume created using only verified information, so that each application is tailored without fabrication. Observable acceptance: the generated resume is tied to a specific job and contains only verified profile facts. Failure/recovery: if verified information is insufficient, generation stops and asks for the missing facts. Continuation: the owner supplies facts and generation completes.
FR-9 — Resume download, history, cover letters, comparison, editing (explicit). As the Job Seeker (Owner), I should download resumes as PDF or DOCX, keep resume version history, create cover letters, compare original vs customized, and edit before use, so that I control the final document. Observable acceptance: each capability is available on the generated resume, and edits are reflected in the version used for the application. Failure/recovery: a failed export or save preserves the last good version. Continuation: the owner retries or reverts to a prior version.
FR-10 — Automated application preparation (explicit). As the Job Seeker (Owner), I should have the AI open supported job portals, fill known information, upload the correct resume, answer questions using my verified profile, and continue across application pages, so that applications are prepared without manual form-filling. Observable acceptance: the prepared application contains the correct resume and answers drawn from the verified profile, and multi-page progress is visible. Failure/recovery: if a portal does not support automation or automation cannot continue, progress is saved and Open & Continue is offered. Continuation: the owner resumes via Open & Continue or completes the required manual step.
FR-11 — Unknown questions stop the application (explicit). As the Job Seeker (Owner), I should have the agent stop that application and ask me when it encounters an unknown question, so that no answer is invented. Observable acceptance: the application halts at the unknown question and the question is presented to the owner. Failure/recovery: the halted application retains its saved progress. Continuation: the owner answers and preparation resumes.
FR-12 — Mandatory approval before submission (explicit). As the Job Seeker (Owner), I should never have an application submitted automatically, and before submission I should see company and job, application URL, resume, cover letter, personal information, application questions and answers, salary, visa/work authorization, and attachments, with Edit | Reject | Approve & Submit, so that I control what is finally submitted. Observable acceptance: the application is submitted only after the owner selects Approve & Submit, and all listed evidence is shown before that decision. Failure/recovery: a submission failure leaves the prepared application intact and not marked submitted. Continuation: the owner retries, edits, or rejects.
FR-13 — Secure job portal connection (explicit). As the Job Seeker (Owner), I should securely connect supported job portals using OAuth, APIs, or permitted integrations, so that the agent can work on my behalf without exposing credentials. Observable acceptance: connections are established through the provider's authorization flow and no password or API secret appears in frontend code. Failure/recovery: denied or expired authorization is shown with a reconnect action. Continuation: the owner reconnects and the connection becomes usable again.
FR-14 — Connection and activity status (explicit). As the Job Seeker (Owner), I should see connection status, last sync, profile status, last search, applications prepared, and applications submitted for each connected portal, so that I know the agent's actual state. Observable acceptance: each listed value is displayed per connection. Failure/recovery: stale or failed sync is shown explicitly rather than as a healthy state. Continuation: the owner reconnects or triggers a sync.
FR-15 — Scheduled searches (explicit). As the Job Seeker (Owner), I should schedule searches every hour, every 3 hours, every 6 hours, or daily, so that monitoring runs on my cadence. Observable acceptance: the chosen interval is saved and the next run is shown. Failure/recovery: if backend scheduling is not configured, the schedule is shown as not running while the dashboard is closed. Continuation: the owner configures backend scheduling or runs a search on demand.
FR-16 — Monitoring while the dashboard is closed (explicit). As the Job Seeker (Owner), I should have selected job portals and company career pages monitored even when the dashboard is closed, when backend scheduling is configured, so that I do not miss openings. Observable acceptance: scheduled runs occur without the dashboard open when backend scheduling is configured, and their results appear in the console. Failure/recovery: a failed run is recorded with its failure reason. Continuation: the next scheduled run proceeds; the owner can review results in Jobs.
FR-17 — Gmail connection and message identification (explicit). As the Job Seeker (Owner), I should connect Gmail securely and have the agent identify recruiter emails, application confirmations, assessments, interviews, rejections, offers, and follow-ups, so that replies are monitored for me. Observable acceptance: messages are categorized into the listed categories. Failure/recovery: expired or unavailable Gmail authorization is shown with a reconnect action. Continuation: the owner reconnects and categorization resumes.
FR-18 — Replies and drafts without automatic sending (explicit). As the Job Seeker (Owner), I should have replies and drafts prepared but never sent without my approval, so that I control what is sent. Observable acceptance: a prepared reply is not sent until the owner approves it. Failure/recovery: a send failure preserves the draft and does not mark it sent. Continuation: the owner retries, edits, or discards.
FR-19 — Recruiter Finder (explicit). As the Job Seeker (Owner), I should find legitimate publicly available recruiter/HR information showing name, role, company, email, source, and verification status, so that I can reach real contacts. Observable acceptance: each record shows all six fields, and email addresses are never invented. Failure/recovery: when no legitimate record is found, the result is empty rather than fabricated. Continuation: the owner links a recruiter to an application or prepares a follow-up.
FR-20 — Application Tracker fields (explicit). As the Job Seeker (Owner), I should track company, job title, posting date, applied date, country/city, job link, job description, salary, INR salary conversion, visa sponsorship, work authorization, match score, resume used, recruiter, follow-up date, application status, and notes, so that every application is fully recorded. Observable acceptance: all listed fields are present on each record and editable. Failure/recovery: a failed edit preserves the prior value. Continuation: the owner retries the edit or continues to another record.
FR-21 — Excel export (explicit). As the Job Seeker (Owner), I should export applications to a real .xlsx file with filters, frozen headers, clickable job links, proper date/currency formatting, and separate sheets where useful, so that I can work with the data outside the app. Observable acceptance: the exported file opens as a real .xlsx and exhibits each listed property. Failure/recovery: an export failure is reported without altering the records. Continuation: the owner retries the export.
FR-22 — Dashboard metrics (explicit). As the Job Seeker (Owner), I should see jobs found today, strong matches, applications prepared, waiting for approval, applications submitted, recruiter replies, interviews, rejections, offers, and follow-ups due, so that I know where the workflow stands. Observable acceptance: each listed metric is displayed and reflects current state. Failure/recovery: a metric that cannot be computed is shown as unavailable rather than fabricated. Continuation: the owner opens the relevant page from the metric.
FR-23 — Dashboard charts (explicit). As the Job Seeker (Owner), I should see charts for applications by country, role, source, status, and time, so that I can read my pipeline at a glance. Observable acceptance: all five chart dimensions are available. Failure/recovery: a chart with no data renders an explicit empty state. Continuation: the owner filters or opens the underlying records.
FR-24 — Never bypass security controls (explicit). As the Job Seeker (Owner), I should never have CAPTCHA, MFA, anti-bot protection, authentication restrictions, or website security controls bypassed, so that the agent stays within legitimate automation. Observable acceptance: when such a control is encountered, the agent stops and asks the owner to complete it manually. Failure/recovery: the application's progress is saved. Continuation: the owner completes the verification and the agent resumes.
FR-25 — Save progress and Open & Continue (explicit). As the Job Seeker (Owner), I should have progress saved and an Open & Continue action provided when automation cannot continue, so that no work is lost. Observable acceptance: the interrupted application shows its saved step and offers Open & Continue. Failure/recovery: resuming from a saved step continues at that step. Continuation: the owner resumes or abandons the application.
FR-26 — Never mark submitted without confirmation (explicit). As the Job Seeker (Owner), I should never have an application marked as submitted without confirmation, so that my tracker reflects reality. Observable acceptance: an application's status becomes submitted only after confirmed submission following Approve & Submit. Failure/recovery: an unconfirmed submission leaves the status unchanged. Continuation: the owner retries or investigates the portal state.
FR-27 — Prevent duplicate applications (explicit). As the Job Seeker (Owner), I should be prevented from submitting duplicate applications, so that I do not apply twice to the same job. Observable acceptance: a job already applied to is flagged and cannot be submitted again. Failure/recovery: if a duplicate is detected during preparation, the application is stopped and the existing record is shown. Continuation: the owner reviews the existing application instead.
FR-28 — Self-service enrollment (required_inference). As the Job Seeker (Owner), I should be able to enroll myself so that my durable career, application, integration, and approval state is privately owned and resumable. Observable acceptance: enrollment establishes an application-owned identity and enters the protected console. Failure/recovery: validation and duplicate-identity errors are shown inline. Continuation: the owner corrects the error or switches to Login.
FR-29 — Returning verification (required_inference). As the Job Seeker (Owner), I should verify my identity on return before accessing protected workflow state, so that my state stays private. Observable acceptance: protected pages are inaccessible until verification succeeds. Failure/recovery: invalid credentials are shown inline without revealing which field is wrong. Continuation: the owner retries or switches to Sign Up.
FR-30 — Provider authorization for portals and Gmail (required_inference). As the Job Seeker (Owner), I should authorize job portals and Gmail through the provider's secure flow, so that the agent can act on my behalf without handling my secrets. Observable acceptance: authorization completes through the provider and no secret is exposed in frontend code. Failure/recovery: denied or expired authorization is shown with a reconnect action. Continuation: the owner reconnects.
FR-31 — Backend scheduling configuration (required_inference). As the Job Seeker (Owner), I should have backend scheduling configured so that monitoring runs while the dashboard is closed. Observable acceptance: when configured, scheduled runs occur without the dashboard open; when not configured, the console states this explicitly. Failure/recovery: a failed run is recorded with its reason. Continuation: the next run proceeds.
FR-32 — Manual completion of verification steps (required_inference). As the Job Seeker (Owner), I should complete CAPTCHA, MFA, login, or other verification manually when automation cannot proceed, so that the agent can continue legitimately. Observable acceptance: the agent stops at the verification step and presents it to the owner. Failure/recovery: progress is saved while the owner completes the step. Continuation: the agent resumes after completion.
FR-33 — Explicit approval before submission or sending (required_inference). As the Job Seeker (Owner), I should explicitly approve before any application is submitted or any email is sent, so that I hold the trigger. Observable acceptance: no submission or send occurs without an explicit approval action by the owner. Failure/recovery: a failed submission or send preserves the prepared artifact. Continuation: the owner retries, edits, or rejects.
Product context. The sole active human user of JobPilot AI. This person runs a job search across multiple countries and portals, cares about visa sponsorship and work authorization, and is technically literate enough to want a control room rather than a guided wizard. They own the entire workflow: find jobs, check match, customize resume, prepare application, approve or reject submissions, track results, and monitor replies.
Primary goal. Have the agent search, prepare, and manage everything possible automatically, while personally controlling what is finally submitted or sent.
Distinct accepted responsibilities.
.xlsx.Relevant inputs or decisions. Verified profile facts; search filters (role, country, experience, salary, date posted, remote/hybrid/onsite, visa sponsorship); schedule intervals; approval decisions; answers to unknown application questions; manual verification completion; recruiter follow-up decisions.
Interactions with other accepted participants. The owner is the only human participant. The agent (backend automation) acts on the owner's behalf and reports state; supported job sources and ATS platforms (LinkedIn, Naukri, Indeed, Glassdoor, Foundit, Wellfound, company career pages, recruitment agencies, Workday, Greenhouse, Lever) and Gmail are provider-owned systems the owner authorizes and whose state the owner observes. Recruiters and HR contacts are outbound recipients whose information is surfaced with source and verification status; they are not product users.
Observable success. Applications are prepared automatically but only submitted after explicit approval; emails are only sent after approval; tracking is accurate with no duplicate or unconfirmed submissions; the owner can see at a glance what the agent actually knows versus what still needs them.
Source-backed constraints. Never invent missing information; never invent email addresses; never bypass CAPTCHA, MFA, anti-bot protection, authentication restrictions, or website security controls; never submit or send without approval; never mark an application as submitted without confirmation; prevent duplicate applications.
.xlsx file with filters, frozen headers, clickable job links, proper date/currency formatting, and separate sheets where useful..xlsx file.The creative direction is authoritative. Muse: Rasmus Andersson. Headline: Systematic product craft with an opinion — graphite ground, tangerine signal, tabular numerals as ornament. This is a power-user automation console: dense, stateful, approval-gated software — a control room, not a marketing site. It must never feel like a consumer lifestyle app, and it must never look like a Bootstrap admin template.
| Role | Token | Value |
|---|---|---|
| Background (ground) | --bg | #141517 |
| Surface (panels) | --surface | #1B1D20 |
| Hairline border | --border | #2A2D31 |
| Text | --text | #EDEAE4 |
| Primary (tangerine signal) | --primary | #FF7A2F |
| Accent (machine-confirmed truth) | --accent | #C6F24E |
| Muted (metadata, units, timestamps, disabled) | --muted | #7C8087 |
Rules: no blue anywhere in the system; no gradients; colour is never used for large fills except one 100%-width tangerine band on the hero. Tangerine does structural work — the active nav rule, the primary CTA, the "waiting for approval" badge, the agent's live cursor. Acid lime is reserved exclusively for machine-confirmed truth — verified recruiter emails, submitted applications, connected portals — so a glance tells the owner what the agent actually knows versus what it merely claims. Elevation is expressed by a lighter surface, never by blur or shadow.
clamp(56px, 9vw, 128px) for the hero metric.font-variant-numeric: tabular-nums).Sharp and engineered. 2px radii on inputs and buttons, 4px on panels, 0px on table rows and section bands — nothing pill-shaped, nothing soft. 1px hairline borders (#2A2D31) do all the separating. A recurring 8px square "status stud" (filled, half-filled, hollow) replaces conventional status dots and is the system's one decorative-but-functional motif.
A fixed 232px left rail (icon + label nav, connection health at the bottom with live sync timestamps) against a full-width content plane with a 1280px max reading width and 24/40px gutters. Content is built from ruled bands rather than cards: full-width rows separated by hairlines, aligned label/value pairs, and dense tables where column headers are 11px caps and numeric columns are right-aligned on tabular numerals. The dashboard is a 12-column grid of metric bands, not a card grid; charts are flat, single-hue-plus-accent, drawn on the page ground with no chart junk. Approval screens use a two-pane split: evidence on the left, the Edit | Reject | Approve & Submit control bar pinned full-width at the bottom, always visible, never scrolled away.
The interface is the imagery: rendered tables, schematic pipeline diagrams (Find → Match → Tailor → Approve → Submit → Track drawn as a ruled horizontal band with the active stage in tangerine), monospace code and JSON answer previews, and a small set of 1px-stroke pictograms for portals and ATS platforms. No stock photography, no people, no illustration, no 3D, no gradient blobs. Where a real artefact is needed — a resume diff, a recruiter email, an application form — it is shown as a faithful document panel with hairline rules and tabular metadata.
The control-room header. The public entry (Landing) is not a marketing hero; it is an instrument panel whose largest element is a number.
#141517 ground.#FF7A2F band, 6px tall, pinned across the very top as the "agent is live" rule.clamp(56px, 9vw, 128px), tabular numerals, tracking −0.04em.#7C8087: "12 strong matches · 5 prepared · 3 awaiting your approval".The concept recomposes only accepted content and controls: the workflow stages, the agent's activity, the approval count, and the entry CTA. It introduces no new behaviour, page, or destination.
Interaction Model: Static Motion Tempo: restrained Hero Dimensionality: flat
cubic-bezier(0.2, 0, 0, 1) on state changes, no bounce, no lift. Numerals count up once when a metric enters view (300ms, linear). Nothing loops, nothing floats, nothing parallaxes; the only continuous motion is the status rule while the agent is genuinely running..xlsx output (explicit). Excel export must produce a real .xlsx file with filters, frozen headers, clickable job links, proper date/currency formatting, and separate sheets where useful. Rationale: explicit requirement.font-size: clamp(...) with its mobile size) to fit, and no other element may cover any part of them. Rationale: authoritative creative direction; this rule takes precedence for readable text and controls.prefers-reduced-motion, motion stops and whole items are shown: they wrap into rows, or sit in a horizontally scrollable row (overflow-x: auto) whose further items are reached by scrolling. Rationale: authoritative creative direction.[Default — not specified by user][Default — not specified by user].xlsx exports. [Default — not specified by user].xlsx export with filters, frozen headers, clickable job links, proper date/currency formatting, and separate sheets where useful. Rationale: explicit requirements.[Default — not specified by user]Assumptions
Constraints
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!