התשובה הקצרה: כן, זה נספר פעמיים. RegaRoll לא מזהה "מי האדם" — היא מזהה "איזה דפדפן". סריקת הקוד יוצרת guestId וסוד חדשים בכל פעם שאין כבר session שמור באותו דפדפן, בלי קשר לשם שהוזן או למי שמחזיק את המכשיר. אותו אורח שמצטרף גם מהטלפון שלו וגם מהטאבלט של בן/בת הזוג — הוא שני אורחים מנקודת המבט של השרת.
מה בדיוק קורה בשרת כשסורקים את הקוד פעמיים ממכשירים שונים?
מסלול ההצטרפות (`/api/e/[code]/join`) עושה דבר אחד בכל קריאה: בודק שהמסלול החינמי לא עבר את התקרה (`countEventGuests(event.id) >= FREE_GUEST_LIMIT`), ואם לא — יוצר שורת אורח חדשה (`createGuest`) עם `id` ו-`secret` אקראיים. אין בדיקה אם כבר קיימת שורה עם אותו שם, אותו `client` (סוג דפדפן) או אותו IP. שם שמוזן בטופס עובר רק ניקוי טקסט בסיסי (`cleanLine`) — לא השוואה למי שכבר הצטרף. כל קריאה שמגיעה בלי session תקף פשוט מקבלת guestId חדש.
אז איך המערכת בכלל 'זוכרת' אורח שחוזר, אם לא לפי שם או מכשיר?
ב-`localStorage` של הדפדפן, לא בשרת. אחרי הצטרפות מוצלחת, האפליקציה שומרת את ה-guestId וה-secret במפתח `regaroll:<קוד האירוע>`, ובכל פתיחה חוזרת של אותו דפדפן היא קוראת את זה ומדלגת על קריאה חדשה ל-`/join`. זו ההגנה היחידה מפני כפילות — וזה גם בדיוק המקום שבו היא נשברת: `localStorage` שייך לצמד דפדפן+מכשיר ספציפי. שום מפתח לא עובר בין הטלפון לטאבלט, גם אם שניהם ביד של אותו אדם ממש.
| מצב | סורק מחדש את הקוד? | נוצר guestId חדש? |
|---|---|---|
| רענון הדף/חזרה לטאב באותו דפדפן | לא נדרש | לא — ה-session נטען מ-localStorage |
| אותו דפדפן, כמה ימים אחרי, לפני המחיקה | לא נדרש | לא — אותו session עדיין שם |
| דפדפן שני באותו טלפון (למשל Safari אחרי Chrome) | כן | כן — localStorage לא משותף בין דפדפנים |
| טאב גלישה פרטית/incognito | כן | כן — אין שמירה בין חלון פרטי לרגיל |
| מכשיר שני (טלפון ועוד טאבלט/טלפון של בן־זוג) | כן | כן — guestId נפרד לכל מכשיר |
זה משפיע רק על מספר האורחים, או גם על הרילסים?
גם על הרילסים. ברכה בטבלת `greetings` נשמרת לפי `guest_id` — אחת לכל guestId, לא אחת לכל שם. אם אותו אדם מקליט ברכה גם מה-guestId של הטלפון וגם מזה של הטאבלט, נוצרים שני רילסים נפרדים: שני סלפי, שתי הקלטות קול, שתי עריכות אקראיות משלוש האפשרויות ושישה הצבעים. לקיר הברכות אין דרך לדעת ששתי הברכות מגיעות מאותו אדם — מבחינתו אלו שני אורחים שונים, בדיוק כמו שהם נספרים כך בתקרה.
- ב-10 האורחים של המסלול החינמי, שני guestId לאותו אדם הם שני מקומות שנתפסו — לא אחד
- אין מסך "כבר הצטרפת?" שמזהיר לפני יצירת guestId שני — המערכת פשוט לא יודעת לשאול
- אותו אדם שמברך משני המכשירים מקבל שני רילסים שונים, לא גרסה כפולה של אותו רילס
- המחיקה (7 ימים חינמי, 30 בתשלום) נספרת בנפרד לכל guestId, לפי מועד החשיפה של האירוע — זהה לשניהם בפועל
השרת לא טועה מי האדם — הוא פשוט לא נשאל את השאלה הזו בכלל.
זה משנה את ההמלצה למי שמתכנן אירוע קטן בתקרת ה-10?
RegaRoll היא מצלמה חד־פעמית דיגיטלית לאירועים — ₪299 לאירוע, בלי אפליקציה — וההבדל היחיד בין המסלול החינמי לתשלום הוא מספר האורחים (10 מול ללא הגבלה) ומשך השמירה (7 ימים מול 30), לא אילו פיצ'רים כלולים. מי שמתכנן אירוע קטן וקרוב לתקרה כדאי שיזכור: המספר הקובע הוא כמה פעמים מישהו *סורק*, לא כמה אנשים באמת נמצאים באולם. פירטנו מה קורה לאורח שמגיע אחרי שהתקרה נסגרת במגיעים לתקרת 10 האורחים באמצע האירוע, ואת המקרה הצמוד של שתי בקשות שמגיעות בול באותו רגע בשני אורחים מצטרפים בדיוק באותו רגע. על המנגנון שהופך כל guestId לרילס קולנועי משלו כתבנו בקיר הברכות הדיגיטלי לחתונה.