Built during a 24-hour hackathon
Reaching out directly to professors and researchers is often far more effective than applying through portals. pmatch scrapes the web for institutes, finds the right people, and interactively matches your profile to theirs to support impactful cold emails.
- Search semantically with PostgreSQL and pgvector
- Auto-detect CV vs Research Papers
- Scrape profiles automatically from university directories
- Match researchers using cosine similarity
- Generate personalized emails with GPT-4o
pmatch/
├── frontend/ # Next.js frontend application
│ ├── src/app/ # App Router pages
│ ├── src/components/ # shadcn/ui primitives & custom components
│ ├── src/hooks/ # Client-side hooks
│ └── src/lib/ # API client and shared utilities
└── backend/ # FastAPI service & data scraper
├── app.py # FastAPI entrypoint
├── db/ # Postgres/pgvector data access helpers
├── utils/ # LLM orchestration & embeddings
├── user_info/ # CV & paper parsing pipelines
├── scraper/ # Researcher scraping scripts
├── goatedscraper/ # Improved scraper
├── kth_matcher/ # KTH-specific researcher matching
├── fake_data/ # Sample PDFs for local testing
└── docker-compose.yml # Local pgvector-enabled Postgres
-
Install dependencies:
cd frontend pnpm install -
Start the development server:
pnpm dev
-
Open http://localhost:3000 in your browser.
-
Spin up the pgvector-enabled Postgres database:
cd backend docker compose up -d -
Install Python dependencies:
python -m venv .venv source .venv/bin/activate pip install -r requirements.txt -
Copy the sample environment file and provide API keys:
cp .env.example .env # Fill in OPENAI_API_KEY, TAVILY_API_KEY, OPENALEX credentials, etc. -
Run the FastAPI server:
uvicorn app:app --reload
-
Visit http://localhost:8000/docs for API docs.



