JONA
A multi-tenant job-aggregation platform — nine production scrapers, AI skill matching against a user's resume, and Stripe-billed organization tiers.

Job hunting is a multi-tab, multi-hour treadmill.
Job seekers cycle through Indeed, Dice, Monster, ZipRecruiter, CareerBuilder, TekSystems, SnagAJob, and Glassdoor — manually filtering, copying, tracking. Recruiting agencies and bootcamps that want to centralize that for a cohort have nothing off-the-shelf that matches roles to a specific resume.
Aggregate, normalize, match, bill.
JONA scrapes nine boards on a schedule, normalizes the postings, parses uploaded resumes, and uses a sentence-transformer-based skill matcher to surface the best fits. Multi-tenant from day one — orgs invite members, admins see scraper telemetry, billing flows through Stripe with plan-based feature gates.
The architecture is three-tier: a Next.js 14 App Router frontend acts as a thin BFF, a FastAPI backend owns scrapers and matching, and Supabase Postgres holds the data with RLS scoping every query to the calling org.
End-to-end as primary maintainer.
- Nine production web scrapers using Playwright and Selenium with undetected-chromedriver to handle anti-bot pressure.
- Custom Windows asyncio runner that solves Playwright's incompatibility with uvicorn's reloader by setting WindowsProactorEventLoopPolicy before boot and using watchdog-based dev restart.
- AI skill-matching engine — sentence-transformers, OpenAI, Anthropic, and AWS Bedrock — with PDF/DOCX resume parsing and embedding-based search.
- Migrated authentication from the deprecated @supabase/auth-helpers-nextjs to @supabase/ssr with proper Server Component cookie handling.
- Stripe subscription billing with plan-based feature gating, admin dashboard with scraper-tab control, and live scraper telemetry over WebSockets.
- Authored the 1,300+ line README documenting architecture, the Playwright/Windows debugging story, and the Supabase SSR migration.
What it's built on.
A real customer-facing SaaS, not a prototype.
JONA serves organization-scoped job boards with Stripe-billed subscription tiers and Supabase RLS isolating tenant data. The PR-driven workflow covers subscription pricing, settings tabs, dark mode, admin dashboard typing — i.e., the boring billing and admin polish that makes a SaaS actually shippable.