MentorMatch
An Android tutor-matching app built in Kotlin — won 1st place at MacEwan's juried showcase, and evolved into Tutle.
Overview
What is it and why it exists
MentorMatch is a swipe-based Android tutoring application with real-time chat, appointment scheduling, premium tiers, and an AI assistant. What started as a course project became something the team actually wanted to ship. We won first place at MacEwan's juried showcase, presented at Research Day, and the project continued into CMPT 496 as Tutle.
Role
UI/UX Developer & QA — authentication, onboarding, navigation, chat UI, test suite, git recovery
Timeline
One semester, Winter 2025
Outcome
1st place at juried showcase. Selected to continue as Tutle in CMPT 496.
Tech Stack
Built with
Language
- Kotlin
UI
- Jetpack Compose
- Material Design 3
- Animated navigation
Backend
- Firebase
- Firestore
- MVVM
Testing & Tools
- JUnit
- Espresso
- Compose UI Test
- MockK
- JaCoCo
- Git / GitHub
- Android Studio
Background
The vision shift
MentorMatch started as a Software Engineering course project with a defined scope: build an Android app that connects students with tutors. About halfway through, the team realized the app could become a real product and raised the bar accordingly. We won first place at MacEwan's juried showcase, presented at Research Day, and the project continued into CMPT 496 rebranded as Tutle — a research-validated student-tutor marketplace.
The shift
Around the second sprint, the project stopped feeling like a course requirement and started feeling like something worth actually building. The core idea was solid; students needed better access to tutors, and tutors needed a way to be found. As a student who'd been through that search myself, that felt like a problem worth solving properly.
My Contributions
What I built
Navigation
Designed a custom animated navigation bar in Figma and implemented it in Jetpack Compose. Each tab has its own accent color; selecting a tab expands it into a labeled pill with a spring animation. The component is role-aware, showing different tabs depending on whether the logged-in user is a student or tutor.
Authentication & Splash
Redesigned the login screen using random dynamic video backgrounds in both landscape and portrait mode across phones and tablets. Added keyboard Tab/Enter navigation to the login form and updated the splash screen with the final app branding.
Chat & Matching UI
Added profile pictures to the chat list and chat detail screens, with fallback logic showing either a first initial or a Person icon if no photo is set. Updated the match animation with a fire icon, adjusted the display timing, and tuned the existing particle system.
UI/UX Polish
Consolidated the logout button from every screen's top bar into a single location in Settings, with a confirmation dialog to prevent accidental sign-outs. Updated tab labels, payment plan pricing, and profile card positioning to better match user expectations. Added a separate logout button with custom styling to the admin screen.
Testing
Rebuilt the entire automated test suite from scratch after significant feature changes made the original tests obsolete. Covered individual components, user flows, and end-to-end scenarios across 53 files and 7,627 lines of code.
Git Recovery
Recovered the project from multiple version control incidents using git reflog and cherry-picking specific commits to restore lost work without disrupting the main branch.
Outcomes & Learnings
What came out of it
🥇 1st Place, Juried Showcase
Took first place at MacEwan's juried showcase against groups from two competing classes, with second place also going to our class. The project was selected to continue into CMPT 496 as Tutle.
Research Day
Presented at MacEwan's Student Research Day, covering the competitor analysis: existing platforms are US-based with curricula and pricing that don't map well to Canadian students, leaving a significant gap in the market.
Utility Player Role
Stepped outside my defined role repeatedly to fill gaps: debugging, testing, version control recovery, and whatever else needed doing to get the app to submission quality.
Kotlin & Jetpack Compose
First experience with Kotlin and Jetpack Compose, coming from a background in C and Python. Building animated, stateful UI components in a declarative framework meant learning a new way of thinking about how interfaces are structured and updated.