Sitemap
Md Abdullah

Md Abdullah

Full-Stack Developer (React, Next.js, Node) and Shopify Specialist. I build stores and web apps for brands and agencies.

Mastering the Telegram Mini App (TMA) UX: 3 Critical Challenges Every Developer Faces

3 min readFeb 1, 2026

--

How to make your React app feel “Native” inside the Telegram ecosystem.

Press enter or click to view image in full size

Introduction

We are witnessing a gold rush in the Telegram Mini App (TMA) ecosystem. Developers are rushing to port their React websites into bots.
But there is a problem.
Most of them feel like websites. They lag, they scroll weirdly, and the navigation breaks.

The difference between a “Bot” and a “Mini App” is the User Experience (UX).

I recently built SwiftCart, a high-fidelity e-commerce engine on TON. During development, I encountered three specific constraints of the Telegram WebView environment. Here is how I solved them.

Challenge 1: The “Drag-to-Close” Conflict

Telegram has a native gesture: if you swipe down on the header, the Mini App closes.
This is a nightmare for apps with vertical scrolling. If a user tries to scroll up your product list, they might accidentally kill the app.

The Solution: Overscroll Locking
You cannot just rely on CSS overflow: hidden. You need to intercept the touch events.

I implemented a custom hook, useTelegramScroll, that detects if the user is at the top of the page (scrollTop === 0).

  • If at Top: I disable the default touchmove event.
  • If Scrolled Down: I re-enable it.

This forces the app to feel “grounded,” mimicking the behavior of a native iOS TableView.

Challenge 2: Syncing the Native Back Button

Telegram provides a native “Back Button” in the top-left corner of the header. However, by default, this button does nothing or closes the app.
It does not know about your React Router history.

Get Md Abdullah’s stories in your inbox

Join Medium for free to get updates from this writer.

The Solution: The Router Bridge
I created a synchronization layer between Next/Navigation and WebApp.BackButton.

code JavaScript

useEffect(() => {
if (path === '/') {
WebApp.BackButton.hide();
} else {
WebApp.BackButton.show();
WebApp.BackButton.onClick(() => router.back());
}
}, [path]);

This simple logic makes the Telegram UI act as the navigation controller for your React app. It feels seamless to the user.

Challenge 3: Wallet Connection Friction

In a standard dApp, connecting a wallet (like MetaMask) opens a browser extension.
In Telegram Mobile, there are no extensions. You rely on Deep Links (Universal Links) to switch between the Telegram App and the Wallet App (Tonkeeper).

The Solution: TON Connect UI Customization
Instead of building my own modal, I leveraged the @tonconnect/ui-react library but customized the manifest.
By optimizing the ton-connect-manifest.json, I ensured that when a user clicks “Connect,” it instantly triggers the deep link to the installed wallet without an awkward “Select Wallet” redirection page.

I also implemented Optimistic UI. While the user is signing the transaction in Tonkeeper, my app shows a “Processing…” animation state, rather than a loading spinner. This psychological trick makes the 3-second delay feel instant.

Conclusion

Building for Telegram is not just about writing React code. It is about understanding the Container.
When you respect the platform’s constraints and hook into its native SDKs (Haptics, CloudStorage, MainButton), you stop building “Bots” and start building Applications.

If you are a founder looking to build a high-fidelity TMA, focusing on these UX details is what will separate you from the thousands of copy-paste clicker games.

Let’s build better apps.

--

--

Md Abdullah

Written by Md Abdullah

Full-Stack Developer (React, Next.js, Node) and Shopify Specialist. I build stores and web apps for brands and agencies.