How we built a partner platform for the European market from scratch
and we have implemented our own formula for calculating commissions.
About the project
Context
Prior to the launch of the partner platform, RentaHoliday did not have an affiliate accounting system at all.
Did not have:
- partner account
- widget generation mechanism
- transparent statistics
- automated commission calculation system
- partner network scaling tool
At the same time, the business wanted:
- enter the European market
- scale up partner connections
- minimize calculation errors
- eliminate data loss
- make the system transparent for partners
Pain
Key risks before launch:
- inability to track orders correctly
- errors in commission calculations
- loss of click-through and booking statistics
- lack of trust from partners
- lack of scalability
The growth of the partner network is impossible without the system affiliate engine.
The purpose of the project
Create a full-fledged SaaS Affiliate product that:
- allows partners to register themselves
- generate widgets for websites
- track clicks, redirects, and orders
- see confirmed commissions
- receive payments when the threshold is reached
- supports multilingualism
- scaled to the European market

It was / Become
It was:
- There was no partner system
- calculations were potentially done manually
- statistics were not systematically recorded
- there was no tool to connect new partners
Become:
- full-fledged affiliate dashboard
- widget system with unique UUIDs
- centralized statistics model
- automated commission calculation
- real-time data updates
- admin panel for payment management
- production-a product with real payouts
Architectural solution
We designed the system as a SaaS product, not an «internal cabinet».
Architecture:
- Laravel 12 (PHP 8.2+)
- Livewire 3
- Tailwind 4
- PowerGrid
- js
- Spatie Permission
The key model of the system is WidgetStatistic.
The central essence:
- widget_uuid
- partner_uuid
- event type (click / redirect / order)
- order details
- status: pending / confirmed / cancelled / completed / paid
This allowed us to build a flexible statistical model without duplicating logic.
Key decisions
Widget generation. Partner:
- gets a unique UUID
- creates a widget (hotels / carsharing / transfer)
- adjusts style, language, adaptability
- gets the JS code for embedding
Each widget is tracked separately.
Cookie-based tracking (180 days):
- prefix rah_
- saving partner_uuid
- correct attribution of orders
This ensured transparency and stability of tracking.
Custom payout formula. Different types of products — different formulas:
- hotels: ((booking_amount — booking_netto) / VAT) / 2
- carsharing: (booking_amount / VAT) / 2
- Default VAT is 1.21
The hardest part was:
- correct separation of gross and net profit
- accounting for statuses
- order transition from pending to confirmed
- protection against double payments
Real-time statistics via Livewire:
- charts are updated without restarting
- the partner sees the dynamics by widget types
- The admin keeps track of payouts
Admin Panel:
- payment management
- partner tables
- order confirmation
- the paid mark
- export to Excel
- News management and FAQ
- multilingual translations
Multilingualism. Support for 6 languages:
- EN
- RU
- ES
- FR
- DE
- PL
Implemented via middleware + JSON files + translation models.
This allowed us to enter the European market without additional development.

The complexities of the project
The hardest part:
- architecture of statistics
- calculation of commission formulas
- synchronization of order statuses
- API security balance (CSRF disabled for save endpoint, but data validation)
The data flow had to be continuous:
Widget → click → redirect → cookie → order → pending → confirmed → payout → paid
Any mistake is a direct financial loss.
Why did it work?
We didn’t make a «cabinet». We were building:
- a sustainable architecture
- a centralized statistics model
- a flexible payment system
- a scalable product
This is not a landing page. This is a financial instrument that directly affects the income of partners.
Results
After the launch:
- accelerated connection of new partners
- reduced the number of errors in calculations
- the loss of statistics is excluded
- automated payment process
- A scalable SaaS affiliate has been created
The main thing is that the business has received a system that it can rely on when scaling in Europe.


