Python student builds a beautiful scavenger hunt to propose to his girlfriend

image

A few weeks ago, Michael Nickey shared his wonderful capstone in the Thinkful student community. We thought it’d be a great idea to discuss his project in-depth and share some advice with fellow students. Note: you can work through the scavenger hunt in it’s entirety by using the “Click Here” links at the bottom of each step.

What was your goal coming into the Python course?

Basically, I wanted to get to the point where I was qualified to find full-time employment and possibly some freelancing gigs. Thinkful offered the 1-on-1 mentorship and a skill set I was looking for. I knew I wanted to learn Python, I had studied it a bit in the past, but need more help in actually building things. I was also excited to pick up and new concepts like SQLAlchemy and markdown.

Today, I’m a technical analyst now contracting to Google where I build Python and SQL scripts. What I picked up from Thinkful (beyond the actual concepts) has helped me a ton. I can think like a developer. I still use Thinkful’s resources (Community & Career Services) to this day. 

Walk us through your experience leading up to your capstone project.

The first couple units were fairly easy in retrospect. FizzBuzz was a good warmup, then we moved on to ArgParse with Snippets and so on. The hardest part for me was fully grasping object-oriented programming. I knew what it was referring to at a high-level but hadn’t actually used it before in any programming language. The Bicycle shop lesson was great in helping me understand that concept. We were basically asked to create a shop…that sells bikes. However, there’s a lot of small things that you need to keep track of … Inventory, customers, costs, profit and the like. All these became classes with different attributes and methods. It really helped bring the shop together and gave me a much better understanding of Python OOP.

After the Bicycle Shop project, I moved on to Tuneful. That was a whole new world. We were asked to build a site that you could upload, download and execute files from. That was next big jump. I learned how to implement file uploads & downloads but the most important aspect that I learned in here was SQLAlchemy which allows you to create a data object from a SQL query.

How did mentorship at at Thinkful help you learn faster?

One thing many of the mentors do really well is that they don’t give you the answer. They give you a direction to get the answer. “If you do this, what do you think will happen?”. “Let’s take a step back, what are you trying to do? Why?”. It’s one thing to just know the answer to something but it’s another actually learn how to problem solve.

Slack was really helpful. It’s basically a community of mentors and students. We have mentors we can bug at almost anytime to answer our questions.  Sometime’s that’ll mean walking through the problem step by step, other times they’ll share with you a specific resource or StackOverflow answer that explains the concept well. Shout out to Chris or (@rosuav), for really helping me in this whole process. He’s a rock star in the Python world. It was great getting advice from him.

What was the inspiration behind the scavenger hunt?

I had just finished up the Thinkful’s Python course and was going to start my final project. I had started dating Rachelle at the time. We were really interested in GeoCaching. The basic idea is that you go hunting for a small object like a film canister (remember those?) and once you find it you mark it as complete, sign the paper log inside and move on to the next one. This is a phenomenal way to explore new areas. It’s great for kids & adults - and it’s free! So I decided to make a scavenger hunt similar to that.

When I started building, our relationship had strengthened, so I ‘pivoted’ to a proposal that incorporates something similar to GeoCaching but is way more personalized. Since I had been playing billiards for years on a local team that she recently joined, I recruited our whole team to help her out in the hunt. They were given answers to the next step if she was stumped. While she had no idea what I was working on, when she was given a URL to my project, she immediately got it. The good folks at Coffee meets bagel even recorded a video for me. That’s the dating site we met on and it’s also on the front page of the scavenger hunt website!

That’s awesome. Talk about the development behind the project.

The frontend is mainly bootstrap, with some customized grid columns, basic flask and jinja templating to keep things uniform between pages. That’s one of the things I learned in the Thinkful course, turned out to be great. It’s a very easy way to create a theme that looks professional yet is highly customizable.

While building the app, it was a continual project. It started with one page then moved to two, three etc… all the way until I had about 10 pages. Using python and Flask to pass variables back and forth was key. After I had completed the first two pages, making the remaining pages was simple.

When I felt it was ready for deployment I used Heroku to get that working. This was another thing that we learned in Thinkful’s coursework. Even the flashing of messages that would give the user (Rachelle) feedback on their answers or submissions. Using the flashing os messages really gave this a nice feel to the page.

However I realized - what if she simply didn’t know the answer or couldn’t figure out my puzzle? That’s when I decided to involve key conspirators to help her along the way. Everyone on the pool team, including her own sister, was jazzed about being part of this secret project. There were many times that I had to hide my screen from Rachelle as I was working on it. I’m sure she became suspicious of my nefarious activities.

After adding the co-conspirators, I wanted to add messaging to the people that were involved. The idea was to give the people helping me pull this off a clue to where she is in the entire puzzle. This was good because at each stage, she would meet someone and that person needed to be ready. So I used Python’s SMTP library to send SMS messages from my account to their phone. I had done something similar as a side project that would take some text that I wrote, break the message up into ‘chunks’ and send her a bit every so often. That was the biggest refactor, I was really proud to get that working.

Here’s a sample of the code I wrote.

server = smtplib.SMTP("smtp.gmail.com", 587) server.starttls() server.login(from_address, password)

message2 = "Heya Johnny, She’s on her way. Get ready and thanks."

server.sendmail(from_address, johnny_number, message2)  
return redirect(‘step_five’)  

When I first attempted this I realized that I needed to keep some things private from my GitHub repository. However, I couldn’t push this to Heroku since the file that contained these variables was in my .gitignore file and therefore couldn’t be seen by Heroku. Looking into how to do this, Heroku was able to help out with environmental variables. This allowed me to set variables and use them without them being exposed to the entire world.

Lastly, I wanted to give her a way to move forward in case people had emergencies and couldn’t make it. So, I added what I call cheat links. Simple links that would allow her to move on to the next step. In retrospect I should have set a timer on these after the first submission.

Now let’s get to the exciting part…what was her reaction?

She was very surprised that this was what I was working on the entire time. Very happy about it. There were things in there that were very personal and intimate. Things like where we met or our first date location. The site became a living working project. Having such an intimate interaction with the project, any project, helped me realize that not only was this the perfect proposal for us but how much I have grown as a developer, a person and a couple.

Any advice for students in your position?

Overall, I learned a lot building this capstone. In the past, I would be given a task or assignment and I just had to do it. I didn’t have a project to get inspired. With the scavenger hunt, I had to put a creative spin to it. Looking at a project as a whole can be intimidating. So, I had to break down a large problem into smaller bits. Those things were in themselves not hard to do but putting together the pieces was exhilarating. I had to do a lot of research to figure out what I needed, I learned how to ask the right questions. I learned to be okay with saying “I don’t know”.  It’s okay when you don’t know. That’s a pivotal point in learning for you.

You just need a project to get inspired by, something to hone your creativity. Rachelle was mine. She said yes :)

image