This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
Site URL:https://privacy-offer-check.vercel.app/
Finding a job right now is exhausting. One of my closest friends has been on the job hunt for over eight months. Hundreds of applications, ghosted recruiter threads, take-home projects, and endless rounds of interviews had taken a massive toll on their confidence and mental energy.
When an offer finally arrived last month, my friend was desperate to celebrate and sign immediately. But when we sat down together to read the fine print, our excitement turned into anxiety:
The recruiter had promised an "unconditional $165k base, 100% permanent remote flexibility, and unlimited PTO" over email and Zoom.
The actual 14-page PDF contract arrived with $132,000 base + a discretionary bonus "subject to board approval", a clause requiring 4 days/week mandatory attendance in-office, an 18-month non-compete clause, and an exploding 48-hour signature deadline.
My friend was overwhelmed, exhausted, and terrified of speaking up for fear of losing the offer. That experience made something painfully clear: job seekers in long searches are at an extreme informational and emotional disadvantage.
To protect my friend—and every candidate facing this reality—I built OfferLens: The Privacy-First Job Offer Reality Checker.
GitHub Link:https://github.com/chanduchowdary-27/privacy-offer-check
What OfferLens Does
OfferLens is not another generic summarizer or chatbot. It is an evidence-based investigation assistant built around four strict principles:
Multi-Document Dossier Ingestion: Candidates upload or paste all their fragmented offer materials: formal PDF contracts, recruiter email threads, LinkedIn/WhatsApp messages, salary breakdown sheets, interview guidelines, and even recruiter voice notes.
Cross-Document Contradiction & Delta Engine: It cross-references promises against the legal agreement, highlighting exact side-by-side discrepancies (e.g., base salary gaps, remote bait-and-switches, PTO downgrades, equipment expenses).
Calibrated Signal & Risk Detector: It never pretends to know intent or shouts "This is definitely a scam." Instead, it uses objective, calibrated language:
"The document contains a request for payment."
"Potential concern detected."
"Information is inconsistent."
"Additional verification recommended."
"The final decision always belongs to the user."
Missing Information & Blind-Spot Audit: It flags dangerous contractual omissions that candidates rarely think to look for, such as unstated stock option strike prices/409A valuations, omitted health insurance effective dates (Day 1 vs. 90-day waiting periods), and missing Prior Inventions Exhibits (protecting personal side projects from being claimed by the employer).
Recruiter Inquiries & Negotiation Playbook: For every discrepancy, OfferLens generates tailored scripts in three selectable tones: Polite & Enthusiastic, Direct & Professional, and Firm Due Diligence, ready to copy and send with one click.
Local-First Privacy Shield: Contracts contain names, salaries, SSNs, phone numbers, and home addresses. OfferLens runs an in-browser PII sanitizer that automatically redacts personal identifiers locally before any analysis takes place, with a toggleable visual audit trail and zero server retention.
Demo
Live Local / Web Application: https://privacy-offer-check.vercel.app/
Pre-Loaded Sample Dossiers: The app includes 4 pre-packaged real-world scenarios you can test with a single click:
The Remote Bait-and-Switch (Austin Cloud Solutions LLC): $33k salary divergence, mandatory 4 days in-office, 18-month non-compete.
The Equipment Check Red Flag (Global Apex Systems Inc): Telegram-only text interview, lookalike domain (@.site), directive to deposit an advance check and wire funds to a hardware vendor.
The Opaque Startup Equity Trap (NovaScale Technologies Inc): 50,000 options with no strike price or pool denominator, aggressive IP assignment of personal weekend hobby projects.
The Clean & Transparent Offer (Nexus Data Dynamics Inc): Legitimate, verified offer with 96% alignment and Day 1 health benefits.
Key Workflows:
Interactive Redaction Vault: Toggle between Sanitized View and Original View to inspect how PII tokens ([CANDIDATE_NAME_REDACTED], [SSN_REDACTED], [ADDRESS_REDACTED]) are masked locally.
Evidence Inspector: Clicking any finding opens the exact quote in the original document with context lines.
Executive Export: Generates printable PDF reports and formatted Markdown dossiers to share with a mentor, partner, or employment attorney.
Code
The complete source code is structured as a clean fullstack TypeScript workspace:
OfferLens/
├── server/ # Express + Node.js TypeScript API
│ ├── src/
│ │ ├── types.ts # Core dossier & investigation schemas
│ │ ├── sanitizer.ts # In-memory regex & token PII sanitizer
│ │ ├── deterministicAnalyzer.ts # Offline rule & contradiction engine
│ │ ├── geminiAnalyzer.ts # Gemini 3.8 Flash multimodal reasoning layer
│ │ ├── mockData.ts # Authentic multi-document case studies
│ │ └── index.ts # REST API & static asset server
│ └── package.json
│
├── client/ # React 19 + Vite + Tailwind CSS
│ ├── src/
│ │ ├── components/ # Modular tabs & inspection drawers
│ │ │ ├── Header.tsx # Privacy badge & AI engine selector
│ │ │ ├── PrivacyShieldModal.tsx # Custom redaction words & audit
│ │ │ ├── DocumentUploader.tsx # PDF, image, audio, text dropzone
│ │ │ ├── DocumentShelf.tsx # Active dossier shelf
│ │ │ ├── DocumentViewerModal.tsx # Masked vs unmasked text viewer
│ │ │ ├── ExecutiveScorecard.tsx # Reality alignment gauge & verdict
│ │ │ ├── ContradictionsTab.tsx # Side-by-side promise vs contract view
│ │ │ ├── ConcerningSignalsTab.tsx # Calibrated risk detector
│ │ │ ├── ClaimVsOfferMatrixTab.tsx# 8-parameter alignment matrix
│ │ │ ├── MissingInfoTab.tsx # Omitted protection checklist
│ │ │ ├── RecruiterQuestionsTab.tsx# 3-tone negotiation scripts
│ │ │ ├── StructuredFactsTab.tsx # Contract parameters & timeline
│ │ │ ├── EvidenceDrawer.tsx # Verbatim snippet inspector
│ │ │ └── ExportReportModal.tsx # Printable PDF & Markdown export
│ │ ├── App.tsx # Main state machine
│ │ └── types.ts
│ └── package.json
└── README.md
How I Built It
OfferLens uses a hybrid dual-engine architecture combining deterministic local verification with optional Gemini AI reasoning:
Local-First Deterministic Verification Engine:
Evaluates documents using regex-driven token parsers and cross-document relational diffing algorithms.
Analyzes compensation variance, work location clauses, restrictive covenants, domain reputation heuristics (detecting lookalike TLDs like .site, .cc, -careers and free webmail @gmail.com corporate accounts), and payment directive patterns.
Works 100% offline with zero network requests and zero external API dependencies, guaranteeing instant results and complete privacy.
Client-Side PII Masking Pipeline:
Detects full candidate names, telephone numbers, personal emails, physical addresses, Social Security numbers, and custom confidential keywords.
Replaces tokens with standardized placeholders while tracking exact character offsets, enabling real-time toggling between sanitized and raw text in the UI.
Gemini 3.8 Flash Multimodal AI Integration:
When the user chooses to enable AI augmentation (by entering their Gemini API key), OfferLens sends only the sanitized text (never raw personal identifiers) to gemini-3.8-flash via the @google/genai SDK.
Gemini evaluates subtle contractual ambiguities, hidden arbitration clauses, and complex equity vesting provisions, enriching the report with tailored negotiation responses.
Modern Frontend & Ingestion Stack:
React 19 + Vite + Tailwind CSS: Clean, dark-mode dashboard with rapid navigation across investigation tabs.
Document Parsers: Ingests native PDFs via pdf-parse, parses text and .eml email files, handles screenshot image metadata, and supports audio memos with a built-in voice note recording simulator and transcription viewer.
Why Does Open Innovation Matter?
When a job seeker is reviewing an offer letter, they are handling some of the most sensitive data in their life: their compensation, their legal identity, their home address, and their potential employer’s confidential terms.
If this application relied exclusively on a proprietary, closed-box cloud platform where documents are sent unredacted to a third party's training pipeline, we would be asking vulnerable candidates to sacrifice their confidentiality for clarity.
Open innovation fundamentally changed what was possible:
Local Sovereignty: By combining open-source local parsing engines with transparent PII redaction, candidates can inspect their offers entirely on their own device.
Zero Black-Box Guesswork: In OfferLens, every finding is mapped to an exact, verifiable quote from the uploaded text. Candidates can see the exact line and clause that triggered an alert.
Democratizing Legal Due Diligence: Enterprise corporations have teams of lawyers reviewing every agreement they send out; individual candidates usually have none. Open developer tools and accessible AI level the playing field, giving every candidate a personal offer advocate.
My Agent Session
This application was engineered collaboratively using an autonomous agent session that orchestrated:
System design, directory setup, and TypeScript type modeling across client and server.
Implementation of the local PII sanitization engine and deterministic contradiction rules.
Building the React 19 UI with full side-by-side diff views, evidence inspection drawers, and export capabilities.
Live testing and verification against all four pre-loaded sample dossiers.
Prize Categories
Primary: Build for a Friend
Categories: Privacy-First AI, Career & Productivity Tools, Open Innovation
Top comments (1)
JSON.parse: unexpected character at line 1 column 1 of the JSON data
On a PDF upload attempt