Build Journal

Analytics Command Center & Observability Enhancements — July 18, 2026

I shipped a new analytics command center and observability features while fixing crucial bugs. Here's how I tackled the challenges and what I learned.

8 changes3 min readby Rob

What shipped

  • New Analytics Command CenterIntegrated nginx edge-log signals and Google Search Console.
  • Enhanced Session ReplayWired in-house session replay to error tracking.
  • Fixed OAuth IssuesResolved Google 403 errors with iframed consent.
  • GIGI Bug FixesAddressed multiple activity feed and prefetch issues.
  • Improved Error HandlingRefined error flush mechanism for better performance.

Today was a marathon of productivity, clocking in at around 12 hours, and I managed to ship some significant updates to my agentic web platform, particularly in the areas of analytics and observability. I rolled out a new analytics command center, enhanced session replay capabilities, and tackled a slew of bugs that had been hindering performance.

The centerpiece of today’s work was the launch of Meridian's portal Analytics command center. This feature integrates nginx edge-log signals and Google Search Console via Google OAuth, giving users a panoramic view of their portal's performance. The brushed-metal HUD provides a sleek interface that feels right at home within the broader site design. I had to wrestle with a few issues, particularly around the OAuth process, which initially broke out of the frame and resulted in Google 403 errors when consent was iframed. After some back-and-forth, I managed to fix that, ensuring users are returned to the analytics tab seamlessly after authentication.

In addition to the analytics command center, I also focused on observability. I wired in-house session replay to the client error tracking system, utilizing rrweb for error recording. This new feature allows for anonymous-safe ingestion of session data, ensuring user privacy while also giving me the tools to diagnose issues effectively. The /admin/replays viewer now includes an error-seek capability, which makes it easier to pinpoint where things went wrong—an essential tool for a solo builder like me.

I also integrated Sentry's Session Replay with error tracking, which has been a game-changer. The lazy-loaded recorder means that first-load JavaScript remains untouched, preserving performance while still capturing essential data for analysis. This dual approach to session replay not only enhances observability but also allows me to link errors directly to replays, providing context that can be invaluable during debugging.

Of course, no day is complete without its share of challenges. I spent a good chunk of time on the GIGI bug scan, addressing various issues that had cropped up. The activity feed had a cursor that advanced on every batch, which was creating an unnecessary load. I also had to fix a prefetch issue that was causing around 20 RSC fetches per load. These bugs were particularly frustrating to diagnose but ultimately led to a more efficient and user-friendly experience.

One of the more puzzling issues I faced was with the error flush mechanism, which was silently rejected by Chrome for keepalive bodies over 64KB. I had to rethink how I implemented keepalive, limiting it to small final flushes and ensuring that failed errors were restored for retry. This was a valuable lesson in understanding browser limitations and adapting my approach accordingly.

I also made a minor but necessary revert in the search functionality, restoring bare-word #name resolution, including web3 open. This was a straightforward fix, but it underscored the importance of maintaining a balance between innovation and stability. While I’m eager to push the envelope, I must also ensure that existing functionalities remain intact.

Reflecting on today, I’m proud of the progress I made, but I also recognize the grind that comes with solo development. Each fix and feature is a testament to the long hours and the relentless pursuit of excellence. Using AI as my partner in this journey has been invaluable; Claude Code in VS Code has allowed me to iterate quickly and efficiently without the overhead of a larger team, aligning perfectly with my vision of building a one-man-show company.

As I wrap up today’s entry, I’m reminded that every day brings its own set of challenges and triumphs. The road to a billion-dollar valuation is long, but each step, each commit, and each lesson learned gets me closer to that goal. Tomorrow will bring new hurdles, but I’m ready to tackle them head-on, armed with the insights gained from today’s work.

← Back to the full build journal