Available for work·Book a call
All Projects/ANAAKA Market Scanner

Full Stack Developer

ANAAKA Market Scanner

Offline-first PWA for field teams collecting competitor pricing data across Turkey, GCC, and EU — barcode scanning, multi-currency, and admin price comparison with Excel export

Next.js 14TypeScriptTailwind CSSshadcn/uiSupabase (PostgreSQL + RLS)PWAZXing-jsIndexedDB (idb-keyval)SheetJSAWS ECS FargateCloudFrontGitHub Actions
ANAAKA Market Scanner

Overview

ANAAKA Market Scanner is a mobile-first Progressive Web App built for the field teams of ANAAKA Natural Halal Cosmetics. Field agents install it on Android or iOS directly from the browser — no app store required — and use it to scan product barcodes and log competitor pricing data across retail stores in Turkey, the GCC, and EU markets. The app works fully offline, queuing up to 500+ entries in IndexedDB and syncing when connectivity returns. An admin dashboard gives the ANAAKA team cross-market price comparison, team activity tracking, and one-click Excel/CSV export of all collected data.

The Challenge

Field agents often work in stores with poor or no connectivity — a cloud-first approach would mean lost data and blocked workflows. The app also needed to serve multiple markets simultaneously, each with different local currencies (TRY, AED, SAR, KWD, BHD, OMR, EUR, USD), while keeping data isolated per user via Supabase RLS. Barcode scanning had to work entirely client-side without any network round-trip.

How We Solved It

1

Offline-First with IndexedDB Queue

All entries are written to IndexedDB first using idb-keyval, with UUID-based idempotent deduplication to prevent double-syncs. The app queues 500+ entries offline and syncs them to Supabase in the background when connectivity is restored — zero data loss regardless of network conditions.

2

Client-Side Barcode Scanning via ZXing

ZXing-js runs entirely in the browser — no server call, no third-party API. Field agents point their phone camera at a product barcode and the value is decoded instantly on-device. Works in poor lighting and on both Android and iOS without any native app installation.

3

Multi-Currency Support Across 8 Currencies

Agents select their local currency (TRY, AED, SAR, KWD, BHD, OMR, EUR, USD) per entry. The admin price comparison view normalizes all entries to USD equivalent, making cross-market price analysis instant — no manual conversion needed.

4

PWA — Installable, No App Store

Built as a full PWA with a web app manifest and service worker. The app prompts field agents to install it to their home screen directly from the browser. Achieves Lighthouse PWA score 90+ with cold start under 3 seconds on 4G. Works on both Android and iOS without any App Store or Play Store involvement.

5

Admin Dashboard with Price Comparison & Export

The admin portal shows total entries, markets covered, brands tracked, and active field team size. The Submissions view lists all entries with product image, brand, country, city, store, price with currency, submitting agent, and date. Price Comparison lets admins search any product and instantly see avg/lowest/highest USD equivalent across all markets. One-click CSV and Excel export via SheetJS.

6

Supabase RLS for Field User Isolation

Each field agent sees only their own entries in the My Entries view — enforced via Supabase Row-Level Security policies at the database level. Admins have full cross-team visibility. No application-level filtering required — the database enforces it.

Admin Dashboard

Submissions & Price Comparison

Field PWA — New Entry (Desktop)

Field PWA — Mobile

Field PWA — My Entries

Results & Impact

Delivered & Live

Live at app.anaaka.co for ANAAKA Natural Halal Cosmetics, Prague — deployed and in active use by field teams.

7 Countries Covered

Field team active across Turkey, UAE, Bahrain, Oman, Kuwait, Saudi Arabia, and Germany — all tracked in a single platform.

9 Competitor Brands Tracked

Pricing data collected across 9 competitor brands including Garnier, Nivea, Vatika, Vaseline, Pantene, and Himalaya.

10 Active Field Members

10 field agents onboarded and actively submitting entries — each with their own isolated data view.

500+ Offline Entries Supported

IndexedDB queue handles 500+ entries offline with UUID deduplication — no data loss on poor or absent connectivity.

Lighthouse PWA Score 90+

Cold start under 3 seconds on 4G. Installable on Android and iOS directly from the browser with no app store required.

Technical Architecture

FrontendNext.js 14 + TypeScript + Tailwind CSS + shadcn/ui — field PWA and admin dashboard
BarcodeZXing-js — client-side barcode decoding, zero network dependency, works offline
OfflineIndexedDB via idb-keyval — 500+ entry queue with UUID idempotent deduplication on sync
DatabaseSupabase PostgreSQL + RLS — field user data isolation, admin cross-team visibility
ExportSheetJS — client-side Excel/CSV export of all submissions from admin dashboard
PWAWeb App Manifest + Service Worker — installable on Android/iOS, Lighthouse 90+, <3s cold start
HostingAWS ECS Fargate + CloudFront + Route 53 + GitHub Actions CI/CD
MonitoringSentry — production error tracking and alerting

Have a similar project?

I'm open to freelance projects and full-time roles. Let's build something great together.