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.
What shipped
- Improved Scan Overlay — Colored map glyphs by layer brand for better visibility.
- One-Install Portal Widget — Unified card with Talk-to-AI and Visit-on-#SPACE features.
- Keyword Suggestion Engine — On-topic keyword recommendations for portal owners.
- Auto-Provisioning for Civic Pulse — Free layers now automatically provisioned for existing portals.
- Enhanced User Experience — Fixed multiple bugs for a smoother interface.
Today I endured an 18-hour long and difficult day, but I was able to ship some key usability and performance updates on the scan overlay and the portal widget, even while combating some bugs that surfaced along the journey. I tried to refine the UX of the scan overlay by adjusting the map glyphs to be more distinct and functional, and also worked on the one-install portal widget that combines several functions into one card.
For the scan overlay, one of the new features I implemented is multi-layered, branded color map glyphs. This means that at any given time, users will see Yelp in red, Booking in blue, etc. Previously the glyphs were lost in the terrain when it was bright. To enhance legibility, I bordered the glyphs with a dark outline and a soft glow. I faced a lot of challenges in creating a good color contrast, and I spent many hours on an iteration while I questioned whether the selected colors complemented or clashed with one another. Ultimately, I’m proud of where it landed.
In my testing, I also resolved a few bugs, one of which involved cluttered views when neighbour icons appeared under the portal glyph when zoomed out. After some attempts, I was able to hide these icons for users when zoomed out to a radius of 30px from the center of the portal, ensuring that users have a clean interface without distracting icons and the interface can provide more information the more the users zoom in.
I also focused on the portal widget today. This feature now merges a number of functions into one card that offers a Talk-to-AI feature, a Visit-on-#SPACE button, and data layers that can be selected by the owners. A large portion of this focused on ensuring the card is crawlable by search engines which I was able to do by injecting a backlink into the host DOM which was very satisfying to see come together as it improved the integration for users and also the accessible SEO footprint for each portal. I did experience some problems with the global auto reload in the AI call as it was firing too aggressively and refreshing the page more than was necessary. After some debugging, I was able to limit it to stale chunks at the daily-js import site, which should improve the user experience.
I’ve also improved the keyword suggestion engine. It builds industry-specific keywords by portal category and location with Google Autocomplete validation. Users will be able to claim relevant keywords more conveniently, and it is integrated into the existing Stripe checkout to keep their funnel flow seamless. On the other hand, wiring the API correctly took more time than I expected. I had to restructure some parts of the dashboard for the new one-click claim panel, and I learned that having user flows as simple as possible is really important.
Another important feature is that free-tier users can automatically provision Civic Pulse layers. This is a part of the self-healing cron that I integrated, so existing portals will receive these layers without manual effort. It’s a small improvement, but it adds value to the product and increases user participation without requiring any more effort from them. Additionally, I ensured that the emitted JSON-LD includes the necessary graph data, which is vital for AI crawlers and broadens our spatial-AI surface area.
Every day without fail, I encounter bugs that I have to address. For example, I needed to repair the radial buttons on portal markers to make sure they are displayed on hover. They were not showing due to a selector problem in the compact marker layout. After countless hours of testing different CSS selectors, I was able to restore the visibility of those buttons. I know small fixes like these seem insignificant, but they are critical to improving the overall user experience.
Working alone to build out a platform has its ups and downs. I have relied a lot on AI, particularly Claude Code in VS Code, which has changed everything. It allows me to quickly make changes, and I can almost work as if I have a full development team — though I sometimes spend far too much time correcting bugs that stem from the interactions between multiple evolving components. I have a lofty goal of building a one-person company that is worth a billion dollars. Every commit takes me closer to that goal, and though the journey is often a rough one, it is undeniably moving forward. I’m looking forward to seeing how users respond to the changes I made today because I know how much work it has taken.