MBS Mohammed Baobaid
All projects
Project
Personal build AI Career Platform Built 2026

Career Copilot

An anonymized Laravel and Filament case study for evidence-backed job matching, application preparation, human approval, and outcome tracking.

Career Copilot is an owner-only Laravel and Filament workflow that coordinates job discovery, eligibility checks, two-track matching, grounded document generation, approval, manual submission handoff, status tracking, and interview coaching. This public case study explains architecture and safeguards only. It exposes no candidate records, employers, applications, answers, messages, files, or credentials.

Laravel 13 Filament 5 Livewire 4 PHP 8.4 OpenAI Responses API GPT-5.6 Sol Laravel Queues Encrypted Storage PHPUnit 13
Career Copilot project preview
Persisted Workflow
Grounded Claims
Human only Submission
Owner only Privacy

Role

Laravel architect, Filament workflow developer, and AI safety designer

Outcome

A persisted, review-first career workflow where every generated claim is traceable to approved evidence, edits invalidate approval, and no application is submitted without a recorded human decision.

The Challenge

A career assistant becomes unsafe if it invents candidate claims, follows instructions hidden in listings, scrapes restricted job boards, sends low-quality applications, or submits without informed approval. The product needed strong workflow boundaries while demonstrating Laravel queues, Filament review surfaces, PDF generation, analytics, and useful AI orchestration.

The Approach

I designed the system as a persisted state machine with narrowly scoped services. Deterministic code owns eligibility, source policy, approval validity, submission capability, encryption, and retention. GPT-5.6 Sol is reserved for semantic analysis and drafting only after explicit processing consent and approved context assembly. Every package passes provenance and truth checks, then stops at human approval and manual submission gates.

How it works

A public architecture view with a private-data boundary

The live module is private and owner-only. This page publishes only behavior, design decisions, and safety constraints. It includes no candidate snapshots, job listings, employer names, application documents, screening answers, messages, storage paths, access tokens, or operational identifiers. Public assistant sessions remain isolated from private career context.

Persisted orchestration instead of uncontrolled agents

Each workflow is stored as an agent run with ordered steps, inputs, outputs, statuses, validations, and timestamps. The curator, scout, analyst, matcher, researcher, writer, reviewer, watcher, and coach each have narrow responsibilities. Laravel queues may continue eligible work, but durable state and explicit transitions remain authoritative.

Approved facts are the source of truth

Candidate facts are versioned and approved before supporting a resume or answer. Each fact can carry evidence and an answer policy. Professional wording may be drafted, exact-only facts must be copied exactly, and user-only topics are never answered by AI. Conflicting education, dates, domains, employment, or metrics block snapshot approval.

Discovery and matching are policy-led

The source layer accepts manual listings and forwarded alerts, with allowlisted public ATS feeds reserved for a later connector phase. Listing and email bodies are untrusted data, never instructions. Code handles location, work authorization, source rules, exclusions, and minimum requirements before semantic analysis scores the Laravel/Filament and Data/BI tracks. Packages require the configured quality threshold, and close track scores require user selection.

Generation is grounded and reviewable

The writer receives an approved snapshot, normalized listing, and allowlisted company research with citations. It drafts a tailored resume, cover letter, screening answers, and resume diff. Every claim resolves to approved facts. The truth reviewer blocks unsupported dates, metrics, credentials, employers, and experience before review.

Approval is a revocable state

Filament presents the listing snapshot, fit score, gaps, documents, answers, citations, and diff together. Approval records the exact package version. Any edit changes that version and revokes approval, ensuring submitted content is the content the user reviewed.

Submission remains human-only

The MVP never scrapes, fills, clicks, or submits forms on LinkedIn, Indeed, Glassdoor, or similar services. Approval enables downloads, copy actions, and the official form link. The user completes the third-party form and records submission afterward. Public ATS feeds support discovery, not unrestricted submission.

Encryption and retention are workflow features

Private fields, files, session state, and queued career payloads remain in the owner boundary and use encrypted storage or serialization appropriate to their type. Credentials are resolved by trusted services and never enter agent context. Raw forwarded email, unselected listings, and application history have configurable retention periods with export and deletion controls.

Status and coaching remain evidence-backed

Confirmations, interview requests, rejections, and offers become application events. Ambiguous messages require confirmation, while follow-ups stay drafts until approved. The coach builds likely questions, public company research, and STAR stories only from approved evidence.

The AI quality policy has no silent downgrade

The semantic request contract is hard-locked to gpt-5.6 with GPT-5.6 Sol, reasoning.effort: max, Pro mode, and store: false. No mini, budget, or lower-quality fallback is allowed. Until external processing is explicitly approved, semantic runs remain paused. If the required model is unavailable, work pauses and retries. A newer flagship is promoted only after passing the full truth, policy, security, and job-quality evaluation suite.

The product optimizes for fit, not volume

The default cadence is one high-quality package daily, with no forced application below threshold. Analytics focus on source quality, eligibility, score calibration, revisions, interviews, and outcomes. This is governed Laravel product engineering, not a mass-application bot.

Results

  • Separated candidate truth from generated prose with approved facts and evidence references
  • Made both tracks independently scorable and close scores a user decision
  • Treated listing and email content as untrusted data from allowlisted sources
  • Made unsupported claims a blocking validation failure
  • Made edits revoke approval before handoff
  • Kept LinkedIn, Indeed, Glassdoor, and similar sites on manual handoff only
  • Kept ambiguous status messages pending confirmation and follow-ups as drafts
  • Used outcome analytics to improve fit and preparation instead of application volume

Key features

01 Persisted agent runs and steps instead of an uncontrolled autonomous loop
02 Versioned approved facts, evidence links, resume bases, and answer policies
03 Deterministic eligibility filters and separate Laravel and Data/BI fit scores
04 Grounded resumes, cover letters, and screening drafts with claim provenance
05 Truth review that rejects unsupported dates, metrics, credentials, or experience
06 Approval records revoked whenever a reviewed package changes
07 Encrypted private fields, files, queue payloads, and owner-only Filament access
08 Manual handoff and recorded human confirmation for third-party submissions
09 Status classification, draft-only follow-ups, and evidence-backed interview coaching
10 Configurable retention, export, and deletion without public private-data exposure

Tech stack

Laravel 13 Filament 5 Livewire 4 PHP 8.4 OpenAI Responses API GPT-5.6 Sol Laravel Queues Encrypted Storage PHPUnit 13
Project links

Interested in similar work?

I build systems like this for teams that need reliable engineering, clean interfaces, and measurable outcomes.