Inspiration

Finding someone to study with is often harder than the studying itself. Students may share classes but have different schedules, study styles, or comfort levels reaching out. Additionally, office hours may not be convenient for students or the professor doesn't provide enough support. cramWme was inspired by the idea of making study-partner matching feel as simple and approachable as finding a match—while keeping the focus on academics and genuine connection.

What it does

cramWme helps students find compatible study buddies. Users create a profile with their classes, major, bio, and preferred study details. They can find someone to study with now through an active matching queue, or browse people for later through an offline discovery queue.

The app ranks potential matches using shared classes, study-duration similarity, and graduation-year similarity. Users can swipe through recommendations, match mutually, chat in real time, view their study buddy’s profile, and unmatch if plans change. It also includes unread message indicators, profile avatars and photos, responsive design, and dark mode.

How we built it

We built cramWme with a React and Vite frontend and a Spring Boot backend using Java. The backend uses SQLite for persistent storage, JWT authentication for secure sessions, and authenticated WebSockets for real-time chat updates.

We designed separate active and later discovery experiences. The active queue uses heartbeats to represent users currently looking for a study buddy, while the later queue enables longer-term discovery and ranks people using shared saved classes. Nginx serves the deployed frontend and proxies API and WebSocket traffic to the backend.

Challenges we ran into

One challenge was keeping matching fair and consistent as users joined, left, matched, or changed their profiles. We had to manage cooldowns after passes and unmatches, prevent duplicate matches, and make recommendation updates reliable under concurrent requests.

We also worked through deployment issues involving CORS, WebSocket proxying, file uploads, and production asset URLs. Another challenge was making offline discovery useful without requiring users to configure a full study session first.

Accomplishments that we're proud of

We are proud of building a complete matching flow rather than only a profile directory. cramWme supports active matching, later discovery, mutual matches, real-time chat, unread indicators, profile information, and safe unmatching.

We are also proud of the attention to user experience: a polished chat interface, clear matching actions, customizable avatars and photos, mobile-friendly layouts, dark mode, and matching recommendations that prioritize meaningful academic overlap.

What we learned

We learned how much product behavior depends on the small details behind it. Features like “find someone later” require careful decisions about recommendations, visibility, cooldowns, and notifications.

Technically, we gained experience designing authenticated APIs, WebSocket connections, reverse-proxy deployment with nginx, SQLite concurrency handling, caching, and maintaining consistent state between frontend and backend systems.

What's next for cramWme

Next, we would like to add push notifications for new matches and messages, richer study preferences such as campus locations and study styles, calendar integration, group study sessions, and moderation/reporting tools.

We would also improve recommendation quality with feedback-based ranking, allow students to schedule a specific study time after matching, and expand the platform beyond a single campus.

The backend also needs a complete overhaul and integration with Postgres and Redis for better scaling and performance. Furthermore, performance on the Springboot application can be more fine-tuned and switch to GraalVM for near-native performance.

Built With

Share this project:

Updates

Submission history