How it works
When you send a URL in an SMS to the number, Nexmo calls a webhook running on my laptop via ngrok. That then calls my Muki.js module, which converts the image at the URL to a format compatible with the Muki. This was easily the most difficult part.
The app then sends the image to the Muki using the module. It connects via Bluetooth Low Energy and sends a start command, followed by the image data, followed by a stop command.
Challenges I ran into
The Muki is powered by differential heat between the outside of the mug and the liquid inside it. After a while, the outside of the mug heats up and it loses its power. This is quite annoying when you're testing code which needs to connect to the mug in order to run. On average the mug lasts about 15 minutes. Very annoying.
There are a few bugs with the Muki.js module that I need to sort out. Particularly the bug where you can only send a new image once per time the Node app is run. I encourage you to buy a Muki and submit PRs!