

Receipt-based loyalty platform
A loyalty platform
that works without
QR codes, without
cashier actions,
and without changing
store workflows.
Romanian retail needed loyalty that doesn't disrupt operations. We built a receipt-intelligence system that awards points automatically, powered by custom ML models trained on thousands of Romanian fiscal receipts.
Romanian retail needed loyalty that doesn't disrupt operations. We built a receipt-intelligence system that awards points automatically, powered by custom ML models trained on thousands of Romanian fiscal receipts.

Retail doesn't change for your software
Romanian retail operates on razor-thin margins and even thinner patience for change.

Every loyalty platform on the market assumes one of three things: a QR code at checkout, a cashier who remembers to scan something, or a deep POS integration that takes six months to deploy. All three break in real stores.
QR codes get covered by products, ignored by rushed customers, or simply forgotten. Staff have enough to do without adding "loyalty program ambassador" to their job description. POS integrations require IT resources that most retail chains don't have, and when they do ship, they break differently at every location.
"Customers buy products in stores and earn loyalty points."
But the real challenge was ours to define:
Build a system that works on top of retail, not inside retail operations.
There was another constraint. The client already ran two production applications: MarketManager for store operations and FixMarket as their customer-facing app. The backend was PHP 7.4 on CodeIgniter with years of data and operational habits baked in.
We couldn't break what already worked. We had to extend it.

The receipt is already the proof
Every transaction in Romanian retail produces one universal artifact: the fiscal receipt.
It's printed by law. It contains the store identifier, the transaction total, the exact timestamp, and a unique fiscal code. It's the only thing that every store, every POS system, and every transaction has in common.
So we asked a different question:
What if the receipt itself became the loyalty card?
The customer buys something, photographs the receipt, and the system handles everything else: identify the store, validate the purchase, check for fraud, calculate points, update the balance.
No QR codes to deploy. No staff training. No POS integration. No workflow changes. Just the receipt that was always going to be printed anyway.

But receipts are a nightmare
In a lab, a fiscal receipt looks perfect: clean paper, good lighting, flat surface, high contrast text.
In reality? Crumpled in a pocket, photographed at an angle, glare from overhead lights, faded thermal print, coffee stains, torn edges, fingers covering the total.

And here's the real problem: because points have monetary value, receipts become fraud targets. People will photograph the same receipt twice. They'll edit images. They'll write with a pen over the numbers and values. They'll try receipts from stores that aren't in the program.
Simple OCR doesn't work. You need a system that's as defensive as a financial transaction processor.
So we built receipt processing as a five-phase verification pipeline:
Fast Gatekeeping
Before any heavy processing, confirm the image actually contains a fiscal receipt. Reject selfies, screenshots, and random photos in milliseconds.
Structured Field Extraction
Custom-trained ML models extract specific fields: date, time, total amount, fiscal serial number, and store identifiers. Not generic OCR, but targeted extraction trained on thousands of Romanian receipt formats.
Store Context Resolution
Match extracted identifiers to a specific store. Different stores have different configurations, point rules, and active promotions.
Rule Validation
Apply store-specific loyalty rules. Is this store active? Is the receipt within the valid time window? Does the total meet minimum thresholds?
Fraud Protection
Compute a unique fingerprint from fiscal identifiers + timestamp + total. Check against global database. Run integrity heuristics to detect image manipulation.
Only after passing all five phases does a receipt become points.

Real-time neural network layers & integrity analysis


The complete flow
Scan receipt
Camera captures the fiscal receipt
ML extraction
Custom model extracts store ID, total, date
Validation
Store rules applied, fraud check executed
Points awarded
Balance updated in real-time
Another app login is where loyalty programs go to die
We could build the most sophisticated receipt processing system in the world, and it wouldn't matter if users had to create another account to use it.
The client already had FixMarket, a mobile app their customers used for promotions and store information. Asking those users to download a separate app, create a new account, verify their email, and set up a password would kill adoption before it started.
So we made a different choice:
Fidelizare.ro doesn't have a login screen.
Instead, we embedded the entire loyalty platform inside FixMarket as a WebView. We added a single button to the FixMarket home screen: "Accesează dashboard" (Access dashboard).
When a user taps that button:
- FixMarket sends their existing user ID to our API
- We check if they exist in our loyalty database
- If not, we create their account automatically
- We generate a secure session with WebView-compatible cookies
- We open the Fidelizare dashboard directly inside FixMarket
Zero registration forms. Zero password creation. Zero friction.
The user goes from "I want to check my points" to "I'm looking at my points" in under two seconds.

Points are money. Treat them like money.
In a loyalty program, points have real monetary value. Customers can redeem them for discounts, free products, or other rewards. That makes the platform a target.
We've seen attempts to submit the same receipt from multiple accounts, photograph receipts found in parking lots, digitally edit receipt totals, submit receipts from stores outside the program, and replay old receipts months after purchase.
Our fraud prevention isn't an afterthought. It's built into the foundation:
Global Duplicate Detection
Every validated receipt generates a unique fingerprint based on store ID, timestamp, transaction total, and fiscal code. If the same receipt appears again, from any user, at any time, across any device, it's blocked instantly.
Integrity Heuristics
Image analysis detects digital manipulation, pen marks over values, splicing artifacts, and inconsistent lighting patterns. Suspicious receipts go to manual review rather than automatic rejection.
Time Window Validation
Receipts must be submitted within a configurable time window from the transaction date. Old receipts found in drawers or parking lots are automatically rejected based on the timestamp printed on the receipt itself.
Store Program Verification
The store must be actively enrolled in the loyalty program, and the transaction must meet the program's minimum purchase rules. Receipts from non-participating stores are rejected before any points calculation.
Three roles, one platform
Fidelizare.ro isn't just a receipt scanner. It's a complete loyalty platform with distinct interfaces for three user types:
Customer
Submit receipts · View point balance · Redeem rewards · Track progress
Store Admin
Configure point rules · Manage promotions · Create rewards · View analytics
Super Admin
Platform KPIs · Cross-store oversight · User management · Fraud review

Admin Dashboard
Tech stack
Optimized for speed of delivery, production reliability, and future scalability.
What changed
Fidelizare.ro turned a simple brief, "customers earn loyalty points", into a production platform that respects how retail actually works.
For the stores
No hardware to install. No staff training. No checkout workflow changes.
For the customers
No new app. No account to create. No password to remember. One button.
For the client
A new product in two months. Modern stack that extends their existing ecosystem.
This project also changed the relationship. After delivery, the client expanded the collaboration into broader app maintenance and new feature development across their product suite.
What this demonstrates
This wasn't "we called an API and added a database." Fidelizare.ro represents how TIMPIA approaches complex problems:
Innovation under real constraints
Retail workflows are sacred. We didn't ask the client to change their stores. We built technology that works with retail as it already operates.
ML that serves business logic
Our custom models don't exist to be impressive. They exist to turn a crumpled receipt photo into validated loyalty points. Every ML decision serves a business outcome.
Full-stack delivery
From training receipt extraction models to building RBAC dashboards to implementing WebView SSO. We shipped the complete product, not a proof of concept.
Integration-first architecture
A new platform that respects and extends existing products. The legacy PHP backend didn't get replaced. It got a new capability.
Usability as a hard requirement
The zero-friction WebView integration wasn't a nice-to-have. We knew that adoption beats features, so frictionless entry was non-negotiable from day one.
Check it out live
Visit Fidelizare.ro to see the platform. To use it, you need to install the FixMarket app:
For more information about the FixMarket ecosystem, visit the presentation website.
Note: The website is in Romanian, you might need to translate it :) Curious about the project? Contact the owner.
