Skip to content
Muhammad Moiz

Case study · Retail · Cycling marketplace & local directory

Bikemess: A Map-Based Directory for Finding Local Bike Shops and Brands

A map-based bike shop directory: riders search by brand, category or shop, and shop owners manage their listings, stock and location from an admin panel.

Client
Bikemess (freelance)
My role
Full-Stack Developer (team of 2)
Timeline
3 months
Year
2023
  • React
  • Cloud Firestore
  • Firebase Auth
  • Firebase Storage
  • Firebase Hosting
  • Google Maps API
Bikemess home page reading 'We'll show you where to start looking', with a search box, the category menu open and an illustration of two cyclists

Overview

Bikemess helps cyclists answer a simple question that is surprisingly hard to answer online: "Which shop near me actually sells the brand or part I want?"

Riders search by brand, bike category (MTB, road, folding, e-bike) or local bike shop (LBS), and see matching shops both as a list and as pins on a map. Shop owners get an admin panel to create their store, add the bikes and brands they carry, and pin their exact location on the map.

Bikemess was a freelance project in 2023. I built it with one other developer: we were both full-stack, sharing the React frontend and the Firebase backend, with the Google Maps API for pinning shop locations.

Bikemess is no longer live. The screens below are recreated from the original designs.

The challenge

Bike shops usually list their brands on scattered websites and social pages, if at all. A rider looking for a specific brand or component has to call around or visit shops one by one. The platform had to:

  • Let riders search by brand, category or shop name, and filter by region, category, opening hours and shop type
  • Show results on a map so riders can see what's nearby at a glance
  • Show each shop's contact details, opening hours and the brands it carries
  • Give shop owners a simple way to manage their own listing, stock and location, without calling anyone
  • Grow the directory through the community, by letting people suggest shops that weren't listed yet

My role

We were a team of two full-stack developers, each working across the frontend and the backend. Between us we built:

  • Landing page: the marketing site, with category and brand navigation and the main search
  • Search and results: the brand, category and shop search, filters, result list and the empty "no results" state
  • Maps: Google Maps integration for showing shops as pins and browsing them on the map
  • Backend (Firebase): Firestore for shops, brands, bikes and listings, Authentication for shop owners, Storage for uploaded images, and Hosting for the web app
  • Admin panel: store creation, bike and brand listings, and map pinning of the store location
  • Community listings: the "add a new listing" flow for shops that aren't in the directory yet

The approach

A landing page that gets riders searching

The home page opens with one clear promise ("We'll show you where to start looking") and a single search box. Riders can also browse straight from the menu by category (MTB, road bike, folding bike, e-bike), by brand, or by local bike shop.

The full Bikemess landing page: search box and open category menu (MTB, Road Bike, Folding Bike, E-Bike) at the top, then three sections explaining how to find shops, add listings and shop with confidence

Search results on a list and a map

Results show as cards on the left and pins on the map on the right. Each card shows the shop's phone, email, website, address, opening hours and the full list of brands it carries, with the searched brand highlighted. Filters for region, category, hours and type narrow the list, and the map updates with it.

Bikemess search results for 'Wolftooth components': shop cards with contact details, opening hours and brand lists, filters for region, category, hours and type, and shop pins on a map

Browsing shops on the map

Every shop appears as a pin on the map, placed by its owner in the admin panel. Riders can pan and zoom around the map to see which shops, and which brands, are in each area.

Turning "no results" into growth

When a search finds nothing, the page doesn't just stop. It suggests trying another search and invites the rider to add a new directory listing if they know a shop that sells the item, so every failed search can help grow the directory.

Bikemess 'No results found' page suggesting a different search or adding a new directory listing, next to the map

Admin panel for shop owners

Shop owners sign in to an admin panel where they:

  • Create their store with contact details, opening hours and social links
  • Add their bikes and brands, so they appear in searches
  • Pin their location on the map instead of typing an address, so map results are accurate

Architecture

Bikemess architectureRiders use the public site to search, browse the map and suggest shops; shop owners use the admin panel to manage their store, stock and map pin. Both are part of the React web app on Firebase Hosting, which uses the Google Maps API for location pins, Firebase Auth to sign owners in, Cloud Firestore for shops, brands, bikes and listings, and Firebase Storage for images.FirebasePin locationsSign inRead / writeUpload imagesRider siteSearch · map · suggest a shopGoogle Maps APIMap · shop pinsAdmin panelShop ownersReact web appOn Firebase HostingFirebase AuthCloud FirestoreShops · brands · bikes · listingsFirebase StorageImages
Riders use the public site to search, browse the map and suggest shops; shop owners use the admin panel to manage their store, stock and map pin. Both are part of the React web app on Firebase Hosting, which uses the Google Maps API for location pins, Firebase Auth to sign owners in, Cloud Firestore for shops, brands, bikes and listings, and Firebase Storage for images.
  • Rider site → React web app
  • Admin panel → React web app
  • React web app → Google Maps API: Pin locations
  • React web app → Firebase Auth: Sign in
  • React web app ↔ Cloud Firestore: Read / write
  • React web app → Firebase Storage: Upload images

Technical highlights

  • Map-first search: results shown as a list and as map pins at the exact locations owners set
  • Brand-level matching: search finds shops by the brands and categories they actually carry, not just by name
  • Self-service admin: shop owners manage their store, stock and exact map location on their own
  • Community-driven growth: "no results" searches turn into new listing suggestions

Results

Riders search and browse; shop owners manage their own listings and stock
2 sides
Every shop shown as a pin on the map, placed by its owner
Map-first

Next case study

All case studies
Rentalsols home page reading 'Search, book and rent any vehicle easily', with car search and car-pooling location inputs

Mobility · Car rental & ride sharing · 2023

Rentalsols: Car Rental and Location-Based Car Pooling Web App

Car rental marketplace plus location-based car pooling, built as our own product by a team of three with React, Firebase and Google Maps.

2 products car rental marketplace and location-based car pooling in one app

  • React
  • Redux Toolkit
  • Ant Design
  • SQL database

Ready to build — or finish — your product?

Tell me about your idea, or what you've built so far and where it's stuck. In a free 20-minute call you'll get an honest assessment and clear next steps — no obligation.