Build Journal
AI Call Improvements & Navbar Fixes for Hashtag.org — June 3, 2026
I shipped several critical fixes to the AI call features and navbar on hashtag.org, enhancing user experience and performance. Here’s how I did it.
What shipped
- Tavus Video Fix — Auto-recovery from duplicate iframe instances.
- Navbar Improvements — Dropdown closes correctly after selection.
- Owner Bypass for AI Calls — Owners can now call their own portal's Tavus video.
- Free Layers Self-Heal — Automatic provisioning of Civic Pulse layers.
- Video Fallback Diagnostic — Clear reasons for voice instead of video.
Today, I set out to tackle some pressing issues within the AI call features and the navigation bar on hashtag.org. After a long 8-hour day, I successfully shipped 11 commits, including two significant features and nine essential fixes. These updates are crucial for improving user experience, particularly for those engaging with the Tavus video and navigating through the portal.
One of the major fixes I implemented was addressing the frustrating 'Duplicate DailyIframe instances are not allowed' error. This bug required the owner to click 'Connect' twice to start the Tavus video, which is not an ideal user experience. I resolved this by creating a silent recovery mechanism that destroys the stale instance and retries the creation of the call object. This fix should streamline the video initiation process significantly.
Additionally, I tackled another issue where the 'left-meeting' event was prematurely unmounting the Tavus iframe. This was causing the video to start and then refresh back to the portal image, which was incredibly confusing for users. I discovered that the Daily fires were triggering the left-meeting event before the join process completed, leading to a race condition. By treating this as an idle reset, I ensured that the iframe remains mounted, allowing users to hit 'Connect' to retry the same conversation instead of having to create a new one. This change not only improves usability but also helps in conserving Tavus credits, which is a vital aspect for our users.
Another important fix was the owner bypass for the aiCallTakeoverEnabled and operatorOnline gates on the /ai-call/start endpoint. Previously, these visitor-facing gates were preventing the owner from calling their own portal's Tavus video, while the embed functioned perfectly on hashtag.it.com. Now, owners can always communicate with GIGI on their own portal, regardless of the current operator's status. This enhancement reinforces the idea that the owners should have full control over their interactions.
On the navbar front, I made several adjustments to improve the overall user experience. I implemented a fix to ensure that the search suggestions dropdown closes correctly after selecting a portal, preventing stale-fetch responses from repopulating the dropdown. I also ensured that the dropdown closes on route changes, providing a cleaner navigation experience. These small but impactful changes contribute to a more polished interface, which is essential as we aim to enhance the agentic web experience.
In addition to these fixes, I also shipped a new feature for the free layers, which now includes a lazy self-heal mechanism. This means that any portal missing free Civic Pulse layers will automatically provision them in the background the first time its scan overlay loads. This eliminates the need for cron jobs or manual triggers, making it easier for existing portals to access Wikipedia and other free data sources like #panthernexus without any hassle.
I also made sure that the messages feature defaults the open inbox tab to the user's default portal, which is now set to #SPACE, rather than whatever was first in the list. This adjustment aligns with the user's expectations and improves the overall workflow.
Lastly, I implemented a valuable diagnostic feature for the owner video fallback in the ai-call. If the 'Talk to GIGI' feature answers by voice instead of the Tavus video, it now shows exactly why—be it a clone not being ready, system persona issues, or simply not being video-capable. This transparency is essential for owners to understand how to enable video and enhance their interactions.
Reflecting on today’s progress, I’m proud of the strides made, especially considering I’m building this almost entirely solo with AI assistance. The complexities of managing both the front-end and back-end of these features can be overwhelming at times, but the satisfaction of shipping a day’s worth of improvements keeps me motivated. Each bug fixed and feature added brings me one step closer to my goal of creating a one-man-show company with a billion-dollar valuation. Today was a testament to how even small improvements can lead to a much more cohesive and user-friendly experience on the agentic web.