A procurement opportunity aggregator that pulls open solicitations from 50+ government and public agency portals powered by Bonfire Hub. Search, filter, sort, and export opportunities across federal, state, county, city, university, healthcare, transit, and utility agencies.
- Multi-Agency Aggregation - Fetches open opportunities from 50+ agencies in a single view
- Search & Filter - Search by project name, reference ID, or description; filter by days until close, category, or agency
- Sorting - Sort by close date, open date, agency name, or department
- Export - Download results as CSV or JSON
- Agency Categories - Federal, State, County, City, University, Healthcare, Transit, Utility, Regional, International
- Edge Caching - KV-backed 5-minute cache per agency for fast repeat loads
- Dark Mode - System-aware with manual toggle
- Responsive - Mobile and desktop layouts
- Framework: React Router v7 with SSR
- Runtime: Cloudflare Workers (edge compute)
- Database: Cloudflare D1 (SQLite)
- Cache: Cloudflare KV
- UI: Tailwind CSS v4 + shadcn/ui
- Language: TypeScript 5.7 (strict mode)
- Package Manager: Bun
- Linting: Biome
- Testing: Vitest
- Bun 1.0+
- A Cloudflare account (for D1 and KV)
bun installwrangler d1 migrations apply bonfire-cachebun run devOpen http://localhost:5173.
bun run build
bun run deployapp/
routes/
home.tsx # Main opportunities browser
components/
navbar.tsx # Navigation with dark mode toggle
agency-selector.tsx # Grouped agency dropdown
search-filters.tsx # Search, filter, sort controls
project-card.tsx # Opportunity card
pagination-controls.tsx
ui/ # shadcn/ui primitives
config/
agencies.ts # 50+ agency configurations
lib/
api-client.ts # Bonfire Hub API client with KV caching
project-utils.ts # Filtering and sorting logic
date-utils.ts # Date formatting
export-utils.ts # CSV/JSON export
types.ts # TypeScript interfaces
workers/
app.ts # Cloudflare Workers entry point
migrations/
0001_cache_schema.sql # D1 schema
MIT