Most job referrals happen through someone you already know. Referrlyy is the infrastructure for when you do not know anyone yet.
The marketplace has two sides. Referrers are verified employees who list themselves as willing to refer at their company. Referees submit applications: upload a resume PDF (stored in Supabase Storage with private bucket policy), paste the job URL, and Firecrawl scrapes the JD (with automatic fallback from /scrape to /extract for Cloudflare-protected pages).
Gemini 1.5 Flash runs a structured fit scoring pass: a 1-to-10 score plus four specific insights covering what is strong, what is missing, what is weak, and what to emphasize in the pitch. Referrers see this breakdown when they review a request and decide whether to refer.
The score is not decoration. A profile that surfaces a specific fit breakdown is harder to dismiss than a cold message. The referrer does not have to judge the applicant's self-assessment. Email notifications close the loop on acceptance and rejection.
No state management framework. The app uses SharedPreferences for local persistence and Supabase for everything backend-related. An operational flag in the database controls whether matching runs: a one-row database update, no deployment.
2,200+ installs. #1 Product of the Week on Peerlist.
What I Learned
- Cold-start in two-sided marketplaces requires a manual escape hatchWithout referrers, job seekers have no value. Without job seekers, referrers have no reason to list themselves. The operational flag let us pause automated matching and handle the first cohort manually, controlling the experience until both sides had enough participants to sustain the loop organically.
- AI scoring changed referrer behavior more than applicant behaviorThe initial hypothesis was that the fit score would help job seekers improve their applications. What actually happened: the score changed how referrers made decisions. A 9/10 with four specific insights reduces the cognitive effort of evaluating an application to near zero. A referrer who does not have to judge is more likely to act.
- Firecrawl's two-stage fallback is not optionalAbout 10-15% of job posting URLs are behind Cloudflare challenge pages or JavaScript-rendered single-page apps that the standard /scrape endpoint cannot handle. Without the /extract fallback, those applications fail silently. The user gets no error, the JD just does not parse. The fallback is the difference between a 90% and a 100% success rate on scraping.
- SharedPreferences is enough when the backend is authoritativeState management frameworks add real complexity: reactive streams, provider trees, notifiers. If Supabase is the source of truth and the local state is auth tokens and user preferences, SharedPreferences is sufficient and the code stays readable. Reach for a framework when your local state has genuine reactivity requirements.