साथीwrites the resume.
Bridge verifies the skill.
Nine agents read the room.
First-generation Indian job seekers fight three different walls: a form they cannot fill, a gatekeeper they cannot reach, and a screen they cannot see. Astha ResumeAI knocks down all three from one browser tab. Conversational. Multilingual. Cryptographically signed. No resume data ever leaves the device.
01 · Candidate side
साथीSaathi
A slot-filling chatbot that builds your resume by talking. Hindi, Hinglish, Tamil, Telugu, Kannada, Bengali, Marathi, Gujarati, Punjabi. Voice in. PDF out.
23 data slots, 7 phases
4 ATS-optimised templates
Pure LLM, zero regex
02 · Trust layer
Bridge
The employer publishes criteria. The candidate self-assesses, then takes an adaptive test. The scorecard is HMAC-SHA256 signed on a Cloud Function. Resume claim, verified score, gap.
5-level adaptive difficulty
12 anti-cheat penalty layers
Per-criteria 32-byte secret
03 · Employer side
9-agent screen
Upload resumes and a JD. Nine agents fan out as a Kahn-sorted DAG: parse, embed, match, distance, score, coach. Every weight is cited to peer-reviewed research.
First-gen seekers are three walls deep, before the first interview.
Wall · 01
The form does not speak the language.
Sixty percent of Indian job seekers are not comfortable in English or Hindi. The resume builder asks for "tenure" and the candidate closes the tab. Most "AI for resumes" stops existing the moment the script changes from Latin.
Wall · 02
The skills column is a leap of faith.
"Proficient in Python" reads the same on a brilliant CV and a fabricated one. The employer cannot tell. The honest candidate gets sorted with the inflated one. The trust gap is the resume's biggest lie.
Wall · 03
The ATS is a black box and a verdict.
A keyword-counting filter rejects the candidate without explanation. The recruiter never sees the resume. The candidate never learns what to fix. A shipped product on both sides has to show its work.
Wall · 04
Privacy is the price of admission.
Most resume tools upload the document to a vendor cloud. The candidate's name, address, phone, college roll number and salary history sit in someone else's logs. For a first-gen seeker, that is the whole house.
Act II · The Promise
Saathi asks. The resume writes itself.
No forms. No fields. The candidate speaks. Saathi listens to a one-word answer, reads its own last question for context, and slots the data into the right of 23 buckets. Gemma 3 27b on the front, Gemini 2.5 Flash as backup. Pure LLM. Zero regex.
Saathiphase: education
Where did you study? Just the city is fine if the college name slips your mind.
Candidate · Solan, HPvoice input
शिमला
"Shimla."
Saathislot.education.location ✓
Got it, Shimla. Which course, and what year did you finish? You can answer in any language you like.
Candidatehinglish
BCom from HPU, 2024 mein finish hua.
Saathislot.education.degree, year, institution ✓
B.Com, HPU, 2024. Saved. We have eleven slots left. Tell me about something you built or organised at college that you are proud of.
Act III · The Cascade
Four tiers of intelligence. Each one falls back to the next, never to the cloud first.
The phone decides what it can do. Old phone with no GPU? L1 and L2 still work in WASM. Mid phone with WebGPU? L3 unlocks Gemma 4 in the browser. Offline? The pipeline keeps grading. Online and L3 cannot load? Only then does the resume's hashed embedding go to L4. The resume itself stays put.
L1 any device
Regex and heuristics.
Section detection, entity extraction, Jaccard plus TF-IDF scoring, parseability gate. Hard rule: if a resume is missing 3 of 4 expected sections, the final score is zero.
0 MB
L2 WASM
E5-small-v2 embeddings.
384-dimensional sentence vectors via ONNX runtime. Cosine similarity for skills, projects and experience. Quantised to Q8 so it loads on a mid-range Android in under three seconds.
~67 MB
L3 WebGPU
Gemma 4 E2B in-browser.
Q4 quantised reasoning model via Transformers.js. Runs the Henle et al. fraud taxonomy: fabrication, embellishment, omission. Project quality scored against the AAC&U VALUE rubric.
~1.5 GB
L4 cloud · last resort
Gemini 2.5 Flash API.
Only if L3 cannot load and a key is configured. Structured JSON output. Native PDF understanding. The fallback exists so the system never returns a worse answer than the tier above it could.
network · graceful
Act IV · The Pipeline
Nine agents. Five tiers. One Kahn sort.
Every employer screen is a Kahn-sorted DAG. Independent nodes run in parallel. Downstream nodes wait. Every agent records a thought-action-observation triple with timing, so the recruiter sees why the score landed where it did.
orchestrator.run · trace=ja-2026-30412scenario: candidate vs jd
Bridge does not interrupt the candidate. It does not flash a warning. It just measures. Twelve signals in parallel, three audio layers, and one HMAC-SHA256 signed scorecard at the end. The employer reads a number they can trust. The candidate is never accused without evidence.
FFT energy distribution in the 300 to 3400 Hz speech band. Catches a quiet voice the room does not.
Audio · 02
Temporal
Syllabic modulation in the 3 to 8 Hz window via zero-crossing rate. Speech rhythm has a fingerprint.
Audio · 03
Adaptive
Rolling 60 s baseline that recalibrates from non-speech samples. Quiet rooms and noisy rooms grade fairly. Zero audio is ever stored.
Act VI · The Offer
An offer is more than a salary. Score the rest.
Astha computes a 0 to 100 wellbeing score for any job offer, weighted across eight research-cited parameters and tuned for 32 Indian cities. Real salary is cost-of-living adjusted. Commute uses non-linear piecewise decay. Relocation costs the candidate 10 points by default, per Gallup community wellbeing.
Parameter
Weight
Source
Commute
25%
Clark et al. 2020 · Stutzer & Frey 2008
Work hours
20%
WHO/ILO Pega 2021
Work mode
15%
Bloom et al. 2024 (Nature)
Real salary, CoL adjusted
15%
Gallup Five Elements
Air quality, PM2.5
10%
Graff Zivin & Neidell, IZA
Industry stability
5%
NASSCOM/Aon 2024
Heat stress, WBGT
5%
Nature Sci Reports 2026
Commute cost
5%
ORF India
Act VII · Proof
It is live, signed, and silent about your data.
Live · astha-capstone.dmj.one
Production deployment
Vercel auto-deploys from main on every push. Custom domain plus three Vercel aliases. Loads on a 2G connection, works through a service worker when the network drops.
Privacy · 0 bytes
Resume never leaves the device
Every L1, L2 and L3 inference runs in the browser. L4 sends a hashed embedding only as a last resort, only with explicit consent, only when L3 cannot load.
Trust · HMAC-SHA256
Every scorecard is signed
Per-criteria 32-byte signing secret, generated server-side. The Cloud Function signs the canonical JSON. The employer verifies. The candidate cannot inflate.
Quality · 516 tests
27 test files · Vitest
React Testing Library 16.3, Vitest 3.1. Strict TypeScript build on every commit. Lint passes on every PR. The capstone ships like a product, not a homework set.
A11y · WCAG 2.2 AAA
7:1 contrast across the UI
Skip links on every page. Three-pixel solid focus indicators. ARIA live regions. Reduced-motion respected. 44 px touch targets. Print stylesheet for the resume preview.
Security · HSTS 2 yr · preload
Headers on by default
CSP in and in the Vercel config. X-Frame-Options DENY. Permissions-Policy denies camera, payment, USB. Anonymous Firebase auth with device-to-email mapping.
The Stack
Single PWA. Browser-grade ML, server-grade trust.
React 19.1
TypeScript 5.8 strict
Vite 6.3
Tailwind 4.1
Zustand 5
Transformers.js v4
onnxruntime-web
Gemma 3 27b · Saathi
Gemma 4 E2B Q4 · L3
Gemini 2.5 Flash · L4
Firebase Auth
Firestore · 8 collections
Cloud Functions v2 · Node 20
html2pdf.js
Web Speech API
Web Crypto API
Workbox PWA
Vercel
If a final-year capstone can ship like this, imagine the team.
I mentor capstone teams to build production-grade AI products that respect the user's data, the user's language, and the user's phone. The repository is MIT. The pattern is portable. The conversation starts here.