Inspiration

Remote job boards promise freedom and flexibility, but finding a high quality, legitimate remote role is harder than it looks. Listings can be misleading, pay is often unclear, and a title that says "remote" does not always mean fully remote work. We kept coming back to the same question for this hackathon theme: how do we actually identify genuine, high quality remote opportunities? The first instinct is to just ask a chatbot to find good jobs for you, but that rarely works. Job seekers deserve more than an AI best guess. They deserve evidence, concrete scores, and verified outcomes. That is why we built Wadjet. It is a tool focused on surfacing verified roles rather than just adding to the noise. It features a dedicated job board completely vetted for quality, alongside a browser extension that integrates directly with popular job boards like LinkedIn to identify genuinely high quality jobs for you. The name and icon are inspired by the game Assassin's Creed Origins. In the game, the Wadjet icon appears whenever you need to investigate a complex puzzle. I realized that is exactly what we are doing with this project: investigating the messy puzzle of the modern job market to uncover truly high quality remote work.

What it does

Wadjet identifies high-quality, legitimate remote job opportunities by investigating each listing with AI to return clear, evidence-based scores rather than a single chatbot opinion. When a user pastes a job URL or investigates directly from LinkedIn via the Chrome extension, Wadjet ingests the listing and extracts key facts like the title, company, salary, requirements, and contact details. It then deploys six specialist agents to evaluate different aspects of the role: Linguistic Forensics analyzes wording and remote culture signals; Company Intelligence verifies the employer through grounded web searches; Opportunity Value checks pay, transparency, and genuine remote status; Digital Footprint inspects employer domains and WHOIS data; Pattern Analysis detects known fraud templates; and Recruiter Activity evaluates hiring quality by checking ATS presence, posting freshness, and application channel professionalism. After the analysis is complete, the system combines these findings into two distinct metrics: a Legitimacy score, which measures if the job is real and safe to apply to, and a Remote Quality score, which determines if it is a strong opportunity worth pursuing. Users are provided with a live investigation dashboard, a detailed calculation ledger showing exactly how each score was computed, and a Verified Remote Roles portal containing only jobs that pass strict thresholds. Seamlessly integrating with LinkedIn, the extension displays these scores directly on top of evaluated job postings. Furthermore, Wadjet offers APIs that can be called by other applications to assess and ensure the quality of their own internal job banks.

How we built it

We built Wadjet as a full-stack agentic application using LangGraph to orchestrate the investigation pipeline, Google Gemini for structured and grounded LLM calls, and TypeScript rubrics to convert agent outputs into deterministic scores. The backend is an Express server that streams investigation progress to the React frontend through Server-Sent Events, while better-sqlite3 stores investigation results, cached LLM responses, and verified jobs in a SQLite database. The orchestration graph begins with scraping or extension-supplied DOM text, passes through a Gatekeeper extraction node, and launches the six core agents in parallel. It optionally triggers an Adversarial Challenge node when results are ambiguous, ultimately finishing with Scorer and Report nodes that produce the final verdict, guardrails, and a narrative summary. To maintain and troubleshoot this complex pipeline, we utilized LangGraph Studio, which provides a dedicated visual interface to easily trace execution and debug issues. On the client side, the frontend features an investigation board complete with live agent cards, score rings, a radar chart, a job info card, and a calculation ledger to ensure every point in the scoring process remains entirely visible to the user. We also built a Chrome extension that reads LinkedIn job metadata, pre-caches page content to the server, and opens the dashboard for investigation, alongside a Partner Portal API that lets external job platforms check whether Wadjet has already verified a listing. For deployment, we packaged the frontend and backend together on Render, seeded the production environment with a demo SQLite cache of verified jobs, and implemented a cache-only mode. This ensures the public demo can serve real, verified outcomes without running new investigations on every visit, effectively working around the Gemini API's free-tier limits.

Challenges we ran into

Our biggest challenge was working within the constraints of the Gemini free tier. Each investigation triggers multiple LLM calls across six agents, and some agents also use grounded web search, which adds even more API usage. Running agents in parallel made the pipeline fast, but it also hit rate limits quickly and consumed a large share of the daily quota during development. We mitigated this by building a mock mode that serves cached investigation results instead of calling Gemini on every run. This let us iterate on the frontend, scoring logic, portal, and extension without burning through the daily API limit. We also added SQLite caching for LLM responses and full investigations, so repeated runs of the same job URL reuse prior results. For production demo deployment, we moved to a cache only mode that serves pre verified jobs from a seeded database, which keeps the public app usable without needing live Gemini calls for every visitor. Another major challenge was deciding how to produce scores users could actually trust. A single model answer felt too subjective for something as important as job quality and legitimacy(Hallucinations). We solved this by separating evidence extraction from scoring: agents return structured flags, and TypeScript rubrics compute the numbers with fixed weights and guardrails. This took more engineering effort, but it made the Calculation Ledger possible and kept results consistent across runs. We also struggled to balance forensic depth with a clean user experience. The investigation pipeline is complex, but judges and users needed to understand the outcome quickly. That pushed us to design the dashboard around two clear scores, live agent progress, and a verified job portal that shows the final deliverable: a list of high quality remote roles, not just an impressive backend process.

Accomplishments that we're proud of

We delivered a complete product across the full stack, not just a backend experiment. Wadjet includes a React dashboard with live streaming investigations, a Chrome extension for LinkedIn, a Partner Portal API, SQLite caching, and a deployed public app on Render. Most importantly, it produces a real outcome aligned with the hackathon theme: a Verified Remote Roles portal of high quality, legitimate remote jobs that users can browse and apply to with confidence. We are also proud of how we worked through real constraints without lowering the quality of the product. Gemini free tier limits and rate limiting from parallel agent calls made development difficult, so we built mock mode, investigation caching, and production cache serving to keep iterating while preserving a usable demo. That let us focus on verified results and practical value instead of stopping at a prototype that only worked in ideal conditions. We built Wadjet as a real multi agent investigation system, not a simple chatbot wrapper, and along the way we learned LangGraph to orchestrate the full pipeline from ingestion through scoring and reporting. Six specialist agents analyze each remote job from different angles, an optional adversarial review handles ambiguous cases, and deterministic scoring with guardrails produces two clear outcomes: Legitimacy and Remote Quality. Most job tools hide their reasoning; Wadjet shows live agent progress, detailed agent findings, and a full Calculation Ledger explaining how Legitimacy and Remote Quality were computed, so users can see the math behind the verdict instead of trusting a black box.

What we learned

Building Wadjet taught us a lot about turning AI into a tool people can actually trust. We learned LangGraph and how to run multiple agents in the right order, with each one focused on a single task instead of asking one model to do everything. We learned a lot about working with real job listings from sites like LinkedIn and other popular job boards, which often use scrape prevention and do not always expose the full job details in an easy way to fetch. That pushed us to use the Chrome extension to capture page content directly, pre cache DOM text, and combine it with structured extraction instead of relying only on external scraping. To reduce hallucinations, we kept agents focused on narrow tasks, used structured outputs with validation, grounded company search with real web results, injected WHOIS data in code so the model could not invent domain age, and let code compute the final scores from fixed rules rather than letting the model guess a number. To reduce context size without losing accuracy, we added a Gatekeeper step that compresses long job posts into structured facts before the agents run, capped raw input size, and passed only the most relevant extracted fields downstream. Finally, we learned how to work within Gemini free tier limits and rate limits using mock mode and caching.

What's next for wadjet

The next step for Wadjet is to make it broader, smarter, and easier for other platforms to integrate. The Chrome extension currently supports LinkedIn only, and that needs to be expanded to other popular job sites like Indeed, Glassdoor, and company career pages so users can verify listings wherever they browse. On the AI side, we want to move toward stronger reasoning models instead of relying mainly on Gemini flash style models, which should improve judgment on ambiguous listings while keeping the same transparent scoring layer on top. We also plan to expand the Partner Portal API, since it is still basic and does not yet follow common industry standards for job board integrations such as richer verification payloads, batch lookup, webhooks, standardized status fields, and clearer authentication and rate limit conventions

Built With

Share this project:

Updates