How M-Social made a delicious landing page for the Hermès bag raffle

Conditions
So, we were faced with the task:
- 10,000 unique invite codes.
- 4 prize types with different distribution algorithms: 5% promo code, 10% promo code, 200 "Кофемания" (Kofemania) points, main prize — an invitation to the Hermès Birkin bag draw.
- Tight timeframes for the campaign.
- A convenient report format for the client's analytics with information on the campaign results.
The participant had to:
- Buy a limited-edition OSKELLY dessert at any restaurant of the "Кофемания" (Kofemania) chain.
- Receive an envelope with a code.
- Register on the website.
- Confirm their phone number.
- Receive a prize.
— "Okay, sounds simple," you thought.
And here's the cherry on top: the prize distribution mechanism — a game of speed. The main prize, the invitation to the draw for that very Hermès, was awarded not just to a random participant, but to the first one to register a code. We can't disclose all the details, but there was a provision for variably distributing unclaimed prize funds.
Solution Architecture
We used the following technology stack:
- PHP;
- Laravel;
- Backpack;
- PostgreSQL;
- React + Next.js.
How We Made Sure Nothing Broke
The participant must enter:
- First and last name (Cyrillic only, no extra symbols).
- Email (Latin letters, numbers, no emojis).
- Phone number (mask "+7 (_) _--", digits only).
- Code from the envelope (unique, otherwise — chaos).
And also three checkboxes:
- Consent to data processing.
- Consent to advertising.
- Agreement with the rules.
After submitting the form, a code was sent to the participant. But if the SMS didn't arrive:
- They could wait 60 seconds and request it again.
- Or send the code via WhatsApp (because SMS sometimes gets lost, like socks in the laundry).
But! Only 3 attempts. After that — "Sorry, you've exhausted your limit. Maybe next time."
Admin Panel — Where We Control Everything
We created a panel where you can:
- View the list of participants (who won what, when).
- Filter by prizes (e.g., find all the lucky ones with Hermès).
- Export data to PDF, CSV (or print and hang on the wall as a trophy).
Conclusion
In the end, we created a website that:
- Works like clockwork (even when thousands of people enter codes at the same time).
- Sends SMS and WhatsApp (if SMS decides not to arrive).
- Distributes prizes without errors (otherwise someone might miss out on Hermès, and that's a tragedy).
P.S. When Things Didn't Go According to Plan (In a Good Way)
The campaign was so popular that the client increased the number of prizes — for us, this is the best indicator of success.
In total, the following were distributed:
- 11,850 5% promo codes;
- 9,022 10% promo codes;
- 13,052 prizes of 200 "Кофемания" (Kofemania) points;
- 76 invitations to the main prize draw.