← All work
Multi-tenant SaaSPHP / LaravelVue / Inertia

Built a QR-to-reward loyalty platform with a habit loop that brings back 69% of the customers

Role
CTO
When
Jan 2026 - present
Read
6 min read
Impact
69%

Built with PHP / Laravel 11 · Vue 3 / Inertia · TypeScript · PostgreSQL · Redis · FFmpeg

trigger firesscanreward drawnkeeps them comingthe habit loopHooked model · brings customers backTriggernotification · QR on the table1Actionone QR scan2Variable rewarda fortune, sometimes a prize3Investmentloyalty card fills up4
The engagement loop: a scan always rewards; a filling loyalty card is the reason to return

Overview

MyPlace2GO is a loyalty and discovery platform for restaurants, bars, and cafes. A customer scans a QR code at the table, draws a playful digital reward and fills a loyalty card that pulls them back. As the project CTO I built the product in-house.

It is one Laravel 11 and PostgreSQL app serving two audiences: a multi-tenant dashboard for venue owners, and a public, mobile-first Vue 3 and Inertia app for their customers in Bulgarian, English, and Dutch.

The problem

Restaurants live on repeat visits, but it costs several times more to win a new customer than to bring an existing one back. Most venues still run loyalty on paper cards, cannot tell who returns or why, and watch their slow days stay empty. An outsourced MVP had proven the idea with 40 venues, but it could not be evolved safely: every change was slow and risky. So when I joined, the call was to rebuild in-house.

What I built

For a restaurant, bar, or cafe, everything runs off the QR code on the table. A customer scans it and lands straight on the venue's profile, a fast mobile page with no app to install and no login to look around. There they find the venue's digital menu, with a separate lunch menu, prices, and photos, alongside its live offers, its atmosphere and contact details, and its star rating from other guests.

The profile is also where the engagement happens. One tap draws a playful digital reward, a fortune and sometimes a prize such as a free second cocktail, which the customer can share to social media as a short video. Coming back and scanning the QR on the cash-register receipt adds visits to a digital loyalty card that pays out a reward, and guests can rate the venue and open its offers. Scan, get rewarded, come back: that is the whole loop.

Demo: scan a QR code at the table and draw a fortune
Customerphone · public appVenue ownerdashboard · + staffOne Laravel 11 + Inertia appFortune drawWeighted prize lotteryReceipt-verified loyaltyCross-marketing marketplacemulti-tenant · business → place → staffPostgreSQL 15multi-tenant storeRedisqueues + cacheFFmpeg workerfortune → MP4S3 + Cloudflaremedia + CDNasync job
One codebase, two audiences: a multi-tenant Laravel + Inertia app with an async FFmpeg video pipeline

The results

In the first four months after relaunch, venues ran about 40,000 QR scans and customers opened roughly 4,200 rewards, redeeming nearly 88%. The number that matters most: 69% of registered customers came back more than once, and 36% visited four or more times. The loop does what it promises. The platform reached 25 paying venues, and four cross-marketing campaigns let them hand out each other's branded rewards through the same engine. All on one in-house codebase, behind a CI pipeline that type-checks, lints, tests against PostgreSQL, and ships on green.

69%of registered customers came back more than once88%of rewards redeemed40kQR scans in 4 monthsConcurrency-safe drawsReceipt-verified loyaltyFFmpeg viral video
What the relaunched platform delivered in its first four months