Transforming a static list into a dynamic, map-based experience for discovering Alo Store retail locations.
The Alo Yoga Interactive Store Locator project transformed a static list of retail locations into a dynamic, map-based experience—enabling users to visually discover, filter, and navigate to Alo Yoga stores across North America. The proof-of-concept leverages the Google Maps API, client-side geocoding, and custom JavaScript modules to deliver key features such as real-time distance sorting based on user geolocation, a robust city/zip fallback search, and an accessible, mobile-first interface.
Store locations mapped with interactive custom markers
Reduction in lookup time for finding nearest stores
Mobile-optimized with responsive design
Alo Yoga's website historically presented its retail locations as a simple, static list—forcing users to scroll through hundreds of entries to find a store near them.
Difficult to visually understand store distribution and proximity
No way to quickly identify the closest location
Poor navigation experience, especially on mobile devices
Improve Discoverability: Provide a visual interface that maps all store locations and highlights those nearest to the user.
Enhance Mobile Experience: Design a responsive UI that seamlessly toggles between list and map views.
Streamline Navigation: Enable users to click directly on map markers or list items to view store details.
Maintain Brand Alignment: Implement a design consistent with Alo Yoga's clean, modern aesthetic.
I developed a proof-of-concept (PoC) that transforms raw store data from Alo Yoga's website into an interactive, map-based interface. The process began with using the Firecrawl MCP server to crawl the live store pages state-by-state, extracting key store details and converting them into a consolidated JSON dataset.
Upon page load, the app requests user geolocation, calculates distances via the Haversine formula, and sorts stores nearest-first.
Users can input a city or ZIP code; the input is geocoded, and if no stores appear in the viewport, the five closest stores to the searched location are displayed.
Each store displays current open/closed status based on structured hours data; InfoWindows also indicate when the store will next open or close.
A split-view desktop layout transitions to a stacked mobile view with a clear List/Map toggle, ensuring usability on all devices.
Mobile List Panel
Mobile Map Tab View
Store Info (Open)
The Alo Yoga Interactive Store Locator features bespoke map pin components, designed for high contrast and brand alignment. These pins—created as SVG assets are used as interactive markers on the Google Map, with animated overlays and color variants for different map themes. The design and implementation of these pins are detailed in the case study, and they play a key role in the visual clarity and usability of the PoC.
These assets are used as interactive map markers in the PoC, with animated overlays and color variants for different map themes. See the case study for more details on their design and implementation.
Frontend: HTML5, CSS3, Vanilla JavaScript (ES6+)
Maps & Geocoding: Google Maps JavaScript API v3, Google Maps Geocoding API
Data Format: JSON master files (allStoresData
)
Scripting: Python 3.13 for batch geocoding
Hosting: Vercel for PoC deployment
config.js: Central settings (API keys, map style definitions)
aloPinOverlay.js: Custom OverlayView
subclass for map pins
mapManager.js: Map initialization and overlay management
storeManager.js: Data fetching, geocoding, and filtering
uiManager.js: DOM rendering and user interaction handling
app.js: Top-level orchestrator for all modules
// Calculate distance between two points using Haversine formula
function calculateDistance(lat1, lon1, lat2, lon2) {
const R = 6371; // Radius of the earth in km
const dLat = deg2rad(lat2 - lat1);
const dLon = deg2rad(lon2 - lon1);
const a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
const distance = R * c; // Distance in km
return distance;
}
function deg2rad(deg) {
return deg * (Math.PI/180);
}
Raw HTML is crawled and structured into JSON, then loaded at runtime to populate the map and store list. A Python script iteratively called the Geocoding API to append latitude/longitude coordinates.
The interface features a split-screen desktop view with a 60/40 store list/map ratio and a stacked mobile layout with intuitive one-finger map controls and brand-aligned custom InfoWindows.
The PoC is deployed at storemap-gamma.vercel.app, providing stakeholders with an interactive preview of the new UX.
Internal user testing showed a 40% reduction in time required to locate the nearest store, and qualitative feedback praised the visual clarity and responsiveness of the map interface.
The modular codebase (six JavaScript modules, each under 300 lines) ensures easy onboarding for new developers and straightforward future feature additions.
The custom map styling, typography, and SVG markers received positive feedback from the design team for faithfully reflecting Alo Yoga's aesthetic.
Amenities filtering
User favorites
Analytics integration
Transition to backend data service
SQL/Elasticsearch implementation
Real-time inventory updates
A/B testing UI variations
Performance benchmarking
Accessibility enhancements