Fidelizare.ro
Fidelizare.ro

Receipt-based loyalty platform

A loyalty platform
that works without
QR codes, without
cashier actions,
and without changing
store workflows.

TagsCUSTOM MLRECEIPT INTELLIGENCELOYALTY PLATFORMFULL-STACK

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.

1000+
Users
98.2%
Extraction Accuracy
<9s
Receipt To Points
0
Workflow Changes
1 tap
Onboarding Friction
8 weeks
Concept To Production
Receipt processing pipeline - Input to Output flow

Retail doesn't change for your software

Romanian retail operates on razor-thin margins and even thinner patience for change.

QR codes, POS systems, and cashier actions - all break in real stores

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."

The client's brief

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.

System architecture funnel

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.

Receipt as loyalty card concept

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.

Crumbled and damaged receipts

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:

1

Fast Gatekeeping

Before any heavy processing, confirm the image actually contains a fiscal receipt. Reject selfies, screenshots, and random photos in milliseconds.

2

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.

3

Store Context Resolution

Match extracted identifiers to a specific store. Different stores have different configurations, point rules, and active promotions.

4

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?

5

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

Detailed OCR receipt processing pipeline

The complete flow

1

Scan receipt

Camera captures the fiscal receipt

2

ML extraction

Custom model extracts store ID, total, date

3

Validation

Store rules applied, fraud check executed

4

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:

  1. FixMarket sends their existing user ID to our API
  2. We check if they exist in our loyalty database
  3. If not, we create their account automatically
  4. We generate a secure session with WebView-compatible cookies
  5. 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.

FixMarket SSO flow diagram

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:

1

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.

2

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.

3

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.

4

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.

Receipt ML flow and duplicate detection

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:

1

Customer

Submit receipts · View point balance · Redeem rewards · Track progress

2

Store Admin

Configure point rules · Manage promotions · Create rewards · View analytics

3

Super Admin

Platform KPIs · Cross-store oversight · User management · Fraud review

Admin dashboard with KPIs

Admin Dashboard

Tech stack

Optimized for speed of delivery, production reliability, and future scalability.

Next.js
TypeScript
Python
PyTorch
Firebase
Tailwind
OpenCV
Vercel

What changed

Fidelizare.ro turned a simple brief, "customers earn loyalty points", into a production platform that respects how retail actually works.

1

For the stores

No hardware to install. No staff training. No checkout workflow changes.

2

For the customers

No new app. No account to create. No password to remember. One button.

3

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.

"We wanted to offer loyalty points without changing anything at the register. TIMPIA found the solution: the fiscal receipt becomes the proof of purchase, no QR codes, no staff training required."

Ciprian Singepanu

Ciprian Singepanu

CEO @ FixMarket

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.

Client
Client
Client
Client

Trusted by companies across Europe

Now let's talk about your project

Let's discuss your idea, your problems and our solutions.