It was a quiet Sunday, but the quiet was productive. I spent the day tightening up the email-ops repo, focusing on two things that had been nagging at me: how we route Gmail accounts and how we handle the messy reality of creating new mailboxes.
The bigger shift was under the hood with the Gmail broker. I needed to route Gmail broker connections through a dedicated link-only IdP alias. This wasn't just a config tweak; it required touching the Keycloak broker service and the connected accounts service. I had to ensure that the routing logic in the engine mail provider could handle this new path without breaking existing flows. It meant updating six files, mostly in the backend auth and mail provider modules. The goal was cleaner separation of concerns, so that Gmail doesn't accidentally bleed into other broker logic.
While I was in there, I also fixed a classification bug. Keycloak was returning a 400 "not-linked" error for the broker, and our system was treating it as a failure. It wasn't. It was an expected miss in certain flows. I updated the Keycloak broker service and its spec to classify this correctly. It’s one of those small fixes that prevents a lot of confusion downstream when debugging auth issues.
I needed to route Gmail broker connections through a dedicated link-only IdP alias.
The other half of the day was about visibility. When you create a mailbox, you want to know it worked. I added an honest create receipt and row controls for lane and default settings. This touched seven files across the backend controller and service, plus the frontend mailbox page and API layer. The change is 347 lines of additions, mostly because I wanted to make sure the UI reflected the state accurately. No more guessing if the mailbox was actually created. You get a clear receipt and controls to manage it immediately.
I also took some time to document the work. I updated the changelog to version 0.7.0, added a status update, and wrote a runbook for the Gmail broker alias split. Documentation is part of the code, after all. If you don't write it down, you'll forget why you made those changes next month.
Also today: I didn't touch any other repos. The focus was narrow and deep.
It was a day of precision. No big launches, just better plumbing and clearer signals. The system feels a bit more honest now, whether it's admitting when a link is missing or confirming when a mailbox is born.
Real product captures — click any to enlarge.