Inspiration

A salary dispute can begin with a simple question: “Was I paid what I was promised?” Answering it can involve comparing employment documents, checking payslips and organising information across different languages.

We built Owed to make that first step easier for migrant workers in Singapore. Our goal is to turn scattered documents into clear, reviewable information that helps someone understand a possible wage shortfall and prepare to seek assistance.

What it does

Owed guides workers through a document-to-report workflow:

  • Upload an In-Principle Approval (IPA) letter and extract employment and salary information.
  • Review, correct and confirm extracted fields before calculations use them.
  • Enter monthly payslip figures manually.
  • Compare confirmed salary information and calculate potential shortfalls using deterministic rules.
  • Request an optional English AI explanation.
  • Download a structured PDF containing the information gathered and calculation results.

The prototype includes English, Bengali and Tamil interface and PDF templates. Live AI explanations currently support English; payslip extraction remains a future feature.

Owed supports claim preparation. It does not submit claims automatically or determine legal entitlement.

How we built it

We connected a React and TypeScript frontend built with Vite to a Python FastAPI backend, hosted on Railway.

Both AI tasks use Nebius Token Factory. GLM-5.3-Flash extracts information from IPA images, while NVIDIA Nemotron-3_5-Lightning generates optional English explanations.

We deliberately separated AI interpretation from financial calculations. Models propose structured information; users confirm it; deterministic code performs the arithmetic.

PostgreSQL coordinates jobs, usage counters, spending reservations, rate limits and a shared AI kill switch. Cloudflare R2 stores documents privately, with expiry and deletion handling.

Uploaded evidence is preserved separately from smaller inference images. The backend corrects orientation and prepares compressed copies within the configured model-request limits.

Challenges we ran into

The biggest challenge was making AI useful within a dependable workflow.

Models sometimes returned unexpected fields or formatting even when their responses contained valid JSON. We improved prompts, added strict parsing and schema validation, and tested requests against the application’s actual contracts.

Large document images created another obstacle. We introduced automatic image preparation while preserving the original upload and keeping manual entry available.

Deployment also required careful coordination between the web service, background worker, database, storage and browser authentication. Shared configuration and conservative usage accounting became essential.

Accomplishments that we're proud of

We built a prototype that brings document handling, field confirmation, salary comparisons and downloadable reports into one experience.

We successfully tested IPA extraction and English explanations through Nebius Token Factory, including full application-schema checks.

We are also proud of the less visible work: private storage, cleanup, duplicate-request protection, controlled inference attempts and manual fallbacks. These features help the application remain useful when AI is unavailable.

What we learned

A successful model response is only one part of a working product. Clear contracts, readable inputs, understandable errors and recoverable workflows matter just as much.

We learned to use AI for interpretation while keeping calculations explicit and reviewable. We also learned that multilingual interfaces require human language review, and financial or legal workflows need validation beyond technical tests.

What's next for Owed

Our next priorities are payslip extraction, broader document testing and human-reviewed Bengali and Tamil explanations.

We also want to validate the calculation rules with qualified reviewers and test usability with migrant workers and organisations supporting them.

Our goal is to make wage-claim preparation more accessible: helping workers organise their evidence, understand the information in front of them and approach the next step with greater clarity.

Built With

Share this project:

Updates