Documentation page mostly finished, but technical details still tbd

Scavenger Hunt

My Marriage Proposal

/projects/raw/scavengerhunt-leveloverview.png

Background

When you've been in a relationship for more than 15 years without commiting, the proposal better be big when it finally comes. So what's a guy supposed to do? Romantic trip, beach, sunset? Nice, but not our style. Dance performance and singing in a very public space? Seen too often on Youtube, plus I can neither sing nor dance.

I also wanted to get my feet wet with the Flask web framework. Why not combine both and have fun planning and executing the proposal, at the same time learning usefull skills.

/projects/raw/scavengerhunt-level41.png

So I sat down and designed a web-based scavenger hunt that I gave her on her birthday (coincidentally our anniversary). The plan: there would be 42 levels that she has to solve, with diverse tasks. Some levels should include our friends and family, others contain references that only she will fully understand. As some levels may take a long time, two or three levels can be 'open' at the same time. Whenever a level is solved, a new level is automatically opened (or two new levels; or none if the number of open levels has to decrease again). However, there is a timeout until it can actally be read and solved; there is another timeout if the proposed solution turns out to be wrong. Most levels can be solved by entering a solution (a number, a code hidden in a geocache, a password obtained by solving the task); others required uploading some proof (normally, a picture). After revealing my plans to colleagues, I was forced to add a public twitter bot, so those in the know could track the progress. The levels were added as the hunt progressed, adapting to what kind of levels were received well.

tl'dr: What did I get out of this?

/projects/raw/scavengerhunt-finale.png

I'm now a happy Flask and Bootstrap user, with projects ranging from small tools like a web front-end for my LED lamp, through one-offs like a tool to plan and guide a coke tasting blind trial at work, to a fitness motivation and tracking app (still in closed beta).

This proposel also made it into the economics curriculum at a local school (as an example that a declaration of intent is not restricted to a written contract or at least an oral agreement -- a mouse click can be enough).

Oh, and I don't have a girlfriend anymore (in case you can't read the log file: she said (actually: clicked) 'Yes').

/projects/raw/scavengerhunt-checkins.png

Technical details

This was my first real Flask app, so in retrospect there are many details that I would make differently if I would start again.

TODO write about the following concepts:

  • account management
  • different basic types of levels
  • "special" levels with extra-code
    • checkins from other
    • js-enhanced (sort lyrics
    • connect from different ips / at certain times
    • only show parts of image, depending on time
    • solve logic puzzle
  • timeout management

There now is a chocolate-themed spin-off for my future sister-in-law.