Our inspiration
As a team made up of people from diverse cultural backgrounds, we’ve personally experienced how easy it is to feel disconnected from your identity when you’re away from the places and communities that shaped you. That feeling of ‘missing home’ isn’t just about geography, it’s about losing access to the people, traditions, and spaces where you feel understood. We built Travelmate to make it easier to connect with others who share similar cultural identities, so people can celebrate their culture together through self-hosted events, meaningful conversations and real community, regardless of where they are.
What it does
Travelmate connects people with similar cultural identities so they can celebrate their culture together through self-hosted events. Using a recommendation system based on age, location, cultural background, shared interests, and more, we help users find community, meet in person, and build real connections through conversations and gatherings.
How we built it
Our PostgreSQL database is the workhorse of our project, managing all event posts, users, user relationships, and direct messages. We custom-built our own database methods to fit our problem domain, including a secure authentication system.
Another core part of our project is the recommendation system. We have two recommendation surfaces: people and posts/events. To recommend people, we first build a candidate pool from friends-of-friends, people in similar locations, and users with overlapping attributes. Then, we calculate a compatibility score for each candidate and perform reranking for diversity and fairness. To recommend posts, we use two candidate generation methods. The first is a deterministic scoring approach, which also includes reranking. The second creates vector representations of each user and post, then ranks posts by cosine similarity between the post and the user we’re recommending to. Finally, we rank recommendations in this order: (1) posts both methods recommend, (2) posts recommended by the scoring algorithm, and (3) posts recommended by the embeddings algorithm.
Challenges we ran into
One challenge was building a single, reliable pipeline to both generate and store recommendations for each user. We had three separate, multi-step recommendation algorithms, each requiring significant data manipulation across users, posts, and relationships (friends). At first, each algorithm had a completely different pipeline for candidate generation and storage, which made the system confusing to work with. Therefore, one of our biggest challenges was designing a unified refresh pipeline that could efficiently compute and write updated post recommendations for every user.
Database management for our direct messaging piece was also difficult, as we had to design a schema that preserved conversation integrity (unique user pairs, ordered messages, and accurate last activity), enforced relational constraints between users, conversations, and messages, and supported efficient querying for both conversation previews and full message threads. We solved this by structuring separate Conversations and Messages tables, using foreign keys for consistency, and writing separate SQL queries to reliably load recent chats and full histories without duplicating data.
Accomplishments that we're proud of
We’re proud that we built a website that we would all personally use. Throughout this project, we also learned a lot, especially most of our team members were unfamiliar with PostgreSQL and frontend-development in general. However, we took on the task of learning these technical skills and were able to successfully build a database-heavy project with an intuitive design.
What we learned
This project afforded us many learning opportunities, largely because of the breadth and complexity of our database requirements. Our direct messaging feature taught us how messaging systems keep track of conversation history, manage race conditions, and how they best format message exchanges. Lastly, our work managing profile photos and image uploads also taught us how to best store large data when working in a relational database system.
What's next for Travelmate
In the future, we’d like to launch a Travelmate app, as well as test more recommendation algorithms, such as collaborative filtering. With a real launch of this app, we would have access to far better data to base our algorithms off, allowing for much more personalized event recommendations.
Built With
- fastapi
- huggingface
- pgvector
- postgresql
- python
- react
- tailwind
- vite
Log in or sign up for Devpost to join the conversation.