Inspiration

A job seeker in Lagos, Lima, or Lyon shouldn't have to wade through fifteen tabs and three scammy aggregators to find a real opportunity in their own city. Existing job platforms either drown users in irrelevant listings, geo-gate opportunities behind a US/UK bias, or hide everything behind a paywall before the first search.

I built Tunzafy to flip that — an AI-first career copilot that answers a plain-language prompt like "Find a remote backend job in São Paulo" with a small, ranked, honest set of real, fresh openings, free, with no signup required for the first searches.

What it does

  • TunzAI conversational search. Users type or speak a natural prompt in any of 30+ languages. Gemini parses intent (role, location, modality, KYC signals like work-permit needs) into a structured query.
  • Hierarchical location resolution. A custom resolver maps cities -> regions -> countries -> sub-continents, with a 150-entry sub-national map (US states, CA provinces, DE Länder, BR estados, JP prefectures, KE counties, …). When a user says "Oregon" I lock to the US; when they say "Bavaria" I lock to Germany — no cross-country contamination.
  • Live multi-source waterfall. Verified employer feeds -> government job portals (USAJOBS, EU Careers, gov.uk, Bundesagentur, …) -> curated aggregators. Daily Cloud Run Jobs ingest fresh listings for 150+ countries.
  • Honesty guard. If I cannot confidently match the user's location, the response is explicitly flagged as a fuzzy fallback ("similar roles you might like") instead of pretending unrelated jobs match. The user's request is my priority — never the feed volume.
  • Skill-gap Mentor's Tip. Gemini compares the top results to the user's prompt and suggests one concrete skill to close the gap.
  • Free tier + PWA. Anonymous daily quota, installable web app, multi-region uptime.

Challenges I ran into

  • Cross-country contamination. A user asked for "a job in Oregon" and got German listings because my country resolver only understood ISO codes, not full state names. I shipped a universal sub-national region map (150 entries across 20+ countries) plus an explicit honesty guard so the system never silently widens an unresolved location into a global search.
  • Latency vs. honesty. Calling Gemini twice (intent + rerank) plus five external feeds was slow. I parallelised Gemini calls, cached intent extractions, and pre-warmed Cloud Run min-instances in both regions.
  • Security on a public AI endpoint. Anonymous quota is abuse bait. I layered Cloud Armor (rate-based ban, preconfigured WAF rules, geo-allow for operators), per-IP daily quotas in Postgres, and a default-deny on every route.
  • Real-data coverage outside the US/EU. Most "global" job APIs are 90% US. I wrote 30+ country-specific ingestion probes (scripts/probe_*) to discover the actual primary source per country before adding it to the waterfall.

Accomplishments I'm proud of

  • 70+ countries with locally-ingested feeds, including 25+ African countries that are typically invisible on major boards.
  • Two-region production deployment with SLO-backed uptime checks.
  • A free anonymous tier that returns real jobs in under 6 seconds.
  • The honesty guard. Choosing to say "no exact match — here are similar roles" instead of returning misleading results is a product decision I'm proud of.

What I learned

  • Conversational UX falls apart the moment the model lies. Surfacing uncertainty (fuzzyFallback: true) earned more user trust than a prettier loading state ever did.
  • Gemini is at its best when you ask it to do one structured thing per call (intent -> JSON, results -> reranked array, top-jobs -> tip) instead of one mega-prompt.
  • Global = sub-national. You cannot serve a planet by recognising only country codes.

What's next for Tunzafy

  • Expand the sub-national map to every country I ingest.
  • Authenticated career graph: track applications, resume-to-role embedding match, weekly Gemini-curated digest.
  • Mobile app (artifacts/tunzafy-mobile, Expo) — already scaffolded.
  • Recruiter side: verified employer accounts post directly into the waterfall's top tier.
  • Open up the country-feed catalogue so other civic-tech projects can reuse it.

The Agent

The heart of the product is a Gemini model fine-tuned with Supervised Fine-Tuning on Vertex AI, trained on a proprietary 21,000-example dataset I authored in Gemini's native systemInstruction/contents schema. That dataset doesn't just teach answers — it encodes TunzAI's persona, its tier logic (Guest, Free, Pro), its 31-language behavior, and hard safety rules: never reveal the underlying model, always surface fresh roles, and route mental-health crises straight to real helplines instead of improvising. The result is an agent that stays in character and on-policy across every language and edge case, because the behavior is baked into the weights rather than bolted on with prompt scaffolding.

Built With

Share this project:

Updates