The challenge
The business started on a WordPress job-board site. A job board lists jobs well, but it does not read resumes, run a recruiter’s pipeline, give each employer its own view or bill for placements, so that work happens by hand, in spreadsheets and chat threads. We needed one system that would cut the typing, keep data in one place, let candidates apply in a minute and let different people see only what they should.
What we built
AI resume parsing with OCR fallback
Recruiters upload resumes in bulk (up to 20 at a time) as PDF, Word or images. Text is extracted directly from digital files; scanned resumes and photos fall back to OCR through Google Gemini. A structured prompt then turns the text into a candidate profile (name, contact, experience, education, skills, salary), which is validated, checked for duplicates by mobile number, saved to the database and the original file stored in Google Drive. Each file runs as a background job, so the recruiter sees live progress instead of a frozen page.
Guest Easy Apply
On any job page a candidate can upload a resume without creating an account. The same parser fills the application form in seconds; the candidate checks it and submits. Candidates who do register get their profile filled the same way, and can also sign in with Google.
Staff portal: search, pipeline and interviews
- Candidate search with SQLite FTS5 full-text indexing over resume text and profile fields.
- An application pipeline shown as a kanban board, from applied to placed.
- Interview scheduling with calendar invites, and placement tracking with status history.
- Multi-source access control: each recruiter sees only the candidate databases assigned to them, with daily view and download limits by role.
Employer portal
Client companies log in to see their own job openings and the candidates the agency has submitted, and leave feedback. Candidate phone numbers and emails are deliberately withheld so the agency stays the point of contact.
Invoicing and enquiry-to-revenue tracking
When a candidate is placed, staff create an invoice from the placement; the fee defaults to the company’s agreed percentage of annual salary and every figure stays editable. Payments and deposits are recorded against it. Every website enquiry carries its source (search, referral, campaign), and an admin report follows it through to client, placement and amount invoiced, so marketing decisions are based on revenue, not clicks.
Analytics
An admin dashboard shows the pipeline funnel, which candidate sources lead to placements, recruiter performance and a six-month placement trend.
Migrating from WordPress without losing a single login
Jobs, candidates, applications, employers and interviews were imported from the WordPress database with their original IDs kept for traceability. User password hashes were imported as they were: on a user’s first successful login the password is checked against the old WordPress hash (phpass or the newer format) and immediately re-hashed with bcrypt. Nobody had to reset a password, and old hashes disappear as people log in. Old WordPress URLs redirect permanently to their new addresses so search rankings carry over.
Security
- Bcrypt password hashing and optional two-factor authentication (TOTP) for staff.
- Database-backed brute-force lockout keyed on both account and IP address, with progressive back-off.
- Origin-checked forms, secure cookies and an activity log of staff actions.
- Role-based access for candidates, recruiters, managers, admins and employers.
Technology
Deliberately simple, so it runs reliably on affordable shared hosting:
What this means for your project
The same building blocks apply far beyond recruitment: reading documents with AI and turning them into structured data, portals where customers, staff and partners each see their own view, invoicing tied to real operations, and moving off an old platform without losing users or search traffic. If your business runs on documents, spreadsheets and manual follow-ups, we can build the system that replaces them.