Roomlytics

Roomlytics was inspired by our own college experiences, where we realized how challenging it can be to live with new roommates. From loud snorers and messy kitchens to mismatched sleep schedules, we saw firsthand how difficult cohabitation can be without real compatibility. Traditional roommate matching often only considers surface-level traits or availability, overlooking deeper lifestyle alignment.

With Roomlytics, we wanted to build a more thoughtful, data-driven solution that analyzes user preferences across key lifestyle dimensions to provide insight and improve harmony in shared living spaces.


How It Works

Our project allows users to record their lifestyle preferences and housing criteria through a brief questionnaire. Once submitted, the system:

  1. Compares their responses with other profiles
  2. Calculates compatibility rates
  3. Generates a radar chart highlighting areas of compatibility and potential friction

This makes it easier to evaluate shared living potential with another person.


Tech Stack

We built Roomlytics using:

  • Flask (Python) for the backend
  • HTML/CSS with Jinja templating for the frontend
  • Matplotlib for radar chart generation

Radar charts are encoded using base64 and rendered dynamically in HTML templates.


Challenges

  • Designing radar charts that were visually clean despite long axis labels
  • Mapping quiz responses accurately to profiles in the database
  • Embedding Matplotlib images using in-memory buffers and encoding
  • Handling session data securely and restricting access to result pages

Accomplishments

  • Built a full-stack web app from scratch
  • Created clear, readable radar charts to represent multidimensional data
  • Implemented profile storage, quiz logic, and dynamic matching
  • Learned how to pass and display data efficiently between backend and frontend

Lessons Learned

  • Structuring Flask apps effectively
  • Visualizing data with Matplotlib
  • Using Flask sessions and secure routing
  • Importance of UI/UX decisions for readability and clarity

Future Plans

  • Add a full roommate matching algorithm
  • Allow real user profiles with photos and bios
  • Implement messaging features
  • Build an admin dashboard for user data analysis
  • Create a mobile-friendly version of the site

Tools Used

  • Flask
  • Matplotlib
  • HTML/CSS (TailwindCSS)
  • Jinja2

We came up with an algorithm to sort out different compatibility categories.

def generate_personalized_summary(user, other, questions):
    diffs = [abs(u - o) for u, o in zip(user, other)]
    paired_scores = list(zip(questions, user, other, diffs))
    paired_scores.sort(key=lambda x: x[3], reverse=True)

    summary = ""

    # Top 3 biggest differences
    biggest_diffs = paired_scores[:3]
    if any(d[3] >= 4 for d in biggest_diffs):
        summary += "You and your potential roommate have notable differences in:\n"
        for q, u, o, d in biggest_diffs:
            summary += f"- **{q}**: You rated {u}, they rated {o}.\n"
    else:
        summary += "You and your potential roommate don’t have any major red flags in your preferences.\n"

    # Top 3 strongest alignments
    strongest_alignments = [x for x in paired_scores if x[3] <= 2][:3]
    if strongest_alignments:
        summary += "\nYou’re especially well-aligned on:\n"
        for q, u, o, d in strongest_alignments:
            summary += f"- **{q}**: You rated {u}, they rated {o}.\n"

    # Overall take
    total_diff = sum(diffs)
    if total_diff <= 15:
        summary += "\n🌟 You’re highly compatible overall — this could be a great match!"
    elif total_diff <= 25:
        summary += "\n⚖️ You have a few areas to work through, but nothing major. Communication is key!"
    else:
        summary += "\n🚨 There are some significant lifestyle differences — a good conversation beforehand is strongly recommended."

    return summary
Share this project:

Updates