Hashlogics
Case study · Retail

BrandLocator

Find your favorite brands' stores on one map.

A bilingual mobile app that maps nearby stores and offers for the brands you pick, backed by an admin portal for managing every pin.

Client
BrandLocator
Industry
Retail / Brand & Store Discovery
Engagement
Consumer mobile app (iOS and Android) · Web admin portal · Shared backend
Overview

BrandLocator is a map-first mobile app that shows only the stores of the brands you pick, with current offers, opening hours, and directions. A broad map search returns every shop in town. BrandLocator narrows it to your brands, near you. Hashlogics built both halves: the mobile app for shoppers, and the web portal where the BrandLocator team keeps brands, stores, and offers up to date.

The challenge

Why a plain map search fails brand shoppers.

01

A broad map search returns every shop, so finding one brand's stores means searching brand by brand.

02

No store can appear on the map until its address becomes coordinates, and geocoding a large import in the browser would be slow and fragile.

03

Opening hours, phone numbers, and offers need updating without direct database access.

04

Big store lists can swamp a phone if the map tries to load every record at once.

05

Access rules had to hold even when someone skips the portal's screens and calls the API directly.

What success needed to look like

  • Keep the map on the brands each shopper chose.
  • Show address, hours, distance, and route options for every store.
  • Remember a shopper's picks without forcing an account.
  • Speak English or German to match the phone.
  • Let the team import many stores from a CSV and review how well each address matched.
  • Separate what regular users and administrators can do.
Our approach

How we kept the map fast and the data clean.

  1. 01

    Put the map before the sign-up

    We built the core flow with no login at all. Your brand picks, consent choices, profile, and saved stores stay on your own phone.

  2. 02

    Run both products on one backend

    App and portal share one Supabase backend, so a store your team edits in the portal is the same record the app reads.

  3. 03

    Bound every map query

    Your phone asks only for stores in the visible map area and the brands you chose. Each map-area query returns up to 150 stores, so it never pulls the whole catalog.

  4. 04

    Move heavy geocoding to the server

    Bulk uploads go to a server queue that works in batches of 100. It tries each address up to 5 times and picks stalled work back up by itself.

  5. 05

    Enforce access in the database

    Permission rules live in the database on all 9 public tables. Screens in the portal mirror those rules, but they aren't the lock.

  6. 06

    Check every push before it ships

    Each push runs a dependency audit, linting, tests, and code analysis. Builds then move from development to preview to TestFlight to production.

The solution

What shoppers and the BrandLocator team get.

Open BrandLocator and you get privacy choices and a short onboarding, then a prompt to pick the brands you want to follow. Grant location access and the map fills with those brands' stores around you. Tap a brand to see its details and current offers, or tap a store for its address, hours, and distance. Route previews cover driving, cycling, and walking, and you can save a store to come back to.

Behind the app sits the admin portal. There, the BrandLocator team signs in to manage brands, offers, stores, and opening hours. They also edit the privacy, about, and support pages and control who on the team can do what. On Android, the app is live on Google Play. The iOS app has been submitted to the App Store and is under review.

How a new store reaches the mapLive
  1. UploadA team member uploads a file of brands and their stores.
  2. QueueEach store is saved as pending until it has coordinates.
  3. GeocodeMapbox looks up each address on the server, and failures are retried.
  4. ReviewMatch precision is recorded, and approximate matches can be re-queued.
  5. MapActive stores load in the app for the brands and map area in view.

A store record travels from a row in a file to a pin on a shopper's phone, and nobody has to touch the database.

Map-first discovery that shows only the stores of the brands you picked.
A searchable brand catalog, with your selections remembered on the device.
Brand pages with links, quick actions, and the offers your team publishes from the portal.
Store details that cover address, opening hours, distance, and whether the store is open.
Route previews and guidance for driving, cycling, and walking.
English and German, picked from the phone's language setting.
Per-brand CSV import, where the team reviews exact, approximate, area-only, and failed address matches before saving.
Bulk upload of brands and stores together, geocoded by the server queue.
Role-based access: users change only the brands, stores, hours, and offers they own, and administrators manage the rest.
A dashboard with totals for brands, stores, and cities, plus recent activity.
Sentry error monitoring and an internal health check that answers only to a valid token.
BrandLocator mobile app map screen with a brand pin, brand filter chips and a sheet listing brands and store counts.
The app's map view: a store pin for a chosen brand, with brand cards and store counts in the sheet below.
BrandLocator app Pick Your Brands screen with six brands selected, a search field and a Save My Brands button.
Brand selection during onboarding, with nearby suggestions above the full catalog.
How it's built

Mobile app

  • Expo
  • React Native
  • TypeScript
  • Native Mapbox maps
  • TanStack Query
  • Zustand
  • i18next

Admin portal

  • React
  • Vite
  • TypeScript
  • Tailwind CSS
  • TanStack Query
  • Mapbox GL JS

Shared backend

  • Supabase
  • PostgreSQL
  • Supabase Auth
  • Supabase Storage
  • Edge Functions
  • Row-level security

Integrations, delivery & quality checks

  • Mapbox Maps
  • Mapbox Geocoding
  • Mapbox Directions
  • Sentry
  • Expo EAS
  • Google Play
  • GitHub Actions CI
  • SonarQube
  • Jest
  • Vitest
  • ESLint
More from the build
BrandLocator admin Brands page with search and filters, listing brands with country and store count.
Every brand in the portal, with search, filters, and a store count per brand.
BrandLocator admin store form with address suggestions, coordinates and a map pin the admin can drag.
Editing one store: address suggestions, coordinates, and a draggable map pin that sets where the store appears.
BrandLocator admin Edit brand dialog with logo upload, name, website, store locator URL, category, country and status.
In the edit-brand dialog, the team sets a brand's logo, website, category, country, and status.
The takeaway

The hard part of BrandLocator sits behind the map. A pin only helps a shopper if the address resolved to the right spot and the hours are current. And no phone should have to load every record at once. That's why a bulk upload goes through a server queue that retries failed addresses and flags approximate matches for review. Geocoding in the browser works for one brand's CSV, but it gets slow and fragile on a large import. If your product lives on a map, give the admin side the same care you give the app.

By , CEO, HashlogicsUpdated
Start

Let’s deploy working AI into your business.

We build AI agents and automation, ship them into the tools you already run, then stay on under an agreed service level. A senior engineer reads every brief, and your call gets scheduled within 24 hours.

What happens next

  1. 01

    You send a brief or book a call

    Two minutes, whichever you prefer.

  2. 02

    A senior engineer replies within 24 hours

    Not a sales rep.

  3. 03

    Honest scoping, in writing

    And if we’re not the right fit, we say so.

Abdul Basit, CEO of Hashlogics

“I started Hashlogics because too many teams ship a demo, get paid, and disappear. We build to a standard we’d run ourselves — and we stay to keep it running.”

Abdul Basit · CEO · a direct line

Not ready to talk? Take the checklist.

12 questions to ask any AI agency before you sign. They separate a demo shop from a team that ships to production.

Get the checklist

Free · no newsletter