Skip to content
HoReCa / Retail

Multi-Location QR Menu System — 96% Reduction in Update Time

We built a complete three-component platform — a scalable backend, a centralized admin app, and a digital menu accessible via QR code — for NOW Moldova's network of 24 gas stations.

Visit Website

About the Project

Project delivered — ongoing maintenance collaboration
Anton Gadimba

Project Lead

Anton Gadimba

CEO & Founder XCORE

Founder of XCORE, with 8+ years of experience in software development and business digitalization in Moldova.

NOW Moldova, a modern gas station network, faced a common multi-location challenge: manually updating menus for each location took 2 hours per month, they weren't synced in real-time, and any change required technical intervention. Our challenge was to build a flexible solution that would allow efficient management of all 24 locations from a single dashboard — without complicated processes and without dependency on the technical team.

Platform in Action

Menu display with products, categories, and nutritional information

Menu display with products, categories, and nutritional information

Wishlist feature showing saved dishes for quick ordering

Wishlist feature showing saved dishes for quick ordering

Info section with contact details and feedback form

Info section with contact details and feedback form

Digital Ecosystem

Backend API

  • Scalable architecture designed for 1000+ RPS
  • Smart caching with Redis for fast response times
  • Load balancer and autoscaling for variable traffic
  • Background process management with Supervisor
  • Transactional email notifications via Resend
  • PostgreSQL database with optimized indexing

Admin App — Centralized Management

  • Centralized dashboard for all 24 locations
  • Generate and export unique QR codes per location for printing
  • Product category management per location (or import from another location)
  • Add products with full properties: price, multilingual description, photos, calories, protein, fat, carbs
  • View and filter anonymous and named feedback received from the Menu App
  • User, role and permissions management

Menu App — Digital QR for Visitors

  • Unique URL per location opened automatically on QR code scan
  • Product categories with full details: ingredients, price, calories, protein, fat, carbohydrates
  • Per-product like system (one like per product, based on unique device fingerprint)
  • Wishlist feature: save desired products for quick ordering at the gas station café
  • Info section with contact phone number and anonymous or named feedback form
  • Smooth animations and transitions powered by GSAP
  • Multi-language support (i18n) with Google Analytics and Google Tag Manager integration

Monitoring Service

  • Real-time uptime and availability monitoring for all locations
  • Backend performance tracking: latency, throughput, errors per endpoint
  • Automatic alerts on critical threshold breaches (CPU, memory, RPS)
  • Visual dashboards with live and historical metrics
  • Centralized logging and rapid incident diagnostics

Integrations & Infrastructure

Google Analytics

Visitor behavior tracking, QR scans and interactions per location

Google Tag Manager

Centralized management of tags, events and conversions

Resend

Transactional email notifications for feedback and admin alerts

QR Code Generator

Automatic unique QR code generation per location, exportable for printing

Microsoft Clarity

Heatmaps and session recordings for visitor behavior analysis in the Menu App

Sentry

Real-time error monitoring, exception tracking and automatic alerting for backend and frontend

Technology Stack

Laravel
PostgreSQL
Redis
Supervisor
Resend
React
Next.js
Turbopack
Vite
GSAP
Tailwind CSS
Zabbix
Sentry

Laravel was chosen for its mature ecosystem and team productivity on API-first projects. PostgreSQL ensures relational data integrity across locations, while Redis brings latency below 10ms for frequently accessed endpoints. Next.js in the admin enables selective SSR, and Vite in the Menu App guarantees a small bundle size and fast load times on mobile networks.

Technical Results

24
Active locations in Moldova
1000+
RPS handled by backend
0
Technical interventions for menu updates

The delivered platform provides complete, consistent control of all points of sale from a single dashboard. The scalable backend supports network growth without re-architecting, while the QR menu experience — with wishlist, likes, and anonymous feedback — turns a simple gas station into a modern, interactive space. Zero technical interventions per month means the team's time is spent on growth, not maintenance.

Frequently Asked Questions

How does real-time synchronization work across 24 locations?

When the admin changes a product in the admin app, the backend: 1) Invalidates the Redis cache, 2) Notifies all connected clients via WebSocket, 3) Logs the change in the audit log. Clients (Menu App) receive the update and automatically refresh. No polling, no delay.

What happens if the server goes down?

We maintain 99.99% SLA. AWS auto-scaling relaunches containers on other nodes in <30 seconds. PostgreSQL replication ensures real-time backups. Sentry alerts the team immediately. The Menu App has offline support — the wishlist and settings sync when the connection returns.

How long does it take to update menus across all 24 locations?

Just 5 minutes — select categories, add products with photos, ingredient list, and nutritional info. Press 'Publish' and the menu appears instantly on QR codes at all locations. No export, no per-location upload, no code.

Why Laravel and not Next.js for the backend?

Laravel has: 1) Mature queue system (Supervisor), 2) Vast ecosystem for integrations (Resend, AWS SDK), 3) Powerful ORM (Eloquent) perfect for complex relationships (products, locations, feedback), 4) Built-in rate limiting and security. Next.js API routes aren't sufficient for API-first with 1000+ RPS and job queuing.

How do you monitor performance in real-time?

Zabbix for infrastructure (CPU, RAM, RPS), Sentry for backend errors, Google Analytics for user behavior. The admin dashboard shows all location statuses. Automatic alerts if latency > 100ms or uptime < 99.5%.

Do users accept QR codes? What percentage of visitors scan?

Google Analytics shows ~45% of visitors scan the QR code (vs. 5-10% for traditional methods). Anonymous feedback from the Menu App has 80+ positive comments about the experience. The wishlist feature has 12% interaction rate — customers actually save desired products.

Is it GDPR compliant? What happens to feedback data?

100% compliant. Anonymous feedback doesn't collect personal data. Named feedback explicitly requests consent. Data is encrypted at rest. Users can delete their data anytime. Sentry and Google Analytics are configured with GDPR settings enabled.

What happens if we want to expand to 50+ locations?

The architecture scales linearly — add locations without re-architecting. The backend handles 1000+ RPS, and the database auto-scales. The only limit is business scaling, not tech. Infrastructure cost increases linearly with locations, not exponentially.

Technical Challenges

1

Global Scalability (1000+ RPS)

The backend needed to handle 1000+ requests per second at peak times (shopping hours) with latency under 100ms on 4G networks. Laravel isn't known for high-load scenarios, and naive caching would cause inconsistency across locations.

Our Solution

We implemented smart Redis caching (cache invalidation per location), AWS load balancing, and aggressive query optimization with PostgreSQL indexing. Supervisor manages background jobs (email notifications, analytics aggregation) asynchronously, freeing the API from heavy tasks. Result: 99.99% uptime and latency <50ms.

2

Real-Time Synchronization (24 Locations)

If an admin updated a menu at one location, the other 23 locations needed instant notification — without constant polling that would drain resources. Customers scanning the QR code needed to see the new menu in <1 second.

Our Solution

We used WebSockets (via Laravel Reverb) and cache invalidation strategies: when a menu changes, we invalidate the global Redis cache and notify all connected clients. The Menu App clients automatically refresh. Google Tag Manager integration tracks updates in real-time. Result: zero delay, instant update visibility.

3

Optimal Mobile Experience on Slow Networks

The digital menu scanned via QR opened on phones in gas stations with weak WiFi (3G/4G). Product images, GSAP animations, and interactions needed to work smoothly and quickly, in <2 seconds time-to-interactive on 4G.

Our Solution

Vite (not Webpack) for minimal bundle size (<35KB gzipped), lazy-loading product images, and GSAP with hardware acceleration. Service Worker for offline support (wishlist works even without internet). Result: Lighthouse PageSpeed 88, all Core Web Vitals green, 99% mobile usability.

Got an Idea? Let's Make It Real.

No pitch decks needed. Just tell us what you're trying to build, and we'll figure out the best way to get there — together.