Build Journal
GIGI Voice AudioWorklet Fix & Build-Safe Calls — August 28, 2026
I fixed the GIGI Voice AudioWorklet and made external calls build-safe to prevent deploy breakage. Here's how I tackled these challenges.
What shipped
- GIGI Voice AudioWorklet Fix — Self-hosted the rawAudioProcessor AudioWorklet to restore voice functionality.
- Build-Safe External Calls — Implemented encapsulation for all build-time external calls to prevent deployment breakage.
Today, I focused on enhancing the reliability of my project by fixing the GIGI Voice AudioWorklet and ensuring that all external calls during the build process are safe. This was crucial because the site was breaking almost daily due to live third-party calls during the static build of nearly 9,000 local leaf pages and sitemaps. The challenge was significant, but I managed to ship a feature improvement and a critical fix in about an hour.
The first issue I tackled was the persistent failure of the voice agent due to the rawAudioProcessor AudioWorklet not being self-hosted. After the Content Security Policy (CSP) token fix, which allowed the session to restart over WebSocket, I discovered that audio capture was still failing. The SDK was trying to load the rawAudioProcessor from an inline blob, but my strict script-src policy was blocking it. The error message “Failed to load the rawAudioProcessor worklet module” was a clear indication that the agent was disconnecting due to this issue. It was frustrating to realize that while I had already self-hosted other components like audioConcatProcessor and libsamplerate to avoid such problems, I had missed the input worklet.
To resolve this, I quickly set up self-hosting for the rawAudioProcessor. This involved pulling the worklet module into my server environment and ensuring that it was accessible without relying on any external blobs. The fix was straightforward but required a solid understanding of how the worklet interacts with the rest of the voice agent's functionality. Once I implemented the changes, I conducted a series of tests to ensure that the audio capture worked seamlessly, and I was relieved to see that it did. The voice agent was back online and functioning as intended.
The second part of my day was dedicated to making all build-time external calls build-safe. This had been a thorn in my side for quite some time. The static build process was trying to make live calls to various third-party APIs like Overpass, Census, Wikipedia, open-meteo, and Google. If any of these services were slow or down during the build, it would cause the entire deployment to break. I spent a focused hour working on this, digging into the build process, and figuring out how to encapsulate these calls so they wouldn’t interfere with the deployment.
I implemented a solution that ensures all external calls are encapsulated in a way that allows for graceful degradation if they fail. This means that even if a third-party service is down, my build process can continue without breaking. I’m confident that this change will significantly reduce the frequency of deployment issues I’ve been facing. It’s a relief to finally have a more reliable build process, and I can focus on adding new features instead of constantly patching deployment issues.
Reflecting on today’s work, I’m reminded of the challenges of building this platform solo, relying heavily on Claude Code in VS Code instead of investing in paid options like Lovable or Cursor. It’s a balancing act—leveraging AI to assist with coding while also maintaining full control over the project. Each fix and feature I ship brings me one step closer to my goal of creating a one-man-show company with a billion-dollar valuation. I know that the road ahead is long, but days like today make the grind feel worthwhile.
As I wrap up this entry, I’m excited about the stability improvements I’ve made. The voice agent is functioning properly, and the build process is now more robust against external issues. I’ll continue to monitor these changes as I move forward, but for now, I feel a sense of accomplishment. Tomorrow, I’ll dive into the next feature on my list and see how I can further enhance the capabilities of the GIGI AI concierge. Here’s to more productive days ahead.