EU public procurement intelligence. Discover, track, and analyze government tenders — automatically.
Discovers — Aggregates tenders from TED, Tenders.Guru, and national procurement databases. Runs on schedule via Celery Beat.
Matches — Scores each tender against your preferences. Surface the opportunities that matter.
Alerts — Email notifications the moment a relevant tender appears. Via SendGrid.
Analyzes — AI-generated intelligence digests. Understand the competitive landscape.
Bills — Stripe-integrated subscription tiers — Solo, Growth, Scale.
| API | FastAPI · async · Python 3.11+ |
| Database | PostgreSQL 16 · SQLAlchemy · Alembic |
| Workers | Celery · Redis · Beat scheduler |
| Auth | JWT · Passlib · bcrypt |
| Payments | Stripe |
| SendGrid | |
| Reports | WeasyPrint PDF generation |
| Framework | Next.js 16 |
| Styling | Tailwind CSS 4 |
| Language | TypeScript |
| Orchestration | Docker Compose |
| Broker & Cache | Redis 7 |
| Database | PostgreSQL 16 |
git clone https://github.com/Kumar-Gaurav-1/tenderhunter.git
cd tenderhunter
cp backend/.env.example backend/.env # Configure your keys
docker-compose up --build| Service | URL |
|---|---|
| Frontend | localhost:3000 |
| API | localhost:8000 |
| API Docs | localhost:8000/docs |
All configuration lives in backend/.env.example. Key variables:
| Variable | Purpose | Required |
|---|---|---|
SECRET_KEY |
JWT signing | Yes |
DATABASE_URL |
PostgreSQL connection | Auto (Docker) |
REDIS_URL |
Cache and broker | Auto (Docker) |
SENDGRID_API_KEY |
Email alerts | Optional |
STRIPE_SECRET_KEY |
Billing | Optional |
See backend/.env.example for the complete list including tender APIs, translation services, and currency providers.
tenderhunter/
├── backend/
│ └── app/
│ ├── api/v1/ REST endpoints — tenders, users, billing, intelligence
│ ├── connectors/ External API integrations — TED, Tenders.Guru
│ ├── models/ SQLAlchemy ORM
│ ├── schemas/ Pydantic validation
│ ├── services/ Business logic — matching, translation, currency, email
│ ├── tasks/ Celery — ingestion, scoring, digests, cleanup
│ ├── main.py FastAPI entry point
│ └── config.py Settings via pydantic-settings
├── frontend/
│ └── src/app/ Next.js App Router — auth, dashboard, billing, onboarding
├── docker-compose.yml Five services: API, worker, scheduler, Postgres, Redis
└── LICENSE
# Backend only
cd backend && python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]" && uvicorn app.main:app --reload
# Frontend only
cd frontend && npm install && npm run dev
# Tests
cd backend && pytest- Tender data availability depends on free-tier EU procurement APIs
- PDF generation requires system dependencies — handled in Docker
- Stripe uses test keys by default
MIT License