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.
Today, I focused on enhancing the transfer reliability and adding features to the AI Portal Agent, a crucial aspect of my vision for the agentic web. In an 8-hour deep dive, I tackled several issues surrounding incoming call handling that were critical for ensuring a seamless user experience. My primary goal was to create a reliable system for transferring calls from our AI agents to human owners, and I'm pleased to say that I made significant strides.
First off, I addressed a major pain point: the audible incoming-call ring was buried behind the portal slide-over, which meant that owners couldn't respond in time. I fixed this by raising the ring's z-index to ensure it would always be audible, regardless of what was happening on the screen. Additionally, I extended the visitor's wait time from 45 seconds to 90 seconds. This change alone took a while to implement as I had to adjust not only the ring but also the time-to-live (TTL) for the owner-ring/status. This was a critical adjustment to ensure that the handoff could reliably complete, especially during peak times when multiple calls were incoming.
Alongside the audible ring, I implemented a feature that repeats the call tone every five seconds while a handoff is pending. This was necessary to provide a better user experience, especially since the ring only works in the foreground. I had to ensure that this feature would work within the constraints of a global IncomingTransferRing, which took a bit of back-and-forth to get right. I learned that ensuring a good user experience requires a balance between functionality and usability, especially when dealing with browser limitations.
However, the day wasn't without its challenges. I encountered a significant bug where the handoff ring was unreliable due to the owner’s socket dropping during backgrounding or server restarts. I discovered that the ownerSocketCount was zero, which meant that the real-time ring notification was reaching nobody. To address this, I had to implement a Redis-backed store to persist the pending transfer and status, which now allows the owner’s browser to poll every four seconds. This was a substantial fix that consumed a lot of time, but I learned invaluable lessons about the importance of maintaining state across server restarts and background actions.
I also added server-side diagnostics to help pinpoint further issues with warm transfers. By logging the results of transfer attempts and tracking socket counts, I can now identify when a transfer fails and why. This diagnostic feature will be crucial for future debugging, allowing me to catch problems before they impact users. I had to remind myself that building a one-man-show company means investing time in the right diagnostic tools to ensure reliability, even if it feels tedious in the moment.
On the feature front, I rolled out the first phase of the AI Portal Agent warm transfer to the owner. This tool is gated on whether the owner is accepting calls and rings them with the visitor's name and interest. If the owner accepts, the visitor is admitted to their Jitsi room. If the owner declines or times out, we fall back to booking or lead generation. This addition was a major step forward in creating a more interactive and responsive agentic web experience, and I’m excited about the potential it brings.
I also took some time to clean up the admin interface. I renamed the 'Talk to Ai Agent' to 'Talk to AI Portal Agent' to distinguish it from GIGI, the global assistant. I consolidated the admin navigation into AI and System tabbed sections, allowing for a cleaner dashboard experience. I realized that as I build this platform, maintaining a clear and intuitive user interface is just as important as the underlying functionality. It’s easy to overlook UI when you’re deep in the code, but it’s a vital part of the user experience.
Overall, today was a mix of challenges and victories. I spent a long 8 hours immersed in the code, and while I encountered several bugs, I also shipped several important features that will improve the overall transfer experience. It's a reminder that building this one-man-show company with AI as my team requires patience and resilience. Each day brings its own set of challenges, but I’m confident that the progress I’m making will lead to the billion-dollar valuation I envision. As I continue on this journey, I’m excited to share these insights and improvements with you all, hoping they provide value to other solo builders out there navigating similar paths.