Project Overview and Business Context
The client was an HR technology consultancy building a white-label recruitment tool for mid-market employers. Their target customer received 500-3,000 CVs per role and had one or two HR staff responsible for initial screening, creating a backlog that delayed time-to-hire and lost strong candidates to faster-moving competitors. The brief was to build a tool that could process an entire application batch overnight, score each CV against a structured job requirements matrix, flag potentially strong candidates for priority review, and produce a ranked shortlist with documented screening notes. The EU AI Act classification of CV screening as a high-risk AI system was a central design constraint. Under Annex III of the EU AI Act, AI systems used in employment, worker management, and access to self-employment are high-risk. This means the system requires risk documentation, transparency to candidates, human oversight, and the ability for affected individuals to seek explanation of AI-assisted decisions. SpeedMVPs builds EU AI Act-compliant documentation as part of the project: a Technical Documentation package covering system purpose, training data (none, in this case, as the system uses LLM inference without training), performance metrics, bias testing methodology, and the human oversight process. Equality Act 2010 considerations drove the bias-mitigation controls: the scoring criteria must be limited to requirements genuinely relevant to the job, and the system must not infer or use protected characteristics either directly or as a proxy.
Technical Architecture and Stack Decisions
The application is built on Next.js with Supabase for authentication, PostgreSQL for candidate and scoring data, and Vercel for deployment. The recruiter workflow starts with job setup: defining a job description and a structured requirements matrix (essential criteria, desirable criteria, disqualifying criteria) using a guided form. The requirements matrix is stored in Supabase and passed to the scoring pipeline as the evaluation framework. CV uploads (PDF, DOCX, or plain text) are processed in batch, with text extraction server-side and CV content normalised to a structured schema before scoring. The scoring pipeline passes each CV text and the requirements matrix to GPT-4o with a system prompt that instructs it to score the candidate on each criterion (1-5 scale), provide a brief evidence note for each score, flag any disqualifying criteria, and produce an overall suitability classification (strong, suitable, marginal, unsuitable). GPT-4o returns structured JSON per candidate, which is stored in PostgreSQL and used to compute the ranked shortlist. The bias-mitigation layer operates in two ways. First, the system prompt explicitly instructs GPT-4o to score only on the specified job criteria and not to infer or consider protected characteristics (age, gender, ethnicity, disability, etc.) from CV content. Second, a post-processing step checks for name-based demographic inference patterns in GPT-4o's evidence notes and flags any suspicious patterns for recruiter review. The recruiter interface presents the ranked shortlist with criterion scores, evidence notes, and a decision log field where the recruiter records their shortlisting decision and reason.
Key AI and ML Components
GPT-4o is the scoring engine. The system prompt design is the most important technical decision in this build. It encodes the requirements matrix evaluation criteria with enough specificity for GPT-4o to apply them consistently across hundreds of CVs, while including explicit bias-mitigation instructions that prevent the model from internalising demographic signals. The prompt includes instruction to treat equivalent experience from different contexts equally: five years of engineering experience at an SME is evaluated on the same criteria as five years at a large corporation, with the evaluation focused on the skills demonstrated rather than the employer prestige. The criteria weighting is configured by the recruiter for each role. A system that applies equal weight to all criteria is less useful than one that can prioritise the two or three criteria that genuinely differentiate strong candidates. The scoring output is designed to surface the weighting transparently in the ranked list, so a recruiter can see that a candidate ranked third overall but scored highest on the most critical technical criterion. GPT-4o's structured output reliability on consistent JSON schemas is important here, as the scoring pipeline needs to process hundreds of CVs in batch without failures requiring manual review. Validation and retry logic handles occasional malformed responses.
Challenges Solved and How
CV format diversity is the biggest technical challenge. CVs come in hundreds of different layouts, formats, and conventions. Text extraction from PDF produces inconsistent output depending on whether the PDF is text-based or image-scanned, whether it uses tables or text boxes, and how complex the typography is. The extraction pipeline uses a combination of pdfplumber for text-based PDFs, AWS Textract for complex layouts and image-scanned documents, and a normalisation step that structures extracted text into labelled sections (contact details, education, work experience, skills, additional information) before passing to GPT-4o. Consistency across a batch of hundreds of CVs requires careful prompt management. GPT-4o outputs can vary in subtle ways across a large batch, particularly on edge cases like career changers, non-traditional backgrounds, or CVs with unusual structure. The scoring pipeline includes a consistency checker that flags scores that diverge significantly from the batch distribution for human review, catching cases where the model may have misinterpreted a CV's structure. EU AI Act transparency requirements mean candidates must be informed that AI is used in initial screening. The client's application form includes an explicit disclosure and a reference to the employer's AI use policy, which SpeedMVPs drafts as part of the compliance documentation package.
Outcome and Measurable Results
The client deployed the tool for a pilot across three employer clients, processing 4,200 CVs across seven roles in the first six weeks. Average screening time per CV fell from 4.5 minutes (recruiter review) to 45 seconds (recruiter review of AI-generated scoring note). Batch processing overnight meant recruiters started each day with a ranked shortlist ready for review rather than a queue of unread applications. Time-to-shortlist fell from an average of 14 working days to 3 working days across the pilot roles. Equal opportunities monitoring data (collected separately from the screening data) showed no statistically significant difference in screening rates across gender and ethnicity groups within the pilot data, compared to the employer's historical manual screening data. The EU AI Act documentation produced during the build was cited by one employer client as enabling their legal team to approve deployment significantly faster than they had expected.
Lessons for Similar Projects
Treat the EU AI Act as a design input, not a post-build compliance task. High-risk AI classification for employment AI means documentation, transparency, and human oversight requirements that need to be designed in from the start. Retroactively adding them to a live system is significantly more expensive than building them in. The requirements matrix is the product, not the AI. A vague job description produces vague AI screening. The biggest improvement in AI screening quality comes from working with recruiters to define genuinely measurable, job-relevant criteria before the system scores anything. Invest time in criteria definition as part of the build. Build the equal opportunities monitoring dashboard from day one. You need empirical evidence that the system is not systematically disadvantaging protected groups. Without that monitoring, you cannot responsibly operate a high-risk AI system in hiring.