Inspiration:
Job boards look trustworthy, but the harm is real: bait-and-switch titles, opaque or invented compensation, stale listings, suspicious URLs, and postings that read well in a card until you open the actual careers page. People stake months of interviewing—and years of a career—on text that might be wrong, outdated, or worse. We wanted a demo that doesn’t cosplay intelligence with static rows and third-party summaries, but grounds the UI in what the employer’s site says right now, with visible evidence. That’s why TinyFish matters: the web is the source of truth, not our database alone.
What it does:
Meridian is an ethical AI job board monitor: you set field, level, minimum salary, and context; the backend picks a curated real posting (public careers URLs—e.g. Greenhouse-style boards), runs the TinyFish Web Agent against it, and streams a live console (and preview when available) so judges and users can watch the run. On success, the same source_url row in SQLite is refreshed with extracted structure—so the board updates from live web work, not a hidden batch job. Optionally, JigsawStack batch-checks other rows for basic URL/title plausibility (triage, not legal verdict). The product story is narrow but sharp: see a little more clearly before you commit your life—especially when listings are misleading or sketchy.
How we built it:
TinyFish at the center: criteria → resolved URL → agent run → streamed events → structured ingest → DB update (the README’s core loop). Backend: FastAPI, SQLAlchemy, SQLite (data/jobs.db), criteria resolution with tiered relaxation so real rows still match when filters are strict. Frontend: Vite + React + TypeScript, Tailwind CSS v4, Framer Motion—including a full-width live agent console and command center UX. Optional verification: JigsawStack Prompt Engine for conservative batch sanity scores on title/company/URL shape after a successful TinyFish completion. Hackathon polish: landing TinyFish section, /presentation deck, CI (Ruff, pytest, web build/test).
Challenges we ran into:
Moving targets: career sites change layout and flow; brittle scrapers rot. We leaned on browser agents so “what does this role say today?” stays a live question. Trust without theater: it’s easy to ship a pretty board of stale or inferred data. We had to keep the API loop honest: streaming, allowlisting, rate limits, and no fake “AI magic” off the critical path. Demo reality: preview/embed quirks, matching criteria → one real URL, and keeping TinyFish credentials server-side while the UI still feels immediate.
Accomplishments that we're proud of:
A judge-visible pipeline: TinyFish isn’t marketing—it’s the mechanism that refreshes listings. Show-your-work UX: live console + evidence instead of a black box that mutates rows overnight. A coherent ethics frame: we’re explicit that this is a demo, not a law firm—while still pushing back on unethical job-market noise (opacity, exploitation dressed as opportunity, misleading postings). End-to-end MVP: real public URLs, streamed runs, DB updates, optional batch plausibility pass, plus a presentation path for a tight live demo.
What we learned:
Everything that bites when you mean “live web” seriously: streaming and UX patience, host allowlists and safety defaults, the gap between LLM triage and legal/compliance reality, and the difference between a board that quotes the web and one that summarizes the web from memory. Most of all: if you care about unethical listings, the product has to prove where its claims come from—and TinyFish is how we tried to do that.
What's next for Meridian?
Success for us is shipping this idea past the hackathon: Postgres for real deploys, stricter source policies and legal review before any scaled automation, richer transparency signals (compensation clarity, red-flag patterns), deeper TinyFish flows (e.g. hub discovery where appropriate), and hardening rate limiting, CORS, and observability so the ethical story is backed by operational discipline—not just a slide.
Built With
- brain
- love
- tinyfish
Log in or sign up for Devpost to join the conversation.