Text Ari
AI career assistant on WhatsApp. Scrapes seven UK job boards, matches with hybrid search, replies in chat.
Overview
Text Ari is an AI career assistant I built that scrapes seven UK job boards, matches candidates with hybrid vector search and LLM reranking, and delivers everything through WhatsApp. No app to install, no profile to fill out beyond a CV, no logging into another website. Send a message, get matched jobs.
The challenge
Job searching in the UK is fragmented. Vacancies are spread across NHS Jobs, Civil Service Jobs, DWP Find a Job, Reed, Adzuna, Greenhouse boards, and Lever boards. Each has its own interface, search quirks, and alert system. Candidates spend hours checking multiple sites, often missing relevant roles because they didn't search the right board with the right keywords.
The competing solutions are all the same shape: build another app, ask the user to install it, ask them to sign up, ask them to fill in a preferences form, then send them daily emails they don't read.
The reframe
Most job seekers already live on WhatsApp. They don't want another app. They want someone to find the right jobs and send them over.
So I built the entire product as a conversation. No download, no website to log into. The CV becomes the profile. The messages become the search query. The interface most people already use ten times a day becomes the job board.
Key decisions
WhatsApp-first, web second
The marketing site exists to send people to a chat. Everything else lives inside WhatsApp: search, matching, interview prep, application question answering, alerts. Voice notes are supported for hands-free interaction. Tradeoff: I'm tied to the WhatsApp Business API's quirks and pricing model. Win: zero install friction, and the product reaches people where they already are.
Hybrid search with LLM reranking, not pure embeddings
The first version used pure semantic search on embeddings — and missed obvious roles where the title overlapped with the CV but the description was generic. I added keyword matching alongside vector similarity, then used an LLM to rerank the combined results against the candidate's actual experience. Tradeoff: more compute per query. Win: matching catches roles with different titles but the same requirements, and stops surfacing junk that scored high on cosine distance alone.
One Edge Function for seven scrapers
Seven scrapers across NHS, Civil Service, DWP, Reed, Adzuna, Greenhouse, and Lever — most products would split these into separate services. I run all of them through one Supabase Edge Function (scrape-all) that orchestrates the sources, uses Cloudflare Browser Rendering for the JS-heavy boards, and deduplicates by content hash before insert. Tradeoff: one function gets fat. Win: a single deploy target, a single cron schedule, a single place to debug.
Freemium with the first reply free
The first onboarding reply is always free, no exceptions. After that it's Stripe-powered day passes, weekly, and monthly subscriptions. Pricing is geo-targeted by user location. Tradeoff: I'm leaving some free-tier abuse on the table. Win: every paying user has experienced the product working before they're asked to pay, and the conversion is honest.
Impact
— Seven+ job sources scraped and unified into a single searchable database.
— Hybrid vector search with LLM reranking for quality-over-quantity matching.
— Full career assistant on WhatsApp: search, match, interview prep, application answers, voice notes.
— Persistent daily alerts: cron job matches new listings against saved profiles, sends via WhatsApp with smart timing.
— Stripe monetisation with freemium funnel and geo-targeted pricing.
— Fully automated pipeline: scrape, embed, match, notify, follow up.
Reflection
Building Text Ari taught me that the interface choice is often the product. WhatsApp wasn't a delivery channel — it was the entire business model. If I'd built the same matching engine behind a web app I'd be competing with LinkedIn Jobs and Indeed for attention. Building it on WhatsApp means I'm competing with nothing, because nobody else is willing to do the work of running an AI agent inside a chat thread.
The lesson I'd take to any consumer AI product: ask “where do my users already live?” before you ask “what should the app look like?”
Tech Stack