← Back to projects

WillSponsor.me

A serverless application built end-to-end to solve a critical pain point for international students seeking H-1B sponsorship information.

ServerlessCloudflare WorkersAIProductFull-Stack

The Problem

International students in the U.S. face a critical information gap when searching for jobs. The question “Does this company sponsor H-1B visas?” has no single, reliable answer. Students spend countless hours digging through forums, outdated spreadsheets, and conflicting information.

“I spent 3 weeks researching companies before even starting to apply. Most of the data I found was years old.” — Anonymous MBA student, UT Austin

The Solution

WillSponsor.me aggregates and surfaces sponsorship data from multiple official sources, making it instantly searchable. Built as a serverless application on Cloudflare Workers for global edge delivery.

WillSponsor.me dashboard showing search results The main dashboard — search across 200,000+ companies in milliseconds

Key Features

  1. Real-time search across 200,000+ companies
  2. Historical sponsorship data with trend analysis
  3. Saved searches and email alerts
  4. Community verification layer

Technical Architecture

The application is built on a fully serverless stack:

System architecture diagram Edge-first architecture: Cloudflare Workers + D1 + KV for global sub-50ms responses

Code Example

Here’s how the edge search function works:

export async function handleSearch(
  request: Request,
  env: Env
): Promise<Response> {
  const url = new URL(request.url);
  const query = url.searchParams.get('q') ?? '';

  // Check KV cache first
  const cacheKey = `search:${query.toLowerCase().trim()}`;
  const cached = await env.CACHE.get(cacheKey, 'json');

  if (cached) {
    return Response.json(cached, {
      headers: { 'X-Cache': 'HIT' },
    });
  }

  // Query D1 with full-text search
  const results = await env.DB.prepare(`
    SELECT company_name, city, state, visa_class,
           approval_count, denial_count
    FROM sponsorship_data
    WHERE company_name LIKE ?
    ORDER BY approval_count DESC
    LIMIT 50
  `).bind(`%${query}%`).all();

  // Cache for 1 hour
  await env.CACHE.put(cacheKey, JSON.stringify(results), {
    expirationTtl: 3600,
  });

  return Response.json(results);
}

Data Pipeline

The data pipeline runs on a scheduled Worker:

StageToolFrequency
IngestionCloudflare Worker (cron)Weekly
ParsingCustom CSV/JSON parserPer ingestion
ValidationZod schemasPer record
StorageD1 batch insertPer batch
Cache invalidationKV purgePost-insert

Results

After launch, the platform achieved:

What Users Say

WillSponsor.me saved me dozens of hours. I found three companies I didn’t know sponsored in my field within minutes.


Lessons Learned

Building this project taught me several things:

The Stack

A Note on Ethics

All data used is from publicly available government sources. No scraping of private platforms. User privacy is paramount — no tracking, no ads, no data selling.


Built with care at UT Austin. View on GitHub | Live Demo

Hungry for more?

Take a look at some of my other projects.