Skip to main content
From Incoming CVs to Client-Safe Candidate Profiles
Case study

Manlytic Group

Sector
Staffing & Recruitment
Work
Custom Software
Duration
4 weeks
Capability

One codebase

runs in a browser, as an installable app and as an Android app

Capability

Named fields only

client files are built from a short list, so contact details cannot be in them

Validation

168 tests

pass, including leak checks on every generated client file

Capability

No signal needed

search, profiles and edits run from the copy on the phone

Fig. 1

One CV, two files

The CV as it arrived is kept whole, for the agency. What the employer receives is a new file built from named fields only, so the candidate’s phone and email cannot be in it.

  1. 1. The original is stored as it came in, contact details and all, and is never edited.
  2. 2. Only fields on a short, named list cross to the client file. Contact details are not on it.
  3. 3. The client file is a separate document, not the original with parts removed.
  4. 4. It is opened again and searched before anyone may call it safe.

01The starting point

CVs on WhatsApp, and a fee lost with every phone number.

Manlytic Group is a manpower and contract staffing agency in Mumbai that places workers with employers in the Gulf. Its recruiters do their work on Android phones, and CVs reach them as WhatsApp attachments, scanned pages and photos. Many arrive as bio-data tables in two columns, with the same label spelt several different ways.

The details that matter most leave the least room for error. A candidate record needs a name, a date of birth and a passport number with its issue and expiry dates, and a passport number has to be right to the character. The same worker can also apply again later, with a renewed passport and a newer CV, and the agency needs to know it is the same person.

The agency is the route between employer and candidate, and every document it sends an employer says so. A CV forwarded as it arrived can carry the candidate’s phone number, email address and links, in the header, the footer or deep in the work history. Recruiters needed to send employers a clean, consistent profile, and to keep working on a phone when the signal dropped.

Fig. 2

CVs as they arrive

Candidates send phone photos, bio-data tables and scans, in no fixed layout. The tool reads what it can and leaves the rest empty for a recruiter to fill in.

  1. 1. A photo, a table with misspelt labels, a scan with no text behind it.
  2. 2. One reader tries after another; a scan is read by OCR. The worst case is an empty form, never a wrong one.
  3. 3. What the document does not say stays empty. Nothing is guessed.
  4. 4. A value the reader is not sure of is marked for review rather than trusted.

02What we built

A recruiting desk that lives on the phone.

We built one app that runs on the recruiter’s phone, as an Android app, as an installed web app or in a browser. A CV that arrives on WhatsApp, in Gmail or in Files is shared straight into it, or a whole set is imported at once. The app reads the passport and work details into a candidate record, and searching and editing carry on without a signal, with changes sent when the phone reconnects.

Nothing is guessed to make a record look complete. A detail the CV does not give is left empty, and the app is built not to work out Arabic from someone’s nationality or a destination from where they live. Passport characters it is unsure of are flagged, and years of experience added up from dated jobs are marked unsure until a recruiter confirms them. A Review tab gathers everything that needs a person: new imports, missing details, unsure values, possible duplicates, passports that have expired or are about to, and follow-ups.

Each new CV is checked against the people already saved: by passport number, by phone number however it is written, by email, and by name with date of birth. A likely match is reported and never merged, and in a batch import it is held back for the recruiter who imported it to decide. Two different people who share a name are not treated as one. Each person is kept apart from the jobs they are put forward for, so their progress is tracked job by job without losing their history.

Anything made for an employer is a new document: a candidate profile, a package of several candidates, or a shortlist spreadsheet, in the agency’s own branding. It is built from a fixed list of approved fields. The candidate’s phone, WhatsApp and email and the recruiter’s notes are not on that list, and passport number, date of birth and photo appear only when the recruiter chooses. Values still marked unsure stay out until someone confirms them, and the CV as it arrived is kept untouched, apart from every file made from it.

Before a file can be shared, the app opens the finished document again and searches all of it: the text, the links, the hidden details and the raw contents. Any phone number, email address or link that is not the agency’s own stops the file, and so does a file that cannot be opened. In place of the share button, the recruiter is offered a way to fix the candidate’s details or to send the candidate profile instead. The original CV can still be sent on purpose, after a clear warning that the employer will then be able to contact the candidate directly.

Fig. 3

The duplicate waits

Workers apply again with a renewed passport or a new destination. A CV that matches someone on file is held for a recruiter to decide, never merged on its own.

  1. 1. A new CV arrives for someone who already has a record.
  2. 2. The same passport number, phone, email, or name and date of birth: the match is reported, not acted on.
  3. 3. The import waits in a holding list until a person decides.
  4. 4. The existing record is left exactly as it was.

03How the tool works

One CV in, two files out, and a boundary between them.

Fig. 4

Opened again before sending

A finished client file is opened and searched like an outsider would: its text, its links, its hidden properties, its raw bytes. One contact detail anywhere and it cannot be shared.

  1. 1. The file is reopened after it is built, not trusted because it was built correctly.
  2. 2. A phone number inside a job description is enough to block sending.
  3. 3. Fix the candidate’s details, rebuild the file, and it is checked again from scratch.
  4. 4. Only a file that passes can go to the employer.

Fig. 5

Working without signal

Recruiters work from phones that are often offline. Search, profiles and edits run from the copy on the phone, and each change is sent on when there is signal.

  1. 1. The phone holds its own copy of the records and searches it directly.
  2. 2. Each edit is queued on the phone with its own id, so sending it twice changes nothing.
  3. 3. When there is signal the queue goes up; the server stamps each change and sends the stored row back.
  4. 4. Reading a CV and building a client file need a connection. Everything else does not.

04What became possible

Candidates reach employers only through the agency.

Candidate contact details

Checked before sharing

On the CV as it arrives → In no employer file

Details the CV does not give

A person confirms

Missing or unreadable → Left visibly empty

A worker who applies again

Never merged alone

A second CV → Held for a recruiter

Built with

Next.jsTypeScriptCapacitor (Android)PostgreSQLPGliteDexie (IndexedDB)S3-compatible storageTesseract.jsGeminiOpenAIVitest

Running an operation from phones?

Bring us the work your team does on the move, the documents it handles and the people it must not expose. We will help work out what the tool needs to make possible.

More work

Keep reading.

From Printed Archive to Research System
Custom Software

Research & Knowledge

From Printed Archive to Research System

The collection existed. Answering a question about it did not. Anything worth knowing meant reading across thousands of pages by hand, holding names, places and dates in your head, and reconstructing the evidence trail yourself each time.

  • Ask a research question and get back a cited report, instead of reading for the answer
  • Follow one person across the whole collection even where their name is spelled a dozen different ways
  • See the archive as a map of what happened where, a timeline of when, and a network of who dealt with whom
Building an AI Assistant You Can Control
Applied AI

Regulated Services

Building an AI Assistant You Can Control

How a private AI product company turned difficult regulatory material into a controlled assistant for professional firms.

  • Your own material, not a public model's: administrators decide what is in the knowledge base and what is not
  • Add a new regulation yourself: upload the PDF and the system cleans, splits and indexes it without a developer
  • Provision a company, invite named people into it, and cut their access server-side when it ends
Making Interior Products Easier to Find
Applied AI

Commerce

Making Interior Products Easier to Find

How a MENA AI studio turned an interior photograph into searchable product language, UAE results and a shortlist customers could export.

  • Photograph something you saw and get back things you can buy nearby, without typing a word
  • Keep what you like, set quantities against it, and export the shortlist as a PDF you can hand to someone else
  • Hand it a photograph of something that is not an interior item and it stops, rather than confidently returning the wrong furniture