The story
Local businesses in Mexico still run loyalty on paper cards that get lost, faked or forgotten. Kyloy gives customers one place for all of them: sign in with an SMS code, show a QR at the counter, and watch points and stamps add up across every business they visit.
Each business gets its own pass in Apple Wallet and Google Wallet, branded with its colours and stamp grid, and updated live from the server. Customers can also browse nearby businesses, read digital menus, order ahead for pickup and book appointments.
I designed and built the whole platform alone: database, NestJS API, AWS infrastructure, the consumer app, the merchant app, three web apps and the test tooling. The consumer app has its own web twin at app.kyloy.com with feature parity checked route by route.
Engineering highlights
Secure rotating QR
A signed, short-lived QR that refreshes on its own, so a screenshot of someone else’s code is useless at the counter. It only refreshes while it is on screen, to save battery and requests.
Live Wallet passes
Apple passes generated with passkit-generator and updated through the PassKit web service and APNs; Google Wallet through its API. Stamp strips are rendered server-side.
Credential hygiene
Session credentials live in the device’s secure storage, never in app state, and nothing sensitive ever reaches the logs.
Order ahead & booking
Menu, cart, nearest-branch selection with a distance warning, and 14-day appointment availability, all inside the app.
Safe OTA updates
Bundles are inspected for leaked dev URLs before publishing with EAS Update, and pinned to the native app version.







