Wrap-Up
Overview
Thank you to everyone who participated in our epilogue to the 2024 Mystery Hunt!
Congratulations to the 77 teams that found the perfect gift for Hephaestus! Special congratulations to ௵ TAMIL MAP OF ODYSSEUS' JOURNEY for being the first to do so in 5 hours and 20 minutes!
Out of all teams registered:
- 155 teams solved at least one puzzle
- 9 teams solved all 13 "main" puzzles
We'd also like to congratulate teams for solving the round-length, standalone puzzle Ripple Effect:
- ௵ TAMIL MAP OF ODYSSEUS' JOURNEY
- The C@r@line Syzygy
- Timeless Hellish Enigmas? Mathemagicians Immediately Solving!
- Extended Coda of /r/PictureGame
- Vehemence
- Frumious Bandersnatch
- Desolate Abyssal Netherworld
- Literally Ὀδύσσεια
Thanks to ௵ TAMIL MAP OF ODYSSEUS' JOURNEY for solving the standalone puzzle Melody Medley!
And, shoutout to Jimothy Gaming for the last correct answer, solving the meta at 3 minutes to hunt end!
The rest of this wrap-up contains spoilers for various puzzles.
Stats
Team Shoutouts, Stats
- First blood: ௵ TAMIL MAP OF ODYSSEUS' JOURNEY, who got the first solve of the hunt by solving Exotic Fen 10m 5s after the start.
- Guess accuracy: DragonEngineer and Giant Giraffe Grocery, who finished the hunt with the lowest number of incorrect guesses, 3.
- Guess happiness: HOPE404, who submitted the most incorrect guesses, 80.
- Fastest 100%: Scenic Travelers, who solved all 13 "main" puzzles in 24h 21m.
- 722 hint requests
Leaderboard (Top 10)
Solves and Guesses per Puzzle
Fastest Solve per Puzzle
Hints Over Time
Hints Answered
Hints Per Puzzle
Comparison with other hunts
*Note that Brown Puzzle Hunt 2024 ran for 31 hours; and Vehemusical ran for 48 hours.
**The puzzle count of GPH 2024 does not include the custom puzzles.
Worldwide Web Traffic
Data collected using "Web Traffic Requests by Country" through Cloudflare. Thanks to all the non-native English speakers for working through our cryptics!
Writing
Throughout the year, we were sad about losing some really good puzzles due to author time, lack of “fit”, topic overload, not passing testing, or otherwise. The Editor-in-Chief group was already floating a potential "epilogue" round as early as June 2023, when we cut the Hephaestus round. Discussions broadened to the rest of the team around December 2023, while we were still writing MH24! After recovering from writing and running Mystery Hunt and letting the tech team get enough time and energy to archive the existing site, we were ready.
We polled for initial interest in mid-July of 2024. We used a cut round for the theme, so we didn’t have any theme proposals or voting, and dove right into writing puzzles by mid-August. Feeder puzzles were slowly revived or written, tested, and finalized over the next few months, with the last feeder passing testing in early December.
Where did the actual puzzles come from? Many were dropped at various points over MH24 writing:
- Hephaestus: This passed meta testing for MH24, but early on in the writing process, we decided to withhold all answer assignments for this round in case we struggled to write enough puzzles or the hunt ended up on the longer side. It was a tough decision to pick this meta as the one to drop, as it got high "fun" ratings, but ultimately, this was one of the larger rounds by number of puzzles. We could get more “bang for our buck” from cutting only one meta.
- Box Offer: This was a meta idea that was cut fairly early (see the Author’s Notes in the solution), and was rephrased to be a feeder.
- Reference Age: A more difficult version of this puzzle was originally in a late round in MH24 and was cut mid-hunt as it became clear the hunt was running much longer than intended. You can see the original version of the puzzle here.
- A Safe Car: This puzzle was partially written but never made it to testing, as it was deemed too difficult and too mechanically close to another puzzle that passed. The original vision involved getting the limerick lines individually and assembling them yourself!
- Ohh, My Fee!: This puzzle was originally pitched for MH24, but we had too many cryptics. As you can tell from this hunt, we had no restriction on the number of puzzles that used cryptic clues.
- Transfers: This puzzle was also originally pitched for MH24, but we had too many video game based puzzles already.
- Fetched: This was pitched as a backup puzzle for MH24, resolving to MAKE IT SEW -- but we had another Star Trek puzzle.
- A Few Tips, Toys' Cafe: These were also pitched for MH24, but we never got around to drafting them before running out of answers.
A couple were proposed for an old TTBNL hunt that was never finished:
- Exotic Fen: A version of the puzzle had been shown to a few people outside TTBNL, so we didn’t consider it for MH24.
- I Feel Ucky: Also proposed for the old hunt, then revived here.
The other puzzles (Movie Effects and Failsafe) were new ideas for this hunt.
The standalone puzzles were all casualties of MH24 testing and editing. These puzzles couldn’t really be “reshaped” to fit into a hunt smaller than Mystery Hunt, but we still thought they were cool! So, we decided to release them separately to be able to share them with the community.
- Ripple Effect: This was successfully testsolved, twice! Unfortunately, it ended up not being viable for how it was going to be presented in the hunt, and was cut.
- Mark of the Demon: This puzzle unfortunately wasn’t successfully testsolved for either the original hunt or the epilogue. Because of the heavy usage of live actors, it wasn’t viable to rewrite in a reasonable timeframe. We’ve added an additional author’s note to the puzzle solution talking about the original vision behind it.
- Melody Medley: This was also written and successfully testsolved once, but also ended up not being viable for the hunt as a whole. The author has written a blog post about the puzzle's vision and construction.
After we recovered from the 2025 Mystery Hunt in early February, we began planning out our schedule and tech work. Once we locked in our hunt date for mid-March, Ethan began writing the website around February 11. The website was added to the Puzzle Hunt Calendar around February 22. Most tech work was done by March 4, with small touch-ups and tweaks in the last few days.
Art and Design
by Frankie Rady
We knew initially that this round was going to have an industrial theme, so I took inspiration from the Precisionism art movement, a Modernist art style with heavy focus on industrialism and urban landscapes.

The image on the right was the direct inspiration for the color palette of our epilogue round, which I had decided to place inside of a foundry.

Initially, I had planned to have an anvil in the middle of the image representing the meta with various geometric sculptures surrounding it. Struggling to come up with designs for the sculptures, I noticed that Michael Andersen had made a suggestion to have little fire sprites based off of Calcifer from the film Howl’s Moving Castle. The more I thought about this, the more I fell in love with the idea.

I knew we couldn’t have an exact match of Calcifer due to copyright reason, so I did my own twist on Calficer. I made a quick sketch at work while on my lunch break and I knew right then and there how I was going to design the round art.



Tech
This was my (Ethan’s) “revenge” on the tech issues that plagued MH24. We’d already traced down the problem to something to do with asynchronicity in Python, which, among other things, is used for websockets (which then enable notifications and solve sounds). I made the decision far in advance to support only synchronous features and banned any puzzles that would require websocket interactivity. I’m very happy to say that the tech for this hunt was a success – no downtime, and no major tech issues or bugs!
For writing and testing, we used the Puzzup instance that I’d left running from writing MH24. The epilogue hunt site was based on gph-site, and hosted on Heroku.
These are the services we used, and some stats:
-
Compute: A varying amount of 1X standard dynos ($25/month
each).
- We started with 15 for the first hour to handle the beginning-of-hunt surge, then progressively went down, eventually landing on 2.
- Requests-per-second maxed out at ~5 in the first hour or so, then never exceeded 1 RPS. We were almost certainly overprovisioned for the entire hunt.
- We also had 1 worker dyno that managed Discord messages and emails using a task queue, since we didn’t want to block client requests on pinging an external service.
- After the hunt ended, we switched to Basic dynos.
-
Database: Essential 2
Postgres add-on ($20/month)
- We chose this tier not for database size, but for the number of connections (40).
- We used a pgbouncer buildpack on the web dynos to cut down on connections, and didn’t notice it go above 20 (so Essential 1 likely would have worked). Upgrading the database mid-hunt would have taken a few minutes of downtime, so we decided to play it safe with a higher tier.
- After hunt, we switched to the Essential 0 tier ($5/month).
- The database was around 13 MB (and even for MH24, the raw dump was only ~250 MB).
-
Key-Value Store: Premium 1
Key-Value Store add-on
($30/month)
- The key-value store was used for the task queue and for Django’s cache. We used Premium 1 to support the number of connections required.
- Once we reduced dynos and didn’t need as many connections, we went down to Mini ($3/month).
-
Logging, Monitoring:
Sentry education plan (free),
Papertrail
(Choklad, free)
- We’d used Sentry for MH24, but it mostly told us that everything was broken all the time. It was useful here as well to check on a couple errors during development and initial deployments, as well as some bugs with the posthunt state.
- Heroku’s terminal logging is bad, so we arbitrarily chose Papertrail as a free log aggregator. We didn’t use it much, but it was good to poke at during specific events (puzzle release, hint release) to make sure requests were flowing.
-
Email: Postmark
(Basic, $15/mo)
- A puzzle hunt sends emails for registration, password resets, and hint responses (“transactional”); and errata and announcements (“broadcast” / bulk). For MH24, we used Mailchimp/Mandrill but had some issues with deliverability and pricing.
- We know some hunts have used Amazon SES, but we didn’t trust it with bulk email ratelimits. I’ve personally found AWS to be complicated in general, and prefer avoiding it where possible.
- Postmark was appealing because it supported broadcast streams, default way to spread bulk email over a period of time. We didn’t have to implement that logic ourselves, and could just send a small number of bulk requests.
- By the end of the hunt, we’d sent around 3k emails (~1.2k transactional, and ~1.7k broadcasts).
-
DNS, Caching: Squarespace (registrar, $12/yr), Cloudflare
(DNS + caching, free)
- We were using Google Domains for MH24 before it got rolled into Squarespace, and didn’t feel the need to migrate. We also used Squarespace to route email to a shared GMail inbox.
- We used Cloudflare’s nameservers and proxied traffic through them. We cached static resources with a Cloudflare Cache Rule, and used Whitenoise to help serve them. While we didn’t anticipate network bandwidth to be an issue, a large part of the hunt site is static assets, such as images – and caching helps save a lot of bandwidth for these.
I didn’t load-test the hunt site, but also didn’t anticipate our load being high based on registrations and hunt format.
In total, I spent ~$100 to run the hunt and keep it up for a short time post-hunt. (Compared to ECPH, our increased costs came mostly from Redis and email.) I'll soon migrate the hunt to be fully static and hosted on GitHub pages, reducing costs to just the domain name.
On the development side, I’ve open-sourced the website’s code on GitHub. There's still a few changes that I need to make to fully static-fy the site, but those will be eventually published as well (unlock simulator, partial messages, etc.). I made an explicit point of requiring little software to run besides Python, including not requiring Docker for development (or NodeJS). Some of our design decisions that other hunt tech teams may be interested in include:
- uv as a Python project management tool
- Huey versus e.g. Celery to support a local task queue without Redis and still support Redis in production
- SQLite locally, and being OK with database differences between development and production. gph-site doesn't do anything particularly fancy, but a few of the caveats include:
- Some unsupported features (e.g. DISTINCT ON isn't in SQLite3)
- Much more difficult to load production data into a local database
- Rewriting the Discord integration to be fully synchronous
What's Next
We’re not sure if we (TTBNL) will be writing another hunt – we don’t have enough rejected ideas to make an epilogue to the epilogue. Keep your eyes out, though!
In the meantime, this spring has a lot of hunts going on! Check out the Puzzle Hunt Calendar for upcoming hunts, including:
- March 28: Teammate Hunt 2025: Matt & Emma's Deep-space Disaster
- April 12: CMU Spring 2025 Puzzlehunt
- April 19: Brown Puzzlehunt
- April 25: Huntingale
Credits
- Chief Editor
- Bella (Songshan) Guo
- Editors
- Daniel Kramarsky, Nathaniel Barnett
- Cat-Herders
- Bella (Songshan) Guo, Ethan Ordentlich
- Puzzle Authors
- Barney Rafter, Bella (Songshan) Guo, Brent Barron, Charles Steinhardt, Daniel Kramarsky, Frankie Rady, Haley Moore, Jacob N Scott, Jayden Yamada, Jeremiahs Johnson, John Bromels, Linus Hamilton, Michael Andersen, Nathaniel Barnett, Nick Poulos, Paul Melamud, Stephanie Chen, Summer Barron, The Dan Miller, Todd Becker, Wesley "Adalbert Zollern" Zhang
- Tech
- Ethan Ordentlich
- Factcheckers
- Ethan Ordentlich, Jayden Yamada, Nathaniel Barnett, Sophia Caspe, Timwi
- Testsolvers
- Alina Khankin, Andrey Gorlin, Jennifer Kidder, Joseph Lubars, Logan Pribyl, NYWanderer, Sophia Caspe, Thomas Snyder, Tony Martin, Ursula Gartz, and most puzzle authors
- Art
- Frankie Rady
- Story
- Nick Poulos

Fun Stuff
A Few Tips
Thanks for everyone that submitted an instructional video! Here's a few of our favorite submissions. (If you want to have anything removed from here, or to add your submission, please email us.)
Notable Guesses
Here are incorrect guesses throughout the hunt that we found funny or otherwise interesting:
Puzzle | Guess | Team(s) |
---|---|---|
A Few Tips | NAH WERE GONNA DO THE META THANKS THOUGH | ௵ TAMIL MAP OF ODYSSEUS' JOURNEY (shortly after getting the instruction) |
A Few Tips | SURE HOPE YALL WONT TEAR APART MY SOLUTION AND GIVE IT A 110 SCORE LIKE THAT ONE PUZZLE LAST GPH | The G@l@is Symmetry |
A Safe Car | THE CLUEPHRASE THIS PUZZLE IS USING IS QUITE STRANGE AND CONFUSING WE CANT EVEN SOLVE ONE BEFORE THE HUNT IS DONE WHAT KIND OF ANSWERS ARE YOU CHOOSING | Isotopes Puzzles United |
Box Offer | AT LONG LAST THIS EXTRACTED INTO SOMETHING THAT CONTAINS THE LETTERS P AND S | Epic Cycle of /r/GreekMythology |
Box Offer | A NEW HOPE DIAMOND | (multiple) |
Box Offer | STILL DRY | Les Gaulois |
Fetched | STOP TRYING TO MAKE FETCHED HAPPEN | Desolate Abyssal Netherworld |
Hephaestus | METAL CAN DONG | (multiple) |
Ripple Effect | WAHH I DONT WANNA GO THRU THE FOB ONE | Frumious Bandersnatch |
Ripple Effect | THE SONG CAME OUT IN NINETEEN EIGHTY NINE LIKE THE WORD VALUE PLUS NINETEEN HUNDRED | Frumious Bandersnatch |
Transfers | WAIT ONE MORE HOUR PLEASE | Isotopes Puzzles United (submitted 1 minute before hunt end) |
Q&A
A lot of the questions were answered in sections above! Here's a few more. (Questions have been edited for clarity.)
I had a rough time with the later puzzles. Are there other easier puzzle websites that I could do to practice?
"Easier" is definitely a spectrum, and how hard someone finds a puzzle will vary a lot from puzzler to puzzler. Some hunts that were written for beginners include:
You can also find a list of past hunts on Puzzle Wiki.How were the Toys' Cafe graphs generated?
I used the Python library networkx's kamada_kawai_layout (except for tic-tac-toe where I used the bfs_layout). Since the layout functions have randomness, I tried each graph several times and picked my favorite.
For the authors of Ripple Effect, what were your favorite things you got to shoehorn in?
- JJ: Coco Crisp, of course. And the section with EBB, Nuke Laloosh, Crash Davis, Crush Davis, Tove Lo, and Tupelo Honey (Puzzle I).
- JJ: It as also amazing that James Dean was really in 3 major movies, though in 2 of them he played characters that had last names that anagrammed to the other (though that apparently was intentionally done by producers).
- Paul: My best discovery was that KIM JONG-IL with its only duplicated letter ROT-1, is comprised of a string of consecutive letters of the alphabet.
- JJ, Paul: After we'd already decided on the target word MUSICIAN / 89, and the Billy Joel connection we wanted to make - we found that three of the FOB members had last names equal in value to the target word, while the fourth was just one off. Then we saw that person's role (bassist) was 89 so we got to include him anyway
- Paul: Only after test solving did we realize we had to tighten up the unknown category for the reality shows. It was just a coincidence that all of the ones used in the puzzle + the one we needed to clue all had the same word value! So it was as insanely simple to fix as it was a coincidence.
Is there a reason why so many puzzles featured cryptics?
No particular reason -- it just kind of ended up going that way, and we decided that the imbalance didn't need correcting.
Hephaestus doesn't have a planet AND gets assigned to... Ohio... AND gets cut from Mystery Hunt? Truly cruel.
At least we didn't send him to Nickelback!