By Eric Burden | May 3, 2020

KeepCount was the result of a side project that ended up being used as a work project whose lessons-learned got applied to another side project. Relatively short, strange, trip. The real beginning was my desire to pick up Django, a Python web framework that I would strongly recommend, as a new skill. In doing so, I wanted a project setup that I could easily test, replicate, and deploy into a production environment at need. By leveraging the power, flexibility, and reproducibility of Docker and Docker Compose, plus a few shell scripts, I was able to produce a reasonably simple deployment for fresh Django projects. You can find that project on GitHub to explore (code contributions and comments are welcome!).

The biggest benefit of a Docker Compose setup was the ability to integrate multiple services into a single application. The default set of container services for this project includes Traefik (for routing, reverse proxy, and SSL), PostgreSQL (the database), Django, Celery, Redis (for Celery), Adminer (for database access/queries), Nginx (Django static file server), and an ‘autoheal’ container to bring back up any containers that fail. I haven’t included a deployment script for Docker Swarm mode yet, but I’d like to, eventually. I’m also considering adding Grafana to the stack (I’ve recently discovered it, and I think it may be love at first sight).

Very soon after I had my project setup more or less the way I wanted it, my employer (The United Way of the Mid-South) announced internally that we would be hosting a call center where individuals affected by the COVID-19 pandemic could access needed social services through our Driving The Dream initiative. Of course, we needed a way to manage the calls, track internal call center performance (new territory for us), and receive online requests directly from individuals. Thus, a project I had been working on in my spare time was leveraged to produce In about a week’s time, we had a fully functional online request platform with email alerts for clients and management interfaces for logged in users to track incoming/outgoing calls, referrals to services, followups, and outcomes for individuals. I was even able to add a reporting page with charts for executive leadership and upper management to keep a finger on the pulse of the call center. Needless to say, I was pleased with how the project had turned out and how easy it was to deploy for public use.

While shopping at a local grocery store (I left my wife and kids at home to limit our family’s exposure), I noted how the store was attempting to enforce a limit of 90 people in the store at a time by having an employee at the entrance marking down entries on a sheet of paper and radioing to a co-worker at the exit to check how many people had left, presumably to know whether it was safe to allow more people inside in order to maintain proper social distancing. It struck me as a bit cumbersome, and I mentioned it to my wife when I got home. As the phased re-openings were announced with 25% and 50% capacity limits for businesses, I kept thinking about the system in place for one of our larger grocery stores and wondering how our small businesses would manage their own capacities. Restaurants seemed like they would have an easy time of it, since they’re already used to keeping up with the number of tables in use and where extra capacity for seating is, but what about gyms, libraries, small clothing stores, churches, and other smaller businesses and gathering places?

Based on the success of the Driving The Dream call center application, I knew this was a problem I could solve. So, KeepCount was born. The application is super simple, just create a new ‘counter’ on the home page with a name you can remember and a maximum value (maximum occupancy). Using either the counter’s name or QR code, share the link to the counter with anyone else at your location who is responsible for marking entries/exits of individuals, and you’ve got an up-to-the-second count of the number of people in your small business or other gathering place. You could even share the counter with a manager in the back office who can monitor capacity, or even theoretically put the count on a screen in your entryway to allow patrons to know when it’s OK for someone else to come in. There are probably more creative uses as well I haven’t thought of.

As of May 1st, 2020, I have reached out to local Chambers of Commerce and other small business-related entities to share this application. It’s free to use, and I hope it helps make managing business processes in the new normal a bit easier. I’ll be monitoring the application for usage, and will update this posting with final results.


The web application for KeepCount has been taken down as of January 2021. Based on database activity, it looked like there were a few folks who made some use of the application around the middle of 2020, but usage tapered off fairly quickly. Since the mandated capacity limits were lifted in my area around that time, I suspect few saw a need for it. All in all, as a project I consider KeepCount to have been a success in the sense that I learned a great deal about deploying resilient services using Docker Swarm, and did a bit of good in the process.

comments powered by Disqus