The problem
- Students apply to hundreds of internships with no sense of which ones fit.
- Job posts list skills, but students do not know which of those they are missing.
- Course calendars are long and hard to search. Students do not know which courses teach the skills employers want.
- Nothing connects the three: the job, the skill gap and the course that closes it.
The idea
One app that links internships, skills and courses.
- Find: upload your resume and see internships ranked by fit.
- Compare: see the skills each internship wants that your resume does not show.
- Plan: get courses at your university that teach those skills, with their prerequisites.
Who it is for
- University students looking for internships
- Students choosing next term's courses
- Students switching fields who need to know what to learn first
Features
Internship finder
- Upload a resume PDF
- See the top open internships, ranked by fit
- See a fit score for each one
- See the skills you are missing for each job
- See the missing skills that show up most across your top matches
- Filter by location, term and open roles only
- Data refreshes every day
Course finder
- Search courses in plain words, like "robots" or "machine learning for finance"
- See the prerequisite chain for any course as a graph
- Each missing skill links to courses that teach it
How it works
- A daily job pulls open internships for every term into the database.
- Where a company's job board is public, it also pulls the full description.
- Each posting gets skill tags and an embedding, a list of 384 numbers that stands for its meaning.
- Your resume gets an embedding too.
- The database finds the postings closest in meaning to your resume.
- Each match is scored: fit = 0.6 × meaning match + 0.4 × skill overlap
- Course search mixes keyword search and meaning search, so "robots" also finds "autonomous systems".
Built for every university
- Each course is stored with its school, year level, credits, terms offered and calendar year.
- Each university gets one scraper. Everything after that is shared: skill tags, search and the prerequisite graph.
- Prerequisites are saved in one common and/or format, not each school's own wording.
- Adding a school means writing one scraper. The database and search do not change.
- The internship finder already works for any student.
Privacy
- Your resume is read in memory and deleted right after the search.
- It is never saved or logged.
- Only visit counts are stored.
Tech stack
- Website: Next.js
- API: FastAPI (Python)
- Embeddings: fastembed (bge-small, 384 numbers per text)
- Database: Supabase Postgres with pgvector
- Daily refresh: GitHub Actions
- Hosting: Render
How I measure success
What comes next
- More universities, one scraper each
- Email alerts when a new internship fits your profile
- Descriptions from more job boards
What I am learning
- Vector search and ranking
- Measuring search quality with test sets
- Building a data pipeline that runs every day
- Designing a database that grows to many schools