go back  38 - Build Your Own Hacktoberfest Checker With Bottle

This challenge write-up first appeared on PyBites.

Life is about facing new challenges - Kostya Tszyu

Hi Pythonistas, Hacktoberfest started. Let's make open source better and track our progress with a little app you will build using the Bottle web framework.

It's Hacktoberfest

DigitalOcean's Hacktoberfest is a month-long celebration of open source software. You can earn a cool T-shirt making four pull requests to any public repo on GitHub between October 1–31.

Potential projects you could contribute to are listed on their site but PRs you make for our code challenges count too!

The Challenge

Hacktoberfest Checker (code) is a neat web app to see how close you are to achieving the requirements (4 PRs) for a free t-shirt. It is written in JS.

We thought it would be a cool challenge to build this with Bottle (optionally adding the JS you'd like):

  1. Make a virtual env and install Bottle.

  2. Make a form to ask for the user. Optionally add GitHub login to retrieve the user automatically.

  3. Retrieve the PRs via the GitHub API. You can borrow the required query here (L15). Yes, the date range seems odd but it accounts for various timezones. It was taken from DigitalOcean's 'official' checker (as explained in this issue).

  4. Display the PR's and progress as (n out of 4). You can use these status messages (L67).

  5. (bonus) allow checking multiple GH handles at once so you can compare progress among fellow developers. It seems you can get this info in a single query - example.


To get credit PR your work to our Community branch of our Challenges repo. See detailed instructions here.

And remember: any of our code challenges you PR this month counts towards the Hacktoberfest goal, have fun!


Our goal is to learn and teach you Python through practical exercises. Learning a programming language is way more fun as a community!

For any feedback, issues or ideas use GH Issues, tweet us or drop us an email.

Keep Calm and Code in Python!

-- PyBites