Event Blast

One invite.
Every group.
Who’s coming?

Blast the same event message across hundreds of Viber groups and your email list, then cross-check confirmations so you know who’s actually joining.

The problem

You have ~600 Viber groups. Viber won’t let an app post into them.

Official bots can only message people one-to-one after they subscribe. Automating a personal account is against Viber’s Acceptable Use Policy and gets numbers banned. So Event Blast makes the safe path — posting yourself — as fast as a blast.

~600Viber groups to reach with the same invite
2channels: assisted Viber + email via Resend
1cross-checked confirmation list, per group

Interactive demo

The whole workflow in four steps

Click each step — or use the buttons inside the mock UI — to see how a real event runs from Google Sheet to confirmed guest list.

Contacts & groups

Import from Google Sheets

Share as “Anyone with the link can view”. Columns: Name · Email · Phone · Group.

https://docs.google.com/spreadsheets/d/…/edit#gid=0
GroupMembersEmails
Import to see your Viber groups appear here
Your sheet is the source of truth. The Group column becomes the Viber checklist. Re-import anytime — people update instead of duplicating.
New event

Write the invite once

Same message for every Viber group and every email.

Summer Picnic
Sat, Jun 14 · 12:00
Central Park, Main Lawn
Hi {name}! You're invited to {event_title} When: {event_date} Where: {location} Please confirm here: {rsvp_link}
{`{rsvp_link}`} required
Placeholders fill in per person (email) or per group (Viber). Each group gets its own RSVP URL so confirmations are attributed to the group they came from.
1 · Viber blast

Progress

0 of 4 groups posted

0%
Next up
Choir Members
2 members on your list
  • Choir Members
  • Football Dads
  • Neighbours Block 12
  • Parents — Class 3B
Open Viber uses the viber://forward?text=… deep link — Viber opens with the text pre-filled; you just pick the group. Mark-done is automatic, progress persists.
Confirmations

Email blast

Personal RSVP link per person · Resend batches of 100

You’re invited

Summer Picnic

Sat, Jun 14 · Central Park

Tap a response to simulate Ana’s RSVP

0
Confirmed
0
Maybe
0
Declined
0
Headcount
NameGroupStatusVia
Ana PetrovaParents — Class 3BNo response
Boris IvanovParents — Class 3BNo response
Carla DimitrovaChoir MembersNo response
Dimitar GeorgievChoir MembersNo response
Elena StoyanovaNeighbours Block 12No response
Cross-check: email RSVPs match via a personal token. Viber RSVPs ask for email or phone and match against your sheet (including 087… vs +359 87…). Unmatched replies get a review queue — link them or add as new contacts. Export CSV anytime.

Cross-check

Two ways people confirm. One guest list.

Whether they tap a button in an email or open the link from a Viber group, responses land on the same confirmation board — matched to your contacts.

Email → personal link

Each recipient gets a unique token URL with Yes / Maybe / No buttons. The token identifies them — no typing, no guessing.

Resend invite rsvp/<token> matched contact

Viber → public link

The group message carries a shared RSVP page. They enter name + email or Viber phone; we match against the sheet. Misses go to a review queue.

Group post /e/summer-picnic?g=2 email / phone match

Design choice

Assisted blast, not a banned bot

We chose the path that won’t torch your Viber number — and still gets through ~600 groups in a sitting.

No unofficial automation

Driving a personal Viber account with scripts violates Viber’s AUP. Bulk identical messages trip spam detection and permanent bans.

Fast enough to feel like a blast

Copy / Open Viber / auto-mark-done. Each group is a few seconds. Progress is saved so you can pause and resume.

Email still fully automatic

Where APIs exist (Resend), we use them: batch send, personal RSVP buttons, retry of failures, dry-run until you’re ready.

Try the real app

Runs locally in one command

Next.js 16 · TypeScript · SQLite · Resend. Persistent disk required when you deploy (RSVP links must be public).

# from the project folder
npm install
cp .env.example .env.local
npm run dev
# → http://localhost:3000