XEvents is a Telegram bot and Mini App for event creation, invitations, RSVP, tickets, check-in and shared media. I'm the maintainer, and the project is MIT licensed.
This article explains the current implementation and a few boundaries that matter when building a similar app.
See XEvents in action
These are actual app screens captured in an isolated local environment with fictional events and mocked Telegram calls. The animation is a sequence of screenshots, not a live Telegram recording. Capture details.
Two joining flows with different expectations
A shared booking link and a personal invitation look similar at first, but guests expect different things from them.
In XEvents, shared links let people book or request places, with organiser approval when configured. Named invitations offer Accept, Reject, Maybe and Respond later. They can include group counts, so a host can distinguish one invitation from the number of people attending.
Keeping these flows distinct helps the interface explain what the guest is actually doing. A booking request isn't an RSVP choice, and submitting a payment report isn't proof that a payment arrived.
One Worker serves the hosted application
The hosted app has three main pieces:
- A Cloudflare Worker receives bot webhook updates and serves the Mini App and API.
- D1 stores events, guest responses, preferences and coordination records.
- Telegram hosts uploaded files; the application stores their references.
The frontend uses HTML, CSS and JavaScript modules. Node.js 22 or newer is used for development tools and the optional standalone polling bot. Polling mode is separate: it doesn't serve the hosted Mini App or share its D1 database.
Authentication is only the first check
Private Mini App API requests require signed Telegram launch data. The server verifies that identity, then checks whether the person owns the event, is a co-host or is an eligible guest.
That second check matters. A valid Telegram identity doesn't automatically grant access to another event's locations, guest information or media. The Worker filters private responses on the server; hiding a frontend button isn't enough.
Notifications need durable coordination
Bot operations can update attendance and queue outgoing messages. The application commits the changed records and outgoing messages together, then delivers the messages afterwards. A scheduled task retries queued messages and processes eligible reminders.
This improves delivery durability, but it doesn't establish exactly-once delivery. If a network response is lost after Telegram receives a message, a retry can duplicate it. The architecture guide makes that limitation explicit.
Short-lived check-in codes
Confirmed guests can request a six-digit check-in code. It expires at the next minute, and a refresh action requests another. The app generates codes on demand, rather than continually polling or scheduling code generation.
Organisers enter a code through the check-in keypad to check in the group. QR tickets are optional and start off for new events. Server-side checks still decide whether the ticket can be used.
Media and payments have practical limits
Attendees can share photos in one event collection with no built-in photo-count limit. Telegram and hosting limits apply.
Telegram-hosted media avoids a separate application media bucket, but it isn't an independent backup or unlimited storage promise. The Mini App limits full-file retrieval to 20 MB and offers Send to Telegram for larger files.
Paid events support organiser-reviewed manual payments and Telegram Stars. Direct card processing and automatic organiser payouts aren't implemented. Hosting and provider quotas still apply.
Explore the project
Try the bot: https://t.me/XEvents_bot (Telegram required).
Source: https://github.com/ehsan0921/Telegram-event-management
Architecture: https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/architecture.md
Self-hosting: https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/self-hosting.md
The project welcomes focused contributions, including documentation and accessibility improvements. If you organise club events or meetups, I'd like to hear where the invitation or guest-management experience needs work.
Disclosure: This article was prepared with AI assistance and checked against the project's source and documentation.



Top comments (0)