A Django project to handle hunt-agnostic puzzle management for puzzle hunts such as the MIT Mystery Hunt.
- Models, API and events system for common hunt behaviour.
- Managing incoming interactions, hint requests, contact requests, and emails.
- General task management framework for incoming items.
- Progress dashboards.
- Logging system.
- Settings system.
- Lifecycle management.
- Common view decorators.
- User/team authentication and impersonation.
It provides a core
package with models and APIs common to most hunts. The core
package aims to have no dependencies on other spoilr packages, or on code specific to the 2022 hunt.
It also provides a series of plugin apps for features such as email management or progress dashboards. This encapsulation of features into their own Django app is to better organize code, and to make selecting individual features for reuse simpler. Each plugin app is responsible for one feature, and should mostly depend on only spoilr.core
. However, it may depend on other apps or on 2022-hunt specific code where appropriate, such as a dashboard showing 2022-specific features.
There's also the hq
package. It contains the HQ home page dashboard, some common stylesheets, and some utility views and behaviours such as task management. It also contains some "legacy URLs" that haven't been migrated to the plugin-style architecture yet.
Spoilr surfaces tasks for HQ to act upon so the hunt can proceed. We've defined common models and actions for tasks such as claiming them, snoozing them, and resolving them. These are used throughout other spoilr plugins as appropriate.
do_tick
needs to be scheduled peridically throughout the hunt. Teammate used celery to visit the endpoint once a second.
Besides general cleanup, the largest changes made by teammate were an overhaul of the email and hint models to more closely match tph-site. This significantly increases the complexity of these modules.
The interactions module is the least polished. It is likely that replies to emails sent from the interaction dashboard will not be threaded properly.
Many locations requiring changes for your hunt and a few that we did not get to are labeled FIXME(update)
This is heavily influenced by the 2021 hunt's version of spoilr and the 2022 hunt's version of spoilr