Short thoughts, work in progress, lessons learned, & the occasional personal update.
I’m at the point where I want to offer businesses stuck on WPBakery a free rebuild.
Nah maybe a discount lol!
But seriously, if you’re going with WordPress, at least use a solid page builder like Bricks (my bias), Beaver, Divi, or Elementor. Launching a site is just a small part of it.
Building new pages and optimizing over time is the long game, and your site builder matters for that.
Posted 3 days ago
Been handling website projects in the home improvement space, especially clients in AU.
Looking at these skylight photos all day got me thinking. What’s it like living in a house with a transparent roof like that? Then I imagined having one here in PH. Sounds great when it rains. Then summer hits 😂
jk, these skylights are actually automated and packed with features.
Posted 5 days ago
WPBakery might be the only page builder where the experience is equally rough whether you’re using backend or frontend editing. Divi handles this way better.
Sorry, I keep comparing these two because they both offer both modes, but the quality gap is real. Credit to the Divi team for getting that right!
Posted 6 days ago
Got a chance to attend the HighLevel Manila 2-day event!
I just realized I wasn’t able to record everything. Now I’m trying to piece together all the info I remember and the photos I have.
The insights they shared were pretty overwhelming 😅
Posted August 10, 2026
I have an urgent page build using WPBakery. Although we have a 1-week deadline, I’m confident I can deliver. But seriously, at least give us a custom CSS field per widget. Even Divi has that!
I’m not really the type to rant about tools I use for work. I get that every builder is built differently. But every time I have a project using this one, it just takes so much longer than it should.
Posted August 8, 2026
You know, one thing that still bugs me is not asking my old clients to leave their review on my Google Business page.
I just collected them through email or other apps. Should’ve known better 😬
Posted August 7, 2026
You know what makes doing this stuff worth it? People who still remember you and refer you even if you haven’t spoken in a long time!
Just got an inquiry! Turns out someone I spoke with 2 years ago referred them. As a small service provider, that kind of thing means a lot 🙂
Posted August 4, 2026
Late night timelapse of us getting things done. I don’t know why, but I always feel more productive at night.
Also, I just recently got that standing desk, and I can’t appreciate enough how helpful it is when you’re getting older 😂
Posted July 31, 2026
Currently redesigning the website of a flooring company based in Erina, NSW.
See those long page designs? It’s still Wednesday but I guess I’m gonna be working even on the weekend 🥲
Posted July 28, 2026
I’m not sure if this is just me, but handling web projects + creating content at the same time is kinda stressful.
Especially when you’re working on it alone. Still grateful for it though.
Posted July 26, 2026
Finally set up a quick way to share thoughts on my site. Not everything needs to be a full blog post.
New blog about this feature coming soon!
Posted July 23, 2026
Table of contents
A Store Locator Widget powered by React & Google Map API
January 05, 2023
10 mins read
Reader Disclosure
Disclosure: I may occasionally include affiliate links in my posts or pages. If you click on one of these links and make a purchase, I may receive a small commission, which helps me keep this website running and create more useful content. However, this does not affect my opinion on the product or service in any way. I only recommend products and services that I truly believe in and use myself.
Here is a case study of a recent project I completed for an Australian company that sells home improvement products. This project is custom store locator widget that helps their customers find the nearest retailers in a given area.
What is the main problem?
The client asked me to build a functionality that enables their customers to find their affiliate retailers in Australia. The retailer locator must have some sort of filter functionalities that will help the customers to find the nearest retailers to a given area and limits the search result with the business type category. The search results must be displayed on a map.
Feature Overview:
Integration with Google Maps
Find the nearest retailers in a given area.
Limit the results with the retailer’s business type (e.g. HVAC-R, Civil, Building, etc.).
Find specific retailers in a given area.
This article may contain some technical terms which provides an overview of how I constructed this custom functionality. If you have any questions, please let me know.
How did I build the application/custom functionality?
This store locator was built using the React.js library. I know this type of functionality can be done also in a vanilla Javascript development approach but I want to use the flexibility of React in building custom widgets and apps. Another reason is it’s so easy to manage the application’s state in React.
I used the React Context and useReducer to managed the functionality state and not Redux. I think using Redux is quite overkill for this specific widget’s functionality.
I used the Formik package to render form components. I find it easy to control or manage input fields, errors, validations, events, and a form’s state when I use Formik.
In terms of styling the widget, I used the Tailwind CSS to add the styles.
I think the most complicated part of this widget was the integration of the Google Map APIs. It’s easy to show the map in the widget, the difficult part is how to show the retailer’s map pin conditionally. I need to show the retailer’s map pin that is only located in a given radius or area.
For example, a user wants to find all the retailers within a 10 km radius. All the retailer’s map pins within this area will be visible on the map.
To be honest, I’m not that good when it comes to Google Maps API because most of the time I’m just embedding maps to my client’s website and there is no complex customization like this one.
I read some of the Google Maps API documentation, I tried to look for related issues that might help as well. After several searching, I came up with a helper method that I can use. Based on Google Map docs, there’s a method called “computeDistanceBetween”.
Basically, this method needs the retailer’s position (latitude & longitude), and also the center position of the given area.
This method will return a distance value that I can use to compare with the user’s provided radius. If the value (distance) is less than or equal to the user’s provided radius, it means that the current retailer is within the given area.
Minimize working on your website without breaking the bank
I’m here to simplify your website management & development, handling all the technical aspects for you.
It’s easy to use this widget. The user can choose between searching for the nearest retailers and searching for specific retailers. They can easily switch between different forms.
The Address input field is connected to the Places Library of Google Map API. This gives an auto-complete feature so whenever a user searches, a handy suggestion dropdown will show.
The Form for Searching Multiple Retailers:
The default form contains input fields for the Address, Business Unit, and the Radius.
Address – Input for getting the address of the user. Behind the scene, this will get the latitude and longitude of that current address that will be processed to get the retailers.
Business Unit – This is the retailer’s category. The users can choose between these categories to filter out the retailers that they are looking for. This is not required data, if the user didn’t choose any business unit, all retailers in that area will show.
Radius – This is responsible for getting the area in the map that the user wants to search for. For example, the user wants to search for retailers within 25 km using the given address as the center position.
If they are done completing the form, they can click the Search Retailers button. The map will show all the retailer’s map pins that are located in that area.
The Form for Searching Specific Retailer:
This form works like the default form but instead of showing all retailers in that area based on the business unit category, it will show specific retailers only. This is useful for searching retailers directly.
This form contains the same input fields except for the Business Unit field, it was replaced with the Branch Name field.
Branch Name – This field is responsible for getting the retailer’s branch name. The keyword doesn’t need to match with the branch name exactly. If the current search matches multiple retailers, the retailer’s map pins will show on the map.
The Map:
Whenever a user searches for retailers, all the map pins in a given area will show on the map. If a user clicks a pin, a custom info window will show at the bottom left corner of the map. This info window will show the details about the currently selected map pin.
The Reset Button
If the user wants to do a new search, they can just click the Reset button to restore the widget to its default state.
The Integration Process
The website was built using the WordPress CMS, so I need to find a way to easily integrate a React functionality into this type of platform. There are two ways to add custom functionality to a WordPress website.
The first and most common way to add it is to add it to a custom theme, or if the WordPress website is using a child theme. The other way is to add it using a custom plugin.
The approach I chose is to create a custom plugin that I can easily install on their website. Creating a plugin helps to separate the functionality from the website’s theme, so that, should the client choose to redesign their website again, the functionality will still be available and work properly.
Do you want to see the project in action? You can visit the custom retailer locator at the Akril website, which I designed and built as well.
New Service
Direct Booking Websites for Vacation Rentals
Get a direct booking website built for your vacation rental or resort. Keep more revenue and let repeat guests book with you directly.
We use cookies to improve your experience on our site. By using our site, you consent to cookies.
This website uses cookies
Websites store cookies to enhance functionality and personalise your experience. You can manage your preferences, but blocking some cookies may impact site performance and services.
Essential cookies enable basic functions and are necessary for the proper function of the website.
Name
Description
Duration
Cookie Preferences
This cookie is used to store the user's cookie consent preferences.