Argus is a GovTech intelligence platform that helps startups surface government opportunities before they hit the RFP stage. A user describes their startup, the backend collects live signals with caching and fallback, and the UI ranks the best matches on a globe with clear, actionable details.
- Startup → signal matching (semantic + keyword hybrid, with keyword‑only fallback).
- Live signal collection on
/matchwith cache + file fallback. - Futuristic HUD UI with globe pins and detail panels.
- Persistent pins between searches (localStorage).
- Firebase email/password auth (optional).
- Scraping pipeline feeds live signals at runtime.
- Frontend: Next.js (App Router), React, Tailwind CSS, Three.js, Framer Motion
- Backend: FastAPI, Uvicorn, Gemini API (embeddings + generation), scikit‑learn
- Auth: Firebase
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8000cd frontend
npm install
npm run devOpen http://localhost:3000.
Create a root .env from .env.example:
GOOGLE_API_KEY=...
The backend loads this with find_dotenv().
Next.js only auto‑loads env files from the frontend app directory. Create frontend/.env with:
NEXT_PUBLIC_API_URL=http://127.0.0.1:8000
If you use Firebase Auth, add:
NEXT_PUBLIC_FIREBASE_API_KEY=...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=...
NEXT_PUBLIC_FIREBASE_PROJECT_ID=...
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=...
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=...
NEXT_PUBLIC_FIREBASE_APP_ID=...
GET /health→{status: "ok"}POST /match→ matches for a startup descriptionPOST /email→ draft outreach email (requires Gemini)
User input
↓
Collect live signals (search → read → extract) or cache/fallback
↓
Embedding + keyword overlap (Gemini if available)
↓
Filter by MIN_MATCH_SCORE
↓
Return top matches → globe pins
Script: backend/scrape_signals.py (invoked by /match via collect_signals).
Pipeline:
Serper (search) → Jina (read/clean) → Gemini (extract signals)
Fallback order:
- Live scrape → results
- Cache (if recent)
- File fallback (
signals.json) when enabled
Argus/
├── backend/
│ ├── main.py
│ ├── requirements.txt
│ ├── scrape_signals.py
│ └── data/
│ ├── signals.json
│ ├── startups.json
│ └── sources.json
├── frontend/
│ ├── app/
│ ├── components/
│ ├── lib/
│ ├── package.json
│ └── tsconfig.json
├── README.md
├── .env.example
└── PLAN.md
- Dunura Epasingag
- Raihan Carder
- Fatima Rehan
- Akshay Krishna Sirigana
- If Gemini is down or misconfigured,
/matchfalls back to keyword‑only matching. - Frontend will 404 if you open backend URL (
:8000). Use:3000for UI.
- Add database to store users past data on the cloud.
- Smarter matching with richer embeddings and feedback loops.
- Add outreach workflows (email approval + CRM export).