DEV Community

Cover image for PayUnfold: the line in your job offer worth reading twice
Kaustubh Jogle
Kaustubh Jogle

Posted on

PayUnfold: the line in your job offer worth reading twice

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission đź’¸

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

The offer promises ₹1,20,000 in annual variable pay. A few lines later, it says that payment is subject to company discretion and performance criteria.

That second sentence is the one I want a person to notice before they reply, “I accept.”

I built PayUnfold for people navigating a new job. Give it an offer letter and it points to clauses worth clarifying: conditional pay, notice and buyout, bonds or repayment, probation, and work restrictions. Each finding includes the page, the quoted wording, a plain-English explanation, and a neutral question to ask HR. It does not call a clause illegal or tell you to reject an offer.

After joining, you can optionally add a full-month payslip. PayUnfold reads the figures, lets you correct them, and compares monthly basic pay, HRA, and fixed gross with the offer. It keeps CTC, variable pay, joining bonuses, and one month's fixed pay separate. A ₹3,000 gap becomes a question for payroll, not an accusation: was this proration, leave, a changed structure, or something else?

The side-hustle customer I want to test is an independent career coach who reviews offers for clients. A private, source-linked first pass could save them time and help them deliver a better conversation. The current app is a free prototype.

A paid coach workflow is a hypothesis, not a feature I am claiming to have shipped.

Demo

Code

PayUnfold

Know what you are signing, then check what you are paid. PayUnfold reviews an Indian job offer for terms worth asking about before signing. After joining, you can add a payslip, correct extracted pay amounts, and compare monthly fixed pay.

This is a local prototype for Indian salaried workers. It suggests questions; it does not decide whether a clause is legally valid, whether an employer made an error, or what financial decision you should make.

Use the theme toggle in the header to switch between light and dark mode. PayUnfold starts with your system preference and remembers a choice made in the toggle when browser storage is available.

Try the fictional example

  1. Install Node.js.
  2. Open a terminal in this folder and run npm install, then npm run dev.
  3. Open http://localhost:3000.
  4. Click Try a fictional example. This works without any AI setup.

Use your own

…

How I Built It

PayUnfold is a Next.js app with PDF.js for preparing document pages and Ollama for local inference.
The browser renders the selected pages. The local Next.js server talks to Ollama at 127.0.0.1:11434; there is no account or document database.

I split the job deliberately:

  • The model reads messy documents. Offer letters and payslips do not share one layout or vocabulary. An image-capable open-weight model extracts pay fields and suggests clauses worth clarifying.
  • The person checks the source. Extracted amounts stay editable. Findings from selectable-text PDFs are shown only when the quote can be matched to the page text; image-read quotes are marked for manual checking.
  • Code does the arithmetic. TypeScript compares only reviewed monthly fixed-pay amounts. The model never decides whether an employer underpaid someone.

The offer review covers the first six PDF pages or one image. Pay-field extraction uses the page, so a salary annexure farther back needs manual correction. The app says how much it read instead of pretending it saw the whole contract.

Why Does Open Innovation Matter?

A calculator can subtract ₹45,000 from ₹48,000. It cannot tell which number is monthly basic pay, which is annual CTC, or why a variable-pay clause deserves a question. That interpretation is why an open-weight model sits at the centre of PayUnfold. The arithmetic stays ordinary code because it should be inspectable and predictable.

Running the model on the same computer as the app changes the privacy story. An offer letter and payslip can contain salary, address, and employer details. In the local setup, they pass between the browser, the local Next.js process, and local Ollama—not to a third-party AI API. This promise depends on running both programs locally; hosting the app elsewhere would send the document to that host. There are no per-document API charges, although the model still uses your own hardware and electricity.

Open weights also let a user switch models when one struggles with a scan, a layout, or their laptop. I have not shown that a local model is more accurate than a closed API. The advantage I can demonstrate today is control over where the document goes, which model reads it, and whether an API price change breaks the workflow.

The business test comes next: put PayUnfold in front of a career coach and a job switcher, watch where the questions help or fail, and ask whether either would pay for a polished private review. Until then, the most honest line in this submission is that the product works as a prototype; the side hustle is still being tested.

Prize Categories

Best Use of Gemma

Gemma has a clear role. PayUnfold’s beginner setup recommends Gemma 3 4B as the local image-reading model for offer letters and payslips

Top comments (0)