Over the last nine months, I have been working on a custom-built application called TallyMate. This application has been purpose-built to assist Hope Media with their major fundraising appeals, conducted live on radio and online. It’s purpose is to integrate multiple systems and provide easy-to-use interfaces to help manage the various tallies.
This software started off as a way to replace the old-fashioned whiteboard at the centre of the tally room with a digital interface on some TV screens. The whiteboard showed the current tally and challenge status. TallyMate has taken this further to display other items of interest – including scripts, timers, phone line status and various stats.
As it’s heart is a web GUI which shows you all the donations (and pledges) coming through in real time, and giving the Tally Producer options on what to do with those donations. Typically donations would be added directly into the main tally. This is simple enough, but things get more complicated when you start adding in challenges and matching grants. This software provides an easy way to setup and run a variety of challenges to be used on air, and link your various tallies and challenges together.
Tallies are published in realtime to the various TV screens around the building, mobile devices of staff and volunteers, and to the public website.
The application has quickly grown over the past two on-air appeals, taking on user suggestions and feedback while still maintaining the underlying simplicity which makes the app what it is. Some other functionality includes:
- A ‘thank you’ list for announcers to read
- Detailed statistics
- Scripts and notes for ‘coaches’ to share with announcers
- Matching grant information
- A map of donors (to show a heat-like dispersion of donor locations)
- Access to various, configurable TV display layouts based on various needs
- Various realtime data from our donations CRM software
- Realtime call data from Mitel phone system
This application was originally built in PHP, but later we added in a realtime component in Python. By building a threaded Python application (based on Tornado), we were able to deliver realtime data to clients very quickly. Often we would see donations in TallyMate before the caller had actually hung up.
The PHP application is simple enough, reading and writing from various data sources such as the local database, XML & JSON files, third-party API endpoints, CRMs, and so on. The Python application also interfaces with a similar set of data sources but keeps an in-memory cache to speed up delivery to a multitude of clients.
One of the big challenges with the realtime Python app was with the CPython Global Interpreter Lock (GIL). A combination of threads, processes and offloading certain tasks to other services allowed us to work around these challenges and deliver a stable, zippy application. The Python component only made it’s way into the application for the most recent appeal, and it improved performance significantly over the PHP-only application.
This software is fully responsive (from the web GUI right through to the TV screens), making it fully compatible with desktops, mobile devices, and even embedded PCs.
This software has been through two on-air appeals so far, and has proved very useful.