← Назад до блогу
·7 хв читання·

Приклад: один код як Telegram Mini App і як PWA

Хтось із клієнтів живе в Telegram. Хтось бота ніколи не відкриє. Подвійний вхід як у Subeasy: UI спочатку локальний, initData на одному шляху, звичайна сесія на іншому, Stars коли ви всередині месенджера. Як я б це зібрала без розведення продукту.

Telegram Mini AppsPWANext.jsПрикладАрхітектура

Mini App, яка відкривається лише в Telegram, - продукт з одними дверима. Це правильно для салону, чиї клієнти вже пишуть у бот. Це неправильно для трекера, кабінету курсу чи маленького SaaS, чий наступний користувач прийде з біо Instagram. Subeasy - трекер підписок, який є і PWA, і Mini App - модель, яку я б взяла для другого випадку.

Робота в цьому прикладі - особистий список підписок: Netflix, зал, Adobe, домен, про який забули. Цікаве не список. Цікаве те, що ті самі екрани працюють у панелі Telegram і на іконці домашнього екрана, без двох застосунків.

1. Двоє дверей, один продукт

Детект хоста. Не детект маркетингової історії.

  • Усередині Telegram: є `initData`. HMAC на сервері, сесія = Telegram user id. Тема з `themeParams`. MainButton для «додати» і «апгрейд». Бот може нагадати «Adobe спише через 3 дні».
  • У браузері / встановленому PWA: немає `initData`. Magic link або passkey. Той самий UI списку. Нижня CSS-кнопка замість MainButton. Нотифікації через Web Push, де працює; усередині апа дзвіночок на iOS.
  • У будь-якому разі local-first. IndexedDB або маленький локальний стор тримає список. Синк у Postgres, коли є сесія. Сенс Subeasy: перші п’ять підписок додають до екрана логіну.

2. Що лишається спільним, що треба розвести

Якщо розвести екрани, Mini App відставатиме від PWA на три тижні. Розводьте адаптери. Сторінки лишайте спільними.

  • Спільно: доменна модель, UI списку, чарти, експорт, тексти цін. Один Next.js. Об’єкт `runtime`: `platform: "telegram" | "web"`.
  • Розвести: адаптер автентифікації, хром (MainButton vs CSS), haptic, CloudStorage vs localStorage, оплата. У Telegram можна відкрити Stars. У вебі - Stripe або Mono. Той самий рядок доступу в Postgres.
  • Зв’язуйте акаунти пізніше, не на першому кадрі. Якщо людина почала в PWA, а потім відкрила Telegram - один раз запропонуйте «прив’язати цей Telegram». Не змушуйте імейл у Mini App на першій хвилині.

3. Монетизація без двох різних чекаутів

Преміум - прапорець на користувачі, не SKU на платформу. Стіна та сама: теми, експорт, сімейні місця, AI «ви платите втричі більше медіани за стрімінг». Як заходять гроші - залежить від дверей.

  • Двері Telegram: Stars за місяць преміуму. Без обрізки Apple понад те, що вже бере Telegram. Добре для еквівалента 4-12 €. Бот може надіслати квитанцію.
  • Двері вебу: підписка Stripe або Mono. Той самий вебхук пише `premium_until`. Не вигадуйте другу назву плану.
  • Безкоштовний рівень лишається корисним. Subeasy навмисно не лімітить трекер. Якщо безкоштовна Mini App - демо, PWA теж ніхто не встановить.

4. Коли я б не возилась із PWA

Якщо 90% роботи відбувається в групі, яка вже є, другі двері - марнославство. Приклад поділу витрат PWA не потребує. Меню доставки для постійних, які замовляють лише в Telegram, теж.

  • Подвійні двері - коли незнайомці приходять з URL: Instagram, сайт, імейл. Mini App - для когорти, яка вже з вами переписується.
  • Не загортайте десктопну адмінку в PWA «бо можемо». Панель усе ще phone-first. Адмінка лишається звичайним сайтом.

Ті самі екрани, два хости, один леджер

Я б почала з цієї моделі для трекера, кабінету курсу, маленької CRM для фрилансерів чи будь-якого інструмента, який має вижити і в «я живу в Telegram», і в «бота не ставлю». Next.js, перемикач `runtime`, список local-first, Postgres коли увійшли, Stars усередині Telegram і нудний картковий чекаут у вебі. Якщо потрібні ці двері замість двох кодбаз - напишіть через форму. Спочатку віддамо в прод шлях Telegram, якщо гроші вже там, потім повісимо PWA на ті самі роути.

Треба зібрати, а не лише прочитати?

Розробка Telegram Mini App: Next.js, платежі, боти. Прямий підряд.

Розробка Telegram Mini App

Готові обговорити проєкт?

Я senior веброзробниця, спеціалізуюсь на React і Next.js - відкрита до фриланс-проєктів по всьому світу.