Awesome work.
After trying it out I was curious about the "timeout" mechanism. After a quick glance at the code, It appears the timeout is purely client-side. Which isn't a problem, but it won't stop any modifications to the client-side script from sending any number of 'increment_ring' events.