Skip to content
j
Jan Dunder
2025–2026Diplomová práce · v produkci

Connect Me — párování pro speed dating

Platforma v Rails 8, která odbaví celou online speed dating akci — a vážený model párování pod ní.

364
RSpec testů
7
vážených faktorů
Kamal
nasazení bez výpadku
· MODEL PÁROVÁNÍ ·100BODŮAttachment25Sdílené hodnoty20Osobnost20Styl konfliktu15Jazyky lásky10Životní styl6Zájmy46 deal-breakerů → tvrdá nula, ještě před skórovánímRails 8 · 364 RSpec testů · v produkci
/ 01

Problém

Online speed dating páruje lidi v podstatě náhodně a pak doufá. Chtěl jsem zjistit, jestli to model postavený na psychologické literatuře umí lépe — a co obnáší odbavit celou akci od registrace přes kola, video a hodnocení až po výsledky, aniž by u toho někdo hlídal hodinky.

/ 02

Model párování

Sedm vážených faktorů dávajících přesně 100 bodů: attachment, sdílené hodnoty, osobnost, styl řešení konfliktu, jazyky lásky, životní styl, společné zájmy. Šest oboustranně vyhodnocovaných deal-breakerů shodí dvojici na nulu ještě před samotným skórováním. Nejvíc si stojím za tím, že každá dimenze dostane matematické zacházení, které si zaslouží, místo jednoho univerzálního skóre podobnosti — absolutní žádoucnost u Big Five tam, kde to má oporu v meta-analýzách, párová blízkost u tolerančních pásem, kosinová podobnost u jazyků lásky, Jaccard u zájmů.

/ 03

Modelovat selhání, ne jen podobnost

Člen za attachment je interakce, ne vzdálenost: penalizuje úzkostně-vyhýbavou dvojici, kterou literatura označuje za konkrétní vzorec selhání. Styl konfliktu dělá totéž pro vzorec demand–withdraw. Nad tím sedí hybridní kolaborativní filtrování — bonus podle lidí, které jsi už ohodnotil kladně, spočítaný třemi SQL dotazy bez N+1. Optimalizátor přiřazení si nejdřív spočítá počet permutací a přepíná mezi vyčerpávajícím hledáním s garantovaným globálním optimem a greedy heuristikou, když je úloha moc velká — férovost je zakódovaná přímo do aritmetiky skóre, takže kdo jedno kolo vynechal, má v dalším partnera jistého.

/ 04

Aby to běželo bez obsluhy

Celý životní cyklus akce žene jedna background úloha, která se sama přeplánovává — start, párování, video, hodnocení, pauza, další kolo, uzavření — a znovu se zařadí s odkladem. Každá větev je pojištěná proti vykonání mimo pořadí. Rails 8 a Solid trojice všude, takže nikde žádný Redis. Start kola pošle jednu globální zprávu plus payload pro každého uživatele zvlášť, takže identita dvojice se nikdy nerozešle celé akci. Video jede na managed WebRTC v soukromých místnostech pro dva s krátkodobými tokeny a resolver stavu odolný vůči odpojení tě po refreshi vrátí tam, kde jsi byl.

/ 05

Jak to vzniklo

328 commitů, jediný autor, půl roku. 364 RSpec testů přes modely, služby, úlohy, mailery a requesty, žádný přeskočený. RuboCop plus Brakeman a bundler-audit jako blokující brány v CI. Docker image přes Kamal 2 na Hetzner VPS, zero-downtime, Let's Encrypt. Kompletní čeština a angličtina včetně mailerů, které obalují I18n.with_locale, protože úlohy běží mimo request.

Stack
Ruby on RailsPostgreSQLWebRTCAlgoritmy
j
Jan Dunder

Píšu produkční systémy v PHP/Symfony a Reactu s TypeScriptem — platební infrastrukturu pro 100+ obcí, platformu pro kybernetickou compliance, které dělám technického leada, a autonomní agenty, kteří běží nad reálnými repozitáři. Ing. z FIT ČVUT, obor Webové inženýrství.

Navigace
ÚvodProjektyŽivotopisO mně
Jinde
LinkedIn ↗GitHub ↗terminál
Kontakt
dunder.jan@gmail.comPraha, ČR
© 2026 Jan DunderVyrobeno v Praze · s Claude Code