title: Fundora
emoji: ๐
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false
short_description: AI scholarship matcher โ upload CV, get ranked results
What is Fundora?
Fundora is a semantic scholarship search engine. You describe yourself (or upload your resume/CV), and Fundora ranks the best-matching global scholarships for you โ using sentence-level AI embeddings, not keyword matching.
It runs as a web app (Gradio UI at /ui) and simultaneously as a ChatGPT Action API (at /match), so it can be integrated directly into a custom ChatGPT GPT.
๐ Try it live
| Surface | URL |
|---|---|
| Web App (Gradio UI) | https://k01010-fundora.hf.space/ui |
| Swagger API Docs | https://k01010-fundora.hf.space/docs |
| Health Check | https://k01010-fundora.hf.space/health |
| Privacy Policy | https://k01010-fundora.hf.space/privacy |
โจ Features
- Upload your CV (PDF, DOCX, or TXT) or paste a plain-text profile
- Semantic matching using
sentence-transformers/all-MiniLM-L6-v2โ goes beyond keyword search - 93 hand-curated scholarships loaded at startup (no scraping delay)
- Custom URL search โ paste any scholarship listing page and Fundora scrapes + ranks on the fly
- ChatGPT Action โ plug this into your own custom GPT
- Zero browser dependency โ replaced Playwright with
httpxfor lightweight scraping - Persistent vector store via ChromaDB on HuggingFace Spaces disk
๐ฅ๏ธ How to use the Web App
โก Quick Match (recommended)
- Open https://k01010-fundora.hf.space/ui
- Upload your resume (PDF/DOCX/TXT) or paste a text description of yourself in the box
- Set how many results you want (default: 10)
- Click Find Scholarships
- Get a ranked table with scholarship name, link, and why it matches you
Example profile text:
Final year BE Computer Science student, GPA 8.5. Research interest in NLP and LLMs.
Published paper on RAG systems. Seeking fully funded MS or PhD scholarships in USA or Europe.
๐ Custom Search
- Switch to the Custom Search tab
- Paste one or more scholarship listing URLs (one per line)
- Add your profile text
- Click Search โ Fundora scrapes those pages and ranks results against your profile
๐ค ChatGPT Action Integration
Fundora exposes a /match endpoint that your custom ChatGPT GPT can call.
Step-by-step:
- Go to chat.openai.com โ My GPTs โ Create/Edit GPT
- Click Add Action โ Import from URL:
Or paste the contents ofhttps://k01010-fundora.hf.space/openapi.jsonopenapi_schema.jsonmanually - Set authentication to None
- Save and test by asking: "Find me scholarships for a computer science PhD student from India"
Request format:
POST /match
{
"profile": "Your academic background, research interests, nationality, degree level...",
"top_k": 5
}
Response format:
{
"matches": [
{
"title": "Google PhD Fellowship",
"link": "https://research.google/outreach/phd-fellowship/",
"score": 0.91,
"description": "Google PhD Fellowship supports outstanding PhD students..."
}
],
"index_size": 93,
"index_ready": true
}
๐ Scholarship Index โ Statistics
Overview
| Metric | Value |
|---|---|
| Total scholarships indexed | 93 |
| Regions covered | 12 |
| Sources / organisations | 60+ |
| Index type | ChromaDB cosine similarity |
| Embedding model | all-MiniLM-L6-v2 (384-dim) |
| Cold start time | ~15โ20 seconds (seed load) |
| Query latency | < 500ms |
Breakdown by Region
| Region | Count | Example Scholarships |
|---|---|---|
| ๐บ๐ธ USA | 24 | NSF GRFP, Google PhD, Hertz, Ford Foundation, AAUW, MIT, CMU, Berkeley, Caltech, Stanford |
| ๐ฌ๐ง UK / Europe | 16 | Chevening, Gates Cambridge, Rhodes, Commonwealth, DAAD, ETH Zurich, Erasmus Mundus, Marshall |
| ๐ค AI / CS Specific | 10 | DeepMind, OpenAI, Meta, Amazon, Apple, Jane Street, Two Sigma, Qualcomm, Snap |
| ๐ Other / International | 9 | World Bank, ADB, Aga Khan, Rotary, UN, AfterSchoolAfrica |
| ๐ Aggregator Platforms | 7 | Scholars4Dev, OpportunityDesk, FindAPhD, ScholarshipPortal, Niche, Bold.org, Going Merry |
| ๐ฎ๐ณ India | 7 | ICCR, INSPIRE, PMRF, Inlaks, Narotam Sekhsaria, S.N. Bose, NOS |
| ๐จ๐ฆ Canada | 4 | Vanier, Trudeau Foundation, NSERC, Mitacs |
| ๐ Asia | 6 | MEXT (Japan), JASSO, GKS (Korea), CSC (China), ASEAN, IIT |
| ๐ฆ๐บ Australia | 4 | Australia Awards, Melbourne, ANU, Endeavour |
| ๐ Leadership / Social Impact | 5 | Schwarzman, Knight-Hennessy, Paul & Daisy Soros, Mitchell, Marshall |
| ๐ Africa | 3 | Mastercard Foundation, African Union, AfterSchoolAfrica |
Full Scholarship List
Click to expand all 93 scholarships
UK / Europe
- Chevening Scholarship ยท Gates Cambridge Scholarship ยท Rhodes Scholarship
- Commonwealth Scholarship (Masters & PhD) ยท DAAD ยท Heinrich Bรถll Foundation
- Erasmus Mundus Joint Masters ยท UCL Graduate Scholarships ยท Edinburgh Global Research
- Oxford Clarendon Scholarship ยท ETH Zurich Excellence Scholarship
- Swiss Government Excellence Scholarships ยท EURAXESS EU Mobility ยท Marie Skลodowska-Curie (MSCA)
- Marshall Scholarship
USA
- NSF Graduate Research Fellowship (GRFP) ยท Google PhD Fellowship ยท Microsoft Research PhD Fellowship
- NVIDIA Graduate Fellowship ยท IBM PhD Fellowship ยท Adobe Research Fellowship
- Hertz Fellowship ยท Ford Foundation Predoctoral Fellowship ยท AAUW International Fellowships
- CMU University Fellowship ยท MIT Fellowship Programs ยท Berkeley Graduate Fellowship
- Stanford HCI Fellowships ยท Caltech Fellowship ยท DARPA Riser Award
- AISES Scholarship ยท SWE Scholarship ยท NSBE Scholarships ยท Hispanic Scholarship Fund
- Gates Scholarship (minority undergrad) ยท Fulbright Foreign Student ยท Simons Foundation Fellowship
- Siemens Foundation Scholarship ยท ACM-ICPC Scholarship
AI / CS / Tech
- OpenAI Scholars Program ยท OpenAI Residency ยท DeepMind Scholarship
- Meta AI Research Fellowship ยท Amazon Graduate Research Fellowship
- Apple Scholars in AI/ML ยท Jane Street Graduate Fellowship ยท Two Sigma PhD Fellowship
- Qualcomm Innovation Fellowship ยท Snap Research Fellowship
Canada
- Vanier Canada Graduate Scholarship ยท Pierre Elliott Trudeau Foundation Doctoral
- NSERC Postgraduate Scholarship ยท Mitacs Globalink Research Award
Australia
- Australia Awards Scholarships ยท University of Melbourne Graduate Research
- ANU Chancellor's International Scholarship ยท Endeavour Leadership Program
Asia
- MEXT Japanese Government Scholarship ยท JASSO Scholarship ยท Korean Government Scholarship (GKS)
- Chinese Government Scholarship (CSC) ยท ASEAN Undergraduate Scholarship (Singapore)
- IIT Scholarship for International Students
India
- ICCR Scholarship ยท INSPIRE ยท Prime Minister's Research Fellowship (PMRF)
- GyanDhan ยท National Overseas Scholarship (NOS) ยท Inlaks Shivdasani Foundation
- Narotam Sekhsaria Foundation ยท S.N. Bose Scholars Program ยท USC Viterbi India Program
Africa
- AfterSchoolAfrica Database ยท Mastercard Foundation Scholars ยท African Union Scholarships
International Organisations
- World Bank Graduate Scholarship (JJ/WBGSP) ยท ADB-Japan Scholarship
- Aga Khan Foundation International ยท Rotary Peace Fellowship ยท UN Scholarships & Fellowships
Leadership / Social Impact
- Schwarzman Scholars ยท Knight-Hennessy Scholars (Stanford) ยท Paul & Daisy Soros Fellowship
- Mitchell Scholarship (Ireland) ยท DAAD RISE
Aggregator Platforms
- Scholars4Dev ยท Opportunity Desk ยท FindAPhD ยท InternationalScholarships.com
- Niche No-Essay ยท Bold.org ยท Going Merry ยท ScholarshipPortal
๐ธ๏ธ Scraping Sources (Live Index)
When no seed file is available, Fundora falls back to live-scraping 50+ sites. These are also available for custom URL search:
| Category | Sites |
|---|---|
| Global aggregators | OpportunityDesk, Scholars4Dev, ScholarshipPortal, FindAPhD, InternationalScholarships, CareerFoundry |
| Europe | DAAD, EURAXESS, Erasmus+, Heinrich Bรถll, Chevening, Commonwealth, UCL, Oxford, Gates Cambridge, Rhodes |
| USA | Fulbright, Fastweb, CollegeBoard, Going Merry, Niche, Bold.org |
| Canada | EduCanada, Vanier, Trudeau Foundation, ScholarshipsCanada |
| Australia | Australia Awards, StudyInAustralia, ANU, University of Melbourne |
| Asia | MEXT, JASSO, GKS, CSC, Singapore MOE, ASEAN, GyanDhan |
| Africa/Middle East | AfterSchoolAfrica, African Union, Mastercard Foundation |
| India | ICCR, NOS, PMRF (via search) |
Note: Many sites use bot-protection (Cloudflare). The seed index (
scholarships_seed.json) is the reliable primary source and loads in ~15 seconds.
๐ ๏ธ Tech Stack
| Component | Library / Tool | Version |
|---|---|---|
| API framework | FastAPI | >=0.100.0 |
| ASGI server | uvicorn[standard] | >=0.20.0 |
| Web UI | Gradio | >=4.0.0 |
| Embedding model | sentence-transformers (all-MiniLM-L6-v2) |
>=2.2.0 |
| Persistent vector DB | ChromaDB | >=0.5.0 |
| In-memory ranking | faiss-cpu | >=1.7.0 |
| HTML parsing | BeautifulSoup4 | >=4.12.0 |
| HTTP scraping | httpx | >=0.24.0 |
| PDF parsing | pdfplumber | >=0.9.0 |
| DOCX parsing | python-docx | >=0.8.11 |
| Data validation | pydantic | >=2.0.0 |
| Hosting | HuggingFace Spaces (Docker) | โ |
Architecture
User uploads CV / types profile
โ
โผ
Gradio UI (/ui) โโโโโโโโโโโโโโโโโโโ ChatGPT Action (/match)
โ โ
โผ โผ
api.match() โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
sentence-transformers
all-MiniLM-L6-v2 (384-dim embeddings)
โ
โผ
ChromaDB cosine similarity search
(93-entry seed index, loaded at startup)
โ
โผ
Top-K ranked scholarships โ returned to user
๐ป Local Development
Prerequisites
- Python 3.11+
- ~600 MB RAM (for the embedding model)
Setup
git clone https://github.com/Kabir08/Fundora.git
cd Fundora
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn api:app --reload --port 7860
Open http://localhost:7860/ui in your browser.
Regenerate the scholarship seed (optional)
python generate_seed.py
# Writes scholarships_seed.json
Many sites block automated scrapers. The committed
scholarships_seed.jsonis the reliable source.
Docker (matches HuggingFace deployment exactly)
docker build -t fundora .
docker run -p 7860:7860 fundora
๐ฆ Dependency Notes & Update Guide
When upgrading dependencies, these are the things to check:
| Package | Notes on upgrade |
|---|---|
gradio |
Breaking API changes between major versions (3โ4โ5). Check gr.Blocks, gr.File, gr.Dataframe signatures. |
chromadb |
Client API changed significantly at 0.4โ0.5. If upgrading past 0.5, audit Collection.add(), Collection.query() calls in api.py. |
sentence-transformers |
Model download path uses TRANSFORMERS_CACHE / HF_HOME. Ensure env vars are set in Dockerfile. |
pydantic |
v1 โ v2 is a breaking change. All models use pydantic>=2.0. Do not pin to v1. |
fastapi |
Follows pydantic โ keep both in sync. |
faiss-cpu |
CPU-only build. Do not switch to faiss-gpu on HuggingFace free tier. |
httpx |
Used for all scraping. If upgrading past 1.x, check httpx.Client context manager usage in api.py and app.py. |
pdfplumber |
Used only in app.py's extract_text_from_file(). Upgrade is safe. |
๐๏ธ Project Structure
Fundora/
โโโ api.py # FastAPI app โ /match, /health, /index_status, /privacy
โ # + mounts Gradio at /ui
โโโ app.py # Gradio UI โ Quick Match tab + Custom Search tab
โโโ scholarships_seed.json # 93 hand-curated scholarships (loaded at startup)
โโโ generate_seed.py # Script to regenerate scholarships_seed.json
โโโ openapi_schema.json # ChatGPT Action schema (server URL: k01010-fundora.hf.space)
โโโ requirements.txt # Python dependencies
โโโ Dockerfile # HuggingFace Docker Space definition
โโโ render.yaml # Legacy Render.com config (no longer primary host)
โโโ README.md # This file
๐ง Deployment โ HuggingFace Spaces
The app is deployed as a Docker Space at https://huggingface.co/spaces/k01010/fundora.
Push updates
# One-time setup
git remote add hf https://huggingface.co/spaces/k01010/fundora
# Deploy
git add .
git commit -m "your message"
git push hf main # deploys to HF Spaces
git push origin main # keeps GitHub in sync
Keep the Space awake
HuggingFace free Spaces sleep after 48 hours of inactivity. Set up a free ping via UptimeRobot:
- Monitor type: HTTP(S)
- URL:
https://k01010-fundora.hf.space/health - Interval: every 14 minutes
๐ API Reference
POST /match
Match a user profile against the scholarship index.
| Field | Type | Required | Description |
|---|---|---|---|
profile |
string | โ | Natural language description of the user |
top_k |
integer | โ | Number of results to return (default: 5) |
GET /health
Returns {"status": "ok", "index_ready": true/false}. Use for keep-alive pings.
GET /index_status
Returns current index size and readiness state.
POST /refresh_index
Forces a re-scrape and re-index from the seed file.
GET /docs
FastAPI auto-generated Swagger UI โ try all endpoints interactively.
๐ค Contributing
- Fork the repo
- Add scholarships to
scholarships_seed.json(follow the existing JSON schema) - Or improve scraping in
generate_seed.py - Open a PR
Scholarship JSON schema:
{
"title": "Scholarship Name",
"link": "https://official-url.com",
"source": "OrganisationShortName",
"description": "2โ3 sentence description covering eligibility, value, and focus area."
}
๐ License
MIT โ see LICENSE
This README describes the HuggingFace Space tool for matching user profiles to scraped opportunities. See app.py for implementation details.