On the server-side you probably want some kind of transaction log or event sourcing / CQRS architecture...
The idea being that you don't write directly to a persistence layer (database) but rather that you trigger events onto some kind of queue. These events then persist in the queue for a time and then can be asynchronously acted upon. This allows for a number of interesting patterns, including undo, replay, etc.