Building a Platform for the Escape Game Community
Tags: octograd2020
Published: 2020-05-20 19:28:42

[Comment]: # (All of this is placeholder text. Use this format or any other format of your choosing to best describe your project and experience.)

[Note]: # (If you used the GitHub Student Developer Pack on your project, add the "#githubsdp" tag above. We’d also love to know which services you used and how you used it!)

I'm currently working on a major overhaul of my personal website. This'll include a personal blog. This post, along with more to come, will probably end up over there. Stay tuned!

## My Final Project

My final project is Blacklight, a social network uniting escape game maintainers and enthusiasts. You might've heard of escape games or escape rooms - they're usually team-based experiences in which a group of people need to escape a room or meet some other goal within a time limit. Maintainers build and run the escape rooms that have been challenging enthusiasts worldwide for around five years.

Through surveying some maintainers from across the world, discussing with another in person, and reading further research, I concluded that implementing technology directly in escape rooms would be difficult. I was able to establish requirements for this, but it was clear that with the time I had, it would be difficult to build a convincing piece of hardware or software that would directly support escape games on the inside.

Escape rooms are run in very different ways by very different people - maintainers might be enthusiasts who want to spread the medium to others, or enterprising folks who've seen a local gap in the market. In some cases, large franchises run many escape games across the country. Regardless of staff size, escape games have day-to-day needs outside of the experience too - things like taking bookings and advertising on social media, for example.

One thing that the maintainers I surveyed could agree on was that escape games needed their own space to reach out to the community alongside each other. As far as I'm aware, there's no one platform just for escape games that deals with this. The online community around them is fairly sparse - lots of people enjoy escape games, but there's no one place for them to congregate. Local Facebook groups and the comment sections of some blogs are just a couple of places you might find them.

This isn't really ideal for enthusiasts or maintainers - maintainers can't engage with the people who are most excited about what they do, and enthusiasts don't have as many people's views to run on when picking their next heist. It doesn't help that escape games battle against other leisure activities, like theme parks, on platforms like Google Maps. That can negatively bias reviews in some ways.

This is where Blacklight comes in.

Though Blacklight as a dissertation project really set out to prove that maintainers' requirements could be met, it's more than just a proof or an MVP. I was able to mix in features like a responsive search, Markdown for descriptions and previews, and a photo gallery.

Enthusiasts can filter escape rooms by difficulty or location in the Explore view. The latter of these is powered by Google Maps - users can specify a place or use their current location to find all rooms within 5km of their chosen spot. All escape rooms shown have a lock badge on them - Blacklight encourages enthusiasts to crack the locks and mark off escape rooms they've cleared.

They can then back up that experience by uploading photos to associate with each clear. These are visible in one unified gallery, and can also be checked out per escape room.

Maintainers get access to a form that's full of things they can specify to add more detail to their escape game listing, including photos and a full Markdown description. 

## On Sharing The Code

COVID-19 really makes it quite difficult to justify putting Blacklight out to the escape game community, since it's reliant on physical location to some degree. My dissertation documents some changes that could be made to it to keep up with changes in the community, including catering for remote escape games and in-home kits sold by some escape game companies. For a lot of escape room businesses, however, it's a really difficult time. I'm not sure now is the right time for Blacklight to have arrived.

I feel that a lot of what Blacklight offers can be built on in different ways, though. Not only that, but it's a working example of what I can do - I'd love to talk it through in a developer interview. With that in mind, I'll share the code under my copyright. I'll be taking a demo version of Blacklight live in the near future with ephemeral storage - the whole thing will reset every 24 hours.

I'll share the source for Blacklight possibly around the end of July.

## Building Blacklight

Blacklight is built on React and Rails, bringing together the two things I've got most experience in. React works very nicely with Rails - the only setback is the time it takes for Webpacker to compile everything... I learned a lot about ActiveStorage, and dug deep when it came to ActiveRecord queries this time around. 

When you're just getting started with Rails, it's really easy to end up with those N+1 situations where tens of queries get thrown out on every request. [The Active Record Query Interface guide](https://guides.rubyonrails.org/active_record_querying.html) talks about some really good essentials like `includes` and `joins`, which are invaluable in situations with linked records. I needed to chain methods and use those methods fairly regularly.

ActiveStorage has its own variant on `include`, which is `with_attached_images`. `image`, in this case, is a `has_many` field, so on that basis, you might use `with_attached_avatar` or `with_attached_photos` if you'd named it differently or used a `has_one` instead.

On the React side of things, I dabbled in [Atomic Design](https://atomicdesign.bradfrost.com/). As I go over in the dissertation, it helps when upholding the Single Responsibility Principle, but actually defining the boundaries between what's what can be tough. And you might not even need to use all five of the things mentioned in there! It's a good thing to keep in mind, but whether you follow it all the way is up to you.

## Additional Thoughts / Feelings / Stories

The process behind this whole thing was fun! I definitely learned lots along the way. I'm not sure what the most important thing was, but one thing's for certain - the discipline and the routine I gained from my year in industry last year hasn't slipped. I owe a lot to that for helping me to get to where I am now.

As of tomorrow, I've got exactly three weeks left of other assignments exams. That's three more weeks of keepin' on keepin' on, even though I won't get to wear my fancy hat, let alone throw it in the air (curse you, 'elf 'n' safety!). Finishing my dissertation has been a giant step on the long road to wrapping these four years up for good.

Admittedly, it's a little hard to look back on it and feel as proud as I'd want to while I'm still in the thick of things. But I think we all owe it to ourselves to sip some green tea and dwell on it for a bit. Whether your fight's over and you're catching a well-deserved break, or you're still marching to the goal, feel glad that your hard work's got you where you are.

When I say "look back on *it*", I don't just mean whatever's on your plate now. I mean everything that's got you here - even that thing you might've done in high school that seems minuscule in the face of what's just been done. As I write this, a lot of those *it*s are all rushing back to me. Cheesy, yes. But also very therapeutic.

[Final Note]: # (CONGRATULATIONS!!! You are amazing!)