Build Journal
Improving Transfer Reliability & AI Portal Features — June 10, 2026
I enhanced the transfer reliability and added AI Portal features to streamline call handling. Here's what I learned and shipped today.
What shipped
- Audible incoming-call ring — Implemented a repeating tone for incoming calls during transfer.
- Transfer reliability fix — Ensured the handoff ring reaches the owner reliably.
- AI Portal Agent warm transfer — Launched initial phase for seamless call handoff to owners.
- Admin interface improvements — Streamlined admin navigation for better user experience.
I spent my day working on improving transfer reliability and constructing more components for the AI Portal Agent. This is an important part of the vision I have for the agentic web. During my 8-hour deep dive, I worked on several challenges related to incoming call handling and user experience. I was especially motivated to build working technology that would allow AI agents to seamlessly transfer calls to human owners, and I am happy to report that lots of progress was made.
To start, I tackled one of the bigger issues: the loud incoming call ring was getting obscured by the portal slide-over, so owners would miss their chance to respond. I resolved this by increasing the ring’s z-index so that it would always be audible no matter what was going on on the screen. I even increased the visitor’s wait time from 45 seconds to 90 seconds. This change took a considerable amount of time to implement because I needed to modify the ring, along with the TTL (time-to-live) for the owner ring/status. This adjustment was particularly important because it meant that handoffs would be able to complete even during peak times, when multiple calls were coming in.
Along with the audible ring, I added a function that plays the ring tone every five seconds while a handoff is pending. I felt this was needed to enhance user experience, particularly because the ring works only in the foreground. I needed to make sure this would function properly with a global IncomingTransferRing, which meant a lot of trial and error. I understood that to provide a good user experience, you need to have a synergy of function and usability, especially with the limitations of browsers.
The day also had its setbacks. I faced a major bug that made handoff rings unreliable because the owner’s socket was dropping while backgrounding or restarting the server. I realized that the count of owner sockets was zero, which meant that the ring alert was no longer being sent to real-time participants. To solve this, I had to create a Redis-backed storage solution to persist the current state of the pending transfer and its status, which now allows the owner’s browser to poll every four seconds. This was a huge time investment, but I learned about the state management during server restarts and backgrounding actions.
I have added some diagnostics on the server side that would help figure out what issues warm transfers are experiencing. By attempting to record what results occur when a transfer fails, along with tracking the number of sockets, I can now determine when a transfer fails and what the reason is. This will be a big step to take when debugging in the future to catch issues before they affect the end user. It is important to invest time into the right diagnosing tools to ensure reliability, even if it is a tedious process.
As for features, I have launched the first phase of the warm transfer AI Portal Agent to the owner. This tool is activated based on if the owner is taking calls and will call them with the name and interest of the visitor. Should the owner answer, the visitor is sent to their Jitsi room. If the owner declines the call, or if the call is not answered in a set amount of time, we default to booking or lead generation. With this, we have taken significant strides towards building a more interactive and responsive agentic web experience, and I look forward to what else it can do.
I spent some time cleaning up the admin interface. I changed 'Talk to Ai Agent' to 'Talk to AI Portal Agent' to clarify that this is not GIGI, the global assistant. I also merged some admin navigation and made it into tabs for AI and System, which makes the dashboard experience cleaner. While building out the functionality for this platform, I also need to keep in mind the importance of a clean user interface. When building things out, it's easy to forget about the user interface, but it’s a critical piece.
Today was a mixed bag of challenges and wins. It’s been a long 8 hour day spent completely immersed in the code. I encountered a number of bugs, but I also shipped a number of fairly significant features that will improve the overall transfer experience. It’s an exercise in patience and resilience building this one man show company with AI as my co-pilot. Each day presents it's own unique challenges, but I am confident in the progress I am making toward the billion dollar valuation I have in my mind. As I move along this path, I'm looking forward to sharing these small pieces of progress and hope they help some of you solo builders out there on the same path.