We built this app at OpenOakland to track our hack night attendance.
On the frontend, we integrate with slack using a slash command to make it dead simple for brigade members to check in each night:
On the backend, we store everything in Google Sheets making it easy for any member to access and analyze our attendance information. (Our members names are blacked out below to respect their privacy)
Currently Gaurav is the only person working on this but if you are interested in getting involved, just let me (me being Gaurav) know. You can email me at gaurav@gauravkulkarni.com or hit me up on slack if you're on either the OpenOakland or Code for America slack.
Having both a slack app and a google app is required to be able to dev on this repo and I'm still in "dev on the prod apps" point with this repo. So if you're interested in working on this project, just hit me up and we can work through making the dev experience usable.
On the other hand, if you just want to tell me what's broken or what you wish was different, open up some github issues. I'm all for that.
This is just in case you're curious. There are a few key dependencies:
This is written in python 3. Really 3.6 or higher
We're hosted on heroku at hacknight-checkin.herokuapp.com. Nothing actually lives at that index page though.
Flask (app.py)
We need a webserver for a couple reasons. Mostly oauth flows with slack and google, but also to receive the slash commands that members send. We use flask
APScheduler (app.py)
APScheduler is a super basic scheduler library for python. We use it to periodically sync data from redis to google sheets.
Slack (slack_client.py)
Mostly it's just handling receiving the /checkin
slash command from users though we occasionally use the web api. For instance, we grab users' display names to make the attendance sheet readable.
Google Sheets (google_client.py)
We store everything in google sheets. We're using the sheets v4 api. You can find the quickstart for the API here.
Redis (redis_client.py)
Redis is our datastore. All keys are namespaced with the prefix: checkin:[your slack team id]:
.