Writing to a log table is, of course, the easy part. Should we bit off a little more of the elephant here?

Can we talk for a minute about what the "full circle" looks like here?

 1. A user initiates an action; let's say they change their username.
 1. An HTTP **request handler** gets a request.
 1. The request handler logs an event, something like `{"action": "change username", "username": "Charlie"}`.
 1. The request handler subscribes to the `username modified` stream.
 1. A **worker process** consumes the `change username` event.
 1. The worker process modifies the state of the `participants` table (updating both `username` and `username_lower`).
 1. The worker process logs a new event, `{"action": "username modified", "userid": 537, "username": "Charlie", "username_lower": "charlie"}`.
 1. The request handler consumes the `username modified` event.
 1. The request handler returns to the user's web browser.

That is the basic flow we envision, yes?