GIGIlistening…

Build Journal

Scan Overlay Improvements & Portal Widget Enhancements — June 2, 2026

I improved the scan overlay and portal widget, adding features for better usability and performance while fixing critical bugs in my solo development journey.

19 changes4 min readby Rob

What shipped

  • Improved Scan OverlayColored map glyphs by layer brand for better visibility.
  • One-Install Portal WidgetUnified card with Talk-to-AI and Visit-on-#SPACE features.
  • Keyword Suggestion EngineOn-topic keyword recommendations for portal owners.
  • Auto-Provisioning for Civic PulseFree layers now automatically provisioned for existing portals.
  • Enhanced User ExperienceFixed multiple bugs for a smoother interface.

Today was a long 18-hour grind, but I shipped some significant updates to the scan overlay and the portal widget, enhancing usability and performance while wrestling with a few bugs that tried to derail my progress. I aimed to improve the user experience of the scan overlay by making the map glyphs more visually distinctive and functional, and I also worked on the one-install portal widget that integrates multiple features into a single card.

In the scan overlay, I implemented a new feature that colors the map glyphs based on layer branding. This means that Yelp will show up in red, Booking in blue, and so forth, making it easier for users to identify various sources at a glance. The previous plain white glyphs were often lost on bright satellite terrain, so adding a dark outline and soft glow really enhances legibility. But this change wasn’t without its challenges. I had to go through several iterations to get the color contrast just right, and there were moments when I thought the colors were clashing rather than complementing. Ultimately, I’m proud of where it landed.

Alongside this, I tackled a couple of bugs that came up during my testing. One issue involved neighbour icons appearing under the portal glyph when zoomed out, which gave a cluttered view. After some trial and error, I managed to hide these icons within a 30px radius of the portal center when zoomed out, ensuring that users have a clean interface that becomes more informative as they zoom in.

The portal widget was another area of focus today. This feature now consolidates several functionalities into a single card that includes a Talk-to-AI option, a Visit-on-#SPACE button, and owner-selectable data layers. A significant part of this was ensuring it was crawlable by search engines, which I achieved by injecting a backlink into the host DOM. It felt rewarding to see this come together, as it simplifies the integration for users while enhancing the SEO footprint of each portal. However, I ran into some issues with the global auto-reload feature in the AI call, which was firing too broadly and causing unnecessary refreshes. After some debugging, I refined it to only handle stale chunks at the daily-js import site, which should reduce confusion for users.

I also made strides in the keyword suggestion engine. It’s designed to provide industry-specific keywords based on portal categories and locations, validated by Google Autocomplete. This feature will help users claim relevant keywords more easily, and it’s integrated into the existing Stripe checkout for seamless transactions. However, getting the API wired up correctly took more time than expected. I had to refactor parts of the dashboard to accommodate the new one-click 'claim' panel, and I learned the importance of keeping user flows as straightforward as possible.

Another noteworthy feature was the automatic provisioning of Civic Pulse layers for free-tier users. This is part of the self-healing cron that I integrated, which means that existing portals will receive these layers without manual intervention. It’s a small but powerful enhancement that adds value to the product and encourages user engagement without extra work on their part. I also ensured that the JSON-LD emits the necessary graph data, which is crucial for AI crawlers and improves our spatial-AI surface area.

Throughout the day, I encountered various bugs that ate into my time. For instance, I had to fix the radial buttons on portal markers so that they would be visible on hover. Initially, they were disappearing due to a selector mismatch in the compact marker layout. After a few frustrating hours of testing different CSS selectors, I finally restored the visibility of those buttons. These seemingly small fixes can often take a surprising amount of time, but they are essential for delivering a polished user experience.

Reflecting on today’s work, I’m reminded of the challenges and victories that come with building this platform solo. Leaning on AI, especially Claude Code in VS Code, has been a game-changer. It allows me to quickly iterate on features and fixes without the overhead of a larger team, even if it means I sometimes spend hours debugging issues that arise from the complexities of integrating various components. My goal remains ambitious: to create a one-man-show company with a billion-dollar valuation. Every commit moves me closer, and while the road is often bumpy, the progress is palpable. Today was no exception, and I’m excited to see how these enhancements will be received by users.

← Back to the full build journal