Project Title

FindAProf UofT— Connecting Students to Research That Matters

Inspiration For most undergraduate students at the University of Toronto, breaking into research feels like trying to get into a club with no guest list. The opportunity exists, UofT is home to world-class research labs and faculty across every discipline, but the path to finding the right professor is opaque, intimidating, and largely word-of-mouth. Students spend hours cold-emailing professors whose work they've barely had time to understand. Professors receive floods of generic outreach from students who may or may not be a good fit. Both sides are wasting time, and genuine connections that could launch careers are falling through the cracks. We asked ourselves: what if finding a research supervisor felt less like a cold job hunt and more like a smart, interest-driven match? That question became FindAProf UofT.

What It Does FindAProf UofT is a web application that connects undergraduate students with UofT professors based on shared research interests. Think of it as a matching system purpose-built for academia. Professors create a profile listing their department, current research, and lab name. Students enter their own research interests. Once this is done, the platform computes a match-based system that allows students and professors to swipe on each other. Students get a list of professors based on their current research, while professors get a list of students based on their research interests. Both professors and students swipe on each other, and when they do, they are matched. This takes them to a separate conversation where they can then communicate with one another and move further in the process. Thus giving students an immediate, concrete starting point for reaching out with confidence.

How We Built It We built FindAProf UofT as a lightweight full-stack web application using a simple but effective architecture:

Frontend: HTML and CSS using Flask's Jinja2 templating engine — no heavy frameworks, just clean and fast interfaces Backend: Python with Flask handling all routing, form processing, and matching logic Database: AWS DynamoDB via the boto3 SDK, storing all student and professor profiles as flexible document records Matching Algorithm: A keyword-based Jaccard similarity function — student and professor interest strings are split, normalized to lowercase, and compared as sets. The overlap divided by the union gives a match percentage, which drives the ranking

The entire stack was chosen deliberately for speed of development and clarity — every component does exactly one job.

Challenges We Ran Into Getting AWS DynamoDB integrated cleanly within a hackathon time constraint was our biggest early hurdle. Configuring IAM permissions, credentials, and table schema correctly under pressure required careful attention. We also had to make deliberate tradeoffs in the matching algorithm. A more sophisticated NLP-based approach (semantic similarity, embeddings) would produce better results, but a clean keyword-overlap model was the right call for a working prototype that's explainable and debuggable.

Designing the user experience to feel intuitive for both sides of the match, professors and students with very different goals, also required several iterations on the form and results layout.

Accomplishments We're Proud Of

A fully functional end-to-end app built in under an hour of core development time Real AWS cloud integration — data persists across sessions in DynamoDB A matching algorithm that is simple enough to explain in one sentence but produces genuinely useful results A clean, polished UI that feels professional despite the time constraints A product that solves a real, felt pain point for UofT undergraduates right now

What We Learned This project taught us how quickly a useful product can come together when the problem is well-defined and the tech stack is kept simple. We also gained hands-on experience with AWS DynamoDB and the boto3 SDK — connecting a live cloud database to a Python web app from scratch in a hackathon setting was a genuine engineering challenge that sharpened our understanding of cloud architecture fundamentals. Most importantly, we learned that constraints are a feature, not a bug. Being forced to simplify pushed us toward a cleaner, more explainable product.

What's Next for FindAProf UofT FindAProf UofT is a prototype, but the foundation is solid. With more time, we'd pursue:

Semantic matching using NLP embeddings so that "machine learning" matches "neural networks" even without identical keywords Professor-side browsing so faculty can search and filter interested students UofT SSO integration so students and professors can authenticate with their institutional credentials Email notifications when a new high-confidence match is found A real UofT professor database pre-seeded with faculty research profiles scraped from departmental pages

The core insight — that research connections at UofT are currently friction-filled and luck-dependent — remains true regardless of the stack. FindAProf UofT is a step toward fixing that.

Built With Python Flask AWS DynamoDB boto3 HTML CSS Jinja2

Share this project:

Updates