Inspiration

The internet is full of opportunities — hackathons, fellowships, scholarships, grants, competitions, and internships. But access to those opportunities isn't equal.

Students with mentors, strong networks, or lots of time to search already have an advantage. They know which websites to check, what programs exist, and where to look next. For everyone else, opportunities are scattered across hundreds of websites, buried in long pages, and often have completely different eligibility requirements.

We looked at platforms like Jobright, Scholly, and Devpost, but each focuses on one category. You have to know where to look before you can even start searching.

We wanted to solve a different problem: what if you didn't need to know where to look?

ScoutDeck is built around the idea that finding opportunities should be about your potential and goals — not how good you are at searching the internet.

Instead of giving users another directory to scroll through, ScoutDeck acts like a personalized opportunity scout: it learns about you, searches the live web, evaluates what it finds, and gives you a small list of opportunities that are actually worth your time.


What it does

ScoutDeck starts with a short profile covering your skills, education, interests, location, remote preferences, and the types of opportunities you're looking for.

It then:

  1. Searches the live web for relevant opportunities rather than relying only on a static database.
  2. Scrapes and cleans the pages it discovers to extract useful information from messy web content.
  3. Uses AI to structure the information, identifying eligibility, skills, deadlines, location, stipends, and other important details.
  4. Compares candidates against the user's profile and ranks them based on overall fit.
  5. Streams the scouting process live, so users can see the system searching, processing, and evaluating opportunities.
  6. Returns a focused shortlist of up to 5 opportunities, each with a match score and a specific explanation of why it fits the user's profile.

We deliberately don't pad the results. If only three opportunities are genuinely strong matches, ScoutDeck shows three.

If live search doesn't produce enough strong candidates, the system can use a small pre-vetted backup pool so users aren't left with an empty experience.

The goal isn't to help users find more opportunities.

It's to help them find the right opportunities they might otherwise never have discovered.


Social Impact

ScoutDeck addresses an information-access problem that disproportionately affects students and early-career people who don't already have strong professional networks.

A well-connected student might hear about a fellowship from a professor, discover a competition through a friend, or have someone point them toward an opportunity that fits their background.

Another student with the same ability may never encounter that opportunity simply because they didn't know it existed.

ScoutDeck can't remove every barrier to opportunity, but it can reduce one important one: knowing where to look.

By combining a user's own background with live web search and AI-powered matching, ScoutDeck attempts to make opportunity discovery more accessible to people who don't have a personal network doing that research for them.

We also intentionally prioritize explainability over black-box recommendations. Instead of simply saying "87% match," ScoutDeck explains the concrete reasons an opportunity was selected — connecting the recommendation back to the user's skills, interests, education, or constraints.

That makes the system more useful for students who are still learning how to evaluate opportunities for themselves.


How we built it

Stack: Next.js + TypeScript, Supabase/Postgres, Tavily, Firecrawl, and multiple LLM providers.

The core pipeline is:

User Profile
    ↓
Search Query Generation
    ↓
Tavily — Live Web Search
    ↓
Firecrawl — Page Extraction
    ↓
AI — Structured Opportunity Extraction
    ↓
AI — Comparative Ranking
    ↓
Server-Sent Events — Live Progress
    ↓
Supabase — Persistence

A major design decision was treating AI output as untrusted input. Every structured response from the models is validated with Zod before it enters the application.

The AI layer also uses a fallback chain rather than depending on a single provider. Groq handles the primary extraction and ranking workloads, with Gemini and OpenRouter available as fallbacks when a provider becomes unavailable or rate-limited.

The system was designed around real-world constraints rather than assuming APIs would always respond perfectly.


Challenges

Building a live multi-stage AI pipeline introduced problems that weren't obvious during initial development.

One of the biggest was a silent candidate-matching bug. The ranking model was originally expected to return the exact source URL used as each candidate's identifier. Small changes to the URL meant valid results could silently disappear. We solved this by replacing complex URLs with short opaque candidate IDs and resolving them back to the original data internally.

We also initially sent scraping and AI requests too aggressively. This quickly ran into provider rate limits. We added concurrency control and request pacing so the pipeline could work within real API constraints instead of assuming unlimited throughput.

Another challenge was production reliability. A pipeline that worked locally could take long enough to hit serverless execution limits in production. We had to measure each stage, identify where time was being spent, and redesign parts of the process around the actual runtime constraints.

These problems taught us that a multi-stage AI application isn't just about getting an LLM to produce an answer. Reliability, validation, observability, rate limits, and failure handling are part of the product.


Accomplishments

  • Built a working personalized opportunity discovery system using live web search rather than a static opportunity database.
  • Created an AI pipeline capable of turning inconsistent opportunity pages into structured, comparable data.
  • Added multiple AI providers and fallbacks so a single provider failure doesn't necessarily stop the scouting process.
  • Implemented structured validation for both user input and AI-generated data.
  • Built live progress streaming so users can see the scouting process rather than waiting behind a generic loading screen.
  • Designed the system to return fewer results rather than padding recommendations with poor matches.
  • Created a visual identity around the idea of an opportunity atlas, rather than another generic SaaS dashboard.

What we learned

The biggest lesson was that AI doesn't remove engineering complexity — it changes where the complexity lives.

Once an application depends on live search, scraping, multiple APIs, and LLM-generated structured data, failures can happen at every stage.

We learned to treat observability and validation as first-class parts of an AI product, and to design around failure rather than assuming every external service will behave perfectly.

We also became more conscious of the difference between finding information and making information accessible. The web already contains thousands of opportunities. The harder problem is helping the right person discover the right one at the right time.


What's next

We want ScoutDeck to become more than an opportunity discovery tool.

Next, we plan to add:

  • Application tracking and deadline reminders so users don't lose opportunities after discovering them.
  • Personalized gap analysis showing what skills or experiences could make a user more competitive for a specific opportunity.
  • Preparation roadmaps for saved opportunities.
  • Crowdsourced opportunity submissions so users can surface opportunities that automated search misses.
  • Better explanations that don't just explain why an opportunity matches, but why it may be a stronger choice than similar opportunities.

Our long-term goal is simple:

Make opportunity discovery less dependent on who you know, what websites you already know about, or how many hours you can spend searching.

Built With

  • gemini-api
  • groq
  • nextjs
  • openrouter
  • supabase
  • tailwindcss
Share this project:

Updates

Submission history