The problem
Language learners need regular practice with people who speak the language they are learning, but finding a good partner and agreeing on times takes effort.
Key decisions
- Recommendations that learn from likes
- Each user keeps an "ideal match" profile: the running average of everyone they have liked. Candidates are ranked by weighted distance from it, with shared interests weighted most, and people who already liked the user are shown first to maximize matches.
- Scheduling without back-and-forth
- Booking a session creates a Google Calendar event and invites the partner, so both calendars stay in sync.
- Calls inside the app
- Video calls run on Agora, with the backend issuing short-lived access tokens for each call.
- Tested from the start
- Jest tests with mocked Google APIs cover the backend, and GitHub Actions runs them on every change.
Results
- Best Project Award, CPEN 321
- Recommendations returned in under 150 ms across 10,000 test requests
Screenshots

Built with
Java, Android, Node.js, MongoDB, Jest, GitHub Actions, Azure