TinyFish bounty · Job portal

Openings: build progress

A student job radar. Search discovers postings, Fetch reads them, Agent handles the portals Fetch can't. This page tracks the build and lets you run the pipeline against live data.

6/7 phases

Phases

  1. 0 Scaffold + spike

    Done

    Prove Search, Fetch and Agent work on real job data before building anything.

    • Next.js app + TinyFish SDK
    • Search finds postings on Greenhouse / Lever / Ashby / Workday
    • Fetch reads posting pages in batches of 10
    • Agent searches a Workday portal and returns JSON
    • npm run spike script
  2. 1 Pipeline: structured jobs

    Done

    Turn raw pages into clean Job records and read whole company boards.

    • Job schema (zod)
    • Rule-based extraction: location, remote, pay, visa, term, grad year (tested)
    • Watchlist boards: Greenhouse feed + Lever board via Fetch
    • Fair read budget: boards ≤ half, round-robin per company
    • LLM extraction via AI Gateway (openai/gpt-4.1-mini, free-tier OK)
  3. 2 Agent escalation

    Done

    Send JS-app portals (Workday, Ashby boards) to Agent, with a budget.

    • Search finds a company's Ashby/Workday portal (free)
    • Agent searches that portal and lists postings
    • Pages Fetch can't render (<600 chars) are read by Agent
    • Per-run budget, 2 in flight, 150s timeout, live-view URL captured
    • LLM extraction batched 5 per call (free tier: 5 req/min)
    • Firecrawl fallback: search + render before Agent; survives a TinyFish outage
  4. 3 Dedupe + rank

    Done

    One entry per job, filtered and ranked with a 'why it matched'.

    • Dedupe by URL, then company + title + location + term (keeps the fullest copy)
    • Skip before reading: clearly-senior titles, board postings in other locations
    • Hard filters with reasons: level, location (aliases), visa refusals, grad year
    • 0–100 score with 'why it matched' chips; keywords, grad year, visa, watchlist
  5. 4 The real app

    Done

    A proper product: landing page with hero, onboarding for preferences, and a jobs dashboard.

    • Landing page: radar-sweep hero, how it works, posting specimen, light + dark
    • 4-step onboarding saved in this browser (no account)
    • Streaming /api/run: stage-by-stage progress as NDJSON
    • Jobs dashboard: live run timeline, Agent's live browser, filters, ranked cards
    • Checked at 375px, light + dark, small-text contrast ≥4.5:1
  6. 5 Freshness

    Done

    Cache, last-refreshed, and 'new since your last visit'.

    • Browser remembers when it first saw each job (capped at 1,000)
    • 'New' badges, '+N new' on the tab, 'New since last scan' tile, New-only filter
    • Nudge to rescan when results are over a day old
    • Posting cache cut from 6h to 1h; searches are always live
  7. 6 Submission

    In progress

    README with endpoint usage, demo video, deploy.

    • Cost guard: rate limit, deep-search passcode, dev endpoint off in prod
    • README: how Search / Fetch / Agent are used + requirement mapping
    • Deployed: job-portal-career-finders.vercel.app (LLM via Gateway OIDC)
    • Demo video (shot list in docs/DEMO.md)

Run the pipeline

Live Search + board reads → Fetch → extraction, with Firecrawl as the fallback when TinyFish comes back empty. Agent is off unless you give it a budget (it's metered).

The pipeline runner is a local dev tool. On the live site, use My radar.