Kiindulás
Az Ad Absurdum budapesti, meghívásos eseményklub. Az indulásra titokzatos oldalt kért, amelyen csak a név áll, és annyi, hogy „Hamarosan”. A vendégek többsége a partnerhelyszíneken kihelyezett QR-kódokról érkezik, egy buli közben, telefonnal a kezében.
Ebből három követelmény jött. A jelentkezésnek a terv szerint 25–30 másodperc alatt meg kell lennie. Minden feliratkozóról tudni kell, melyik helyszínről, melyik eseményről és melyik kódról érkezett. A klub pedig sokat szeretett volna tudni a vendégeiről, sokkal többet, mint amennyit egy buliban bárki kitölt.
Ezért a jelentkezés két lépésből áll. Az első egy rövid, koppintással kitölthető űrlap. A második egy önkéntes profil, amelyet a köszönőoldal és egy három nappal későbbi levél kínál fel.
Az oldal egy jóváhagyott, részletes látványtervből épült. Elefántcsont alapon Bodoni Moda és Archivo betű áll, dupla hajszálvonalas meghívókeret fogja össze, és a fejlécben élő, római számos dátumsor fut.
A QR-kódok nyilvántartása
Egy kinyomtatott QR-kódot utólag nem lehet javítani. Ezért minden kód egyetlen CSV-táblázatból készül, és URL-t kézzel senki nem ír. A generátor megáll, ha egy érték nem szabályos azonosító, ha a közeg ismeretlen, vagy ha egy sor kétszer szerepel. A kis- és nagybetű is számít, mert a Google Analytics és a MailerLite két külön forrásnak látná ugyanazt a helyszínnevet kis és nagy kezdőbetűvel.
| Paraméter | Érték |
|---|---|
utm_source |
a helyszín azonosítója |
utm_medium |
qr-event az eseményen, qr-table az asztalon |
utm_campaign |
a műfaj és a dátum, vagy always-on az állandó kódoknál |
A kódok nyomdai SVG-ben és 1200 pixeles PNG-ben készülnek, Q szintű hibajavítással, amely a kopott matrica 25 százalékát is kibírja, és négymodulos csendes zónával. A nyomtatási előírás is a nyilvántartás része. A kód oldala legalább a beolvasási távolság tizede, a kód soha nem inverz, a közepén nincs logó, és nyomtatás előtt mindegyiket ki kell próbálni. A kész fájlok a kódtárban vannak, így a repó és a kinyomtatott kódok soha nem térnek el egymástól.
Két helyszínen hét kód él. Öt egy-egy eseményhez tartozik, kettő állandóan az asztalokon van.
Az első érintés számít
Aki ma beolvas egy kódot, és csak napok múlva iratkozik fel otthon, az is a kódjához tartozik. Az oldal az első érkezés paramétereit a böngészőben egyszer rögzíti, és később nem írja felül.
A mérést szándékosan három forrásra osztottuk.
- A feliratkozásokat kódonként a MailerLite mezői mutatják. Ez pontos, és nem függ a sütihozzájárulástól.
- A beolvasásokat a Vercel süti nélküli analitikája számolja, ezért ez sem kér hozzájárulást.
- A Google Analytics csak hozzájárulás után tölt be. Ezért kevesebbet mutat, és a beolvasásból lett feliratkozás arányát soha nem ebből számoljuk.
Feliratkozás két lépésben
A vendég útja ezeken a pontokon megy át.
- A vendég beolvassa a kódot, és kitölti az első űrlapot. A szerver megerősítetlen állapotban létrehozza a kapcsolatot a MailerLite-ban.
- A MailerLite megerősítő levelet küld. A megerősítés után a vendég a köszönőoldalra érkezik.
- A csoportba lépés elindítja az üdvözlő automatizmust.
- Három nappal később egy levél a második lépéshez hívja, egy aláírt linkkel.
Az első űrlap tíz érdeklődési kört, nemet, születési évet és nyelvet kér, főleg koppintással. A második lépés többet kérdez (zenét, gasztronómiát, társasági formát, foglalkozást, várost), és jutalmat ad érte: nagyobb esélyt a havi VIP-sorsoláson, a vendég ízléséhez illő meghívókat, elővételi és utolsó pillanatos értesítést. A gomb felirata „Több esélyt kérek”.
A MailerLite buktatói
A MailerLite API-ja néhány helyen mást csinál, mint amit egy fejlesztő elsőre várna. Ezeket egyenként kezeltük.
- A létrehozás felülír. Ha egy már aktív tag újra kitölti az űrlapot, a beküldött állapot visszaminősítené megerősítetlenné. Ezért a szerver előbb megkeresi a kapcsolatot, és aktív tagnál nem küld állapotot.
- A leiratkozott címet az API nem tudja újraaktiválni, mégis sikeres választ ad. A mi szerverünk ilyenkor ütközést jelez, és nem mutat hamis sikert.
- A profillépés csak létező feliratkozót frissít, így vele nem lehet a kettős megerősítést megkerülve címet felvenni.
- A
sourcefoglalt mezőnév, ezért a mi mezőnk neveutm_source. - Az ismeretlen mezőt az API szó nélkül eldobja. Ezért mind a 25 mező és a két csoport egyetlen sémafájlban él. Egy állapotellenőrző végpont az élő fiókkal veti össze, egy beállító szkript pedig létrehozza, ami hiányzik.
- A megerősítés utáni átirányítás nem helyettesíti be az e-mail-címet, a sablonváltozó betű szerint érkezik meg. A köszönőoldal ezt felismeri, és megkéri a vendéget, hogy írja be a címét.
Minden hívásnak 8 másodperces időkorlátja van. Egy éles telepítés kulcs nélkül hangosan, 500-as hibával áll meg, fejlesztés közben pedig próbaüzemben fut, és semmit nem küld élesbe.
Védelem a linkeken és az űrlapon
A második lépés linkje HMAC-aláírást visz, amely az e-mail-címből és egy titokból készül. Az ellenőrzés egyszerű újraszámolás, MailerLite-hívás nélkül, és egy újrafeliratkozás nem teszi érvénytelenné a már elküldött linkeket.
A beküldést kétszintű korlát védi: percenként 60 kérés, és tíz percenként 30 olyan beküldés, amely a MailerLite-ot is eléri. A második szint csak az ellenőrzésen átment kéréseket számolja, így egy elgépelés nem fogyasztja a keretet. Az elutasított kéréseket nem jegyezzük fel, mert egy zsúfolt helyszínen sok vendég osztozik egy IP-címen, és a keret különben soha nem ürülne ki. A botok egy rejtett mezőn akadnak fenn, csendes sikert kapnak, és nem kerülnek a listára.
Adatvédelem a kódban
A hozzájárulás bizonyítéka a kapcsolaton marad: az időpont, az IP-cím és a hozzájárulási szöveg verziója. A különleges adatok (kapcsolati státusz, társasági típus, spirituális események iránti érdeklődés) külön hozzájárulás mögött vannak. Ha a vendég ezt nem jelöli be, a mezők eltűnnek, és a szerver üresre írja őket, így a visszavonás a korábbi válaszokat is törli. A vallást csak eseményérdeklődésként kérdezzük.
A 18 éves korhatár gördülő, mert az aktuális évből számoljuk, így 2027-ben sem utasít el új nagykorúakat. A sütisávot a láblécből bármikor újra meg lehet nyitni. Az üzemeltetőnek küldött értesítő levelekben nincs személyes adat, csak forrás, nyelv, állapot és darabszám, így a levélküldő szolgáltató nem kerül az adatfeldolgozók közé.
Két nyelv villanás nélkül
A nyelvet a szerver dönti el egy sütiből, alapból magyar. A böngésző nyelvét szándékosan nem használjuk, mert a kliensoldali váltás a köszönőoldalon 0,088-as elrendezéscsúszást (CLS) okozott, a szerveroldali váltás pedig villanásmentes. A gyakori kérdések szövege egy helyen él, így a látható lista és a FAQPage strukturált adat szó szerint egyezik.
Az oldalt 81 automatikus teszt védi. Lefut 8 képernyőszélességen, 280-tól 1440 pixelig, 5 oldalon és 2 nyelven, minden párosításban, és egy teszt a főcím méretezését nézi. Mindegyik ellenőrzi, hogy semmi nem lóg ki a képernyőről, és hogy a CLS 0,02 alatt marad. A nagy, egysoros „AD ABSURDUM” felirat konténermérethez igazodó egységekben van megadva, mért betűszélességekből számolva.
Egy offline kampány akkor mérhető, ha a kódot ugyanaz a nyilvántartás nyomtatja ki, amelyből a riport készül.
Amit ebből Önnek érdemes tudni
Ha plakátot, szórólapot vagy asztali kártyát mérne, a kódok nyilvántartása és az első érintés megőrzése a legfontosabb rész. A weboldalkészítésről külön oldalon írunk, a munka menetéről pedig az Így dolgozunk oldalon.



