Project Info
Inspiration
Going on exchange should be one of the most exciting and fun experiences of a student's life. But too often, the process becomes tedious and stressful, triple-checking eligibility, verifying course equivalencies, and juggling countless open tabs. We hope to simplify this process and allow students to find all of this info in one page.
What it does
Our platform lets you search for equivalent courses and compare schools—all in one place. Simply input a course from your home school, select your desired exchange school, and instantly see relevant course matches. Plus, you can bookmark courses to compare entire schools and find the best fit for you! After you select a few courses that interest you, Poof can help you decide on a final course load, simplifying the painstakingly difficult process of ensuring that the courses are right for you.
How we built it
We decided pretty quickly that combing through dozens and dozens of pages of information was going to be pretty difficult and we decided to use Perplexity to try to simplify this process. Using Perplexity’s Sonar pro model, we were able to create a few requests that could pull relevant information such as university courses, course descriptions, and the similarity between different courses. Then using Flask, we were then able to create a few apis that could then utilize the Perplexity API calls. We also used MongoDB to store existing queries for courses, courses that the user has bookmarked, and also equivalent courses for previously queried courses. Keeping this in mind, we were able to heavily reduce the number of tokens that we used and we also were able to reduce the loading time significantly by reducing the total queries made. We then used React to build the frontend, sprinkling in features such as login, infinite comparisons, and search by course code.
Challenges we ran into
One of the earliest challenges we ran into was dealing with the Perplexity queries as oftentimes Sonar Pro would hallucinate, resulting in inaccurate information being sent back from the request. We then focused on reducing the size of the queries and making sure that the new segmented queries returned accurate and useful information. Another issue that we ran into was dealing with the increasingly long times of the Perplexity queries. At one point, one of our features had to query 16 different times to Perplexity. A single query would take 16+ seconds to finish and would take far too long to offer a good experience to the user. We then decided to start caching results that our users make, ensuring a quick way to access common queries and we would then be able to quickly return information to ensure a good user experience.
Accomplishments we're proud of
We’re proud of how seamless the user experience is and the accuracy of our results. During testing, our platform consistently delivered results that matched what we would have found through manual research. By combining thoughtful UI decisions with precise and efficient results, we’ve created a product we’d confidently use ourselves.
What we learned
We learned the importance of properly fleshing out all the features and flows before we started developing the project. While we were in the middle of designing and developing we realized that one of our flows wasn't properly thought out so we had to pivot and change some functions. Although we were aligned at the end and we reached an efficient user flow, it ultimately added more work. Additionally, we learned the importance of strong UI/UX design. A well-designed, approachable interface makes a huge difference—turning what could have been a stressful, information-heavy experience into one that feels intuitive and inviting for users.
What's next
From the very beginning, we aimed to build a product that would be applicable to our daily lives - and we hope to continue expanding and making it a diverse platform. We hope to continue to polish and add features that can allow our peers to use this during their own exchange process. We aim to add features like auto drafting an email so that students can easily send them to their advisors and a 3D map which will allow students to get an overall picture of all the available and most compatible schools for them.
Poof!
Find equivalent courses at exchange host universities by entering your course codes from home.
Demo video: https://youtu.be/Fk0n4rqkcy8
Devpost: https://devpost.com/software/poof-3qshno
Setup
Change the database URL in server/mongo.py to your own MongoDB URL.
Add server/.env and populate it with your perplexity API key and MongoDB password:
PERPLEXITY_KEY=pplx-
MONGO_PASSWORD=ABC
Install Python dependencies and start the server:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py
Run the frontend in frontend:
yarn
yarn dev
(if you're using npm, you may have to force install)
Other README can be found in the frontend and server folders.
Usage
- Select your host university under "Your School"
- Enter a course code that is a degree requirement you need to fulfill over exchange
- Press "Search"
- Check that the fetched course matches and press the bookmark a. Repeat with any required courses
- Select your exchange university under "Schools Abroad"
- Press "Find Courses"
- Review the matched courses
- The number indicates the confidence in the odds that the target course can substitute for the original course (0-10)
- Press the bookmark to save it for later
- Add any number
- Go to "My Courses" to plan courses
- Select a university under "Compare School"
- Review the auto-populated course selection, adjusting them with the course dropdown as necessary
- Continue adding schools to compare them with the "+" button
Gallery
Analysis
View
Metric
- 46
- 27
- 12
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- FlaskIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
7 of 7 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
71 KB
Source files
32
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
tongliu999/TreeHacks
51 files · 301 KB · @ fb12d2c
Structure
Interface
19 files · 37%Screens, components and styles rendered to the user.
API & routing
7 files · 14%Request entry points: routes, handlers and controllers.
Application logic
1 file · 2%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript59%
- Python31%
- Markdown10%
- CSS1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
server/requirements.txt
pypi · 26- annotated-types
- anyio
- blinker
- certifi
- click
- distro
- dnspython
- exceptiongroup
- Flask
- h11
- httpcore
- httpx
- idna
- itsdangerous
- Jinja2
- jiter
- MarkupSafe
- openai
- +8 more
frontend/package.json
npm · 19- @react-router/node
- @react-router/serve
- axios
- isbot
- react
- react-dom
- react-hook-form
- react-query
- react-router
- +10 more
package.json
npm · 1- vite-plugin-svgr
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.