fundora / README.md
k01010's picture
Fix: shorten short_description to <=60 chars
b4599a9
|
Raw
History Blame Contribute Delete
16.2 kB
metadata
title: Fundora
emoji: ๐ŸŽ“
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false
short_description: AI scholarship matcher โ€” upload CV, get ranked results

๐ŸŽ“ Fundora

AI-powered scholarship matcher โ€” upload your CV, get personalised ranked results

Live Demo API Docs GitHub

Python FastAPI Gradio sentence-transformers HuggingFace Spaces


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


โœจ 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 httpx for lightweight scraping
  • Persistent vector store via ChromaDB on HuggingFace Spaces disk

๐Ÿ–ฅ๏ธ How to use the Web App

โšก Quick Match (recommended)

  1. Open https://k01010-fundora.hf.space/ui
  2. Upload your resume (PDF/DOCX/TXT) or paste a text description of yourself in the box
  3. Set how many results you want (default: 10)
  4. Click Find Scholarships
  5. 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

  1. Switch to the Custom Search tab
  2. Paste one or more scholarship listing URLs (one per line)
  3. Add your profile text
  4. 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:

  1. Go to chat.openai.com โ†’ My GPTs โ†’ Create/Edit GPT
  2. Click Add Action โ†’ Import from URL:
    https://k01010-fundora.hf.space/openapi.json
    
    Or paste the contents of openapi_schema.json manually
  3. Set authentication to None
  4. 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.json is 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

  1. Fork the repo
  2. Add scholarships to scholarships_seed.json (follow the existing JSON schema)
  3. Or improve scraping in generate_seed.py
  4. 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


Built by Kabir08 ยท Hosted on HuggingFace Spaces

This README describes the HuggingFace Space tool for matching user profiles to scraped opportunities. See app.py for implementation details.