platforma je největší multi-partner věrnostní program v České republice. Na rozdíl od firemních věrnostních programů, kde sbíráte body pouze u jednoho obchodníka, platforma propojuje přes 15 000 partnerských provozoven do jednoho ekosystému — od velkých retailových řetězců přes benzínové stanice až po lokální restaurace a e-shopy. Více než 2 miliony členů sbírají body za běžné nákupy a směňují je za odměny, slevy nebo zážitky.
Naším úkolem bylo kompletně přebudovat technologickou platformu platforma — nahradit stárnoucí PHP monolit moderním systémem schopným zpracovávat desítky milionů transakcí měsíčně, integrovat 25 000+ POS terminálů a poskytnout partnerům nástroje pro správu kampaní a analytiku.
Výzva¶
Legacy PHP monolit¶
Původní platforma platforma byla klasický PHP monolit vybudovaný před více než deseti lety. Systém plnil svou funkci, ale postupně narážel na vážné limity:
- Výkonnost — zpracování bodových transakcí v peak hodinách způsobovalo viditelné zpomalení celého systému. Bodový zůstatek se někdy aktualizoval s minutovým zpožděním
- Technologický dluh — roky postupného vývoje vytvořily složitý, obtížně udržovatelný codebase. Přidání nové funkce trvalo týdny, protože vyžadovalo pochopení a úpravu provázaných částí kódu
- Škálovatelnost — vertikální škálování naráželo na limity a horizontální škálování monolitu bylo prakticky nemožné
- Integrace — každý partner vyžadoval custom integraci. Neexistovalo standardizované API, což znamenalo, že onboarding nového partnera trval 4-6 týdnů
25 000+ POS terminálů¶
Věrnostní program žije a padá s integrací na POS (Point of Sale) terminálech. Když zákazník zaplatí u pokladny, POS terminál musí v reálném čase:
- Identifikovat člena (kartou, telefonním číslem nebo aplikací)
- Ověřit členství a načíst bodový zůstatek
- Vypočítat body za nákup podle aktuálních pravidel partnera
- Připsat body na účet
- Volitelně uplatnit bodovou slevu
Celý proces musí proběhnout do 2 sekund — zákazník stojí u pokladny a čeká. Při 25 000+ terminálech to v peak hodinách znamená tisíce simultánních požadavků. A POS terminály jsou heterogenní prostředí — desítky různých výrobců, verzí firmware a komunikačních protokolů.
Komplexní kampáňový systém¶
Partneři platforma nechtějí jen jednoduché „1 bod za 10 Kč”. Požadují sofistikované kampaně:
- Časově omezené akce — „dvojnásobné body tento víkend”
- Segmentované nabídky — „5× body pro členy, kteří nenakoupili 30+ dní”
- Cross-partner kampaně — „nakupte u partnera A i B a získejte bonus”
- Gamifikace — „splňte 5 nákupů za měsíc a získejte 500 bonus bodů”
- Tier systém — různé úrovně členství s progresivními výhodami
Kampaňová pravidla se kombinují, překrývají a vzájemně ovlivňují. Engine musí v reálném čase vyhodnotit desítky pravidel pro každou transakci a rozhodnout o správném počtu bodů — bez chyb a s plnou auditovatelností.
Datová migrace¶
Migrace z PHP monolitu na novou platformu zahrnovala přesun:
- 2M+ uživatelských účtů s kompletní historií
- 150M+ historických transakcí
- 15 000+ partnerských profilů s konfiguracemi
- Kampaňová pravidla a šablony
- Integrace s externími systémy (platební brány, e-mail marketing, SMS gateway)
Migrace musela proběhnout s nulovým downtime — program běží nepřetržitě a jakýkoli výpadek by znamenal nefunkční POS terminály u tisíců obchodníků.
Řešení¶
Modular monolith s DDD¶
Po důkladné analýze požadavků jsme se rozhodli pro architekturu modular monolith místo microservices. Důvody:
- Menší operační overhead — platforma tým je střední velikosti a provoz desítek microservices by vyžadoval neúměrnou investici do infrastruktury a DevOps
- Transakční konzistence — bodové operace vyžadují silnou konzistenci. V monolitu lze využít databázové transakce bez distribuovaných transakcí
- Snazší refactoring — moduly komunikují přes in-process události a jasně definovaná rozhraní, ale sdílejí deployment unit
- Evoluce — modular monolith lze v budoucnu rozdělit na microservices extrahováním jednotlivých modulů
Architektura využívá principy Domain-Driven Design (DDD):
- Member context — správa členů, registrace, profily, tier systém
- Transaction context — zpracování bodových transakcí, zůstatky, historie
- Campaign context — kampaňový engine, pravidla, vyhodnocování
- Partner context — správa partnerů, provozoven, integrace
- Reward context — katalog odměn, rezervace, fulfillment
- Analytics context — reporting, dashboardy, data export
Každý bounded context má vlastní doménový model, repository vrstvu a API. Komunikace mezi kontexty probíhá přes domain events — asynchronně tam, kde je to možné, synchronně tam, kde je vyžadována okamžitá konzistence.
Campaign engine¶
Srdcem systému je campaign engine — flexibilní rule engine pro vyhodnocování bodových pravidel:
Architektura campaign engine:
- Rule definition layer — DSL (Domain Specific Language) pro definici kampaňových pravidel. Partneři definují pravidla přes vizuální builder v portálu, systém je kompiluje do optimalizované interní reprezentace
- Evaluation pipeline — při příjmu transakce engine načte relevantní pravidla (pre-filtered podle partnera a časového rozsahu), vyhodnotí podmínky a vypočítá body
- Conflict resolution — když se na transakci aplikuje více pravidel, resolver rozhodne o prioritě (nejvyšší cashback, first match, kumulativní — konfigurovatelné per partner)
- Caching layer — aktivní pravidla jsou cached v Redis s invalidací při změně. Eliminuje opakované databázové dotazy
Campaign engine zpracovává průměrně 400 transakcí za sekundu s mediánovou latencí 15ms pro kompletní vyhodnocení.
Real-time points processing¶
Zpracování bodových transakcí je implementováno jako pipeline:
- Ingestion — příjem transakce z POS terminálu přes REST API
- Validation — ověření členství, formátu dat, deduplikace (idempotence key)
- Enrichment — obohacení o partnerská metadata, kategorizace nákupu
- Campaign evaluation — vyhodnocení pravidel campaign enginem
- Points credit — atomický zápis bodů na účet člena (PostgreSQL transaction)
- Notification — asynchronní odeslání push notifikace, aktualizace zůstatku v app
- Analytics event — publikování události pro analytický pipeline
Celá pipeline běží synchronně do kroku 5 (aby POS terminál dostal odpověď do 2 sekund), kroky 6 a 7 probíhají asynchronně přes Celery task queue.
API gateway pro partnery¶
Standardizované API drasticky zjednodušilo integraci partnerů:
- REST API s OpenAPI 3.0 specifikací a interaktivní dokumentací
- Webhook systém — notifikace o událostech (nový člen, dosažení tier, kampaň expiruje)
- SDK pro populární POS platformy (Storyous, Dotykačka, K2)
- Sandbox prostředí — plně funkční testovací prostředí pro integraci
- Rate limiting a throttling — ochrana systému proti přetížení s fair-use politikou
- Versioning — API versioning s 12-měsíční deprecation politikou
Onboarding nového partnera se zkrátil z 4-6 týdnů na 3-5 dní — většina partnerů zvládne integraci self-service s pomocí dokumentace a SDK.
Členská aplikace a portál¶
- Mobilní aplikace (iOS + Android) — digitální karta, bodový zůstatek, historie, nabídky v okolí, katalog odměn
- Webový portál — alternativa pro členy preferující desktop
- Partnerský portál — správa kampaní, provozoven, zaměstnanců, analytika a reporting
- Admin portál — interní nástroj pro platforma tým — member support, systémová konfigurace, monitoring
Architektura¶
Infrastruktura¶
Systém běží na AWS s následující architekturou:
- ECS Fargate — kontejnerizovaná aplikace bez nutnosti správy serverů
- RDS PostgreSQL — managed databáze s Multi-AZ deployment pro high availability
- ElastiCache Redis — cache vrstva pro session data, kampáňová pravidla a rate limiting
- Elasticsearch — full-text vyhledávání v katalogu odměn, partnerech a provozovnách + analytika
- S3 + CloudFront — statické assety, partner loga, dokumenty
- SQS + Celery — asynchronní task processing (notifikace, reporting, batch operace)
Celá infrastruktura je definována jako kód v Terraform s modulární strukturou. Deployment probíhá přes GitHub Actions s automatickými testy a canary release.
Monitoring a alerting¶
- CloudWatch + custom dashboards — systémové metriky a business KPI
- Sentry — error tracking s automatickou klasifikací a přiřazením
- PagerDuty — alerting s eskalačními polícy pro on-call tým
- Synthetic monitoring — simulované POS transakce každou minutu pro ověření end-to-end funkčnosti
Datová migrace¶
Migrace z legacy PHP systému probíhala ve třech fázích:
Fáze 1: Shadow mode (4 týdny) — nový systém běží paralelně, přijímá kopie transakcí a výsledky porovnává s legacy systémem. Jakákoliv diskrepance se loguje a analyzuje.
Fáze 2: Dual write (2 týdny) — transakce se zapisují do obou systémů. Nový systém je „source of truth” pro nové transakce, legacy slouží jako fallback.
Fáze 3: Cutover (1 den) — přepnutí POS terminálů na nové API endpoint. Legacy systém přepnut do read-only režimu pro historická data.
Celá migrace proběhla bez jediné minuty downtime a bez ztráty transakce.
Výsledky¶
Business metriky¶
Po nasazení nové platformy platforma zaznamenal výrazné zlepšení klíčových business metrik:
- 60% nárůst member engagement — díky personalizovaným nabídkám, push notifikacím a gamifikaci. Aktivní členové (alespoň 1 transakce za měsíc) vzrostli z 35% na 56%
- 3× rychlejší onboarding partnerů — standardizované API a SDK zkrátily integraci z 4-6 týdnů na 3-5 dní
- Single API — místo desítek custom integrací jeden standardizovaný endpoint pro všechny partnery
- 15 000+ partnerů — nárůst z 8 000 na aktuální stav díky snadnějšímu onboardingu
- NPS score 68 — výrazné zlepšení oproti 41 u legacy platformy
Technické metriky¶
- 10M+ transakcí měsíčně — zpracováno bez degradace výkonu
- < 200ms p99 latence na POS API (cíl byl 2 sekundy)
- 99.95% uptime — včetně období peak sezón (Vánoce, Black Friday)
- Zero data loss při migraci 150M+ historických transakcí
- 75% snížení provozních nákladů — přechod z dedikovaných serverů na AWS managed služby
Strategický dopad¶
Nová platforma umožnila platforma:
- Expanzi do nových vertikál — hospitality, fitness, health & beauty
- Launch nových produktů — platforma Pay (platba body), platforma Experiences (zážitkové odměny)
- Data monetizaci — anonymizované transakční insighty pro partnery
- White-label řešení — platforma jako základ pro věrnostní programy dalších značek
Projekt transformoval platforma z legacy věrnostního programu na moderní technologickou platformu schopnou konkurovat na evropském trhu.
Technologie¶
Projekt je postaven na Python/Django stacku, který poskytuje rychlý vývoj a bohatý ekosystém. PostgreSQL slouží jako primární databáze s robustní podporou transakcí a JSON operací. Redis zajišťuje sub-millisecond cache pro hot data. Elasticsearch pohání fulltextové vyhledávání a analytiku. Celery s Redis brokerem řeší asynchronní úlohy. Celý systém běží v Docker kontejnerech na AWS ECS Fargate, infrastruktura je spravována přes Terraform.