Skip to main content
all case studies
PRODUCT// case study

Jobpoise — AI Job Copilot

The job search, weaponized for the qualified.

A citation-grounded AI job application copilot with Chrome extension, Gmail tracking, and three pricing tiers.

Role
Design + build + operate
Client
Sage Ideas (Internal)
Category
Product
Status
Operational
Jobpoise — AI Job Copilot hero

CI Gates

5/5

Pricing Tiers

3

Job Boards

LinkedIn, Indeed, Greenhouse

Open PRs (main)

0

Living architecture

Surface ⇄ System

Jobpoise is presented as both the product people touch and the operating system underneath it: UI, data model, integration path, evidence, and outcome.

Build a product like this
  1. 01Visible productScreenshots and product frames show the user-facing surface without pretending concept art is production proof.
  2. 02Operating architectureThe case includes a system map so the architecture is visible, not buried in prose.
  3. 03Evidence registerMetrics, build logs, diagrams, CI artifacts, and links separate actual work from agency theater.
  4. 04Commercial pathThe page routes qualified buyers toward a matching build, automation, or lab entry.

case flow

Surface ⇄ System

ProblemProductSurface2 screensSystemmappedProof4 metricsRouteservice
A case study should prove both layers: the surface people see, and the system that keeps the product alive after launch.

Jobpoise operating map

The diagram is intentionally simplified: it shows the buying logic and operating path, not a decorative fantasy architecture.

client

Sage Ideas (Internal)

category

Product

evidence

metrics

Proof board

Receipts before claims.

This page separates shipped surface, system map, real metrics, and available artifacts so the work can be inspected instead of just admired.

proof assets

2

Screens, gallery, artifacts

screens

2

Real product surfaces

artifacts

0

Available during discovery

Primary evidence

The job search, engineered.

CI Gates

5/5

CI Gates

5/5

Pricing Tiers

3

Job Boards

LinkedIn, Indeed, Greenhouse

Open PRs (main)

0

Surface

Product screenshots and interface frames show the user-facing layer. If real assets are unavailable, the page says so instead of dressing mockups as production proof.

System

Architecture diagrams, build logs, and artifacts make the hidden operating layer visible to technical buyers.

Explore the Lab entry for Jobpoise
motion proof mapjobpoise · real-system storyboard
ProfilecandidateResumetailoredApplytrackedInterviewpracticeInsightsfeedback

Job-search copilot loop

Surface, system, proof, route.

This storyboard turns the case study into a moving operating map: the buyer sees what was built, where the system lives, and which proof points are actually available.

sessions
8-question
billing
3 tiers
workflow
Gmail
01// the problem

What was broken.

Job seekers face a documentation problem, not an inspiration problem. They know what they want to say — they just need help saying it in language that matches the role, passes ATS screening, and sounds like a human wrote it. Tools that generate generic cover letters from nothing miss the entire point.

Jobpoise was built around citation-grounded generation: every piece of AI-generated content traces back to the candidate's actual experience, the actual job description, and named sources. No hallucinated accomplishments. No fabricated skills.

The challenge: building a product that is technically defensible (citation-grounded), commercially sustainable (Stripe paywall with sensible tier design), and usable in the actual workflow (Chrome extension for in-browser job applications and Gmail integration for application tracking) — all in a single Next.js monorepo.

02// the approach

How it was built.

Monorepo: Next.js 15 with Turborepo — web app and Chrome extension as separate packages, sharing types and utility functions. AI layer: GPT-4 with structured prompting for citation-grounded generation. Every output includes a citation map linking content to input sources (resume bullets, JD requirements).

Chrome extension: Manifest V2, injects into major job board UIs (LinkedIn, Indeed, Greenhouse), enables one-click draft generation from the current JD. Gmail integration: OAuth-scoped Gmail API access to track sent applications, surface follow-up timing, and detect response patterns.

Billing: Stripe Checkout + Customer Portal. Three tiers — Drift (free) to prove value, Poise ($39/mo) for unlimited generations + Gmail tracking, Compose ($79/mo) for Chrome extension + priority processing. CI: 5 CI checks passing on main — type check, lint, unit tests, build, and E2E smoke test.

03// architecture

The system map.

How the pieces talk to each other.

Jobpoise ArchitectureThree user surfaces (web app, Chrome extension, Gmail OAuth flow) feed a citation-grounded AI layer powered by GPT-4 with retrieval, fronted by Stripe billing across three subscription tiers.Userjob seekerWeb AppNext.js dashboardChrome Extensionjob-board overlayGmail OAuthreply assistantCitation-Grounded AIGPT-4 + retrievalResume + Profile Storeuser contextTier · Free$0 / 5 actionsTier · Pro$19 / unlimitedTier · Coach$49 / + draftsStripe BillingwebhooksprompthydratemeterREQUEST FLOWUSERBILLING METER
04// the numbers

Measured, not asserted.

The real figures from the engagement, printed verbatim. Bars are scaled against the largest comparable magnitude in the set — a secondary cue, never the source of truth.

metric · valuescale 0 – 5
CI Gates
5/5
Pricing Tiers
3
Job Boards
LinkedIn, Indeed, Greenhouse
Open PRs (main)
0
05// built ui

Selected screens.

Real product surfaces from the engagement — not stock illustrations.

JobPoise mock interview session running a behavioral set of 8 questions
01 / 02

Mock interview — behavioral set, real-time transcription, structured rubric scoring.

07// the build log

What shipped.

The verbatim ship record, given timeline structure.

  1. log · entry 01

    Next.js 15 monorepo (web app + Chrome extension as packages). Citation-grounded AI generation (GPT-4 + structured prompt layer). Chrome extension v2 with job board injection. Gmail OAuth integration with application tracking dashboard.

  2. log · entry 02

    Stripe Checkout + Customer Portal (3 tiers). 5 CI checks passing on main branch. Production deployment with auth, data persistence, and billing all live.

08// the outcome

What it proved.

Fully merged main branch — no open feature PRs blocking production. All 5 CI gates passing: TypeScript, ESLint, unit tests, build, E2E smoke. Stripe billing live and processing test transactions.

Chrome extension functional on LinkedIn, Indeed, and Greenhouse. Three-tier pricing model ready for go-to-market.

A monorepo with a web app and a browser extension, sharing types and utilities, can be built and maintained by a single engineer without sacrificing CI discipline. The citation-grounding architecture is the differentiator — it's what separates Jobpoise from a GPT wrapper with a job-shaped UI.

// references

Talk to people on this work.

No fabricated quotes. Reference contacts are shared during discovery, with both parties' consent.

Reference available

Engineering lead

Fintech · 5 years

Worked alongside on production trading systems for 5+ years. Available for technical reference calls — code quality, on-call discipline, incident behavior.

Reference call shared during discovery, both consenting.
Reference available

Founder

Studio engagement

Engaged Sage Ideas for a Ship + Operate combination. Willing to talk about scope discipline, timeline accuracy, and what handoff actually looked like.

Reference call shared during discovery, both consenting.
An AI that lies about your resume is worse than no AI at all. Every claim it generates has to point at a line you actually wrote.
// build log · entry 04
// honesty

What almost happened.

Every project has near-misses — decisions that, if we'd kept going, would have shipped a hole. This is the diff between the version that almost made it to prod and the version that did.

// near-miss · 01diff

beforeThe cover-letter generator was about to ship as a free-form GPT-4 prompt. Hallucinated job titles, fake company names, claims you never made — all eloquent, all wrong.

afterConstrained generation: the model can only quote spans from the parsed resume. Every sentence in the output has a citation back to a source line. If it can't cite, it doesn't write.

costHigher latency (~600ms p95). Acceptable trade for zero hallucinated work history.

// near-miss · 02diff

beforeChrome extension was about to inject DOM into LinkedIn pages — the kind of integration that breaks every two weeks when LinkedIn ships a redesign.

afterExtension reads the page, never writes to it. UI lives in a side panel the user opens. Zero brittle selectors against third-party DOM.

costSlightly less seamless. Survives every LinkedIn release. Two-line update beats two-day firefight.

// from the repo

Inline excerpts.

Trimmed, but real. The patterns that made the system survive retries, multi-tenant queries, and a bot that won't hallucinate.

Citation-grounded generation
typescript
// lib/generate.ts — production excerpt
export async function generateBullet(
  jd: JobDescription,
  resume: ParsedResume,
): Promise<CitedBullet> {
  const candidates = await llm.generate({
    system: SYSTEM_PROMPT,
    user: prompt(jd, resume),
    schema: BulletSchema, // forces { text, citations: SpanRef[] }
  })

  // Reject any output whose citations don't resolve to real resume spans
  for (const cite of candidates.citations) {
    const span = resume.spans.get(cite.id)
    if (!span) throw new HallucinationError(cite.id)
    if (!candidates.text.includes(span.text.slice(0, 12))) {
      throw new HallucinationError('paraphrase too loose')
    }
  }
  return candidates
}
// The model literally can't write a sentence without a source span.
livebuild a1556e22026-06-19 03:29Z
// solo studio// no analytics resold// every commit human-reviewed