Bot & Mini App
VPN subscriptions
About the project
This project combines a Telegram bot, a Mini App for customers and a Django admin panel. Customers choose a VPN plan, check their access and manage renewal settings in one account. The bot opens the service; the Mini App makes the account easier to use.
Plans specify the region, duration and number of devices. I connected the customer interface to orders, subscriptions and automatic VPN activation. The account shows the subscription's actual access period and status, not just a record of a purchase.
How it works
Choose a plan
Get VPN access
Manage your subscription
A customer selects a plan, then checks the region, device limit, expiry date and renewal setting in their account. An order can start a new subscription or renew an existing one. Orders and subscriptions are separate records, so the purchase and the access it provides are tracked correctly.
The backend creates and synchronizes VPN access. It records whether activation is pending, access is active or an error needs attention. The operator manages customers, plans and subscriptions in Django administration, using the same dates and statuses shown in the customer account.
The main challenges
The hardest part was keeping payment, subscription and VPN access in sync. A paid order may still be waiting for activation. A subscription can expire or renew while the remote VPN account has a different status. The interface needs to explain these situations accurately.
Renewals also need care: a new order can extend an existing subscription instead of creating another account. I had to handle dates, activation and synchronization errors together, so both the customer and operator could see the state of the service.
The simpler parts
Once the subscription model was clear, the plan cards and account controls were simpler to build. Region, duration, device count and renewal settings each have a defined place in the interface.
Customer and plan editing in Django administration also follows those records. The complicated work sits in activation and subscription changes; the individual fields and cards present the result.
What works well
Customers can find their plan, access period and renewal settings in one place. They don't have to piece together their subscription details from old bot messages.
Separating orders from subscriptions also helps with support. The operator can see what was purchased, which access is active and whether activation needs attention. That gives them useful context when a customer asks for help.
