WillSponsor.me
A serverless application built end-to-end to solve a critical pain point for international students seeking H-1B sponsorship information.
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.
The main dashboard — search across 200,000+ companies in milliseconds
Key Features
- Real-time search across 200,000+ companies
- Historical sponsorship data with trend analysis
- Saved searches and email alerts
- Community verification layer
Technical Architecture
The application is built on a fully serverless stack:
Edge-first architecture: Cloudflare Workers + D1 + KV for global sub-50ms responses
- Edge compute: Cloudflare Workers for sub-50ms global response times
- Data layer: Cloudflare D1 (SQLite at the edge) + KV for caching
- Search: Custom full-text search built on Workers
- Frontend: Static-first with progressive enhancement
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:
| Stage | Tool | Frequency |
|---|---|---|
| Ingestion | Cloudflare Worker (cron) | Weekly |
| Parsing | Custom CSV/JSON parser | Per ingestion |
| Validation | Zod schemas | Per record |
| Storage | D1 batch insert | Per batch |
| Cache invalidation | KV purge | Post-insert |
Results
After launch, the platform achieved:
- 10,000+ users in the first month
- Sub-50ms response times globally
- $0 infrastructure cost (Cloudflare free tier)
- 4.8/5 average user rating
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:
- Serverless-first architecture dramatically reduces operational overhead
- Edge computing makes geographic distribution trivial
- MVP scope discipline is crucial — ship fast, iterate faster
- Still exploring: ML-based company recommendation engine
- Planned: Integration with job board APIs
The Stack
Originally considered AWS Lambda— switched to Cloudflare Workers for better cold start performance- Frontend: Vanilla HTML/CSS/JS (no framework overhead)
- Backend: Cloudflare Workers + D1 + KV
- CI/CD: GitHub Actions + Wrangler
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