Gunn Matchomatics
Disrupting a (potentially) million-dollar company in two days. My school-wide valentine's matcher is fully customizable and free (for now).
Bro, Gunn pays $700 a year for matchomatics. What a freaking scam. I bet I can do better. And I have two days to do it.
(Spoilers: we did it!)
The Goal
We want to turn this:
Into this.
Students fill out a form and get matched with people similar to them, across many different categories. Seems simple enough.
The Setup
I'm using Python since it's good for managing lots of data. Once we have all the responses from the Google Form, we can download it as a .csv
file and save that on our computer.
In matches.py
I basically read all this data and do a nested loop to match each person with every other person. All of these matches (along with identifying data such as name, gender, grade) are flattened into an array and stored in a new .csv
file.
To find the match-compatibility score, we can use Dylan Lu's magical love-matching algorithm. We give "points" for questions that are answered the same or very closely, and we give extra points for matching "dependent" questions (for example, I answered that I prefer girls with brown hair, and a girl answered they have brown hair).
Now that we've matched everyone, we'll need to convert the outputted .csv
file into something printable and pretty. I made an HTML template with Jinja2, and I use a Python script (csv_to_html.py
) to pass all my data into that template to generate hundreds of pages.
The template.html
file is basically a giant wrapper that includes the basic boilerplate HTML needed and brings in Tailwind. We take all our data and pass it to a new person.html
, which presents it in a pretty page format.
Now we can generate hundreds of these and print them out!
Conclusion
I'm not asking for $700, but I do want some credit for putting in all this work today and yesterday (see bottom of the previous two pictures!). Tomorrow, we'll need to figure out how to print out all 700+ copies of these...
As always, I'll update this article and let you know what happens in the end.