You may have heard of Amazon’s Dash Button, the physical “Buy Now” button for your home. With no interface other than a logo and a large round button, each Dash is a product-specific wi-fi device, and tapping it automatically places an order to have that product delivered into your waiting arms.
Stick one on your washing machine, and when you run low on detergent, tap! A box of Tide shows up two days later. Stick a few in your cupboard, and tap! Tap! Tap! Goldfish crackers, Cheez-Its, Doritos, on their way! There are hundreds of Dash buttons available to deliver the instant gratification of consumerism at its finest—or worst, depending on your perspective.
Why not push a button and do some real good?
It was my friend Katherine who made the comment “I wish there was an ACLU Dash button I could push to donate any time I read about the latest offense from Trump.” Her language was sliiiiightly more colorful than that, but it got me thinking: why reserve that instant gratification for physical goods? Why not push a button and do some real good?
After its release in 2015, savvy techies quickly realized that a Dash Button could be hacked and subverted into performing other tasks, from ordering pizza to tracking baby poops. It wasn’t simple and it definitely wasn’t supported by Amazon.
In 2016, Amazon responded to the demand and released a customizable version of the Dash Button — the IoT Button, “IoT” being an abbreviation for “Internet of Things.” Tech-minded users could now more easily build and program their own Dash-style buttons.
I ordered my IoT button and dove into the server-side programming while I waited for it to arrive.
There’s no donation API (Application Programming Interface) that I could find to automate the process of sending money to the ACLU, so the first order of business was analyzing the donation form so it could be filled programatically and submitted. Name, address, email, credit card info — all pretty straightforward.
I wrote a script in Python using the Mechanize library, then built that into a function at Amazon’s AWS Lambda service. Lambda lets you run small programs like this that don’t need a full time server—you literally pay only for the milliseconds that your script runs. When it’s triggered, the script loads up the donation page, fills the fields with my name, address, and credit card info, then submits it. If it’s successful, it sends me a text message to let me know.
Using a prepaid gift card so that my bank account wouldn’t empty if the script got stuck in some kind of infinite donation loop, I clicked the “Test” button on Amazon’s site. Success!
Two days later the IoT button arrived and I dove into the work of hooking it into the script I’d built. It’s supposed to be almost plug-and-play, with a helpful iPhone app to connect and set everything up, but the app was never able to complete the process. After hours of frustration and troubleshooting, I eventually got the IoT button registered manually and linked it to the script I’d written. Another test, another $5 to the ACLU.
Finally, because looks rank right up there with function, I designed a graphic for the button, printed it, and stuck it in place so it looks more like a real Dash button.
The button resides near my laptop now, every press sending another $5 into the fight. Sure, I could set up a recurring donation every month, but then there’s not the tactile thrill of the press and I wouldn’t have learned my way around this technology.
I understand that not everyone can build their own ACLU Dash Button, so until they come out with an official version, you can keep making donations here the old-fashioned way.
If you do want to try making your own, you can download the code I used for the donation button, but I make no claims as to its suitability or security. It isn’t robust in any way—if they change a field name or the way the donation page works, it’ll break. There’s no error handling. It’s not PCI-compliant. There aren’t any safeguards to keep it from emptying your bank account if the button gets stuck down or your cat decides to paw at it. Use it at your own risk and don’t complain to me about it.