GIGIlistening…

Build Journal

Building hashtag.org in public

This is my running log of building hashtag.org — a web3 spatial-AI portal CRM with the GIGI AI concierge, Tavus video personas, and an AI website builder. I write one entry a day about what I shipped, the bugs that fought back, and the hours it took. I build it mostly solo in VS Code with Claude Code, so most days you’ll get the honest story behind the features and fixes that landed.

  1. Tuesday, June 23, 2026

    2 changes

    Today was a pretty productive day. I set out to make some improvements to the AEO (agentic experience overlay) and tackle a pesky bug in the radio feature. The goal was to enhance the user interface for our timeline and ensure that DJ MAX was sounding just like he should. After about two hours of focused work, I feel good about what I've accomplished, even though I faced a few hurdles along the way.

    Starting

    Read the full entry →

    with the AEO update, I wanted to ensure that the SYSTEM CHANGES section matched the webstack.ceo exactly. This involved creating a horizontal icon-row of circular, category-colored nodes on a timeline. I added hover tooltips that detail each event with a type chip, date, title, and description. It was a bit of a grind to get the full icon set integrated, but I managed to include icons for everything from rockets to wrenches. The aeo-seed-changelog script now accurately reflects the real build history, which should provide users with a clearer understanding of changes over time. I’m really proud of how that turned out, but it did take longer than I anticipated to get the tooltips formatted just right.

    On the flip side, I ran into a bug with DJ MAX’s voice. It was a bit embarrassing to discover that he was sometimes speaking with a random female voice instead of his designated male voice, Brian. The issue stemmed from the getAvatarVoiceId function falling through the guest-only guard for max-guest, which assigned a voice from a random pool. After digging through the code, I was able to pinpoint where the logic was breaking down and implemented a fix. It’s always a bit of a relief to squash bugs like that, but it’s moments like these that remind me how crucial it is to have robust error handling in place.

    Reflecting on the day, I feel accomplished yet aware of the challenges ahead. Building this all solo in VS Code with Claude Code certainly keeps the platform lean and efficient. I can’t help but think that if I were using Lovable or Cursor, I would have racked up quite the bill in credits and seats for the output I’ve achieved today. The grind is real, but it’s also rewarding when I see tangible progress in the agentic web, especially with features that enhance our spatial AI capabilities and improve user experience. I’m excited to keep pushing forward and tackling the next set of challenges on hashtag.org.

    • DJ MAX voice fixEnsured DJ MAX always uses his male voice.
    • AEO SYSTEM CHANGESUpdated timeline with new icon-row and tooltips.
    • Full icon set integratedAdded diverse icons for events and changes.
    • aeo-seed-changelog scriptReflects real build history accurately.
  2. Monday, June 22, 2026

    1 change

    Today was one of those days where I set out to streamline the user experience on the vault section of the platform. I wanted to create a more cohesive look by merging the 'Creator vault' title and the close button into the Library/VIP/Projects tab row. This seemed like a simple fix on the surface, but as is often the case in development, the devil was in the details.

    I spent about an hour focused on

    Read the full entry →

    this task, and while I was optimistic at the beginning, I quickly ran into some challenges. The initial layout was a bit of a mess, with the separate header row taking up unnecessary space and making the interface feel cluttered. I thought merging the title into the tab row would be a straightforward solution, but I had to contend with several issues related to responsiveness and alignment. It took a bit of tweaking to make sure everything looked right across different screen sizes.

    After diving into the CSS and adjusting the layout, I finally got the title and close button to sit nicely within the tab row. But then, of course, I discovered that merging these elements caused some unexpected behavior in the dropdown menus. It was a classic case of one change leading to another, and I had to track down the cascading effects of my adjustments. Debugging these issues is always a grind, but it’s also where I learn the most. I had to refine my approach and ensure that the functionality remained intact while improving the aesthetics of the vault.

    Reflecting on this process, I appreciate how using Claude Code in VS Code keeps my development lean. If I were using a more resource-heavy platform like Lovable or Cursor, I would have been burning through credits just to manage these fixes. Working solo allows me to maintain control and keep the platform efficient, which is crucial as I build out the features for the agentic web and spatial AI capabilities of hashtag.org. I’m proud of the progress today, even if it was just one fix. It’s these small improvements that contribute to the overall user experience and functionality of our portal CRM, and I’m excited to see how they will enhance user interactions with GIGI AI concierge and Tavus video personas.

    As I wrap up the day, I feel a sense of accomplishment. Each fix, no matter how small, brings us closer to delivering a seamless experience for our users. It’s a reminder that the work is never truly done, but each step forward is a victory worth celebrating.

    • Merged vault headerCombined 'Creator vault' title with tab row.
    • Improved UI layoutEliminated separate header for cleaner design.
    • Enhanced responsivenessAdjusted layout for better display on all devices.
    • Fixed dropdown issuesResolved unexpected behavior in menu functionality.
  3. Sunday, June 21, 2026

    43 changes

    Today felt like a marathon, stretching over 11 hours as I dove deep into #SPACE development. My focus was on enhancing the Higgsfield capabilities and refining the portal experience. I aimed to ship several features that would improve user interaction and also tackle a few pesky bugs that had been hanging around. The day started off strong as I rolled out the Google Veo 3 LIVE functionality, which allows users to transform images into videos.

    Read the full entry →

    This was a significant addition, bringing the total number of models we can generate and bill to eight. However, I quickly ran into a few complications with the Cloud API integration, which required some creative problem-solving to ensure everything worked seamlessly.

    As I continued to build, I introduced several new models, including Higgsfield Soul and Seedream, which are now live and confirmed to be functioning end-to-end. This was a proud moment, but it didn’t come without its challenges. I had to troubleshoot and replace a placeholder capability list with the actual model lineup, which involved some back-and-forth to ensure accuracy and clarity for our users. I also spent a fair amount of time refining the tier structure in the portal, renaming it to better reflect our vision while ensuring all tiers had access to the scanning and data layers. This required a thorough review of the code to avoid any unintended consequences.

    The day wasn’t without its frustrations. I encountered a few bugs with the map functionality where the owner action ring was not displaying correctly for certain tiers. Tracking that down took longer than expected, but I eventually got it sorted out. I also had to address some issues related to the user interface, particularly around the admin revenue page and the marketing tab links. These fixes were crucial for maintaining a smooth user experience, and I felt a sense of accomplishment each time I overcame a hurdle.

    Reflecting on the grind of the day, I’m proud of the progress we made on the agentic web and spatial AI capabilities. I built all of this in VS Code using Claude Code, and I can’t help but think how much more expensive it would be if I were using a platform like Lovable or Cursor. Shipping this much on my own keeps our operations lean and efficient, which is essential for our growth. Overall, today felt like a significant step forward, and I’m eager to see how our users respond to these new features and improvements.

    • Google Veo 3 LIVEEnabled image-to-video conversion with 8 models.
    • New Models LaunchedHiggsfield Soul and Seedream now available.
    • Portal Tier UpdatesRenamed tiers for better clarity and access.
    • Map Functionality FixedOwner action ring now displays correctly across tiers.
    • UI EnhancementsFixed admin revenue page and marketing tab links.
  4. Saturday, June 20, 2026

    61 changes

    Today was a marathon of a build day, stretching into a grueling 23 hours as I tackled a substantial set of features and fixes for the agentic web platform. My primary focus was enhancing the portal and user interface, ensuring that users have a seamless experience while navigating through the spatial AI capabilities we offer. I set out to refine the portal details, improve analytics, and make the builder more responsive to user needs, all

    Read the full entry →

    while keeping an eye on the performance metrics that matter.

    I started with a significant enhancement to the portal details panel, making it accessible for any verified site, which I believe opens up new opportunities for users. However, the day was not without its challenges. I encountered several issues with the UI that required immediate attention. For instance, I had to fix the call-card headers to ensure they displayed correctly in a single line, which turned out to be a bit trickier than anticipated. I spent a considerable amount of time debugging flex properties and margin settings to eliminate unnecessary gaps.

    Another unexpected hurdle was tracking down a bug in the live tab analytics, which was showing cumulative bot and human activity incorrectly. After some digging, I realized that I needed to reset certain visit counters, as the synthetic data was inflating our metrics. This was a frustrating detour but ultimately led to a clearer understanding of how we manage and display data across the platform.

    I also made strides in integrating new features like the live build-progress panel and auto-relocation of transferred names to their GPS locations upon sign-up. While these additions are exciting, they brought their own set of bugs that required thoughtful fixes. For instance, I had to ensure that the 'Locate me' pill was consistently visible across various embedded environments, which involved tweaking CSS properties to prevent it from collapsing. It’s these little details that can consume hours of my time, but I know they’re crucial for maintaining a polished user experience.

    Reflecting on the day, I appreciate how tools like VS Code and Claude Code help me manage this solo endeavor without incurring additional costs, especially compared to platforms like Lovable or Cursor. I’m proud of the progress I made today, even if it often felt like I was wrestling with the code. Each fix and feature is a step toward realizing the vision of a robust portal CRM that empowers users to harness the full potential of spatial AI. As I wrap up, I feel a mix of exhaustion and satisfaction, knowing that every line of code shipped today contributes to the evolving narrative of hashtag.org and the broader agentic web ecosystem.

    • Portal Details Free AccessMade the Portal Details panel accessible for any verified site.
    • Call-Card Header FixesAdjusted call-card headers for better alignment and visual clarity.
    • Analytics Live Tab UpdateCorrected live tab to show real-time bot and human activity.
    • Auto-Relocate NamesImplemented auto-relocation of transferred names to GPS locations.
    • Visible 'Locate Me' PillEnsured the 'Locate Me' pill remains visible across all embeds.
  5. Friday, June 19, 2026

    24 changes

    Today was an intense 24-hour grind, but I managed to ship a solid set of features and fixes for #SPACE. I set out to enhance the user experience across the platform, focusing on the portal UI and the voice GIGI integration. I wanted to make sure everything ran smoothly and that the agentic web experience was as seamless as possible. I was particularly excited about the new live activity feed and the analytics dashboard, which

    Read the full entry →

    I believe will bring a lot of value to our users.

    However, as with any build day, I encountered my fair share of challenges. One of the biggest hurdles was fixing the brain's continuous churning on unfixable gaps. I had to exclude certain processes from auto-fix to stop it from perpetually re-queuing failed change requests. It took a while to track down the root of the problem, but once I scoped the plans to a single pass, it finally converged on real test-coverage wins. This was a significant learning moment for me, emphasizing the importance of scoping and managing expectations when it comes to complex systems.

    Another issue that consumed a good chunk of my time was related to the live-human count feature. I discovered that the API was reading from a separate in-memory map, which caused the count to be stuck at zero. I had to share the data on a global scope, which resolved the problem but reminded me of the intricacies of data management in real-time applications. I also had to address several bugs in the voice GIGI integration, particularly around her ability to maintain context across page changes. Ensuring that she could resume conversations seamlessly became a priority, and after multiple iterations, I finally got her to auto-resume without requiring extra clicks from users.

    Reflecting on the tools I used today, I spent most of my time in VS Code with Claude Code. If I were using something like Lovable or Cursor, the costs would have escalated quickly with all the iterations I went through. Building this platform solo helps keep operational costs low, which is crucial for a project like this. Overall, I’m proud of the progress I made, but I know there’s always more work to be done. The agentic web and spatial AI are evolving, and I’m committed to ensuring that hashtag.org remains at the forefront of these innovations.

    • Live Activity FeedIntroduced a site-wide live activity feed displaying recent events.
    • Visitor Analytics DashboardLaunched a dashboard for tracking human vs AI bot visits.
    • Voice GIGI ImprovementsEnhanced voice GIGI to maintain context across page changes.
    • SEO EnhancementsExcluded ephemeral portals from indexing to improve SEO.
    • UI AdjustmentsUpdated UI elements for better user experience and accessibility.
  6. Thursday, June 18, 2026

    48 changes

    Today was a marathon of a build day, stretching a long 23 hours as I dove deep into refining various aspects of the platform. My primary goal was to enhance the user experience across the board, from the portal features to the systems health metrics. I aimed to improve the way users interact with our spatial AI tools and ensure everything ran smoothly, but as always, the path was littered with challenges and bugs that

    Read the full entry →

    demanded my attention.

    I kicked off the day focusing on the cover and embed systems. I managed to implement an auto-shrink feature for the portal name and address to fit neatly within the QR card band. This was a straightforward fix, but it required a lot of tweaking to get the stacking right. The real headache came when I addressed the GIGI voice functionality for scrolling to sections on the host page. It turned out that my initial implementation was completely ignoring the voice commands during the Tavus relay. After a few hours of debugging, I finally got it to fuzzy-match section keys correctly, which felt like a small victory amidst a sea of code.

    The brain system also received significant attention today, particularly the autonomous loop and systems health panel. I had to tackle some deep-rooted issues with how the brain was assessing module quality, which was inaccurately gauging readiness based on file existence rather than the actual performance metrics. This led to a cascade of fixes, but ultimately, I was able to establish a more honest scoring system. It’s fascinating how much I learn about the intricacies of the system as I work through these problems — it’s like peeling layers off an onion, and sometimes the tears aren’t just from the code.

    One of the standout features I shipped today was the new Systems Health panel, which provides real-time metrics on subsystem performance. This feature is crucial as it allows for a more proactive approach to system management. I also made strides in the portal’s billing structure, ensuring that the AI meter rates were aligned with the advertised prices. This was a necessary fix that had been lingering for too long. Reflecting on the day, I can’t help but appreciate how building in VS Code with Claude Code keeps my costs down. If I were using platforms like Lovable or Cursor, I would have burned through a lot more resources for the same output.

    In the end, while the day was exhausting and filled with its fair share of bugs and setbacks, I feel proud of the progress made. Each fix and feature brings us closer to a more robust agentic web platform, and I’m excited for what tomorrow will bring as I continue to refine our spatial AI capabilities.

    • Auto-shrink Portal DetailsImplemented auto-shrink for portal names and addresses on QR cards.
    • GIGI Voice Functionality FixResolved scrolling issues with GIGI voice commands in the Tavus relay.
    • Systems Health PanelLaunched a new panel to monitor subsystem performance metrics.
    • Improved Module Quality ScoringUpdated scoring metrics for module readiness based on actual performance.
    • Aligned AI Meter RatesFixed billing structure to match advertised rates for AI usage.
  7. Wednesday, June 17, 2026

    33 changes

    Today was one of those marathon build days that leaves you feeling both exhausted and exhilarated. I set out to tackle several areas of the platform, including map functionality, my-sites, embed features, and some billing adjustments. The goal was to enhance user experience across the board, and I had a long list of features and fixes in mind. However, as is often the case, the road was far from smooth.

    I managed to ship 13

    Read the full entry →

    new features and improvements, but not without a fair share of problems. One of my major focuses was the my-sites redesign, which turned out to be a bit of a beast. I wanted to create a left tab rail for easier navigation, but getting the layout just right took way longer than I anticipated. I had to iterate several times to ensure the live heartbeat meter and the spend counter were both functional and visually appealing. I’m proud of the final outcome, but it felt like I was wrestling with the UI the entire time.

    On the embed side, I introduced runtime host-nav auto-discovery, which was an ambitious feature. The idea was to allow embedded GIGI to seamlessly scan and integrate with host pages. While the concept was solid, I hit quite a few snags with the server-side merging of nav hints and host routes. Debugging those issues took a chunk of my time, but in the end, it worked out, and I feel like it adds significant value to our users.

    The billing adjustments were another story. I raised the website-builder rate to $0.21 per minute, which I know will generate mixed feelings among users. I had to ensure that the new billing mechanism was fair and transparent, especially with the heartbeat-metered active build time. I spent a fair amount of time testing the edge cases to make sure that abandoned builds wouldn’t lead to unfair billing. I’m glad to report that everything is now functioning as intended.

    I spent roughly 17 hours on this grind, which is par for the course when you’re building something as complex as an agentic web platform. It’s rewarding to see progress, but I can’t help but feel the weight of the challenges along the way. I’ve been using VS Code with Claude Code throughout this process, and I can’t stress enough how much it helps streamline my workflow. If I were using platforms like Lovable or Cursor, I’d be burning through credits at an alarming rate for the same output. Keeping it lean is essential, especially when I’m building most of this solo. Overall, today was a blend of frustration and triumph, but that’s just another day in the life of a founder-engineer.

    • Redesigned my-sites layoutIntroduced a left tab rail for better navigation.
    • Runtime host-nav auto-discoveryEmbed now scans host pages for seamless integration.
    • Updated billing mechanismHeartbeat-metered active build time now fully reflects usage.
    • Voice dictation improvementsFixed repeated words issue in composer.
    • Enhanced Tavus AI handoffSmoother transitions during embedded meetings.
    GlossaryGIGI
  8. Tuesday, June 16, 2026

    33 changes

    Today was a long one, stretching 18 hours as I dove deep into the latest batch of updates for the #SPACE platform. My goal was to refine the user interface and enhance our spatial AI capabilities, all while addressing a slew of pesky bugs that had been nipping at my heels. I set out to ship improvements that would make the agentic web experience smoother and more intuitive for users, but as always, the path

    Read the full entry →

    was anything but straightforward.

    I kicked off the day by tackling some UI fixes. The drawer panel was misbehaving, pushing content left instead of overlaying it, which was a frustrating bug to chase down. After several hours of debugging, I pinpointed the issue and implemented a fix that not only resolved the drawer's behavior but also improved the overall user experience. I also added an explicit close 'X' to the drawer, which should help users navigate more effectively. The devil is always in the details, and these small changes can make a world of difference.

    As I moved on to the worktree and Claude integrations, I had to untrack some symlinks that had accidentally made their way into the main branch. It’s moments like these that remind me of the importance of maintaining a clean repository. I also took some time to sync documentation for our CLAUDE setup, ensuring that the auto-embed sections were up to date. It’s a grind, but keeping everything organized is crucial for long-term success.

    One of the more exciting features I worked on was the integration of the Tavus video personas into our portal CRM. I enhanced the transition effects and added more grace before hangups, which should improve the overall user experience when interacting with our AI concierge, GIGI. I also took a step back to refine the theme handling for embedded portals, ensuring they respect the host site’s theme parameters. This attention to detail is what helps our platform stand out in the crowded AI website builder space.

    Reflecting on the day, I’m proud of the progress I made, but the constant battle with bugs and issues is a reminder of the challenges that come with building something complex like this. I often think about how much more I would be spending if I were using platforms like Lovable or Cursor instead of Claude Code in VS Code. Shipping this much solo is what keeps the platform lean and efficient, allowing me to focus on building rather than burning through credits. Each commit brings me closer to my vision for hashtag.org and the agentic web, and today was no exception, despite the hurdles I faced.

    • Improved UI Drawer FunctionalityFixed issues causing the #SPACE drawer to push content left instead of overlaying.
    • Enhanced Tavus IntegrationRefined video persona transitions and hangup grace period.
    • Theme Handling FixesEnsured embedded portals respect host site theme parameters.
    • Cleaned RepositoryUntracked unwanted symlinks and updated documentation.
    • Agentic AI TaglineUpdated navigation to include new marketing tagline for agentic web.
  9. Monday, June 15, 2026

    38 changes

    Today was one of those marathon coding days that seemed to stretch on forever. I dove deep into various parts of the platform, especially focusing on the portal and the SEVEN agent. My goal was to enhance the user experience and streamline the functionality across our spatial AI capabilities, but as always, the path was riddled with unexpected challenges.

    I started by wrapping the bio and description sections of our portals in an inviting iMessage-style

    Read the full entry →

    card. It was a simple feature that I hoped would enhance the visual appeal and usability of our portal CRM. However, as I integrated this, I ran into some CSS issues that took way longer to resolve than I anticipated. After some trial and error, I finally got the card to render nicely across all devices. It’s those little victories that keep me going.

    One of the more significant features I worked on was adding a talking avatar for the SEVEN agent in the /my-sites section. This involved quite a bit of backend work to ensure that the voice avatar could cycle through portraits while speaking and freeze on pause. I also implemented a voice dictation feature, allowing users to submit change requests verbally. This was a big step towards making our AI website builder more intuitive, but I ran into a couple of bugs that delayed the rollout. The voice submissions weren't always recognized accurately, and I had to fine-tune the speech recognition parameters to improve performance.

    The grind today was real, stretching over 11 hours. I felt the fatigue setting in as I tackled a myriad of fixes, including ensuring that the SEVEN agent could gracefully end calls and that the portal details remained visible during live interactions. Each fix seemed to lead to another issue, and it felt like a never-ending cycle of debugging. However, I learned a lot about the intricacies of our codebase and how to better structure my commits to avoid these cascading problems in the future.

    I’m proud of the progress I made today, especially with the new features for the SEVEN agent and the enhancements to the user interface. I built this all in VS Code using Claude Code, which allowed me to manage my time and resources effectively. If I were using platforms like Lovable or Cursor, I would have burned through credits at an alarming rate, and the fact that I can keep the platform lean while shipping this much solo is a huge win for me. Overall, despite the challenges, I feel accomplished and ready to tackle tomorrow’s tasks.

    • Inviting portal displayWrapped bio/description in a soft rounded card.
    • SEVEN voice avatarImplemented talking avatar with portrait cycling.
    • Voice dictation featureEnabled voice submissions for change requests.
    • Graceful call endingsAdded functionality for SEVEN to end calls smoothly.
    • Improved portal visibilityEnsured portal details stay visible during live calls.
  10. Sunday, June 14, 2026

    23 changes

    Today was one of those long, intense build days that left me feeling both accomplished and a bit drained. I set out to refine several features and tackle some persistent bugs that had been nagging me for a while. With 23 commits under my belt after about 11 hours of work, I’m proud of the progress I made, especially in the areas of our agentic web and spatial AI capabilities.

    I kicked off the day

    Read the full entry →

    focusing on the transfer functionality, which has been a bit of a thorn in my side. I managed to fix the positioning of the incoming transfer card, ensuring it tracks the Scanner properly. This involved some careful adjustments to the UI, particularly when the portal-details slide-over opens. It was a bit of a challenge to get the card positioned just right under the nav bar without it slipping off-screen, but after a few iterations, I think I nailed it.

    Another significant improvement came from the SEVEN brain. I shipped a new feature that allows for voice and text replies in the change-request queue, which should enhance operator efficiency. However, digging into the integration issues was a bit of a slog. I had to ensure that the get_build_info function resolved integrations correctly without throwing false 'not configured' errors for our key tools like Tavus and GIGI-LLM. After a fair bit of debugging, I finally got it sorted, and I learned a lot about how our environment and admin secrets interact.

    I also made strides with the persona features, particularly regarding the QR phone-continue for video clones. This was a fun addition that allows users to record on their phones and auto-upload for Tavus training. However, it took some finagling to ensure the session authentication worked seamlessly. The day was filled with these kinds of challenges, but that’s part of the grind. I kept reminding myself how much more I would have spent on credits or seats if I were using Cursor or Lovable for this work. Building this solo in VS Code with Claude Code keeps things lean and efficient.

    As I wrapped up the day, I also focused on refining the AI call features. I fixed several issues related to the call buttons and made sure that the incoming call focus worked flawlessly. It was a bit frustrating to deal with the clipping of materialize strings on connection, but I managed to implement a delay to ensure a smooth user experience. Overall, it was a day packed with problem-solving and feature enhancement. I feel good about where we’re heading with #SPACE and hashtag.org, and I’m eager to see how users respond to these updates.

    • Improved Transfer UIFixed incoming transfer card positioning for better visibility.
    • Voice/Text RepliesAdded per-task reply box for change requests.
    • QR Phone-ContinueEnabled video clone recording via QR for Tavus training.
    • AI Call EnhancementsFixed call buttons and improved incoming call focus.
    • Resilient DeploymentsOptimized deployment process to prevent hangs and improve reliability.
  11. Saturday, June 13, 2026

    10 changes

    Today was one of those marathon build days that left me both exhausted and satisfied. I set out to enhance the orchestration capabilities of our platform, particularly focusing on the Tavus video personas and the harvester features. As I dove into the code, I felt the familiar rush of excitement that comes when I know I'm pushing the boundaries of what our spatial AI portal can achieve. After a long 23-hour stretch, I managed to

    Read the full entry →

    ship ten commits, seven of which were new features or improvements, and three that addressed pesky bugs that had been holding me back.

    The orchestration updates were particularly rewarding. I implemented a handoff feature for AI-to-AI interactions, allowing specialists to seamlessly transfer conversations based on department needs. This was a significant step forward for our agentic web capabilities. However, I hit a wall when I realized that the Tavus embed wasn't remounting correctly during these handoffs. It took a fair amount of troubleshooting, but I eventually figured out that I needed to key the remounting process by the conversation URL. It's these kinds of challenges that really test my problem-solving skills, but they also remind me why I love this work.

    Deployments were another area that consumed a lot of my time today. I ran into issues with the VPS npm-ci setup, which led to an incomplete Prisma binary that was fetching the wrong version from the registry. This was a frustrating setback, but I managed to rectify it by using local binaries and verifying them before migration. It’s a reminder of how crucial it is to have a robust deployment process, especially when I’m building solo. I also had to implement retries for rsync transfers, which helped smooth out some transient errors that were aborting my deploys.

    On the Tavus front, I made significant strides by creating shared owned department personas with full tool sets. This change ensures that every portal AI can operate consistently without version drift. Streamlining the persona dropdown was another victory; it now only lists the relevant department agents instead of a cluttered mix of old and stock personas. I also introduced an automated email follow-up system in the harvester, which will help our clients engage leads effectively. Reflecting on today, I’m proud of what I accomplished, but I also recognize the grind it took to get here. Building this all in VS Code with Claude Code makes the process manageable and budget-friendly, especially compared to other platforms where I’d be burning through credits at a rapid pace. It’s days like today that remind me why I’m committed to this solo journey on hashtag.org.

    • AI-to-AI handoffSpecialists can now transfer conversations seamlessly.
    • Tavus persona enhancementsCreated shared department personas with full tool sets.
    • Automated lead follow-upsNew AI system for personalized email outreach.
    • Deployment fixesImproved Prisma setup and rsync reliability.
    • Curated persona dropdownDropdown now shows only relevant department agents.
  12. Friday, June 12, 2026

    7 changes

    Today was a long and intense 11-hour day, but I made some significant strides on the #SPACE platform. My primary goal was to enhance the portal functionality, particularly around live call handling and the deployment process. I wanted to ensure that our users could seamlessly manage calls between portals and improve the overall reliability of our deployments after the recent outage. It was a grind, but I’m pleased with the outcomes, even if the path

    Read the full entry →

    was littered with challenges.

    I kicked off the day by tackling the deployment issues that had caused a headache during the last build. The last thing I wanted was for a failed build or an incomplete `npm ci` to bring down the site again. After some deep diving into the deployment logs, I managed to harden the on-VPS deploy process, ensuring that if something goes wrong, it won't leave users facing a 404 error. It took longer than expected to track down the root cause, but I learned a lot about how our deployment pipeline interacts with the live application.

    Next, I shifted my focus to the transfer feature for live calls. This was exciting because it adds a layer of interactivity for users, allowing them to forward calls to colleagues seamlessly. I implemented a 'receptionist forwards the call' functionality that lets portal owners curate a list of other portals they can transfer calls to. This required some thoughtful UI design, but I think it will greatly enhance the user experience. However, while working on this feature, I ran into issues with the loading indicators for logged-out visitors. I had to fix the flashing 'Loading…' message that was showing up unnecessarily, which required a bit of debugging to ensure that the call-action area behaved correctly depending on the user's authentication state.

    I also spent some time refactoring the map component. I realized that we were carrying dead weight with multiple Earth basemaps when Google Satellite was the only one being used. Streamlining this not only simplifies the code but also improves the performance of the map feature overall. The day was filled with these little victories, but they came with their own set of challenges, like managing z-index issues that kept buttons from rendering correctly. It’s these moments that remind me how complex building an agentic web platform can be.

    Through it all, I was grateful for the tools I have at my disposal. Working in VS Code with Claude Code allows me to be efficient and focused. If I were using platforms like Lovable or Cursor, I would have likely burned through a lot of credits for what I accomplished solo today. Each feature I ship brings us closer to realizing the vision of a spatial AI portal that empowers users to navigate their digital environments more intuitively. Today was a testament to that progress, even if it was hard-won.

    • Improved deployment reliabilityHardened the on-VPS deploy process to prevent outages.
    • Live call transfer featureAdded functionality for forwarding calls to other portals.
    • Fixed loading indicatorsResolved unnecessary 'Loading...' messages for logged-out visitors.
    • Streamlined map basemapsRemoved unused Earth basemaps, keeping only Google Satellite.
    • Resolved z-index issuesFixed rendering problems with buttons in the map component.
  13. Thursday, June 11, 2026

    16 changes

    Today was a marathon of a build day, clocking in at roughly 19 hours, but I set out with a clear vision of enhancing the usability of our agentic web platform. My main focus was on improving the transfer process within our spatial AI portal, ensuring that our users have a seamless experience when connecting with live human agents. I can say I made substantial progress, but the journey was not without its challenges.

    One

    Read the full entry →

    of the significant features I implemented was refining the transfer flow. The agent now prompts visitors for their name and reason before transferring them to a human. This was a necessary improvement; previously, the details would often appear blank on the owner's card, leading to confusion. I spent a fair amount of time debugging this, as the handoff plumbing already carried the visitor's name and interest, but the logic for asking was missing. After some trial and error, I was able to strengthen that aspect of the process.

    Another major feature was the integration of an auto-scraping engine within the Harvester. This allows campaigns to find real leads via Google Places. I had to navigate through the complexities of adding new API routes and ensuring that the pagination worked correctly. While it was an exciting addition, I encountered several bugs that required deep dives into the logic, especially around how the search results were being processed and displayed. I also added a Harvester button to the owner action ring, which involved creating a new globally-mounted panel over the map. It was a satisfying moment when it all clicked into place, but it took a lot of tweaking to get the user experience right.

    On the fix side, I tackled several issues that had been nagging at me. For instance, I resolved a bug where the portal layer buttons only opened on precise button hovers, which detracted from the user experience. Additionally, I made sure that the owner wouldn't be kicked out of a live room when accepting a second warm transfer, which was a critical usability hurdle. Through these fixes, I learned the importance of meticulous testing and ensuring that all edge cases are accounted for.

    Reflecting on the day, I'm proud of what I accomplished, but it also reminded me of the grind that comes with building something meaningful. Working in VS Code with Claude Code allows me to keep costs down while shipping at this volume; if I were on platforms like Lovable or Cursor, the credits would stack up quickly. It's these small efficiencies that help keep hashtag.org lean as I push towards making our spatial AI solution the best it can be.

    • Enhanced transfer processAgents now ask for visitor's name and reason before transferring.
    • Auto-scraping engineCampaigns can now find leads via Google Places.
    • Harvester button addedNew button on owner action ring for easy access.
    • Fixed portal layer button issuesButtons now respond correctly to user interactions.
    • Improved live transfer handlingOwners stay in live rooms during multiple warm transfers.
  14. Wednesday, June 10, 2026

    11 changes

    Today was a long and intense 8-hour day, focused primarily on improving the transfer features of our spatial AI portal at hashtag.org. I set out to refine the handoff process, ensuring that both owners and visitors have a seamless experience when transferring calls. The day was packed with a mix of feature enhancements and critical bug fixes that needed to be addressed to ensure reliability in our transfer system.

    I kicked things off with a

    Read the full entry →

    fix for the incoming-call ring, which was unfortunately buried behind the portal slide-over. This meant that owners were missing incoming calls because they couldn’t reach the 'Accept' button in time, leading to visitor timeouts. I raised the z-index of the ring to ensure it’s always above everything else and extended the visitor wait time from 45 seconds to 90 seconds. This seemed like a small tweak, but it was crucial for improving the handoff reliability.

    Next, I added an audible incoming-call ring that plays a repeating phone-style tone while a handoff is pending. This feature was a bit tricky because it requires a prior page gesture and is throttled in fully-backgrounded tabs, but it should significantly enhance awareness for owners during transfers. I also had to tackle another bug where the handoff ring was not reliably reaching the intended recipient due to a dropped socket connection when the owner’s tab was backgrounded. I implemented a Redis-backed store to persist the pending transfer and status, ensuring that the owner’s browser polls for updates effectively. This issue taught me a lot about the importance of maintaining real-time connections even during server restarts.

    In addition to those fixes, I created server-side diagnostics to pinpoint warm-transfer failures, logging crucial metrics to better understand user interactions during transfers. I also revamped the way the handoff ring operates, ensuring it’s visible to the owner regardless of their current context within the portal. The changes I made to the socket connections and the global IncomingTransferRing were essential to prevent double-firing and to ensure a smoother user experience.

    Finally, I rolled out the first phase of the AI Portal Agent warm transfer, which allows owners to accept or decline calls while providing visitor information. This was a significant step forward in integrating our AI capabilities into the transfer process. I also took the time to refine some admin navigation elements, making it easier to access key features and data. Reflecting on all of this, I’m proud of the progress made today, especially considering how much I accomplished solo. Building this in VS Code with Claude Code has kept our operations lean, as using alternatives would have driven up costs significantly. Despite the challenges, I feel more confident in our transfer system's reliability and user experience moving forward.

    • Improved incoming-call ringFixed visibility issues to ensure owners can accept calls on time.
    • Audible call notificationsAdded a repeating phone-style tone for pending transfers.
    • Fixed handoff reliabilityImplemented Redis-backed storage for pending transfers.
    • Enhanced admin navigationStreamlined access to key features and metrics.
    • AI Portal Agent warm transferLaunched initial phase for seamless call transfers.
  15. Tuesday, June 9, 2026

    15 changes

    Today was a marathon of a build day, stretching a solid 16 hours as I dove deep into the general platform work for hashtag.org. My main focus was on refining the Tavus agent and ensuring that the various interactions across the platform felt smooth and intuitive. With the complexity of the tasks I tackled, it was both rewarding and frustrating at times, but I can proudly say I made significant strides.

    One of the major

    Read the full entry →

    challenges I faced was the double-goodbye issue with the Tavus agent. After spending way too long debugging why the farewell wasn’t being executed correctly, I implemented a much stricter goodbye rule that forces the agent to say farewell in exactly one turn. This involved creating a closing rule that ensures the agent doesn’t repeat itself, which should help maintain a more natural user interaction. It was a satisfying fix, but the debugging process was a grind, especially when I had to sift through the layers of the call context to ensure the rules were applied correctly.

    I also tackled a couple of significant bugs today. The most pressing was a crash caused by a malformed Luma event title that brought the entire Node process to its knees. I had to sanitize unpaired surrogates in the event details to prevent the JSON serializer from blowing up. It was a classic case of a small oversight causing major issues, and it reminded me of the importance of rigorous error handling. I’m grateful I caught it before it affected users more broadly.

    In addition to the fixes, I managed to implement several improvements that enhance the overall user experience. For instance, I embedded GIGI more effectively so that she no longer chases the cursor, which should lead to a more stable interaction. I also improved the push-left functionality to ensure that the portal drawer opens correctly across various CMS platforms, which was another tricky problem that required a creative solution. Working in VS Code with Claude Code has proven invaluable, allowing me to iterate quickly without the overhead costs that would come with using platforms like Lovable or Cursor. This lean approach is essential as I navigate the complexities of building out the agentic web and spatial AI capabilities.

    By the end of the day, I had shipped 15 commits, including 14 feature improvements and one critical fix. While the grind was tough, the progress I made today feels like a solid contribution to the evolving landscape of our portal CRM and AI website builder. I’m excited to see how these changes will be received and how they will enhance user interactions moving forward.

    • Fixed double-goodbye issueImplemented strict rules for Tavus agent farewells.
    • Sanitized Luma event titlesPrevented Node process crashes from malformed data.
    • Improved GIGI embeddingGIGI remains static, enhancing user experience.
    • Enhanced push-left functionalityEnsured portal drawer behaves consistently across CMS.
    • Streamlined Tavus call handlingRevised connection logic for better user flow.
  16. Monday, June 8, 2026

    25 changes

    Today was a long 19-hour grind, but I made significant strides in enhancing the platform's resilience and user experience. I set out to solidify the deployment process and tackle some lingering issues that have been nagging at me. The day began with a focus on ensuring that our deployments are more robust. I implemented a rollback mechanism that captures the last good build, which should prevent any future outages caused by failed deployments. This means

    Read the full entry →

    if a build runs into an out-of-memory error, we can quickly revert to a stable version without causing unnecessary downtime. It's a small change, but one that feels crucial for maintaining reliability.

    As I dove deeper, I encountered a few bugs that tested my patience. One of the more frustrating issues was with the Tavus agent forgetting the product catalogue during conversations. After some head-scratching, I discovered that the catalogue was being truncated from the context. I had to adjust the structure of the data being passed and also raised the context cap to ensure it was always available. It’s these little details that can derail the user experience, and I’m pleased to have resolved it.

    I also worked on improving the AI's customer engagement capabilities. I added a feature that allows the Tavus agent to initiate a customer mode seamlessly, which should help users feel more guided through their interactions. Additionally, I implemented a 30-second wrap-up warning before the call cap, which is a small but meaningful enhancement. This way, users will know when time is running out, allowing them to make decisions rather than being abruptly cut off.

    Reflecting on the day, I’m proud of what I accomplished, but it wasn’t without its challenges. I had to switch tools and adjust models to ensure smooth functionality, particularly when the persona tool capabilities started to lag. It’s moments like these that remind me of the importance of maintaining a lean operation. If I were using a more resource-heavy platform like Lovable or Cursor, the costs would have skyrocketed for the same output. Building this solo in VS Code with Claude Code has its benefits, especially when it comes to efficiency and cost-effectiveness. Overall, today was a testament to the importance of resilience and attention to detail in building out the agentic web and spatial AI capabilities of hashtag.org.

    • Deployment Resilience ImprovedImplemented rollback snapshots for stable builds.
    • Tavus Agent Context FixResolved product catalogue truncation issue.
    • AI Customer Mode EnhancementIntroduced immediate customer mode activation.
    • 30-Second Call Wrap-Up WarningAdded warning before call cap ends.
    • Call Controls Accessibility FixAdjusted overlay to ensure call controls are reachable.
  17. Sunday, June 7, 2026

    26 changes

    Today was one of those marathon build days that stretched into the wee hours, clocking in at about 22 hours. I set out to refine the overall platform experience, focusing on the integration of our various tools, specifically the GIGI AI concierge and the Tavus video personas. The goal was to streamline the user interface and improve the functionality of our embedded elements, making them more cohesive and user-friendly. Given the extensive list of commits,

    Read the full entry →

    I feel a mix of exhaustion and pride at the progress we made.

    One of the key achievements was cleaning up the lead form integration. I removed a duplicate 'Connect with our team' lead form that was causing confusion in the iframe. Now, the GIGI modal will be the sole point of contact, which simplifies the user experience significantly. I also tackled the issue of repetition in the Tavus personas, shifting them off the default LLM to a more refined version. This was a bit of a puzzle, as I had to ensure that the transition wouldn't break existing functionality. I learned a lot about prompt management and how subtle changes can have a big impact on user interactions.

    Another major feature was the new inline product checkout process. I integrated it with Stripe in a way that allows for a seamless experience without redirecting users to a new tab. This was no small feat, especially since Stripe is notoriously tricky to work with when it comes to iframes. I ended up reworking how we handle the checkout process entirely, pivoting to use the existing agentic-seller catalogue instead of a duplicate. This required some careful navigation through our API and user interface to ensure everything flows smoothly. The end result is a much more intuitive shopping experience that I think users will appreciate.

    Despite the progress, the day wasn't without its challenges. I encountered several bugs related to cross-origin access and local storage, which caused crashes in our embedded components. These errors took a considerable amount of time to diagnose and fix. I had to implement a shim for local storage access to prevent SecurityErrors, which was a learning moment about the importance of handling cross-origin scenarios gracefully. If I had been working on a platform like Lovable or Cursor, I would have burned through credits trying to resolve these issues, but building this solo keeps everything lean and manageable.

    Reflecting on the day, I’m proud of what we’ve accomplished, but I’m also reminded of the grind that comes with being a solo founder-engineer. Each commit represents not just a feature, but a lesson learned, and I’m excited to see how these improvements will enhance the agentic web experience on hashtag.org.

    • Streamlined Lead FormRemoved duplicate lead form for clarity.
    • Improved Tavus PersonasUpdated personas to reduce repetitive responses.
    • Seamless Inline CheckoutIntegrated Stripe for direct product purchases.
    • Resolved Cross-Origin IssuesImplemented local storage shim to prevent crashes.
    • Enhanced User ExperienceRefined GIGI and Tavus integration for better interactions.
  18. Saturday, June 6, 2026

    24 changes

    Today was a marathon day, clocking in at around 23 hours, but I made significant strides in the development of the agentic web through some robust features and improvements. My focus was primarily on enhancing the Tavus experience and advancing the overall platform capabilities. I set out to refine the way users interact with the portal and to streamline our backend processes, all while ensuring that the user experience remains seamless and engaging.

    One of

    Read the full entry →

    the major tasks was moving the visitor self-view Picture-in-Picture (PiP) from the bottom-right to the top-right of the screen. This seemingly small change had a ripple effect on various aspects of the user interface, but it was crucial for improving visibility and accessibility. Additionally, I rolled out the new sales-focused system prompt for Tavus, which aims to optimize lead capturing and booking calls within a tighter timeframe. I’m excited to see how this impacts user engagement and conversion rates, even if it required a good chunk of my time to fine-tune the parameters.

    As I dove deeper into the backend, I implemented significant updates to the SEVEN and Claude integration. The long-running worker now supports a more robust message API with various tools at its disposal, including Read, Write, Edit, and Bash capabilities. The safety model documentation was also updated to ensure we are adhering to the best practices while scaling our operations. However, I encountered a few hiccups along the way, particularly with the race conditions that popped up when dealing with the interaction configuration. Debugging was a grind, but I learned a lot about how to better trace these issues in the future, especially regarding how app-messages are logged and dispatched.

    Reflecting on the day, I can't help but appreciate how building this platform solo in VS Code with Claude Code keeps things lean. If I were using platforms like Lovable or Cursor, the costs would have skyrocketed with all the credits and seats I would have burned through. Instead, I managed to ship these features efficiently, maintaining a tight budget while pushing the boundaries of our spatial AI capabilities. Overall, it was a challenging but rewarding day, filled with learning moments and tangible progress toward the vision we have for hashtag.org and the agentic web. I’m looking forward to seeing how these changes play out in the coming days as we continue to refine our portal CRM and AI website builder functionalities.

    • Enhanced Visitor Self-ViewMoved PiP to top-right for better visibility.
    • Sales-Focused System PromptOptimizes lead capturing and call bookings.
    • Robust Claude IntegrationNew long-running worker with expanded message API tools.
    • Debugged Race ConditionsImproved logging for interaction configuration.
    • Lean Development ProcessBuilt using VS Code, keeping costs low.
  19. Friday, June 5, 2026

    15 changes

    Today was a long but productive 10-hour grind, filled with a mix of feature enhancements and the usual array of bugs that seem to pop up just when you're making progress. My main focus was on refining Tavus and its integration with keywords, as well as improving various aspects of the map and dashboard interfaces. I had set out to improve the user experience across the board, and while I made some significant strides, I

    Read the full entry →

    also faced a few challenges that tested my patience and problem-solving skills.

    One of the biggest headaches came from a bug in the Tavus persona handling. I discovered that previously derived personas were being re-inherited on subsequent calls, leading to broken functionality. After a solid chunk of debugging, I implemented a fix that prevents the re-derivation of already-owned personas. This involved adding a name-prefix guard, which should ensure that once a persona is created, it remains terminal. It was a complex issue that ate up a few hours, but I'm proud of the solution I came up with.

    In addition to fixing bugs, I also pushed out some nice features. I revamped the map's UI to make it cleaner by removing redundant tooltips and adjusting the colors of in-flight drones to a more cohesive yellow and white. The owner action ring now behaves more intuitively, hiding unnecessary buttons when there's no website associated with the portal. Moreover, the dashboard is now split into an 'Overview' and 'Keywords' tab, which should make it easier for users to navigate and find the information they need.

    I also added a new Data Explorer feature that allows users to search, filter, sort, and paginate through the records pulled in by their data layers. This is a big step forward in terms of usability and should greatly enhance the overall experience for users managing their leads. While working on these features, I was reminded of the power of VS Code and Claude Code, which helped streamline my workflow today. If I were using platforms like Lovable or Cursor, the costs would have skyrocketed, but keeping it lean allows me to focus on building rather than burning through credits.

    As always, the day was a mix of triumphs and tribulations. I’m proud of what I accomplished, but the bugs remind me that there’s always more to learn and improve. Each challenge helps me refine my approach, and I’m looking forward to what tomorrow will bring as I continue to build out the agentic web and enhance the spatial AI capabilities of hashtag.org.

    • Fix Tavus persona handlingPrevent re-derivation of already-owned personas.
    • Map UI improvementsCleaned up tooltips and adjusted drone colors.
    • Dashboard split into tabsEasier navigation with Overview and Keywords sections.
    • New Data Explorer featureSearch, filter, and manage data layer records.
    • Enhanced admin toolsImproved diagnostics and API token checks.
  20. Thursday, June 4, 2026

    37 changes

    Today was one of those marathon build days that feels both exhausting and exhilarating. I set out to refine the #SPACE platform, focusing on enhancing the map functionalities and ensuring that the GIGI AI concierge features are working seamlessly. After a grueling 23-hour stretch, I can say we made significant strides, but not without running into a fair share of hiccups along the way.

    One of my major focuses was on the data layers in

    Read the full entry →

    the map. I wanted to create a more intuitive experience for users, so I implemented a curved arc around the bottom of the portal for data layer toggles. This involved a lot of tweaking to ensure the visual elements were both clean and functional. However, I hit a snag with the dropdown reliability. It was a real challenge to keep the dropdown open while hovering anywhere on the portal without it snapping shut. After several iterations, I finally got it to respect the hover state, which was a relief. The user experience is now much smoother, and I’m proud of how it turned out.

    On the GIGI AI concierge front, I made substantial improvements, especially with the agent's capabilities. I added a feature for cross-session memory, allowing the agent to recognize returning contacts. This was a complex task, requiring me to ensure that the server-side logic was robust enough to handle the nuances of returning visitors. I learned quite a bit about state management and how to leverage existing data without overcomplicating things. Another highlight was integrating the ability for the AI agent to open the owner's scheduling tools during conversations. It took some clever marker management to ensure it was seamless, but it’s now functioning as intended.

    As I look back on the day, I can’t help but feel a mix of pride and exhaustion. Building this in VS Code with Claude Code has kept things lean and efficient, especially given how much I’ve shipped solo. If I were using tools like Lovable or Cursor, the costs would have skyrocketed with all these features and fixes. But here I am, driving the agentic web forward with every line of code. I still have a long way to go, but today’s progress feels like a solid step in the right direction. Tomorrow, I’ll be diving deeper into the marketing integrations and refining the Tavus partnership pitch. Let’s see what the next 23 hours brings.

    • Enhanced data layer UXImplemented a curved arc for data layer toggles, improving visibility and interaction.
    • Dropdown reliability fixResolved issues with the data layer dropdown closing unexpectedly while hovering.
    • Cross-session memoryAdded capability for the AI agent to recognize returning contacts.
    • In-conversation bookingEnabled the AI agent to open scheduling tools for seamless booking.
    • GIGI Local Render benchmarkReleased a downloadable benchmark kit for local GPU rendering.
  21. Wednesday, June 3, 2026

    11 changes

    Today felt like a true test of perseverance as I dove into some pressing issues surrounding the ai-call features and other components of the hashtag.org platform. My goal was to enhance user experience and ensure that the integration of Tavus video worked seamlessly, especially for portal owners. I spent a long 8-hour day tackling a mix of features and fixes, and while I made significant progress, there were definitely some challenges along the way.

    One

    Read the full entry →

    of the major problems I encountered was related to the 'Duplicate DailyIframe instances are not allowed' error. This was causing owners to click 'Connect' twice to start the Tavus video. After some digging, I implemented an auto-recovery mechanism that destroys stale instances and retries creating the call object silently. It’s a simple solution that should significantly reduce user friction.

    I also faced issues with the premature 'left-meeting' event causing the Tavus iframe to unmount unexpectedly. This was a real headache, as it meant that users would see the video starting briefly before being thrown back to the portal image. I traced this back to a race condition where Daily was firing the left-meeting event before the join was completed. By treating this as an idle reset instead of an unmount, I managed to keep the iframe in place, allowing users to reconnect without having to start a new conversation, which was a win for the Tavus credits as well.

    Another area I focused on was improving the navbar functionality. The stale-fetch guard was a bit of a nuisance, as it allowed search suggestions to repopulate after selecting a portal, so I added a fix to close the dropdown on navigation changes. I also made some tweaks to the portal-marker to ensure owner buttons only open on direct glyph-core hovers, which should help with user clarity and interface consistency.

    On the feature side, I introduced lazy self-healing for free Civic Pulse layers, so portals missing these provisions now get them automatically when their scan overlay loads. This should help existing portals like #panthernexus show accurate data without manual intervention. I also implemented a diagnostic feature for the owner video-fallback, which will now clearly indicate why a video might not be available when trying to connect to GIGI. It’s these little details that I believe will enhance the overall experience for our users.

    Reflecting on the day, I’m reminded of how much I appreciate building this in VS Code with Claude Code. If I were using platforms like Lovable or Cursor, the costs would have skyrocketed, but working solo keeps the operation lean and efficient. Overall, it was a productive day filled with problem-solving and innovation, and I’m proud of the progress made despite the hurdles I faced.

    • Auto-recover Tavus videoImplemented a fix to auto-recover from duplicate iframe instances.
    • Owner video accessRemoved gate restrictions for owners calling their own Tavus video.
    • Navbar improvementsClosed search suggestions dropdown on navigation changes.
    • Lazy layer provisioningEnabled automatic provisioning of missing Civic Pulse layers.
    • Video fallback diagnosticsAdded diagnostics to inform owners why video isn't available.
  22. Tuesday, June 2, 2026

    19 changes

    Today was another marathon of coding, clocking in at around 18 hours. I set out with a clear focus on enhancing the scan-overlay functionality and improving the user experience across the portal markers and data layers. As always, my aim was to make the agentic web more intuitive and responsive, particularly for the users engaging with the spatial AI capabilities of hashtag.org. The day was filled with both triumphs and a fair share of headaches.

    Read the full entry →

    I started off by tackling the scan-overlay improvements. The goal was to make map glyphs more legible on various terrains. After some back and forth, I settled on a color scheme that included dark outlines and soft glows for different brands—think Yelp red and Booking blue. This was a fun challenge, but it took longer to get right than I anticipated. I encountered a bug where neighbour icons were shining through the portal at zoomed-out views, which required some creative troubleshooting. Ultimately, I managed to hide those icons effectively, but it was a reminder of how small details can consume a lot of time.

    Then I shifted gears to the portal markers. I had to restore the owner radial buttons on hover, which turned out to be a bit of a puzzle. The previous selector was misfiring in the compact layout, causing the buttons to vanish. After a couple of frustrating attempts, I reverted to a more straightforward selector that worked like a charm. It’s always interesting how one line of code can make or break a feature.

    On the data layers side, I launched a new self-healing feature for Civic Pulse layers. This will automatically provision layers during portal creation and maintain them over time. I also implemented a keyword suggestion engine that validates terms through Google Autocomplete, which feels like a powerful addition for our users. I spent a fair amount of time wrestling with the API wiring, but it all came together in the end. Building this in VS Code with Claude Code kept my costs down; if I were using Lovable or Cursor, I’d have burned through credits at a dizzying pace for the output I achieved today.

    Of course, not every moment was productive. I dealt with a few tricky bugs related to the AI call functionality, particularly around chunk loading errors that were causing unwanted reloads. I refined the error handling, and it seems to be more stable now. I also had to make adjustments to the drones feature to ensure they only rendered for the active portal, which involved some frustrating trial and error. But in the end, I’m proud of the progress made today. Each of these improvements brings us one step closer to realizing the full potential of the agentic web and spatial AI. I can’t wait to see how users respond to these updates.

    • Improved scan-overlay visibilityMap glyphs now feature dark outlines and soft glows for better legibility.
    • Restored portal marker buttonsOwner radial buttons now correctly appear on hover.
    • Self-healing Civic Pulse layersAutomatic provisioning and maintenance for Civic Pulse layers.
    • Keyword suggestion engineOn-topic keyword suggestions validated via Google Autocomplete.
    • Enhanced AI call stabilityRefined error handling for chunk loading issues.
  23. Monday, June 1, 2026

    22 changes

    Today felt like an intense marathon of coding as I set out to refine several key components of our spatial AI platform, particularly focusing on the scan-overlay and drones functionalities. After a long 21-hour day, I’m proud of the features I shipped, but I also battled some frustrating bugs that tested my patience and problem-solving skills.

    One of the standout features I implemented was the new scan-overlay design. I dropped the colored chip backgrounds in

    Read the full entry →

    favor of bare white-outlined lucide icons. This change not only enhances legibility on satellite tiles but also contributes to a more streamlined user experience. However, while working on the radial-button hover behavior, I encountered a significant issue where it failed to block neighbor hit-areas properly. After some deep diving, I realized the hover function needed to fully dismiss any open info cards to prevent unwanted interactions. It took a while to get it right, but I finally nailed it.

    Another major feature was the integration of the Apify estate-sales-scraper as a third discovery source. This addition brings an exciting new layer to our portal CRM, allowing users to see tangerine nodes with relevant sale information. The challenge here was ensuring that the hover card displayed all pertinent details without slowing down the overall performance. I had to tweak the modal behavior and ensure smooth live-transform tracking, which required a bit of trial and error to perfect.

    On the drones front, I merged the My Drones panel into the Scanner, which was a move I’d been contemplating for a while. It was a challenging task to balance the UI elements, especially with the collapsible My Drones panel that hides Portals Here while expanded. There were moments when it felt like I was wrestling with the layout, but after some adjustments, it finally came together. I also took the opportunity to drop the max-height cap on the drones HUD, allowing all active drones to render without internal scrolling. This was a small but significant change that enhances usability.

    As I reflect on this long day, I’m reminded of the efficiency I gain from building in VS Code with Claude Code. If I were using Lovable or Cursor, the costs would have skyrocketed for the amount of output I achieved solo today. It’s moments like these that reinforce my commitment to keeping hashtag.org lean and agile. While the grind is real, the satisfaction of pushing the boundaries of what our platform can do makes it all worthwhile. Here’s to more late nights and breakthroughs ahead!

    • Enhanced scan-overlay designDropped colored chip backgrounds for clearer lucide icons.
    • Integrated estate-sales scraperAdded Apify source with detailed sale info in hover cards.
    • Merged My Drones panelStreamlined drone management directly within the Scanner.
    • Improved radial-button behaviorFixed hover issues to prevent info card bleed-through.
    • Updated drones HUDRemoved height cap for better drone rendering.
  24. Sunday, May 31, 2026

    8 changes

    Today was a marathon build day, stretching a long 20 hours as I dove deep into refining our drones and map functionalities on the hashtag.org platform. I set out with a clear agenda: enhance the user experience with our drones while tightening up security measures around name management. I’m proud to say I made significant progress, but not without a few bumps along the way.

    One of the standout features I worked on was the

    Read the full entry →

    new My Drones HUD at the top of the map. This addition allows users to easily recall their drones and even permits friendly fire on their own drones, which adds an interesting layer to the gameplay. I implemented new API endpoints to support these features, which felt like a big win. However, I ran into a few issues with the orbit-duration selector. Initially, it was a bit unwieldy, so I collapsed it onto the Locate/Recall row, making it much more user-friendly. This required some careful tweaking, but ultimately it streamlined the interface.

    Security was a major focus today. I made it mandatory for every #name creation or renaming to have either a Stripe payment, proven ownership, or admin approval. This was a crucial update to ensure that our users' names are secure and properly managed. I had to track down a particularly sneaky bypass that allowed reseller-only listings to sidestep the fiat-claim gate. Getting that fixed took longer than expected, but I learned a lot about how our token ownership checks work under the hood.

    The map functionality also saw some much-needed attention. I fixed a couple of bugs that were causing the #name pill to misbehave. Anchoring the portal #name pill to the orbit center was a bit tricky, but I finally got it to sit correctly under the glyph instead of awkwardly under the orbit-wrap. These fixes were essential for improving the overall user experience, and I’m glad to have them behind me. I sometimes wonder how much longer these days would feel if I were working on Lovable or Cursor, burning through credits for every feature. Building this platform solo in VS Code with Claude Code keeps things lean and allows me to focus on what really matters.

    As I wrap up for the day, I feel a sense of accomplishment mixed with the fatigue of the grind. Each feature and fix today brought us closer to a more robust agentic web experience, and I’m excited to see how users will engage with the new capabilities. Tomorrow will surely bring new challenges, but for now, I’m content with the progress made on our spatial AI portal CRM and the GIGI AI concierge integration.

    • My Drones HUDNew interface for managing drones.
    • Mandatory Name SecurityEnhanced security for name management.
    • Orbit-Duration SelectorImproved drone orbit control.
    • Map FixesCorrected #name pill placement.
    • API EnhancementsNew endpoints for drone recall functionality.
  25. Saturday, May 30, 2026

    9 changes

    Today was one of those intense build days where I really dug into the core of the platform. I set out with a clear agenda, intending to make some significant enhancements to the missile and drone functionalities while also addressing a few nagging bugs that had been cropping up. It felt good to have a focused direction, but as always, the journey was anything but straightforward.

    I kicked things off with the missile features, implementing

    Read the full entry →

    the phase 3c updates. The new pick-one-drone modal and intercept resolution are going to add a lot of value to our users. I also added an in-flight missile marker, which I think will improve user experience significantly. However, I was met with some unexpected challenges along the way. Getting the portal name pill to display correctly beneath every portal took longer than I anticipated. It required several tweaks to ensure it didn’t interfere with other UI elements, but I eventually got it to a good place.

    Next, I shifted gears to the marketplace, where I focused on creating a conversion-oriented hero section and mapping tier-ladder copy to our actual portal services. This was more straightforward, but I had to keep in mind the balance between aesthetics and functionality. It’s always a challenge to make sure the marketing language doesn’t overshadow usability. I’m happy with the outcome, but I know it’ll need further testing to refine the messaging.

    The SEO component of the day was a mixed bag. I tackled some significant issues in the seo-sara module, particularly the weekly per-domain profile resync and the keyword enrichment process. By cutting daily upstream calls down to about seven times, I believe I’ve streamlined the system quite a bit. However, migrating to the new API endpoint was a bit of a bear, especially with the throttling of CADE calls to one per day per domain. Fernando had been vocal about this issue, so I was glad to address it, but it took considerable time to ensure everything was functioning correctly across the board.

    Lastly, I made some enhancements to the drone features, including shrinking the drone glyph by 30% and refining the orbit motion. The challenge here was keeping the orbit ring level and readable while also ensuring it maintained the right animation style. I had to drop the orbit rotation to keep the origin-name pill stable, which ended up being a bit of a puzzle. It’s satisfying to see these elements come together, but the grind was real today.

    I spent a solid four hours on this session, and I can say that working in VS Code with Claude Code continues to be a huge asset. If I were using platforms like Lovable or Cursor, I’d be burning through credits at an alarming rate for the same output. Keeping the platform lean while building out such intricate features is what makes this journey worth it. Overall, I’m proud of the progress made today, but I know there’s always more work ahead.

    • New drone modalImplemented a pick-one-drone modal for enhanced user interaction.
    • Marketplace hero sectionCreated a conversion-focused hero with tier-ladder copy.
    • SEO improvementsCut daily upstream calls for domain profiles drastically.
    • Drone glyph resizingShrunk drone glyph size by 30% for better visibility.
    • Orbit motion fixesRefined orbit motion to maintain stability and readability.
  26. Friday, May 29, 2026

    23 changes

    Today was one of those long, grind-it-out days where I really dug into developing features for our drones and marketplace. I set out with a clear plan to enhance how drones interact within our spatial AI environment, particularly focusing on the visibility and user experience of the drone-target portals. After about 10 hours of coding, I can say that I made significant strides, but not without encountering a fair share of bugs and challenges along

    Read the full entry →

    the way.

    The highlight of my day was implementing the orbit ring functionality for drones. I managed to get the ring to visibly rotate around the target portal, which adds a dynamic visual element that I think will enhance user engagement. I also added a sender name pill under each orbiting drone, giving users a clear indication of ownership. However, this was not without its headaches. I ran into issues with the drone-target portals not persisting correctly across zoom and pan actions. After some debugging, I figured out that I needed to always include these portals in the spatial result to ensure the orbit rings maintained their integrity. It was a frustrating but ultimately rewarding fix.

    I also spent a good chunk of time refining the in-flight HUD for the drones. I added a progress bar and new controls like Locate and Follow, which I think will make the overall experience much more intuitive. However, I faced a persistent flicker issue with the drone appearance that was tied to latitude and longitude data being included in the appearance key. After some trial and error, I excluded it and forced the AdvancedMarker on Google, which resolved the problem. It's these types of challenges that make solo development both rewarding and exhausting; every fix leads to a deeper understanding of the system.

    On the marketplace side, I added a six-tier service ladder that includes our new LAUNCH tier, which I believe will help clarify the progression for users. I also made sure that the call features were more user-friendly, restoring the minimized right-edge strip with a pulsing LIVE indicator. It was a great feeling to see these elements come together, but I did have to revert a few changes after realizing they were causing more confusion than clarity. Every day is a learning experience, and while I love the journey, I can't deny that it can be a bit of a slog.

    Building this platform in VS Code with Claude Code continues to be a game-changer for me. I can't help but think how much more I would be spending on credits if I were using other platforms like Lovable or Cursor. Keeping it lean while shipping this much solo is what allows me to focus on refining our agentic web and spatial AI capabilities without breaking the bank. Overall, it was a long but productive day, and I’m proud of the progress made, even if it came with its share of battles.

    • Dynamic Drone Orbit RingsImplemented rotating orbit rings around target portals.
    • Enhanced In-Flight HUDAdded progress bar and intuitive controls for user experience.
    • Marketplace Service LadderIntroduced six-tier service ladder including LAUNCH tier.
    • Call Features ImprovementRestored minimized right-edge strip with pulsing LIVE indicator.
    • Fixed Drone Visibility IssuesResolved portal persistence problems during zoom and pan.
  27. Thursday, May 28, 2026

    12 changes

    Today was a long but productive six-hour grind as I focused on enhancing our tier system, mapping capabilities, and refining the overall spatial experience on the agentic web platform. I set out with the goal of redesigning how users interact with and visualize tier structures, aiming for a more engaging and intuitive interface. As I dove into the work, I felt a mix of excitement and the familiar pressure that comes with tackling multiple features

    Read the full entry →

    and fixes in one sitting.

    One of the standout features I worked on was the top-down nadir-view redesign of the tier system. I introduced a concentric portal halo that complements the bird's-eye structures, aligning them with satellite tiles. This was a significant visual enhancement that I believe will make our spatial AI much more appealing and user-friendly. I also revamped the glyph sizes and redesigned the Comm Relay to include a framework, observation deck, and multi-axis arcs, which added to the sci-fi rebranding efforts I was pursuing today.

    However, it wasn't all smooth sailing. I encountered a few pesky bugs that consumed more time than I anticipated. For instance, I had to fix the issue where the selected-portal merge would wipe out the tier information. This required me to wire the Portal.tier through our API, which was a bit of a headache but ultimately resolved the problem. I also had to address several rendering issues with Google Maps, ensuring that upgraded tier buildings displayed correctly on the map. It was frustrating to realize that some markers weren't rendering due to missing connections in the Google Maps contract, but tracking down those issues taught me a lot about our integration points.

    Reflecting on my workflow, I was reminded of how much I appreciate building this platform solo in VS Code with Claude Code. If I were using tools like Lovable or Cursor, the costs for credits and seats would have quickly added up, making it hard to keep the project lean. I’m proud of the progress we made today, like dropping the 'house' tier in favor of the campfire as a more representative glyph. This semantic shift aligns with our vision for the spatial empire, and I think users will appreciate the clarity it brings.

    In the end, we shipped eight new features and tackled four significant bugs, all while pushing forward our vision for the hashtag.org portal CRM. As I close out the day, I feel a sense of accomplishment mixed with the knowledge that every bug I fix and feature I ship brings us closer to a more robust and engaging user experience.

    • Redesigned Nadir ViewIntroduced a concentric portal halo with bird's-eye structures.
    • Improved Portal GlyphsReplaced portal glyph with 3D building models for upgraded tiers.
    • Fixed Rendering IssuesResolved multiple rendering bugs in Google Maps for tier buildings.
    • Dropped 'House' TierReplaced legacy glyph with 'campfire' for clearer representation.
    • Enhanced Comm Relay DesignRedesigned framework and observation deck for better user interaction.
  28. Tuesday, May 26, 2026

    13 changes

    Today was a long 8-hour grind, but I managed to push through and ship some meaningful updates to the portal and its associated components. My main focus was enhancing the user experience and improving our SEO capabilities, which are crucial for the agentic web and spatial AI functionalities we're building. I set out to make the 'Seen by' feature more prominent and user-friendly, and I think I achieved that with the new design tweaks.

    One

    Read the full entry →

    of the significant changes I made was moving the 'Seen by' label to its own row above the bot pills, which gives it the visibility it deserves. I also shrunk the Seen-by pills to fit eight bots in two rows, making the interface cleaner and more informative. These UI improvements were largely driven by feedback I received from users who wanted a clearer view of bot interactions.

    While working on the SEO side, I encountered a few hiccups. For example, I had to implement a fix for the bot detection system to ensure that TelegramBot was matched before Twitterbot. This was crucial because Telegram's user agent contains 'TwitterBot,' and I needed to ensure our bot detection logic was robust. I also expanded the bot allow-list to include over 50 crawlers, which will help in tracking visits more accurately. It was a bit of a puzzle to get everything aligned, but I feel like I learned a lot about how our bot detection interacts with different platforms.

    I also rolled out the new public LLM-callable API, which now allows users to make POST requests to our portal with rate limits. This was a big step forward for our API capabilities, allowing for deeper integration with other services. I spent a good chunk of time ensuring that the documentation was clear and comprehensive. If I were using a more expensive tool like Lovable or Cursor, I’d likely have burned through a lot of credits for the same output, but working solo with VS Code and Claude Code keeps things lean and efficient.

    Finally, I tackled some user interface adjustments on the homepage. I bumped the section preset to eight orbs spanning the full vertical height to address feedback about the visual appeal of the sections below the hero. I also made every section glow like the hero, which definitely adds vibrancy and makes the overall experience feel more cohesive. Overall, despite some challenges, I’m proud of the progress I made today and excited to see how these updates enhance the user experience on hashtag.org.

    • Enhanced 'Seen by' featureMoved the 'Seen by' label to a dedicated row for better visibility.
    • Expanded bot allow-listNow includes over 50 crawlers for improved tracking.
    • New public API endpointEnabled LLM-callable POST requests with rate limits.
    • Improved homepage visualsSections now glow like the hero for a more vibrant look.
    • SEO improvementsImplemented dedicated sitemap and crawlable SSR pages.
  29. Monday, May 25, 2026

    2 changes

    Today felt productive, but it was also a classic case of wrestling with the unexpected. I set out to enhance our Jitsi integration, particularly focusing on allowing logged-in visitors to join live meetings without needing to own a portal. This was a long-awaited feature that would improve user experience significantly, so I was eager to get it shipped. I spent a solid six hours in the trenches, and while I made progress, the day was

    Read the full entry →

    not without its challenges.

    First, I tackled the feature that allows logged-in visitors to join meetings. The implementation went relatively smoothly, and I was able to integrate it with our existing portal CRM. It was satisfying to see how this could potentially open up our agentic web to more users, enabling them to engage more freely in meetings. This aligns perfectly with my vision for making our spatial AI platform more accessible and interactive.

    However, it was the fix that really consumed my time today. I encountered a frustrating bug where the 'End meeting for all' button was visible to the owner or moderator, but clicking it had no effect—the meeting just kept running. After some digging, I discovered that a hard-coded disable in the jitsiPortalCallLockdownConfig() was the culprit. I had to revisit the logic and ensure that the button's functionality was correctly implemented. Debugging this took longer than I anticipated, but it was a critical fix that needed to be addressed. Tracking down the root cause involved going through the configuration settings and understanding how they interacted with our meeting controls.

    Reflecting on the day, I find it amusing how even seemingly simple features can lead to unexpected roadblocks. It’s a grind, but moments like these are where I learn the most. I’m building this platform solo in VS Code with Claude Code, and I can’t help but think about how much more expensive this process would be if I were using Lovable or Cursor. The ability to ship this much on my own keeps hashtag.org lean and efficient, which is exactly what I aim for. Overall, I’m proud of the progress I made, even if it came with its share of headaches. The journey of building an AI website builder that empowers users continues, and I’m excited to see where it leads next.

    • Join Meetings as VisitorsLogged-in users can now join live Jitsi meetings.
    • End Meeting FixOwner can successfully end meetings for all participants.
  30. Sunday, May 24, 2026

    6 changes

    Today was a marathon of a build day, stretching a grueling 17 hours as I tackled a mix of features and fixes across various components of the platform. My primary goal was to streamline some aspects of the Tavus AI concierge and ensure that the user experience was as seamless as possible. I had a couple of items on my plate, including retiring the Property Intel surface entirely, which took a surprising amount of time

    Read the full entry →

    to execute cleanly. It felt good to finally put that feature to rest, but it was a reminder of how much work goes into removing something as opposed to adding new features.

    The real grind came with the fixes I needed to implement. The first fix was critical: I had to ensure that all active conversations were listed and terminated when an account reached its concurrency cap. This was a tricky issue because it involved cleaning up database entries that were not visible during admin testing. Some old build orphans were lingering around, causing the cap to trigger incorrectly. It took some digging and back-and-forth with the user to confirm that the cleanup process I had in place wasn't sufficient. I managed to track down the underlying problem, which was a relief, but it was a frustrating detour that ate into my time.

    Next up was another fix for Tavus where I had to auto-end stale conversations before initiating new ones. Users reported they couldn't start new AI calls because they had hit their maximum concurrent conversation limit. This was directly related to the previous issue, and I had to ensure that the logic was set up correctly to prevent stale sessions from blocking new ones. It felt like a game of whack-a-mole, where I kept fixing one issue only to have another pop up, but I learned a lot about the interconnectivity of these systems.

    On the map front, I made an important fix to ensure that the URL updates correctly when users click on portal markers. This was a subtle yet crucial detail that, if overlooked, could lead to confusion and a poor user experience. Lastly, I updated the UX of the star-map by changing the color of the QR modules to a muted slate-grey. This small aesthetic change went a long way in harmonizing the overall design.

    Reflecting on the day, I appreciate how much I can achieve using VS Code with Claude Code. If I were using other platforms like Lovable or Cursor, I'd be burning through credits at an alarming rate for this kind of output. Building solo on hashtag.org keeps things lean and allows me to maintain control over the quality and direction of the project. While today was exhausting, I’m proud of the progress made and the lessons learned along the way.

    • Retired Property Intel surfaceRemoved the Property Intel offering entirely from the platform.
    • Tavus conversation fixesFixed issues with concurrent conversations and auto-ending stale sessions.
    • Map URL updatesEnsured correct URL updates on portal marker clicks.
    • Star-map UX improvementChanged QR module color to muted slate-grey for better visual integration.
    • Stats counters stabilizationFixed transient drops in domain and keyword counters.
  31. Saturday, May 23, 2026

    13 changes

    Today felt like a marathon of creativity and problem-solving as I dove deep into refining the user experience across various components of the SPACE platform. My goal was to enhance the visual appeal of the home page and the star maps while ensuring that all updates were seamlessly integrated without any hiccups. I spent a solid ten hours on this, pushing through the inevitable challenges that come with iteration and improvement.

    One of the major

    Read the full entry →

    highlights was redesigning the SPACE Levels cards. I transformed them into billboard-style visuals that now feature a giant outlined numeral as a background graphic. This change not only gives them a fresh look but also enhances the clarity of the information presented. However, I ran into a snag when I realized that the existing browser caches were still serving old versions of the cover SVG. To combat this, I had to implement a version query to ensure that the latest designs were fetched. It was frustrating to see users potentially looking at outdated visuals, but tracking down the cache directives and fixing it was a learning experience in itself.

    Another significant change was making star maps free with every #portal. This shift required a complete overhaul of the pricing structure across the site, and I had to ensure that all references to paid sales were removed. The copy needed to reflect this new reality, and I enjoyed crafting a more inviting narrative around the star maps. But as always, with big changes come unexpected bugs. I had to address some issues with auto-cover star-map URLs that were not populating correctly in call-card candidates, which took some extra time to debug. It’s always a bit of a dance when you’re making sweeping changes.

    The day also brought its share of smaller tasks that added up. I revamped the homepage's promo copy and worked on the navbar ticker to eliminate dead space. These tweaks may seem minor, but they contribute significantly to the overall user experience. I’m grateful for the efficiency of my setup using VS Code with Claude Code; I can’t help but think how much more I would be spending on credits and seats if I were using platforms like Lovable or Cursor. Being able to ship this much solo keeps the platform lean and allows me to focus on what really matters: creating a seamless agentic web experience for our users.

    Reflecting on today, I feel a sense of accomplishment despite the hurdles. Each problem I faced taught me something new, and I’m proud of the progress I made. The next steps will involve monitoring user feedback to see how these changes resonate and continuing to iterate on the design and functionality of the SPACE platform. It’s all part of the journey, and I’m here for it.

    • Redesigned SPACE Levels cardsTransformed cards into billboard-style visuals with enhanced clarity.
    • Star maps are now freeRemoved all pricing references and made star maps an automatic feature.
    • Fixed caching issuesImplemented version queries to ensure latest designs are fetched.
    • Improved navbar tickerEliminated dead space for a seamless user experience.
    • Updated homepage promo copyReframed messaging to reflect new offerings and enhance appeal.
  32. Friday, May 22, 2026

    12 changes

    Today was a long but productive day, clocking in at about seven hours as I tackled several features and fixes for our spatial AI portal platform, hashtag.org. My main focus was on enhancing the star-map experience and refining portal functionality. I set out to improve user engagement by adding scannable QR codes to portal covers and implementing a personalized star map shop. In the midst of that, I encountered a few stubborn bugs that tested

    Read the full entry →

    my patience, but I managed to work through them.

    One of the standout features I shipped today was the integration of a QR code in every auto-generated portal star map. This small addition allows users to easily access their portal’s public URL by simply scanning the code with their phone camera. It’s a simple yet effective way to enhance accessibility, and I’m proud of how it turned out. I also expanded the star-map catalog to include a detailed 47-constellation layout with 319 stars and 275 asterism lines. This was a fun challenge that required some creative thinking and careful design work.

    However, the day wasn’t without its challenges. I spent a considerable amount of time troubleshooting issues related to how star maps were displayed in the portal detail views. Initially, I found that portals without user-uploaded images were displaying the star map twice, which cluttered the interface. After a few hours of digging, I managed to streamline the display logic so that only one cover image shows up—either the user image or the star map, but never both. This kind of attention to detail is essential for maintaining a clean user experience.

    Alongside these features, I also made some UX improvements to the home and levels pages, adjusting the layout to create a zig-zag timeline display. This change involved widening the container and ensuring that the cards alternate positions for a more dynamic look. I love working in VS Code with Claude Code, as it keeps my workflow efficient, especially when I’m tackling these kinds of complex layouts. If I were using platforms like Lovable or Cursor, I’d definitely be burning through credits far quicker for the same output.

    In the end, I feel a strong sense of accomplishment. The blend of new features and fixes not only enhances the overall functionality of the portal but also contributes to the vision I have for the agentic web. As I wrap up for the day, I’m excited about the direction we’re heading and look forward to tackling more challenges tomorrow.

    • Scannable QR codesEvery portal star map now includes a QR code for easy access.
    • Personalized star map shopLaunched a new /star-maps page with a live configurator and checkout.
    • Improved portal image handlingRefined display logic to show either user images or star maps, not both.
    • Zig-zag timeline layoutUpdated home/levels pages for a more engaging visual experience.
    • Enhanced star-map catalogAdded detailed constellation layout with 319 stars and 275 asterism lines.
  33. Thursday, May 21, 2026

    17 changes

    Today was a long grind, clocking in around nine hours, but I made significant strides in improving the overall functionality of the platform. My main focus was on enhancing video capabilities and refining the user experience across our portals. I aimed to make our agentic web interface more seamless, especially in how video agents interact with users. While I set out with a clear vision, the process was fraught with challenges that tested my patience

    Read the full entry →

    and problem-solving skills.

    One of the major features I tackled was the lead capture popup for our video agents, which is now integrated into both the embed and portal drawer. This feature is vital for driving engagement, but I encountered some hurdles with the embed drawer itself. There were issues with it displaying correctly, especially when the AI was on duty. I had to dive deep into the code to fix a few things, including ensuring the daily singleton was stable and that guest names were accurately displayed. It was a bit of a puzzle, but I managed to track down the root cause and implement a solution.

    Another significant challenge was related to the Tavus video connect. I had to navigate some complex CSP issues with daily.co, ensuring that the call object player was reliable. It took a bit longer than expected, but I finally got it working smoothly. I also focused on refining the video experience by adding prebuilt controls and auto-hiding the chrome when idle, which should enhance the overall user interaction.

    I also spent time on security hardening and improving the UX for Jitsi hangups, which are crucial for maintaining a professional environment for our users. I found that consolidating the MapLibre integration was a necessary step to improve performance and security. Despite the setbacks, I’m proud of the progress we made, especially in terms of expanding our SEO capabilities and content automation.

    Building this all in VS Code with Claude Code kept things efficient. If I were using platforms like Lovable or Cursor, I can only imagine how those costs would have added up for the same output. Working solo is definitely a double-edged sword, but it allows me to keep the platform lean and agile. Overall, today was a mix of triumph and tribulation, but I feel good about the direction we’re heading with hashtag.org and our spatial AI capabilities.

    • Lead capture popupIntegrated into embed and portal drawer.
    • Enhanced video controlsAdded Tavus prebuilt controls and auto-hide chrome.
    • Fixed embed drawer issuesResolved display problems with AI on duty.
    • Security hardeningImproved security measures across the platform.
    • Expanded SEO capabilitiesAdded backlinking and content automation features.
  34. Wednesday, May 20, 2026

    3 changes

    Today was a mixed bag of progress and challenges as I dove into some essential platform work. My primary goal was to enhance the portal experience, particularly around the Tavus personas and ensuring a seamless interaction for owners and guests. I felt optimistic about the feature I planned to implement, which would allow portal owners to select between a Tavus catalog persona or a trained clone. However, I quickly discovered that getting everything to work

    Read the full entry →

    smoothly would take more time and effort than I initially anticipated.

    I spent a good chunk of my day—about three hours—working on the new functionality and addressing some pesky bugs that popped up along the way. The feature itself involved adding a dropdown in the owner edit UI for selecting the Tavus persona, which required creating new API endpoints and wiring up the necessary paths for embedding and AI calls. While I was excited about the potential of the GIGI AI concierge and how it could enhance the agentic web experience, I found myself tangled up in the complexities of managing state and ensuring the new features integrated seamlessly with existing functionalities.

    The first major hurdle came when I was testing the new Tavus persona selection. I faced issues with the dropdown not displaying the correct options, which led me down a rabbit hole of debugging. After some trial and error, I pinpointed the problem to a misconfigured data fetch that wasn’t pulling the right catalog information. Fixing that took longer than I expected, but it was a relief to see everything work as intended once I got it sorted out.

    On the fix side, I tackled two significant issues that had potential to disrupt user experience. First, I re-applied the Jitsi guest lockdown for non-owner portal calls, ensuring that guests couldn't accidentally end meetings or perform destructive actions. This involved intercepting the hangup menu for visitors and streamlining the user flow. I also fixed the portal’s Leave call button, restoring the ability for guests to hang up gracefully. Overall, while the day felt like a grind at times, I’m proud of the progress I made in both enhancing the platform and ensuring a smoother user experience. If I were using platforms like Lovable or Cursor, I can only imagine how much more I would have spent on credits for what I accomplished solo in VS Code with Claude Code. Keeping things lean is crucial for hashtag.org and the SEVEN brain.

    Reflecting on today’s efforts, it’s clear that while building features can be exhilarating, the challenges that come with them are equally important. Each bug and fix contributes to my understanding of the platform and ultimately makes us stronger as we build out this spatial AI portal CRM. I’m looking forward to continuing this momentum and tackling whatever comes next on our journey.

    • Tavus persona selectionOwners can now choose between Tavus catalog personas or trained clones.
    • Improved guest experienceRestored guest hangup functionality and refined Leave call button.
    • Enhanced API endpointsNew GET /api/tavus/personas endpoint added for persona management.
    • Non-owner call restrictionsRe-applied guest lockdown to prevent unwanted meeting terminations.
  35. Tuesday, May 19, 2026

    7 changes

    Today was one of those marathon build days that felt both rewarding and exhausting. I set out to enhance the portal experience on hashtag.org, specifically focusing on the integration of Tavus video personas and refining the map functionalities. I had a long 12-hour stretch ahead of me, fueled by a blend of determination and strong coffee. The goal was to ship features that would not only improve user engagement but also streamline the overall experience

    Read the full entry →

    for our users navigating through the agentic web.

    I made significant progress on the Tavus integration, enabling users to embed video calls and documents seamlessly. This feature is crucial for the spatial AI components within our portal CRM, allowing for richer interactions. However, this part of the build was not without its hiccups. I encountered issues with the SEVEN embed, where the voice speed was inconsistent, and auto-reconnects were failing after navigating away from the portal. Tracking down the exact cause took longer than expected, but after some deep diving into the code, I was able to stabilize the embed and ensure a smooth user experience. It’s moments like these that remind me of the complexities involved in building something that feels simple on the surface.

    Another challenge came from the map functionalities. I had to fix the search bar to clear input after navigating to a new portal, which seems trivial but turned out to be a bit of a puzzle. I also needed to ensure that the map center count reflected the live call participants accurately. This required a careful re-examination of how the data was being passed through the system, and I was relieved when I finally got it working as intended. The day was filled with these moments of frustration followed by the sweet taste of victory when I found the solutions.

    Reflecting on the day, I’m proud of the features I managed to ship, especially given the solo nature of this work. Building in VS Code with Claude Code keeps the process efficient and cost-effective, especially compared to other platforms like Lovable or Cursor. The lean approach is what allows me to move quickly and iterate often, which is essential in this fast-paced development environment. Overall, it’s gratifying to see the platform evolve, even if the road is often bumpy. Here’s to more days of building and refining the agentic web, one commit at a time.

    • Tavus video personasEmbed video calls and documents seamlessly.
    • Map search bar fixClears input after navigating to a portal.
    • SEVEN embed stabilityNormal voice speed and auto-reconnect after navigation.
    • Portal detail slide-overMaintains normal width during video calls.
    • Emoji removalRemoved moon/earth emoji from portal header.
  36. Monday, May 18, 2026

    5 changes

    Today was one of those marathon days that remind me how much I love building on the agentic web, even when the grind gets real. I set out with a clear focus on enhancing the portal experience, particularly with GIGI and SEVEN. After a long 13-hour session, I’m proud to say I made significant strides, but not without some challenges along the way.

    One of the standout features I worked on was making GIGI default

    Read the full entry →

    to a docked position on first visits. This change keeps the interface cleaner for new users who might be overwhelmed by the expanded card view. I also integrated a new capability that allows anonymous visitors to join video calls directly in the slide-over, eliminating the need for a new tab. This required creating a new API endpoint to mint guest tokens, which turned out to be a bit tricky. I had to ensure that the call interface adjusted correctly when a call was active, and I spent a fair amount of time debugging the auto-promotion behavior of Prosody/jicofo to ensure guests wouldn't be unexpectedly promoted to moderators.

    Next, I tackled some usability improvements in the SEVEN embed. I moved the Earth↔Moon flip control to a more compact pill format in the portal slide-over header. This change is subtle but should improve the user experience significantly by decluttering the interface. I also resolved an annoying visual issue on Google where a white box was showing around the SEVEN iframe. By adjusting the color scheme and ensuring transparent backgrounds, I was able to eliminate that distraction entirely, which feels like a small win but is crucial for maintaining a polished look.

    In addition to these features, I implemented some navigation tools for the SEVEN agent, allowing users to open URLs and perform web searches seamlessly. This involved moving the iframe to the top-right corner to match the admin layout, which took some precise adjustments to ensure everything worked harmoniously. I also had to address a fix in the plugin that was causing issues with global CSS resets; dropping the 'all: initial' style from the shadow host was a necessary step to prevent rendering problems.

    Reflecting on the day, I’m grateful for the tools I have at my disposal, especially using VS Code with Claude Code. If I were relying on platforms like Lovable or Cursor, I’d be burning through credits at a dizzying pace. Building this solo keeps things lean and allows me to focus on shipping quality features without the overhead of additional costs. In the end, today was a mix of triumphs and learning opportunities, and I can’t wait to see how users respond to these enhancements.

    • GIGI docked on first visitNew default layout for cleaner user experience.
    • Inline video call accessAnonymous users can join calls without new tabs.
    • Improved SEVEN embed controlsCompact flip control and visual fixes implemented.
    • Web navigation tools for SEVENEnhanced user navigation with open URL and web search.
    • Fixed plugin rendering issueResolved CSS resets causing rendering problems.
  37. Sunday, May 17, 2026

    8 changes

    Today was a long grind, clocking around nine hours as I tackled some important updates and fixes for the #SPACE platform. My main objective was to enhance the seven-embed functionality and improve the overall user experience with our plugin. I set out to make the SEVEN voice embed more accessible and functional across various sites, while also ensuring that the integration with our existing systems was seamless. As usual, the day was a mix of

    Read the full entry →

    accomplishments and the inevitable challenges that come with solo development.

    I kicked off the day by working on the seven-embed features. The new public SEVEN voice embed at /seven-embed allows users to interact with the SEVEN agent in a more engaging way, and I was excited to get that live. However, implementing it came with its own set of challenges. I ran into issues with the iframe displaying properly on host pages. The auto-start feature was causing confusion, so I made it so that visitors need to tap to talk, similar to what we have on hashtag.org. This small change took longer than expected due to the need to ensure the HTML and body were fully transparent, allowing the iframe to overlay without any white panel getting in the way.

    The plugin updates were also on my agenda. I released a new version that replaced the text chat with a SEVEN-style voice avatar, which I believe will enhance the user experience significantly. However, tracking down the middleware issues that caused the /seven-embed route to be rewritten was a bit of a headache. I had to reserve that route in the PORTAL_SHARE_RESERVED_SEGMENTS to prevent it from redirecting incorrectly, which had previously resulted in a broken iframe in the #SPACE plugin.

    In addition to these features, I also focused on refining the map functionality. I fixed a bug that prevented portal owners from seeing their portals in the scanner when section filters were active. It was a straightforward fix, but it took time to trace the root cause, which was related to how the filters interacted with the navigation search. I spent a considerable amount of time debugging these issues, but it was rewarding to see everything come together in the end.

    Reflecting on the day, I appreciate how much I can accomplish using VS Code with Claude Code. The efficiency I gain from building this platform solo helps keep costs down. If I were using tools like Lovable or Cursor, I would have burned through a lot more credits for the same output. Overall, while the day was long and filled with challenges, I’m proud of the progress made on the agentic web and the spatial AI capabilities that we’re building into hashtag.org.

    • Public SEVEN voice embedLaunched at /seven-embed for cross-origin use.
    • Updated #SPACE pluginReplaced text chat with SEVEN-style voice avatar.
    • Floating GIGI launcherEnabled on every site with a toggle.
    • Fixed iframe issuesResolved middleware conflicts for /seven-embed.
    • Map portal visibility fixShowed owners' portals with active section filters.
  38. Saturday, May 16, 2026

    12 changes

    Today was a marathon of a build day, stretching a long 21 hours as I tackled a mix of features and fixes for hashtag.org. My primary goal was to enhance the overall user experience for our agentic web platform while addressing some persistent bugs that have been nagging at the edges of our deployment. I set out with optimism, ready to push forward on the sponsored keywords and GIGI voice features, but as always, the

    Read the full entry →

    path was littered with unexpected challenges.

    I kicked things off by integrating the hashtagspace Chrome extension zip into our deployment pipeline. It was a straightforward fix, but it felt like a significant step towards ensuring our patched bundles reach production seamlessly. However, the real grind came when I started addressing the issues with the sponsored keywords display in the Chrome plugin. After stripping the duplicate # prefix from fiat rows, I was relieved to see the changes render correctly, but this was just the tip of the iceberg.

    The GIGI enhancements consumed a lot of my time today. I worked on achieving text-chat parity with voice functionalities, which involved a lot of tedious testing to ensure that all tools and actions synced perfectly. I also implemented a new feature that allows GIGI to prefill lead forms and even push upsells for #space. It felt great to see these updates come together, but a few bugs reared their heads. For instance, fixing the greeting pitch glitch in GIGI's voice output took a surprising amount of trial and error. Self-hosting the libsamplerate worklet finally resolved the issue where GIGI sounded like a chipmunk at the start of conversations.

    Another big challenge was with the map features. I spent a considerable chunk of my time dealing with URL flickering after GIGI navigation and drag jitter during portal moves. The URL flashing on zoom was particularly frustrating, as it required a complete overhaul of how we handle URL state during map interactions. I created a new helper function to batch updates, which significantly reduced the visual clutter and improved performance.

    Reflecting on the day, I am proud of the progress made, especially in tightening up the map search functionality. By eliminating a 3-second delay and a 10-second churn on URL updates, I think I’ve made the experience much smoother for our users. I built all of this in VS Code with Claude Code, and I can’t help but appreciate how this solo effort keeps our platform lean. If I were using Lovable or Cursor, the costs would have skyrocketed for the same output. All in all, it was a long day filled with hard-won victories and a few lessons learned about the complexities of spatial AI development. Onward to tomorrow, where I hope to build on this momentum.

    • Improved GIGI voice outputResolved greeting pitch glitch for smoother interactions.
    • Enhanced map functionalityFixed URL flickering and improved navigation experience.
    • Sponsorship keyword updatesStripped duplicate # prefix for better Chrome plugin rendering.
    • Lead form enhancementsGIGI now pre-fills lead forms and pushes upsells.
    • Optimized map searchEliminated delays and reduced URL churn during searches.
  39. Friday, May 15, 2026

    24 changes

    Today felt like a marathon, but in a good way. I set out to refine various components of the platform, particularly the ticker, navigation, and hero sections, all while responding to user feedback from yesterday. Eight solid hours later, I can say that progress was made, but not without a few bumps along the way.

    One of the significant changes was replacing the bulky text pills in the ticker with a cleaner, circular chevron icon

    Read the full entry →

    button. This small tweak not only improved the aesthetics but also enhanced usability. However, the real challenge came from the navigation adjustments. I had to revert the testimonial's position back to its original placement under the navbar due to user feedback. It was a bit frustrating to undo work, but I understand that user experience is paramount, and I kept the inline variant for future tests, so it wasn't entirely wasted effort.

    I also made the testimonial in the navigation always visible, which meant adjusting the opacity and tweaking the transition effects. Initially, I ran into issues with overlapping quotes during transitions, but after some trial and error, I managed to eliminate that empty gap. It's these small details that can really affect user experience, so I was glad to resolve it.

    One of the highlights of the day was moving the recent #names ticker above the navigation row and making it collapsible. This involved some intricate adjustments to ensure it sits flush against the navbar, and I had to implement localStorage preferences for user settings. The feedback loop with localStorage is something I’m proud of; it makes the user experience feel much more personalized.

    On the technical side, I spent a fair amount of time debugging issues that popped up with GIGI. I had to roll back some changes that were causing mid-answer cutoffs, which was a real headache. It’s a reminder of how fragile these systems can be; one small change can lead to unexpected results. I also implemented a fix for the early disconnect bug that was plaguing GIGI, which involved optimizing the contextual updates to ensure they were leaner and more efficient. I can't help but feel proud of the progress made today, especially considering that I’m building this primarily solo using VS Code with Claude Code. If I were using a more resource-heavy platform like Lovable or Cursor, I’d likely be burning through credits at a much faster rate.

    Reflecting on the day, it’s clear that there’s still much to do, but every small victory contributes to the bigger picture of creating a seamless agentic web experience. I’m excited to keep pushing forward with the platform and see how these changes will resonate with users in the coming days.

    • Refined Ticker DesignReplaced bulky text pills with a circular chevron icon button.
    • Navigation AdjustmentsReverted testimonial placement based on user feedback.
    • Improved Testimonial VisibilityBumped opacity and adjusted transition effects for better user experience.
    • Collapsible #Names TickerMoved ticker above nav and implemented localStorage preferences.
    • GIGI Stability FixesResolved mid-answer cutoffs and early disconnect bugs.
    GlossaryGIGI
  40. Thursday, May 14, 2026

    2 changes

    Today was a long day filled with a mix of frustration and progress as I dove into some important updates for the GIGI AI concierge and our overall platform. My main goal was to enhance the responsiveness of the AI interactions, particularly focusing on the speech capabilities and ensuring that our users experience smooth and uninterrupted conversations. I spent around seven hours tackling these improvements, and while I made significant strides, I also encountered a

    Read the full entry →

    few hurdles along the way.

    One of the critical changes I made today was addressing the speech cutoff issue that had been affecting GIGI’s performance. After some deep diving into the code, I realized that the fire-and-forget actions were causing some of the speech to get truncated. This meant that users were not receiving the full responses they expected, which is a major setback for our platform's user experience. To fix this, I reverted those actions to ensure that we await responses properly, which should eliminate the truncation problem. I also bumped the token limits to safer levels, setting them to 500 and 400, respectively. This was a necessary step to ensure that users receive comprehensive answers without interruptions.

    In addition to fixing the speech cutoff, I also focused on making GIGI faster overall. This involved trimming the prompts and lowering the max tokens to streamline the interactions. I introduced parallel rate-limits, which should help in speeding up the response times significantly. The 1.5-second GPS budget was a new consideration to ensure that we keep the user experience snappy, and I believe it will pay off in the long run. Additionally, I worked on the map functionality to ensure that it honors fresh URL changes within a 60-second user-pick lock. This was crucial for maintaining the accuracy of the information presented to users.

    Reflecting on the day, I can't help but feel a mix of pride and exhaustion. Building this platform solo means that I have to wear many hats, and while it can be challenging, it also keeps our costs down. If I were using tools like Lovable or Cursor, I can only imagine how quickly the expenses would pile up with the credits and seats. Instead, I’m able to keep things lean while still pushing out these important features. Overall, while I faced some setbacks today, the progress I made gives me confidence that we’re moving in the right direction with the agentic web and spatial AI capabilities of hashtag.org. I’m eager to see how users respond to these changes in the coming days.

    • Fixed speech cutoffReverted fire-and-forget actions to await responses.
    • Enhanced response speedTrimmed prompts and introduced parallel rate-limits.
    • Updated token limitsBumped max_tokens to safer levels.
    • Improved map functionalityHonored fresh URL changes within a 60-second lock.
  41. Wednesday, May 13, 2026

    2 changes

    Today was a long and intense 8-hour grind, but I set out with a clear goal: to enhance the SEO capabilities of our platform, particularly focusing on the seo-scanner. I wanted to implement a multi-axis paginator that would significantly increase our domain ceiling, allowing us to crawl and categorize domains much more effectively. I was excited about the potential of this feature and how it could empower our users in navigating the vast ocean of

    Read the full entry →

    the agentic web.

    The first commit I made introduced the multi-axis paginator, which raised our domain ceiling from around 394 to an impressive 714. This was a big leap, and I felt a sense of pride seeing the numbers reflect the hard work I put in. However, as with any development process, it wasn't all smooth sailing. I encountered a couple of issues that ate into my time. One significant problem was ensuring that the paginator worked seamlessly across various dimensions—crawling, categorization, and sorting in both ascending and descending order. It took some time to track down the bugs that arose from the interaction of these axes, but after several rounds of testing and debugging, I managed to iron out the kinks.

    The second commit was a fix for the seo-scanner itself. I realized that we were still surfacing domains that were marked as 'awaiting location,' which cluttered the results and made it harder for users to find actionable insights. I implemented a filter to only show domains with resolved coordinates, which I believe will streamline the user experience significantly. To further enhance this process, I also bumped up the per-tick enrichment from 20 to 60, enabling us to finish the backfill much faster. This change should improve the overall efficiency of the tool.

    Reflecting on today’s work, I appreciate the power of building this platform solo. I spent the entire day in VS Code, leveraging Claude Code to keep things moving efficiently. If I were using platforms like Lovable or Cursor, I can only imagine how much I would have burned through in credits and seats for the same output. Keeping the development lean is essential for us, and being able to ship features like these on my own makes a significant difference. Overall, today was a testament to the challenges and victories of building out the spatial AI capabilities of hashtag.org, and I'm looking forward to seeing how users engage with these new features.

    • Multi-axis paginatorIncreased domain ceiling from ~394 to ~714.
    • SEO domain filteringOnly surface domains with resolved coordinates.
    • Enhanced enrichment speedIncreased per-tick enrichment from 20 to 60.
  42. Tuesday, May 12, 2026

    9 changes

    Today was one of those marathon days that stretched on for 17 hours, but I finally made some significant strides in the development of our spatial AI portal platform. I set out to enhance our SEO capabilities and improve the overall user experience in navigating and interacting with the portal. The tasks were ambitious, but I was driven by the idea of making our agentic web even more engaging and effective for users.

    One of

    Read the full entry →

    the key features I implemented was the enhancement of the SEO domains. I made sure that they render the same PortalDetail panel as our existing portals, which includes the favicon portrait, website URL, and a clear Claim CTA. The hidden call, vault, book, and share rows maintain a clean interface while preserving a cyan marker for easy identification on the map. However, I hit a snag with the map camera not updating correctly when the search bar resolved a keyword or hashtag. After a bit of debugging, I realized that the detailMapCenter was updating, but the camera itself was not moving. A fix to ensure that the map flies to the resolved portal coordinates solved that issue.

    Another major task was integrating the SEO Sara API, which allows us to sync live domains into our system. This was a complex addition, and I had to ensure that the public endpoint worked seamlessly with the scanner-panel Live SEO Domains section. It was a bit of a headache to manage the key scope limitations, but I was able to bypass some constraints by implementing a fallback for real coordinates that didn’t rely solely on the upstream profile API. Along the way, I also had to address several bugs related to the SEO extractor and sync processes, which involved adjusting filters to handle mixed-case responses from upstream services. Tracking down these issues was a grind, but it taught me a lot about how our systems interact with external data sources.

    I spent a good chunk of time writing new tests and documentation as well. I added 65 new test assertions to ensure that our embed-origin allowlist and SSRF boundaries are secure. This is crucial for maintaining the integrity of our system as we expand our features. I also created step-by-step guides for new users to set up Upstash and Sentry DSN, which should help ease the onboarding process for anyone new to our platform. Reflecting on all this, I'm grateful that I’m building this in VS Code with Claude Code. If I were using platforms like Lovable or Cursor, the costs would have skyrocketed with this level of output. Keeping the platform lean is essential, especially when you’re shipping most of this solo.

    Overall, I’m proud of what I accomplished today, even if it was a long haul filled with debugging. The progress we made on our SEO tools and user navigation is going to make a real difference for our users. I’m looking forward to seeing how these features will enhance the experience on hashtag.org and how they will contribute to the broader vision of the agentic web.

    • SEO domains enhancementRendered SEO domains with PortalDetail panel for better user experience.
    • Map camera fixResolved issue with map not updating on keyword search.
    • SEO Sara API integrationEnabled syncing of live domains into our system.
    • New testing suiteAdded 65 new test assertions for improved security and functionality.
    • Documentation updatesCreated user guides for Upstash and Sentry DSN setup.
  43. Monday, May 11, 2026

    11 changes

    Today was one of those long, grind-it-out days that feels both rewarding and exhausting. I set out to tackle a few key areas of our platform, primarily focusing on scalability and security. The goal was to enhance the robustness of our agentic web while ensuring that our spatial AI features remain secure and efficient. I clocked in about 11 hours, and while I made significant progress, there were definitely some hiccups along the way.

    One

    Read the full entry →

    of the major undertakings was migrating our job queue system to a more durable BackgroundJob queue. I wanted to ensure that the scheduling of portal embed knowledge reindexing was more reliable, so I implemented a deduplication mechanism based on portal IDs. This shift from a fire-and-forget model to a more managed system meant that I had to delve into some intricate PM2 configurations to avoid orphaned portals. After a few frustrating missteps, I finally got the scheduling to work seamlessly, but it took more time than I had anticipated.

    Security was another big focus today. I tackled a slew of dependabot alerts by upgrading several key dependencies, including nodemailer and postcss. This was crucial to ensure that our platform remains safe from vulnerabilities. After completing the upgrades, I ran an npm audit and was relieved to see that we now have zero vulnerabilities reported. However, I also had to implement a few fixes to prevent potential abuse, like setting a daily LLM-cents cap on the embed AI path. This was necessary to ensure that an attacker couldn't drain an owner's wallet, despite our existing rate limits. These security measures required a lot of testing and debugging to ensure they were effective, which ate up a good chunk of my day.

    On the observability front, I wrapped up a significant migration of our error reporting system to Sentry. This involved updating a massive number of API endpoints and ensuring that all console errors flowed through our new reportApiError helper. While it was tedious, I know that this will pay off in the long run by giving us better insights into issues as they arise. I also took the opportunity to document some of the work I did, particularly around scaling and cluster mode, which will be helpful for future reference.

    Looking back, I feel proud of the progress made today. I love that I can build this using tools like VS Code with Claude Code, allowing me to keep costs down while shipping features solo. If I were using platforms like Lovable or Cursor, I’d probably be burning through credits at an alarming rate. Today was a testament to the lean approach that keeps hashtag.org thriving, even as we tackle the complexities of the SEVEN brain architecture and our AI website builder. All in all, it was a tough day, but one that I know will make our platform stronger.

    • Durable BackgroundJob queueImplemented a managed job queue for portal embed knowledge reindexing.
    • Security upgradesBumped dependencies and resolved security vulnerabilities.
    • Daily LLM-cents capImplemented per-portal cap to prevent wallet drain from attackers.
    • Sentry error reportingMigrated API error handling to Sentry for better observability.
    • Migration to UpstashMigrated critical stores for session management to improve reliability.
  44. Sunday, May 10, 2026

    8 changes

    Today was a marathon of problem-solving and fine-tuning. I set out to address some lingering bugs in our map and GIGI functionalities, and it turned into a long, intense 16-hour day. As the sun crept down, I felt both the weight of the tasks and the satisfaction of making tangible progress. The focus was on making our spatial AI more user-friendly and efficient, but the road was rocky, as it often is in this line

    Read the full entry →

    of work.

    I started with the map component, where I faced a particularly stubborn issue with the GIGI orb in lunar mode. It was bypassing the Earth zoom gate and causing confusion for users trying to zoom in beyond the intended limits. After some digging, I was able to implement a fix that capped the lunar zoom at level 5. I also tackled a freeze issue that was occurring when the slide-over menu was open. This was impacting the URL writes and causing the wheel-zoom to mess with search parameters. It took a bit of trial and error to track down the root cause, but ultimately, I got it sorted out.

    Switching gears to GIGI, I focused on improving the interaction quality. I added a deduplication layer for the ask_gigi function, which was spitting out cached replies when it shouldn't have. It was frustrating to see duplicate asks cluttering the user experience, but I implemented a soft retry mechanism for network errors, limiting attempts to three. This should help us maintain a smoother interaction, which is key for our users.

    The embed functionality had its own set of challenges. I had to make sure that the name anchor didn't cause any identity hallucinations in the descriptions. I also added a feature to email the portal owner for every captured lead, which I think will improve our lead tracking significantly. There was a particular focus on filtering out SEO spam noise from knowledge retrieval as well, which should enhance the overall quality of the information provided. Reflecting on the day, I’m reminded how crucial it is to keep an eye on both the big picture and the little details. Each of these fixes, while small on their own, contributes to the overall integrity of the agentic web experience we're building.

    As I wrap up the day, I can’t help but think about how much more expensive this would be if I were using other platforms like Lovable or Cursor. Building this in VS Code with Claude Code has kept my costs down and allowed me to maintain control over every aspect of development. It’s a lean operation, but it’s rewarding to see how far I can push the platform on my own. Here’s to more days like this, filled with challenges and the satisfaction of solving them.

    • GIGI orb lunar mode fixCapped lunar zoom at level 5.
    • Map freeze issue resolvedFixed URL write issues with slide-over open.
    • GIGI deduplication layer addedPrevented duplicate replies and improved interaction.
    • SEO spam filteringFiltered out noise from knowledge retrieval.
    • Embed functionality improvementsEmail portal owner on captured leads.
  45. Saturday, May 9, 2026

    2 changes

    Today was one of those marathon coding sessions that felt both exhausting and rewarding. I set out to tackle a couple of issues with the web3 badge feature and the GIGI map orb functionality. After about 13 hours of diving deep into the code, I managed to ship a fix and a small improvement that should enhance user experience on the agentic web platform.

    The first task involved the web3 badge. I discovered that the

    Read the full entry →

    SPACE coin badge was shipped incorrectly as a JPEG file but labeled with a .png extension. This was causing issues in production, specifically with the Content-Type headers that were being sent. Browsers were throwing warnings due to the mismatch, which could confuse users. I re-encoded the badge as a proper PNG and added an image fallback to ensure that even if something went wrong with the primary badge, users would still see something instead of a broken image. It felt good to resolve that, but it took longer than expected to track down the root cause and implement the fix.

    The second part of my day was spent addressing a bug with the GIGI map orb. I noticed that even when the manual mode was activated, the orb persisted and caused some confusion. After a bit of digging, I learned that the stale gigiMapOrb was being preferred over the aiCallTakeoverEnabled state. So, I made some significant changes to the mergePortalDetailCache to clear the orb when switching to manual mode and recompute it based on the PUT responses to ensure consistency. It was a bit of a puzzle, but I learned a lot about state management in our portal CRM during the process.

    Reflecting on the day, I'm proud of the progress made but also reminded of the challenges that come with building something solo. If I were using platforms like Lovable or Cursor, I would have burned through a lot of credits for the same output. Working in VS Code with Claude Code keeps my overhead low, allowing me to focus on shipping features without breaking the bank. As I close out this long day, I feel a mixture of fatigue and satisfaction. Each bug fixed and feature shipped brings us one step closer to a more robust spatial AI platform for our users.

    • Fixed web3 badge formatRe-encoded SPACE coin badge as a proper PNG with fallback.
    • Resolved GIGI map orb issueCleared gigiMapOrb when manual mode is activated.
  46. Friday, May 8, 2026

    18 changes

    Today felt like a marathon, and in some ways, it was. I set out with the goal of refining our portal capabilities, particularly focusing on enhancing the AI voice functions and overall user experience. After a long 22-hour build day, I can say I made significant progress, but not without its fair share of challenges.

    One of the key features I shipped was the integration of the GIGI AI voice with richer grounding capabilities. This

    Read the full entry →

    involved a lot of work around structuring the portal's voice features so that they can draw from a variety of data points like map pins, categories, and social media links. It was a complex task, and I spent a considerable amount of time ensuring that the voice meter accurately tracks GIGI credits for owners. Just when I thought I had it all wired up, I ran into issues with the billing structure for logged-in versus anonymous visitors. It took a few hours to untangle the logic, but I finally managed to get it sorted out.

    I also tackled some lingering bugs that had been nagging me. The fix for the GIGI map orb during AI voice duty was particularly tricky. Ensuring that the mic UI was enabled during the handshake process required a deep dive into the permissions and state management of the orb. I ended up merging the GIGI orb with the caller orb, which was a bit of a headache, but it worked out in the end. I learned a lot about the intricacies of state management and the importance of tracking user permissions correctly.

    There were a few areas where I could have saved time if I had a team around me. I realized that building all this in VS Code with Claude Code is a blessing; if I were using a platform like Lovable or Cursor, I'd be burning through credits and seats at an alarming rate. Being able to keep the platform lean while shipping this much on my own feels like a win, even if the grind can be exhausting.

    As I wrap up the day, I feel a mix of pride and fatigue. The features I shipped today, from the portal voice to the new billing structures, are steps forward for the agentic web and our spatial AI capabilities. Every problem I encountered taught me something valuable, and I'm looking forward to seeing how users respond to these updates. Here’s to another day of building and learning ahead.

    • Enhanced GIGI voice groundingIntegrated richer data points for AI voice interactions.
    • Improved billing structureFixed discrepancies for logged-in vs anonymous users.
    • Fixed GIGI map orb issuesEnsured mic UI functions correctly during AI voice duty.
    • Streamlined portal UXRefined the user experience for AI takeover and manual modes.
    • Lean solo developmentEfficiently built and shipped features using VS Code.
  47. Thursday, May 7, 2026

    9 changes

    Today was a marathon of a build day, clocking in at a long 22 hours, but I made substantial progress on the agentic web features of the platform. My main focus was on enhancing the agent discovery functionality and refining the Gigi AI concierge interactions. I wanted to ensure that the agentic seller marketplace was both robust and user-friendly, and I’m proud of what I accomplished, even amidst the challenges I faced.

    One of the

    Read the full entry →

    key features I implemented was the rate-limiting for the agent discovery API and the Gigi turn function. This was crucial to manage the load and ensure a smooth experience for users without overwhelming the server. I also tackled geo SQL pagination, which was a bit tricky. I had to dive deep into the Postgres Haversine implementation to fix the discovery with proper ordering and limiting, which turned out to be quite the puzzle. I learned a lot about optimizing queries and handling geographic data more effectively.

    In addition to the new features, I worked on the embed tools documentation to clarify the checkout complete URL for the agent cards. This documentation is vital for future integrations and ensuring that users can smoothly navigate through the portal CRM. Another significant enhancement was the setup of the agentic buyer wallet, which now includes discovery filters and a complete route for SPT. It’s exciting to see these features come together, but they didn't come without their fair share of bugs.

    I also had to address a fix in the slide-over functionality, which was causing issues with auto-dismissal of portal details when users navigated away from the map. I realized that keeping the homepage clean while still allowing users to access important information during calls required a delicate balance. This fix was a real test of my problem-solving skills and reminded me of the importance of user experience in every aspect of the platform.

    Reflecting on this day, I’m reminded of how using tools like VS Code with Claude Code has kept my workflow efficient. If I were using Lovable or Cursor, I would have burned through a significant amount of credits for the same output. Building this platform solo is not just a necessity but a strategy that keeps things lean and focused. I’m proud to see the agentic web evolve, and I look forward to the next steps in this journey.

    • Enhanced agent discoveryImplemented rate-limiting for agent discovery API.
    • Gigi AI improvementsRefined Gigi turn functionality with geo SQL pagination.
    • Marketplace wallet setupEstablished agentic buyer wallet with discovery filters.
    • Fixed slide-over UXResolved auto-dismiss issue for portal details.
    • Updated embed documentationClarified checkout complete URL for agent cards.
  48. Wednesday, May 6, 2026

    7 changes

    Today felt productive as I set out to refine the leaderboard functionality and tackle some lingering issues with the call features in our #SPACE platform. I dove into this work with a solid four-hour session, focusing on enhancing user experience and ensuring smoother navigation through the portal. The leaderboard was a significant area of concern as it previously displayed a lot of unwanted noise from scraped events, which cluttered the data and made it difficult

    Read the full entry →

    for users to see relevant portals. I tackled this by implementing a dedicated endpoint that orders the portals by total visits on the server side, filtering out the ephemeral and non-# rows directly in the database. This change not only cleans up the leaderboard but also ensures that it accurately reflects the active portals like #SPACE and #freakncreekn, making it more user-friendly.

    While refining the leaderboard, I also ensured that the styling matched the testimonial ticker on the homepage, which involved a bit of CSS tweaking. It was satisfying to see everything align visually, as it brings a cohesive feel to the interface. However, the grind didn't stop there. I also focused on fixing some bugs related to our calls feature. One major issue was keeping the user cached during transient failures of the authentication endpoint. I had to drop the user ID dependency from the Jitsi embed, which was causing some users to get booted from live calls due to map-zoom backpressure. After figuring out the root cause, I implemented a solution that not only resolved this issue but also set the stage for future enhancements to our portal AI embed harness.

    I also rolled out Phase 1 of the portal embed agent tool-calling harness, which now includes seven tools to help users interact with the portals more effectively. These tools render inline buttons for directions and maps, making the experience much smoother. I enjoyed the challenge of integrating these features and ensuring they were functional without compromising performance. Additionally, I locked down the share-link feature for video calls, ensuring only the portal owner can end a call—this was crucial for maintaining control during live sessions.

    Overall, today's work felt rewarding, despite the hiccups along the way. Reflecting on the entire process, I realize how much I appreciate building this in VS Code with Claude Code. If I were using platforms like Lovable or Cursor, I would have been burning through credits at an alarming rate for the same output. This solo approach keeps the platform lean and allows me to focus on delivering quality improvements without unnecessary overhead. As I close out today's session, I feel proud of the progress made and look forward to tackling more challenges tomorrow.

    • Enhanced Leaderboard FunctionalityImplemented a dedicated API endpoint to filter and order portals by visits.
    • Improved Call StabilityFixed user caching issues during transient authentication failures.
    • Portal Embed Agent ToolsLaunched Phase 1 with seven new interactive tools for user engagement.
    • Video Call ControlRestricted call end permissions to portal owners only.
    • Search Functionality UpdateImproved search to direct users to specific portal details.
  49. Tuesday, May 5, 2026

    15 changes

    Today felt like a marathon, pushing through an 11-hour build day that left me both exhausted and proud. My main focus was on refining the user experience and enhancing the functionality of our agentic web platform at hashtag.org. With several features lined up, I set out to improve the map layout and stats representation, ensuring that everything was not only functional but also visually appealing. The goal was to create a smoother and more intuitive

    Read the full entry →

    interface for our users, especially with the new spatial AI capabilities we’ve been integrating.

    I started by tackling the homepage hero section, where I reverted the search position and shrank the stats to create a cleaner look. I also consolidated the dashboard and my portals tabs, which made navigation more seamless. However, I ran into a few hiccups along the way. For instance, the fix for the map layout required suppressing the URL flip on marker clicks, which was a bit tricky. It took some time to track down why the moon black globe wasn’t displaying properly, but after a few iterations, I was able to restack the stats below the search, which finally resolved the issue.

    The stats feature was another area that consumed a good chunk of my day. I broadened the domains-sold metric to include all hashtag.org names and cleaned up the breakdown. This was crucial for providing our users with a more comprehensive view of their stats. I also implemented a silent retry for the spatial search functionality, which made the user experience much friendlier, especially when offline. The auto-recovery feature when coming back online was a nice touch, though it took a while to get right. It’s always a challenge to balance the technical complexity with user-friendliness, and today was no exception.

    As I wrapped up, I added a rotating testimonial ticker under the navbar on the homepage, which I think will add a nice touch to our portal CRM. It was satisfying to see the ticker evolve from a simple idea to something that now showcases real use-case quotes. I’m especially proud of how I managed to do all this solo, using VS Code and Claude Code, which kept things lean. If I were on platforms like Lovable or Cursor, I would have racked up significant costs for what I accomplished today. It’s days like this that remind me of the value of building independently and being able to iterate quickly based on real user feedback.

    • Improved map layoutSuppressed URL flip on marker click and fixed moon globe display.
    • Enhanced user statsBroadened domains-sold metric to include all hashtag.org names.
    • Rotating testimonial tickerIntroduced a new ticker showcasing user quotes on homepage.
    • Spatial search improvementsImplemented silent retry and auto-recovery for offline users.
    • Consolidated dashboard tabsStreamlined navigation by merging dashboard and my portals tabs.
  50. Monday, May 4, 2026

    20 changes

    Today was an intense 19-hour grind focused on refining the user experience within the portal. I set out to enhance several areas, including the portal-detail, navbar, and crypto-section, while also addressing some pesky bugs that had been lingering. The day started with a clear vision of what I wanted to achieve, but as always, the journey was far from straightforward.

    One of the major highlights was implementing the light-mode skin for the Web3/Open Web flip

    Read the full entry →

    badge in the portal-detail. It seems simple, but I had to ensure that the solid purple button looked good on the white card, which took more tweaking than I anticipated. Meanwhile, the navbar required some significant adjustments. I moved the 'Back to the Open Web' inline into the right-side cluster, but that also meant reworking the light-mode pill colors to avoid any overlap. It’s these little details that can take a disproportionate amount of time, but they’re essential for a polished interface.

    The crypto-section saw some exciting developments too. I moved the 'Back to the Open Web' toggle into the navbar, which feels more intuitive. I also added map-debug tracing for event-click bounces, which I hope will help in debugging future issues. However, addressing the event-click bounce itself was a challenge. I had to re-check the map lock after fetching IP and portal-deep-link data to ensure a smooth user experience. It’s frustrating when you think you’ve fixed one problem only to find another lurking in the shadows.

    Performance was a key focus today, especially with the scanner. I capped the global firehose at 600 portals to prevent the scanner from overwhelming users with an empty list. This was a big decision, but it was necessary to maintain usability. I also introduced an IntersectionObserver-based progressive reveal for the scanner, which should improve load times and responsiveness. However, I faced several hiccups, particularly with ensuring that the scanner rendered correctly when filters were active. Eliminating those race conditions took some deep diving into my logic, but I’m proud of the outcome.

    Reflecting on the day, I’m reminded of how much I appreciate building this in VS Code with Claude Code. The efficiency I gain by working solo on hashtag.org allows me to keep the platform lean and avoid unnecessary costs that services like Lovable or Cursor would incur. Each feature I ship feels like a small victory, even when the day is long and filled with challenges. I’m excited to see how these improvements will enhance the user experience on the agentic web and contribute to our vision of spatial AI integration. As always, I’m looking forward to what tomorrow brings.

    • Light-mode skin for badgeImplemented a light-mode skin for the Web3/Open Web flip badge in portal-detail.
    • Navbar adjustmentsMoved 'Back to the Open Web' inline and fixed light-mode pill colors.
    • Crypto-section updatesAdded map-debug tracing and improved toggle placement in the navbar.
    • Scanner performance enhancementsCapped global firehose and introduced IntersectionObserver for progressive scanning.
    • Fixed event-click bounceResolved issues with event-click bounces and ensured correct rendering under filters.
  51. Sunday, May 3, 2026

    34 changes

    Today was a long 13-hour grind, but I made some significant progress on the #SPACE platform. My primary focus was on enhancing the events scanner, improving the spatial features, and refining the portal detail view. I set out to make the event experience more user-friendly and align it better with Luma's categories. It felt good to tackle some of the feedback I received from users, especially regarding the classification of events and how they appear

    Read the full entry →

    in the scanner.

    However, it wasn't all smooth sailing. I ran into a few frustrating issues, particularly with the scanner's behavior regarding crypto events. The scanner-leak filter was overly aggressive, leading to the unintended dropping of legitimate crypto events from the Events bucket. After some careful debugging, I adjusted the filter to only keep the IDs returned by the spatial server. This change not only fixed the issue but also highlighted how important it is to have robust filters in place without inadvertently excluding valid data.

    Another challenge came from the need to drop force-injected portals that were leaking into the wrong categories. This required some thoughtful adjustments in the code to ensure that only the relevant portals showed up in the scanner, which took longer than expected. I also had to deal with transient TypeError toasts that were sticking on the screen, which I found quite annoying. I set them to auto-dismiss after 4.5 seconds, which should improve the user experience significantly.

    On the brighter side, I was able to implement several new features that I’m quite proud of. For instance, I added a green pulsing live-event dot to replace the red one based on user feedback. Additionally, I matched Luma's eight categories to enhance the events filter dropdown, making it more intuitive for users to find what they’re interested in. I also enriched event descriptions through a dedicated Luma URL endpoint, which adds more context to the events being displayed.

    Reflecting on the day, I’m grateful for the lean structure of my workflow. Building this in VS Code with Claude Code allows me to iterate quickly without the overhead costs I’d face if I were using platforms like Lovable or Cursor. Today’s efforts are a testament to the power of the agentic web and spatial AI capabilities we’re developing at hashtag.org. It’s rewarding to see the platform evolve, even if the road is often bumpy.

    • Improved event classificationEnhanced client-side topic classification for events.
    • Fixed scanner leaksAdjusted filters to prevent dropping valid crypto events.
    • User feedback implementedChanged live-event dot color from red to green based on user input.
    • Expanded event categoriesAligned with Luma's categories for better filtering.
    • Enhanced portal detailsAdded event cover images and improved layout.
  52. Friday, May 1, 2026

    19 changes

    Today was one of those marathon coding sessions that stretched into a long 21-hour day, but I set out with a clear mission to enhance the agentic web experience on hashtag.org. My focus was primarily on refining the persona features and improving the deployment processes. I wanted to ensure that users could seamlessly interact with the AI portal, even if they weren’t signed in, and that the Tavus video personas were more reliable and user-friendly.

    Read the full entry →

    I kicked things off by diving into the persona recorder UX. The goal was to improve the user experience during video captures. I implemented a teleprompter overlay to guide users and capped the preview height to keep the consent script visible. However, I ran into a few issues—initially, the live video preview continued to show even when a blob was captured, which was confusing. After some debugging, I managed to hide the live preview effectively, which cleared up a lot of confusion for users. It’s always interesting to see how small UX tweaks can significantly impact usability.

    Next, I tackled the Tavus video persona functionality. This involved fixing the Phoenix-4 format and ensuring that users received clearer error messages if something went wrong. I also raised the minimum recording length to align with the 60-second requirement. The testing phase revealed a few edge cases where the API returned confusing error messages, but I was able to parse the JSON for user-friendly feedback. It’s frustrating when things don’t work as expected, but each problem solved is a learning opportunity.

    One of the highlights of the day was adding the ability for anonymous visitors to access AI portal calls. This shift not only broadens our user base but also encourages more engagement with our spatial AI capabilities. On the deployment side, I had to fix an issue with the Prisma migration process, which was being disrupted by discarded stubs during rsync. Thankfully, a quick adjustment on the deployment script resolved that. Building in VS Code with Claude Code allows me to maintain a lean operation, especially when I think about how much more I’d be spending on credits if I were using platforms like Lovable or Cursor.

    Overall, I’m proud of the progress made today. While there were challenges, each one pushed me to refine the platform further. The enhancements to the persona features, especially around the Tavus integration, are paving the way for a more intuitive user experience. I look forward to seeing how these changes will be received in the wild as we continue to shape the future of the agentic web.

    • Improved Persona Recorder UXAdded teleprompter overlay and capped preview height for better user guidance.
    • Tavus Video Persona FixesEnhanced error messages and clarified recording requirements for stability.
    • Anonymous AI Portal AccessEnabled AI portal calls for users without sign-in, increasing accessibility.
    • Deployment Process ImprovementsFixed rsync issues to ensure smooth Prisma migration and deployment.
    • Enhanced Embed FeaturesIntroduced per-portal embed toggle for owner voice cloning.
  53. Thursday, April 30, 2026

    14 changes

    Today was one of those marathon build days that stretched a full 12 hours, but I came out the other side feeling accomplished. My main focus was on the admin, marketplace, and plugins areas, with a mix of feature development and a critical fix that had been nagging at me. I set out to enhance the user experience across the board, particularly with the introduction of a revenue dashboard and an improved plugin invocation process.

    Read the full entry →

    The highlight of my day was undoubtedly the new revenue dashboard. I rolled out an admin interface that aggregates financial figures from domain resales and renewals. It was a complex feature that required pulling together multiple data sources. Initially, I struggled with the data formatting and ensuring the accuracy of the calculations, which led to a few frustrating hours of debugging. However, after some trial and error, I managed to get it working smoothly, and it feels great to have a clear picture of our revenue streams now.

    I also added a tabbed interface to the marketplace, which now features both domains and AI skills. This was a fun challenge because I had to ensure that the existing domain listings remained intact while seamlessly integrating the new AI tab. There were a couple of hiccups with state management that took longer to resolve than I anticipated, but I eventually got it sorted out. The marketplace is looking much more organized and user-friendly now, which should help drive engagement.

    On the plugins front, I made significant strides with the AI Visibility Check skill. I transitioned it from inferring data to actually measuring it with live OpenRouter probes. This required extensive testing across various AI models, including ChatGPT and Claude. I hit a wall when the initial measurements weren't aligning with expectations, but after reviewing the probe implementations and running some tests, I was able to pinpoint the discrepancies and correct them. The new customer-facing Run UI is also a big leap forward; it allows users to interact with the plugins more intuitively, with real-time feedback on their actions.

    One of the more frustrating challenges was a bug in the plugin code that required a fix for the Prisma compound unique names. This was crucial for maintaining data integrity and ensuring the system could handle upserts correctly. I spent a good chunk of time wrestling with type-checking issues, but it was satisfying to finally resolve that and see everything compile without errors. It’s days like these that remind me how much I appreciate building in VS Code with Claude Code; the efficiency I gain from doing this solo is invaluable. If I were using platforms like Lovable or Cursor, I would have burned through resources far more quickly than I did today. Overall, it was a long but rewarding day, and I’m excited to see how these new features enhance the agentic web experience for our users.

    • New Revenue DashboardAggregates financial figures for domain resales and renewals.
    • Tabbed Marketplace InterfaceIntroduced tabs for domains and AI skills.
    • Live OpenRouter ProbesAI Visibility Check skill now measures data instead of inferring.
    • Customer-Facing Run UINew interface for interacting with plugins with real-time feedback.
    • Fixed Prisma Unique NamesResolved critical bug for data integrity in plugin management.
  54. Wednesday, April 29, 2026

    10 changes

    Today was one of those marathon build days where I set out to enhance the enterprise readiness of the platform while also addressing some key user experience issues. I spent a grueling 23 hours diving deep into the code, focusing on refining our systems to better serve our users, particularly in the areas of transactions and customer engagement. As I worked through the day, I was reminded of how much effort it takes to ensure

    Read the full entry →

    that the agentic web remains robust and reliable, especially as we scale.

    One of the major highlights was the implementation of bank payouts via Stripe Connect Express for #domain sales. This means that when a #domain sells, the seller's earnings will now flow directly to their bank account instead of being credited to their in-platform GIGI balance. It’s a small change that I believe will significantly improve the user experience. On the flip side, I ran into some issues with the Stripe checkout parameters, which required some creative casting to ensure compatibility with our production environment. These kinds of bugs are frustrating, but they often lead to a deeper understanding of the systems at play.

    I also focused on refining the GIGI AI concierge experience by auto-crawling customer sites. Previously, when a new customer signed up, GIGI would have no context about their site until they manually reindexed it. Now, GIGI will automatically gather essential information, allowing it to provide more relevant assistance right from the get-go. However, I had to rewrite the system prompt to make it more structured, which involved a lot of trial and error to find the right balance between clarity and functionality. This is an ongoing challenge in making AI assistants truly useful.

    The day was not without its share of problems. I had to harden our CORS settings and trusted origins to ensure security, which took longer than expected. There were also some hiccups regarding the transfer and sell functionalities for #domains that needed to be gated to fiat transactions only. I had to refactor some of the logic to ensure that everything integrates seamlessly, given the complexities of the platform.

    I can’t help but feel a sense of pride in how far we've come, especially when I realize that I’m able to ship this much on my own. Using VS Code with Claude Code allows me to keep costs down, especially compared to alternatives like Lovable or Cursor, where I’d be burning through credits just to keep the lights on. Building this platform solo is what keeps us lean and focused, and today was a testament to that effort.

    • Bank payouts via StripeSellers receive payments directly to their bank accounts.
    • Auto-crawl for GIGIGIGI now gathers essential site info automatically.
    • Refined transfer/sell UICombined transfer and sell into a streamlined interface.
    • Enhanced CORS securityHardened Socket.IO CORS settings for better security.
    • Fixed Stripe checkout paramsResolved issues with checkout parameters for compatibility.
  55. Tuesday, April 28, 2026

    15 changes

    Today was a long 21-hour grind, but I set out with a clear focus on enhancing the embed functionality of our platform and fixing some bugs that were impacting user experience. I tackled several issues that had been nagging at me, particularly around the GIGI voice interactions and the portal details. The day started off with a few high-priority features, but as is often the case in development, I found myself wrestling with unexpected problems

    Read the full entry →

    that turned into significant time sinks.

    One of the main features I shipped was the GIGI memory and the ability to transfer any portal, which included a new voice popover for the embed. This was a vital addition, as it mirrors the functionality we have on hashtag.org. However, I ran into a slew of complications with the voice controls. Initially, the voice mode would sometimes launch silently, or worse, layer two voices on top of each other, creating a cacophony instead of a smooth interaction. I had to dig deep into the embed code to separate the voice controls and ensure that the GIGI avatar would only respond correctly to user prompts. This took longer than I anticipated, but I learned a lot about how our audio routing works in the process.

    Another significant fix was addressing the visibility of the Transfer card in the portal detail panel. It was appearing in a confusing spot between the Share Portal link and the website trust strip. I had to rework the layout to hide this card when in read-only mode, which required some careful adjustments to the rendering logic. It’s little things like this that can really impact user experience, and I’m glad to have resolved it.

    I also spent a considerable amount of time ensuring the GIGI embed launcher behaved correctly when docked or undocked. There were inconsistencies in how it was displayed on customer sites, particularly with the popover reading “Undock” when it should have been showing “⚓ Dock.” These types of bugs can be frustrating, but they also provide a chance to refine the user interface. I’m proud to say I managed to get everything aligned, and I think it will result in a much smoother experience.

    As I built today’s features and fixes in VS Code with Claude Code, I couldn't help but reflect on how much more costly this process would be if I were using platforms like Lovable or Cursor. The ability to ship so much solo keeps our operations lean and efficient, which is crucial for a startup like ours. All in all, while the day was long and filled with challenges, I’m proud of the progress I made and the new capabilities that will enhance the agentic web experience for our users.

    • GIGI voice control fixesResolved issues with dual voice layering and silent launches.
    • Portal transfer improvementsAdded functionality to transfer any portal with Stripe support.
    • Enhanced embed functionalityIntroduced GIGI memory and voice popover in the embed.
    • UI adjustments for portal detailsHid Transfer card in read-only mode for better user experience.
    • Launcher behavior correctionsFixed dock/undock functionality for the GIGI embed launcher.
  56. Monday, April 27, 2026

    10 changes

    Today was one of those marathon sessions that stretched a good 15 hours, but I’m feeling pretty accomplished with what I shipped. My main focus was enhancing the platform's usability and functionality, particularly around the portal features and the overall user experience. I had a few key updates in mind, especially around the tips bar and the map scanner, and I’m quite pleased with the direction they’re heading. It’s always a challenge to balance new

    Read the full entry →

    features with existing functionality, but that’s the grind I signed up for.

    One of the standout features I implemented was enforcing a private-call lobby for Jitsi meetings. I stripped the “End meeting for everyone” option from the dropdown for participants, which should help in maintaining the integrity of calls. It was a bit tricky to get the logic right to ensure only the portal owner has that control, but after some debugging, I managed to lock it down. This was crucial because I want to ensure calls are secure and that users don’t have to worry about accidental disconnections.

    I also made significant strides with the portal creation process. I removed the fiat gate for users who already prove on-chain ownership, making it smoother for them to create portals. This was a direct response to user feedback, and it felt great to see it come together. Additionally, I surfaced the #name in the create-portal data list, which was previously hidden in some Chromium variants. It’s these little details that can make a huge difference in user experience, and I’m glad to have tackled that.

    There were a few bumps along the way, of course. At one point, I was wrestling with the tips bar positioning. It took a few iterations to get the placement right so that it wouldn’t interfere with page titles. I also had to adjust the zoom level for the 'Locate-me' feature to provide a more precise view for users. I find that these seemingly small adjustments often take the most time, but they’re essential for the overall polish of the platform.

    Reflecting on the day, I’m reminded of how much I appreciate the tools I use, like VS Code and Claude Code. If I were on a platform like Lovable or Cursor, I can only imagine how quickly costs would accumulate for this level of output. Working solo allows me to keep things lean while still pushing out significant features. It’s a grind, but it’s also incredibly rewarding to see the platform evolve, especially with the integration of spatial AI elements and the ongoing development of our portal CRM. I’m excited to see how users respond to these changes as we continue to build out the agentic web.

    • Private-call lobby for JitsiEnforced private-call lobby and restricted end-meeting controls.
    • Streamlined portal creationRemoved fiat gate for users with on-chain ownership.
    • Improved tips barAdjusted positioning and multi-step tips for better usability.
    • Enhanced Locate-me featureTighter zoom for improved location accuracy.
    • UI tweaks for PortalDetailReorganized action buttons for better visibility.
  57. Sunday, April 26, 2026

    32 changes

    Today was a long grind — about eight hours of focused work — and I set out to refine several features across the platform, particularly around GIGI and the scanner functionalities. I wanted to make the interface more intuitive and user-friendly, and I’m feeling pretty good about the progress I made. The day began with addressing some user feedback on the scanner, where I moved the 'My Portals' section to the end of the list.

    Read the full entry →

    This was a small adjustment, but it made a significant difference in the flow and usability.

    I also tackled the homepage, where I integrated a new Dock GIGI feature that allows users to toggle her between docked and floating states. This involved some tricky UI tweaks, especially ensuring that GIGI visually paired well with the dock anchor button. I learned a lot about positioning and how small changes can ripple through the user experience. It was a bit of a fight to get the positioning right, but I think it paid off.

    The day wasn't without its challenges, though. I faced a couple of bugs that ate up more time than I’d like to admit. For instance, I had an issue with the article images not following the site theme toggle properly; they were leaking the dark variant through when users were on a light theme. It took some digging, but I traced it back to how Tailwind handled the `prefers-color-scheme` variant. Fixing it meant diving deep into the stylesheets, but it was a good learning experience on managing themes.

    Another highlight was refining the portal call-card gallery. I implemented user-requested features that allowed visitors to navigate through library photos directly on the call-card hero, which felt like a necessary upgrade. However, I had to ensure that the navigation was intuitive, so I removed the back arrow from the main image to prevent confusion. This kind of feedback loop is invaluable, and it’s moments like these that remind me of the importance of user-centric design.

    Reflecting on the day, I’m proud of the features I shipped and the problems I solved. I built this all in VS Code with Claude Code, which keeps the process lean and efficient. If I were using platforms like Lovable or Cursor, I would have burned through way more resources. Today was a testament to how much I can accomplish solo, driving forward the agentic web and spatial AI vision we have at hashtag.org.

    • Refined Scanner FunctionalityMoved 'My Portals' to the end of the list for better usability.
    • Dock GIGI FeatureImplemented toggle for GIGI between docked and floating states.
    • Article Images Theme FixFixed dark mode leaking issue for article images.
    • Enhanced Portal Call-Card GalleryEnabled direct navigation through library photos on the call-card hero.
    • SEO and Theme ImprovementsPolished sitewide schema and breadcrumbs for better SEO.
  58. Saturday, April 25, 2026

    19 changes

    Today was a long but productive day, clocking in at around eight hours as I dove deep into refining the user interface and fixing a few pesky bugs. My main goal was to improve the checkout experience for our users, particularly those who have a Gigi credit balance. Before this, they were directed straight to Stripe Checkout without any chance to utilize their credits. I implemented a solution that allows users to pay with their

    Read the full entry →

    existing balance, which feels like a significant win for user experience.

    As I worked through the day, I also tackled several UI improvements based on user feedback. The rotating tagline in the navigation was softened to a more ambient text style, and I removed some redundant elements from the checkout page to streamline the experience. This involved dropping the introductory copy above the form and ensuring that the desired name input would always keep the '#' symbol pinned. It took a bit of back and forth to get it just right, but I think it really enhances the overall flow of the checkout process.

    Of course, it wouldn't be a full day of development without running into some challenges. I had to debug a couple of issues that cropped up, particularly with the map and routing functionalities. For instance, I fixed the issue where the 'Verify with Mesh Hub' banner kept reappearing after the user had already paired their account. This was a frustrating bug that stemmed from the authentication fetching process, but after some careful tracking, I managed to resolve it. I also had to refine the routing middleware to ensure that the 'Dashboard' and 'Projects' links didn't inadvertently hit localhost in production.

    Reflecting on the tools I used today, I appreciated the efficiency of working in VS Code with Claude Code. It allows me to keep the platform lean and agile without burning through credits or needing additional team members. If I were using platforms like Lovable or Cursor, I would have quickly run up costs for the same output. Overall, I’m proud of the progress made today, but like any build day, it’s a reminder that there’s always more to do and more to learn as we continue to enhance the agentic web experience for our users.

    • Gigi credit balance paymentsUsers can now pay using their existing Gigi credit balance.
    • Streamlined checkout processRemoved unnecessary copy and ensured consistent input formatting.
    • Improved UI elementsSoftened tagline and simplified navigation for a cleaner look.
    • Fixed map and routing bugsResolved issues with link redirects and persistent banners.
    • Lean solo developmentEfficiently built features in VS Code with Claude Code.
  59. Friday, April 24, 2026

    22 changes

    Today was a marathon of coding and problem-solving, clocking in at a long 22-hour day. My goal was to push out several key features while also addressing a backlog of bugs that had been nagging me for a while. I was particularly focused on improving the user experience in the Geo Portal and streamlining our sign-in process. The satisfaction of seeing the marketplace page finally render live listings instead of placeholder data felt like a

    Read the full entry →

    small victory amidst the chaos of debugging.

    One of the more significant challenges I faced was with the MetaMask wallet integration. It turned out that the endpoints I had been probing were returning 404 errors. After some intense digging, I found that the integration paths were outdated, leading to a frustrating back-and-forth as I tried to pinpoint the issue. Eventually, I managed to fix the wallet picker, but it consumed a lot more time than I initially anticipated. This is the kind of problem that can easily spiral out of control if you’re not careful, so I made sure to document my steps for future reference.

    In addition to the integration issues, I revamped the onboarding process a bit. The one-time coach tooltip for new users should help guide them to the '+' button on the map, which has been a sticking point. I also made significant updates to the website assistant embed setup, simplifying it down to a single visible box. This change was a direct response to user feedback, and I’m hopeful it will make the onboarding experience much smoother.

    I also spent part of the day wrestling with some pesky bugs related to the GIGI voice functionality. An early return was causing the app to crash, which was a headache to track down. I had to rearrange the hook order to stabilize it. The challenges today reminded me how intricate the interplay between different components can be, especially when dealing with a spatial AI platform like ours. If I were working on a platform like Lovable or Cursor, I can only imagine how quickly the costs would add up, given the scale of the work I tackled solo today. Building in VS Code with Claude Code keeps my costs down while still allowing me to ship efficiently.

    All in all, it was a day filled with both triumphs and trials. I’m proud of what I accomplished, but I’m also acutely aware of the bugs that still linger. I’ll carry this momentum into tomorrow, hoping to tackle the remaining issues and continue refining our portal CRM.

    • Live Marketplace ListingsReplaced demo data with live resale listings from hashtag.space.
    • MetaMask Integration FixResolved 404 errors in wallet picker endpoints.
    • Simplified Onboarding TooltipsIntroduced a coach mark for new users on the map.
    • GIGI Voice Functionality StabilizedFixed crashing issue by rearranging hook order.
    • Streamlined Website Assistant SetupReduced embed setup to a single verification box.
  60. Thursday, April 23, 2026

    3 changes

    Today felt like a mixed bag, but in a good way. I set out to tackle some nagging issues in the navigation system and introduce a new feature that helps users keep track of their projects. I wanted to enhance the user experience in our spatial AI portal, hashtag.org, and make sure everything was running smoothly. I spent about an hour on this, which is always a challenge when you’re pushing the limits of what

    Read the full entry →

    I can do solo.

    The first thing on my agenda was a couple of fixes related to how our app handles stale localhost connections. I discovered that if users had previously bookmarked the app or were running an old PWA, the navigation links were stubbornly pointing to the localhost URL instead of the live app. I had to dive deep into the routing logic to ensure that links would always resolve correctly. It was frustrating to see how easily this could confuse users, but I managed to implement a solution that redirects stale localhost origins to the live app seamlessly. This took a bit longer than I expected, but I’m proud of the outcome.

    Next, I rolled out a feature that I believe could significantly improve how users interact with their projects. The new project-attention badge shows a count of projects that are either in proposal_ready, awaiting_payment, or under review. This is fetched from our backend every 60 seconds and displayed on the navbar. I think this small addition will help users feel more in control and aware of their project statuses at a glance. It wasn’t without its hiccups, though; I had to ensure that the polling didn’t overwhelm the server, which required some careful tuning.

    Reflecting on the day, I appreciate how building this in VS Code with Claude Code allows me to keep costs low. If I were using more resource-intensive platforms like Lovable or Cursor, I’d probably be burning through credits at an alarming rate for the same output. Keeping things lean is essential for hashtag.org as I continue to push the boundaries of what we can achieve with this agentic web and spatial AI technology. Overall, it was a productive day, and I’m excited to see how users respond to these updates.

    • Redirect stale localhostFixed navigation links to always point to the live app.
    • Project-attention badgeIntroduced a new feature to track project statuses.
    • Polling for integration healthNavbar now updates project status every 60 seconds.

Want the full commit history? Read it on GitHub.