AskJustin
A public AI agent trained on my real work stories, so hiring managers can ask questions a resume cannot answer.
Try it at ask.justinschaeffer.com →
The Problem
A resume gives you the outline of a career. It does not tell you how someone thinks, handles ambiguity, or actually builds. I have been in a job search since September 2025, and the resume-shaped conversation always felt lossy: skimmed by recruiters, pattern-matched by hiring managers, actual signal about how I think rarely making it through.
I built AskJustin to make some of that signal available before the first conversation. It also gives me a real portfolio case study to walk through in interviews, which turns out to matter as much as the tool itself.
What It Is
AskJustin is a public web page where hiring managers ask interview-style questions and get first-person answers grounded in specific projects, decisions, and philosophies from my career. Ask it anything you would ask in a first-round conversation: "Tell me about a time you had to make a decision with incomplete data." "How do you prioritize competing requests?" "What is the hardest product problem you have solved?"
If the corpus has relevant context, you get a grounded answer with specific details. If it does not, the agent says so honestly and suggests contacting me directly. No hallucination, no filler.
How It Works
AskJustin is a Retrieval-Augmented Generation (RAG) system. I wrote roughly 60 short stories about specific projects, decisions, and philosophies from my career. Each story is embedded into a vector using Voyage AI. When a question arrives, it is embedded the same way, and cosine similarity selects the six most relevant chunks. Those chunks plus a system prompt with strict grounding rules go to Claude Haiku 4.5, which drafts a first-person response streamed to the browser.
The guardrails do the heavy lifting. The system prompt bans general-knowledge fallback, invented details, and fabricated negatives. The agent can only speak from what I actually wrote.
At Build Time
60 work stories → Voyage AI embeddings → JSON bundle shipped with app
At Query Time
Question → embed → cosine similarity (top 6 chunks) → system prompt + chunks → Claude Haiku 4.5 → streamed response
Guardrails
No general-knowledge fallback. No invented details. No fabricated negatives. Redirect to Justin when context is insufficient.
Tech Decisions and Trade-offs
- Claude Haiku 4.5 over Sonnet. The task is retrieval and synthesis from a small corpus with a strong system prompt, not open-ended reasoning. Haiku is faster, cheaper, and quality-sufficient for this use case.
- Flat-file cosine similarity over a vector database. At 60 chunks, loading embeddings from a JSON file at build time is simpler, cheaper, and eliminates cold-start latency. A vector DB adds operational cost without adding value until the corpus grows past several hundred chunks.
- Voyage AI embeddings (voyage-3.5-lite). Best performance-per-dollar for semantic similarity at this scale. Separate embedding model from generation model lets each do what it does best.
- Streaming from day one. Waiting 3-5 seconds for a full response before showing anything kills perceived performance. Streaming was non-negotiable.
- Multi-tier rate limiting from day one. A public endpoint backed by a paid LLM API is a cost attack surface. Global daily cap, per-IP cap, and per-session turn cap protect against abuse without degrading legitimate use.
- Prompt caching. The static system prompt caches via Anthropic's ephemeral cache. Roughly 90% cost reduction on repeated queries. Under $1/month at 20 queries per day.
Stack
Framework
Next.js 16
LLM
Claude Haiku 4.5
Embeddings
Voyage AI
Hosting
Vercel
Rate Limiting
Upstash Redis
Query Logging
Supabase
By the Numbers
~60
Work stories in the corpus
<$1
Monthly cost at 20 queries/day
90%
Cost reduction via prompt caching
6-8 wk
Build timeline (Phase 1)
~5 hr
Per week investment
Solo
Built by a PM, not an engineer
What is Next
Phase 2 adds a formal evaluation framework: automated testing of retrieval quality, response grounding, and edge-case behavior. Right now quality assurance is manual review. A proper eval suite makes the system trustworthy at scale and gives me a repeatable methodology to discuss in interviews.
What This Demonstrates
- End-to-end AI product ownership: Architecture, retrieval design, prompt engineering, deployment, security, cost modeling
- Technical judgment: Every decision is documented and defensible, with alternatives considered
- Cost discipline: Under $1/month through intentional model selection, prompt caching, and right-sized infrastructure
- Security thinking: Rate limiting and abuse defense designed in from day one, not bolted on
- Honest limits: The agent says "I do not know" rather than hallucinating. That restraint is a product decision.
I am a product manager, not a career engineer. Building an AI product end-to-end as a PM is itself a demonstration of the skills I claim to bring. The product demonstrates the product-management skills it is claiming to show.
Get in Touch
If something in the agent's response surprises you, or if it sends you to my inbox, I would like to hear from you.