{"id":"02a430b1-8006-4224-a074-62489a667ce1","shortId":"379EzW","kind":"skill","title":"Telegram Mini App","tagline":"Antigravity Awesome Skills skill by Sickn33","description":"# Telegram Mini App\n\nExpert in building Telegram Mini Apps (TWA) - web apps that run inside Telegram\nwith native-like experience. Covers the TON ecosystem, Telegram Web App API,\npayments, user authentication, and building viral mini apps that monetize.\n\n**Role**: Telegram Mini App Architect\n\nYou build apps where 800M+ Telegram users already are. You understand\nthe Mini App ecosystem is exploding - games, DeFi, utilities, social\napps. You know TON blockchain and how to monetize with crypto. You\ndesign for the Telegram UX paradigm, not traditional web.\n\n### Expertise\n\n- Telegram Web App API\n- TON blockchain\n- Mini App UX\n- TON Connect\n- Viral mechanics\n- Crypto payments\n\n## Capabilities\n\n- Telegram Web App API\n- Mini App architecture\n- TON Connect integration\n- In-app payments\n- User authentication via Telegram\n- Mini App UX patterns\n- Viral Mini App mechanics\n- TON blockchain integration\n\n## Patterns\n\n### Mini App Setup\n\nGetting started with Telegram Mini Apps\n\n**When to use**: When starting a new Mini App\n\n## Mini App Setup\n\n### Basic Structure\n```html\n<!DOCTYPE html>\n<html>\n<head>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <script src=\"https://telegram.org/js/telegram-web-app.js\"></script>\n</head>\n<body>\n  <script>\n    const tg = window.Telegram.WebApp;\n    tg.ready();\n    tg.expand();\n\n    // User data\n    const user = tg.initDataUnsafe.user;\n    console.log(user.first_name, user.id);\n  </script>\n</body>\n</html>\n```\n\n### React Setup\n```jsx\n// hooks/useTelegram.js\nexport function useTelegram() {\n  const tg = window.Telegram?.WebApp;\n\n  return {\n    tg,\n    user: tg?.initDataUnsafe?.user,\n    queryId: tg?.initDataUnsafe?.query_id,\n    expand: () => tg?.expand(),\n    close: () => tg?.close(),\n    ready: () => tg?.ready(),\n  };\n}\n\n// App.jsx\nfunction App() {\n  const { tg, user, expand, ready } = useTelegram();\n\n  useEffect(() => {\n    ready();\n    expand();\n  }, []);\n\n  return <div>Hello, {user?.first_name}</div>;\n}\n```\n\n### Bot Integration\n```javascript\n// Bot sends Mini App\nbot.command('app', (ctx) => {\n  ctx.reply('Open the app:', {\n    reply_markup: {\n      inline_keyboard: [[\n        { text: '🚀 Open App', web_app: { url: 'https://your-app.com' } }\n      ]]\n    }\n  });\n});\n```\n\n### TON Connect Integration\n\nWallet connection for TON blockchain\n\n**When to use**: When building Web3 Mini Apps\n\n## TON Connect Integration\n\n### Setup\n```bash\nnpm install @tonconnect/ui-react\n```\n\n### React Integration\n```jsx\nimport { TonConnectUIProvider, TonConnectButton } from '@tonconnect/ui-react';\n\n// Wrap app\nfunction App() {\n  return (\n    <TonConnectUIProvider manifestUrl=\"https://your-app.com/tonconnect-manifest.json\">\n      <MainApp />\n    </TonConnectUIProvider>\n  );\n}\n\n// Use in components\nfunction WalletSection() {\n  return (\n    <TonConnectButton />\n  );\n}\n```\n\n### Manifest File\n```json\n{\n  \"url\": \"https://your-app.com\",\n  \"name\": \"Your Mini App\",\n  \"iconUrl\": \"https://your-app.com/icon.png\"\n}\n```\n\n### Send TON Transaction\n```jsx\nimport { useTonConnectUI } from '@tonconnect/ui-react';\n\nfunction PaymentButton({ amount, to }) {\n  const [tonConnectUI] = useTonConnectUI();\n\n  const handlePay = async () => {\n    const transaction = {\n      validUntil: Math.floor(Date.now() / 1000) + 60,\n      messages: [{\n        address: to,\n        amount: (amount * 1e9).toString(), // TON to nanoton\n      }]\n    };\n\n    await tonConnectUI.sendTransaction(transaction);\n  };\n\n  return <button onClick={handlePay}>Pay {amount} TON</button>;\n}\n```\n\n### Mini App Monetization\n\nMaking money from Mini Apps\n\n**When to use**: When planning Mini App revenue\n\n## Mini App Monetization\n\n### Revenue Streams\n| Model | Example | Potential |\n|-------|---------|-----------|\n| TON payments | Premium features | High |\n| In-app purchases | Virtual goods | High |\n| Ads (Telegram Ads) | Display ads | Medium |\n| Referral | Share to earn | Medium |\n| NFT sales | Digital collectibles | High |\n\n### Telegram Stars (New!)\n```javascript\n// In your bot\nbot.command('premium', (ctx) => {\n  ctx.replyWithInvoice({\n    title: 'Premium Access',\n    description: 'Unlock all features',\n    payload: 'premium',\n    provider_token: '', // Empty for Stars\n    currency: 'XTR', // Telegram Stars\n    prices: [{ label: 'Premium', amount: 100 }], // 100 Stars\n  });\n});\n```\n\n### Viral Mechanics\n```jsx\n// Referral system\nfunction ReferralShare() {\n  const { tg, user } = useTelegram();\n  const referralLink = `https://t.me/your_bot?start=ref_${user.id}`;\n\n  const share = () => {\n    tg.openTelegramLink(\n      `https://t.me/share/url?url=${encodeURIComponent(referralLink)}&text=Check this out!`\n    );\n  };\n\n  return <button onClick={share}>Invite Friends (+10 coins)</button>;\n}\n```\n\n### Gamification for Retention\n- Daily rewards\n- Streak bonuses\n- Leaderboards\n- Achievement badges\n- Referral bonuses\n\n### Mini App UX Patterns\n\nUX specific to Telegram Mini Apps\n\n**When to use**: When designing Mini App interfaces\n\n## Mini App UX\n\n### Platform Conventions\n| Element | Implementation |\n|---------|----------------|\n| Main Button | tg.MainButton |\n| Back Button | tg.BackButton |\n| Theme | tg.themeParams |\n| Haptics | tg.HapticFeedback |\n\n### Main Button\n```javascript\nconst tg = window.Telegram.WebApp;\n\n// Show main button\ntg.MainButton.setText('Continue');\ntg.MainButton.show();\ntg.MainButton.onClick(() => {\n  // Handle click\n  submitForm();\n});\n\n// Loading state\ntg.MainButton.showProgress();\n// ...\ntg.MainButton.hideProgress();\n```\n\n### Theme Adaptation\n```css\n:root {\n  --tg-theme-bg-color: var(--tg-theme-bg-color, #ffffff);\n  --tg-theme-text-color: var(--tg-theme-text-color, #000000);\n  --tg-theme-button-color: var(--tg-theme-button-color, #3390ec);\n}\n\nbody {\n  background: var(--tg-theme-bg-color);\n  color: var(--tg-theme-text-color);\n}\n```\n\n### Haptic Feedback\n```javascript\n// Light feedback\ntg.HapticFeedback.impactOccurred('light');\n\n// Success\ntg.HapticFeedback.notificationOccurred('success');\n\n// Selection\ntg.HapticFeedback.selectionChanged();\n```\n\n## Sharp Edges\n\n### Not validating initData from Telegram\n\nSeverity: HIGH\n\nSituation: Backend trusts user data without verification\n\nSymptoms:\n- Trusting client data blindly\n- No server-side validation\n- Using initDataUnsafe directly\n- Security audit failures\n\nWhy this breaks:\ninitData can be spoofed.\nSecurity vulnerability.\nUsers can impersonate others.\nData tampering possible.\n\nRecommended fix:\n\n## Validating initData\n\n### Why Validate\n- initData contains user info\n- Must verify it came from Telegram\n- Prevent spoofing/tampering\n\n### Node.js Validation\n```javascript\nimport crypto from 'crypto';\n\nfunction validateInitData(initData, botToken) {\n  const params = new URLSearchParams(initData);\n  const hash = params.get('hash');\n  params.delete('hash');\n\n  // Sort and join\n  const dataCheckString = Array.from(params.entries())\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([k, v]) => `${k}=${v}`)\n    .join('\\n');\n\n  // Create secret key\n  const secretKey = crypto\n    .createHmac('sha256', 'WebAppData')\n    .update(botToken)\n    .digest();\n\n  // Calculate hash\n  const calculatedHash = crypto\n    .createHmac('sha256', secretKey)\n    .update(dataCheckString)\n    .digest('hex');\n\n  return calculatedHash === hash;\n}\n```\n\n### Using in API\n```javascript\napp.post('/api/action', (req, res) => {\n  const { initData } = req.body;\n\n  if (!validateInitData(initData, process.env.BOT_TOKEN)) {\n    return res.status(401).json({ error: 'Invalid initData' });\n  }\n\n  // Safe to use data\n  const params = new URLSearchParams(initData);\n  const user = JSON.parse(params.get('user'));\n  // ...\n});\n```\n\n### TON Connect not working on mobile\n\nSeverity: HIGH\n\nSituation: Wallet connection fails on mobile Telegram\n\nSymptoms:\n- Works on desktop, fails mobile\n- Wallet app doesn't open\n- Connection stuck\n- Users can't pay\n\nWhy this breaks:\nDeep linking issues.\nWallet app not opening.\nReturn URL problems.\nDifferent behavior iOS vs Android.\n\nRecommended fix:\n\n## TON Connect Mobile Issues\n\n### Common Problems\n1. Wallet doesn't open\n2. Return to Mini App fails\n3. Transaction confirmation lost\n\n### Fixes\n```jsx\n// Use correct manifest\nconst manifestUrl = 'https://your-domain.com/tonconnect-manifest.json';\n\n// Ensure HTTPS\n// Localhost won't work on mobile\n\n// Handle connection states\nconst [tonConnectUI] = useTonConnectUI();\n\nuseEffect(() => {\n  return tonConnectUI.onStatusChange((wallet) => {\n    if (wallet) {\n      console.log('Connected:', wallet.account.address);\n    }\n  });\n}, []);\n```\n\n### Testing\n- Test on real devices\n- Test with multiple wallets (Tonkeeper, OpenMask)\n- Test both iOS and Android\n- Use ngrok for local dev + mobile test\n\n### Fallback\n```jsx\n// Show QR for desktop\n// Show wallet list for mobile\n<TonConnectButton />\n// Automatically handles this\n```\n\n### Mini App feels slow and janky\n\nSeverity: MEDIUM\n\nSituation: App lags, slow transitions, poor UX\n\nSymptoms:\n- Slow initial load\n- Laggy interactions\n- Users complaining about speed\n- High bounce rate\n\nWhy this breaks:\nToo much JavaScript.\nNo code splitting.\nLarge bundle size.\nNo loading optimization.\n\nRecommended fix:\n\n## Mini App Performance\n\n### Bundle Size\n- Target < 200KB gzipped\n- Use code splitting\n- Lazy load routes\n- Tree shake dependencies\n\n### Quick Wins\n```jsx\n// Lazy load heavy components\nconst HeavyChart = lazy(() => import('./HeavyChart'));\n\n// Optimize images\n<img loading=\"lazy\" src=\"...\" />\n\n// Use CSS instead of JS animations\n```\n\n### Loading Strategy\n```jsx\nfunction App() {\n  const [ready, setReady] = useState(false);\n\n  useEffect(() => {\n    // Show skeleton immediately\n    // Load data in background\n    Promise.all([\n      loadUserData(),\n      loadAppConfig(),\n    ]).then(() => setReady(true));\n  }, []);\n\n  if (!ready) return <Skeleton />;\n  return <MainApp />;\n}\n```\n\n### Vite Optimization\n```javascript\n// vite.config.js\nexport default {\n  build: {\n    rollupOptions: {\n      output: {\n        manualChunks: {\n          vendor: ['react', 'react-dom'],\n        }\n      }\n    }\n  }\n};\n```\n\n### Custom buttons instead of MainButton\n\nSeverity: MEDIUM\n\nSituation: App has custom submit buttons that feel non-native\n\nSymptoms:\n- Custom submit buttons\n- MainButton never used\n- Inconsistent UX\n- Users confused about actions\n\nWhy this breaks:\nMainButton is expected UX.\nCustom buttons feel foreign.\nInconsistent with Telegram.\nUsers don't know what to tap.\n\nRecommended fix:\n\n## Using MainButton Properly\n\n### When to Use MainButton\n- Form submission\n- Primary actions\n- Continue/Next flows\n- Checkout/Payment\n\n### Implementation\n```javascript\nconst tg = window.Telegram.WebApp;\n\n// Show for forms\nfunction showMainButton(text, onClick) {\n  tg.MainButton.setText(text);\n  tg.MainButton.onClick(onClick);\n  tg.MainButton.show();\n}\n\n// Hide when not needed\nfunction hideMainButton() {\n  tg.MainButton.hide();\n  tg.MainButton.offClick();\n}\n\n// Loading state\nfunction setMainButtonLoading(loading) {\n  if (loading) {\n    tg.MainButton.showProgress();\n    tg.MainButton.disable();\n  } else {\n    tg.MainButton.hideProgress();\n    tg.MainButton.enable();\n  }\n}\n```\n\n### React Hook\n```jsx\nfunction useMainButton(text, onClick, visible = true) {\n  const tg = window.Telegram?.WebApp;\n\n  useEffect(() => {\n    if (!tg) return;\n\n    if (visible) {\n      tg.MainButton.setText(text);\n      tg.MainButton.onClick(onClick);\n      tg.MainButton.show();\n    } else {\n      tg.MainButton.hide();\n    }\n\n    return () => {\n      tg.MainButton.offClick(onClick);\n    };\n  }, [text, onClick, visible]);\n}\n```\n\n## Validation Checks\n\n### No initData Validation\n\nSeverity: HIGH\n\nMessage: Not validating initData - security vulnerability.\n\nFix action: Implement server-side initData validation with hash verification\n\n### Missing Telegram Web App Script\n\nSeverity: HIGH\n\nMessage: Telegram Web App script not included.\n\nFix action: Add <script src='https://telegram.org/js/telegram-web-app.js'></script>\n\n### Not Calling tg.ready()\n\nSeverity: MEDIUM\n\nMessage: Not calling tg.ready() - Telegram may show loading state.\n\nFix action: Call window.Telegram.WebApp.ready() when app is ready\n\n### Not Using Telegram Theme\n\nSeverity: MEDIUM\n\nMessage: Not adapting to Telegram theme colors.\n\nFix action: Use CSS variables from tg.themeParams for colors\n\n### Missing Viewport Meta Tag\n\nSeverity: MEDIUM\n\nMessage: Missing viewport meta tag for mobile.\n\nFix action: Add <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n\n## Collaboration\n\n### Delegation Triggers\n\n- bot|command|handler -> telegram-bot-builder (Bot integration)\n- TON|smart contract|blockchain -> blockchain-defi (TON blockchain features)\n- react|vue|frontend -> frontend (Frontend framework)\n- viral|referral|share -> viral-generator-builder (Viral mechanics)\n- game|gamification -> gamification-loops (Game mechanics)\n\n### Tap-to-Earn Game\n\nSkills: telegram-mini-app, gamification-loops, telegram-bot-builder\n\nWorkflow:\n\n```\n1. Design game mechanics\n2. Build Mini App with tap mechanics\n3. Add referral/viral features\n4. Integrate TON payments\n5. Bot for notifications/onboarding\n6. Launch and grow\n```\n\n### DeFi Mini App\n\nSkills: telegram-mini-app, blockchain-defi, frontend\n\nWorkflow:\n\n```\n1. Design DeFi feature (swap, stake, etc.)\n2. Integrate TON Connect\n3. Build transaction UI\n4. Add wallet management\n5. Implement security measures\n6. Deploy and audit\n```\n\n## Related Skills\n\nWorks well with: `telegram-bot-builder`, `frontend`, `blockchain-defi`, `viral-generator-builder`\n\n## When to Use\n- User mentions or implies: telegram mini app\n- User mentions or implies: TWA\n- User mentions or implies: telegram web app\n- User mentions or implies: TON app\n- User mentions or implies: mini app\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["telegram","mini","app","antigravity","awesome","skills","sickn33"],"capabilities":["skill","source-sickn33","category-antigravity-awesome-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/telegram-mini-app","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under sickn33/antigravity-awesome-skills","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T09:40:44.622Z","embedding":null,"createdAt":"2026-04-18T20:36:26.691Z","updatedAt":"2026-04-25T09:40:44.622Z","lastSeenAt":"2026-04-25T09:40:44.622Z","tsv":"'+10':464 '/api/action':739 '/heavychart':987 '/icon.png':295 '/share/url?url=$':451 '/tonconnect-manifest.json'';':853 '/your_bot?start=ref_$':444 '000000':560 '1':829,1339,1379 '100':426,427 '1000':319 '1e9':326 '2':834,1343,1386 '200kb':965 '3':840,1350,1390 '3390ec':572 '4':1354,1394 '401':752 '5':1358,1398 '6':1362,1402 '60':320 '800m':58 'a.localecompare':698 'access':406 'achiev':474 'action':1069,1103,1190,1215,1232,1253,1275 'ad':377,379,381 'adapt':534,1247 'add':1216,1276,1351,1395 'address':322 'alreadi':61 'amount':306,324,325,339,425 'android':820,892 'anim':995 'antigrav':4 'api':38,100,116,736 'app':3,12,18,21,37,46,52,56,67,75,99,104,115,118,125,132,137,144,151,160,162,200,221,223,228,235,237,255,273,275,291,342,348,355,358,372,479,487,494,497,793,810,838,915,923,960,1000,1047,1203,1210,1236,1330,1346,1368,1373,1432,1444,1450,1456 'app.jsx':198 'app.post':738 'architect':53 'architectur':119 'array.from':693 'ask':1490 'async':313 'audit':630,1405 'authent':41,128 'automat':911 'await':331 'awesom':5 'b':697,699 'back':506 'backend':610 'background':574,1013 'badg':475 'bash':260 'basic':164 'behavior':817 'bg':540,546,579 'blind':620 'blockchain':79,102,140,247,1292,1294,1297,1375,1417 'blockchain-defi':1293,1374,1416 'bodi':573 'bonus':472,477 'bot':215,218,399,1280,1285,1287,1336,1359,1413 'bot.command':222,400 'bottoken':676,717 'bounc':940 'boundari':1498 'break':634,805,944,1072 'build':15,43,55,252,1030,1344,1391 'builder':1286,1311,1337,1414,1422 'bundl':952,962 'button':335,459,504,507,514,521,564,570,1040,1051,1060,1078 'calcul':719 'calculatedhash':722,732 'call':1218,1224,1233 'came':661 'capabl':112 'category-antigravity-awesome-skills' 'check':455,1177 'checkout/payment':1106 'clarif':1492 'clear':1465 'click':527 'client':618 'close':192,194 'code':949,968 'coin':465 'collabor':1277 'collect':391 'color':541,547,553,559,565,571,580,581,587,1251,1260 'command':1281 'common':827 'complain':936 'compon':279,982 'confirm':842 'confus':1067 'connect':107,121,241,244,257,772,781,797,824,863,875,1389 'console.log':874 'const':174,201,308,311,314,436,440,446,516,677,682,691,710,721,742,761,766,849,865,983,1001,1109,1153 'contain':655 'continu':523 'continue/next':1104 'contract':1291 'convent':500 'correct':847 'cover':31 'creat':707 'createhmac':713,724 'criteria':1501 'crypto':85,110,670,672,712,723 'css':535,991,1255 'ctx':224,402 'ctx.reply':225 'ctx.replywithinvoice':403 'currenc':418 'custom':1039,1049,1058,1077 'daili':469 'data':613,619,645,760,1011 'datacheckstr':692,728 'date.now':318 'deep':806 'default':1029 'defi':72,1295,1366,1376,1381,1418 'deleg':1278 'depend':975 'deploy':1403 'describ':1469 'descript':407 'design':87,492,1340,1380 'desktop':789,905 'dev':897 'devic':881 'differ':816 'digest':718,729 'digit':390 'direct':628 'display':380 'doesn':794,831 'dom':1038 'earn':386,1324 'ecosystem':34,68 'edg':601 'element':501 'els':1141,1168 'empti':415 'encodeuricompon':452 'ensur':854 'environ':1481 'environment-specif':1480 'error':754 'etc':1385 'exampl':363 'expand':189,191,204,209 'expect':1075 'experi':30 'expert':13,1486 'expertis':96 'explod':70 'export':171,1028 'fail':782,790,839 'failur':631 'fallback':900 'fals':1005 'featur':368,410,1298,1353,1382 'feedback':589,592 'feel':916,1053,1079 'ffffff':548 'file':284 'first':213 'fix':649,822,844,958,1092,1189,1214,1231,1252,1274 'flow':1105 'foreign':1080 'form':1100,1114 'framework':1304 'friend':463 'frontend':1301,1302,1303,1377,1415 'function':172,199,274,280,304,434,673,999,1115,1128,1134,1147 'game':71,1314,1319,1325,1341 'gamif':466,1315,1317,1332 'gamification-loop':1316,1331 'generat':1310,1421 'get':146 'good':375 'grow':1365 'gzip':966 'handl':526,862,912 'handlepay':312,337 'handler':1282 'haptic':511,588 'hash':683,685,687,720,733,1198 'heavi':981 'heavychart':984 'hello':211 'hex':730 'hide':1124 'hidemainbutton':1129 'high':369,376,392,608,778,939,1182,1206 'hook':1145 'hooks/usetelegram.js':170 'html':166 'https':855 'iconurl':292 'id':188 'imag':989 'immedi':1009 'imperson':643 'implement':502,1107,1191,1399 'impli':1429,1436,1441,1448,1454 'import':267,300,669,986 'in-app':123,370 'includ':1213 'inconsist':1064,1081 'info':657 'initdata':604,635,651,654,675,681,743,747,756,765,1179,1186,1195 'initdataunsaf':182,186,627 'initi':931 'inlin':231 'input':1495 'insid':24 'instal':262 'instead':992,1041 'integr':122,141,216,242,258,265,1288,1355,1387 'interact':934 'interfac':495 'invalid':755 'invit':462 'io':818,890 'issu':808,826 'janki':919 'javascript':217,396,515,590,668,737,947,1026,1108 'join':690,705 'js':994 'json':285,753 'json.parse':768 'jsx':169,266,299,431,845,901,978,998,1146 'k':701,703 'key':709 'keyboard':232 'know':77,1087 'label':423 'lag':924 'laggi':933 'larg':951 'launch':1363 'lazi':970,979,985 'leaderboard':473 'light':591,594 'like':29 'limit':1457 'link':807 'list':908 'load':529,932,955,971,980,996,1010,1132,1136,1138,1229 'loadappconfig':1016 'loaduserdata':1015 'local':896 'localhost':856 'loop':1318,1333 'lost':843 'main':503,513,520 'mainbutton':1043,1061,1073,1094,1099 'make':344 'manag':1397 'manifest':283,848 'manifesturl':850 'manualchunk':1033 'map':700 'markup':230 'match':1466 'math.floor':317 'may':1227 'measur':1401 'mechan':109,138,430,1313,1320,1342,1349 'medium':382,387,921,1045,1221,1244,1266 'mention':1427,1434,1439,1446,1452 'messag':321,1183,1207,1222,1245,1267 'meta':1263,1270 'mini':2,11,17,45,51,66,103,117,131,136,143,150,159,161,220,254,290,341,347,354,357,478,486,493,496,837,914,959,1329,1345,1367,1372,1431,1455 'miss':1200,1261,1268,1503 'mobil':776,784,791,825,861,898,910,1273 'model':362 'monet':48,83,343,359 'money':345 'much':946 'multipl':884 'must':658 'n':706 'name':214,288 'nanoton':330 'nativ':28,1056 'native-lik':27 'need':1127 'never':1062 'new':158,395,679,763 'nft':388 'ngrok':894 'node.js':666 'non':1055 'non-nat':1054 'notifications/onboarding':1361 'npm':261 'onclick':336,460,1118,1122,1150,1166,1172,1174 'open':226,234,796,812,833 'openmask':887 'optim':956,988,1025 'other':644 'output':1032,1475 'paradigm':92 'param':678,762 'params.delete':686 'params.entries':694 'params.get':684,769 'pattern':134,142,481 'pay':338,802 'payload':411 'payment':39,111,126,366,1357 'paymentbutton':305 'perform':961 'permiss':1496 'plan':353 'platform':499 'poor':927 'possibl':647 'potenti':364 'premium':367,401,405,412,424 'prevent':664 'price':422 'primari':1102 'problem':815,828 'process.env.bot':748 'promise.all':1014 'proper':1095 'provid':413 'purchas':373 'qr':903 'queri':187 'queryid':184 'quick':976 'rate':941 'react':167,264,1035,1037,1144,1299 'react-dom':1036 'readi':195,197,205,208,1002,1021,1238 'real':880 'recommend':648,821,957,1091 'referr':383,432,476,1306 'referral/viral':1352 'referrallink':441,453 'referralshar':435 'relat':1406 'repli':229 'req':740 'req.body':744 'requir':1494 'res':741 'res.status':751 'retent':468 'return':178,210,276,282,334,458,731,750,813,835,869,1022,1023,1160,1170 'revenu':356,360 'review':1487 'reward':470 'role':49 'rollupopt':1031 'root':536 'rout':972 'run':23 'safe':757 'safeti':1497 'sale':389 'scope':1468 'script':1204,1211 'secret':708 'secretkey':711,726 'secur':629,639,1187,1400 'select':598 'send':219,296 'server':623,1193 'server-sid':622,1192 'setmainbuttonload':1135 'setreadi':1003,1018 'setup':145,163,168,259 'sever':607,777,920,1044,1181,1205,1220,1243,1265 'sha256':714,725 'shake':974 'share':384,447,461,1307 'sharp':600 'show':519,902,906,1007,1112,1228 'showmainbutton':1116 'sickn33':9 'side':624,1194 'situat':609,779,922,1046 'size':953,963 'skeleton':1008 'skill':6,7,1326,1369,1407,1460 'slow':917,925,930 'smart':1290 'social':74 'sort':688,695 'source-sickn33' 'specif':483,1482 'speed':938 'split':950,969 'spoof':638 'spoofing/tampering':665 'stake':1384 'star':394,417,421,428 'start':147,156 'state':530,864,1133,1230 'stop':1488 'strategi':997 'streak':471 'stream':361 'structur':165 'stuck':798 'submiss':1101 'submit':1050,1059 'submitform':528 'substitut':1478 'success':595,597,1500 'swap':1383 'symptom':616,786,929,1057 'system':433 't.me':443,450 't.me/share/url?url=$':449 't.me/your_bot?start=ref_$':442 'tag':1264,1271 'tamper':646 'tap':1090,1322,1348 'tap-to-earn':1321 'target':964 'task':1464 'telegram':1,10,16,25,35,50,59,90,97,113,130,149,378,393,420,485,606,663,785,1083,1201,1208,1226,1241,1249,1284,1328,1335,1371,1412,1430,1442 'telegram-bot-build':1283,1334,1411 'telegram-mini-app':1327,1370 'test':877,878,882,888,899,1484 'text':233,454,552,558,586,1117,1120,1149,1164,1173 'tg':175,179,181,185,190,193,196,202,437,517,538,544,550,556,562,568,577,584,1110,1154,1159 'tg-theme-bg-color':537,543,576 'tg-theme-button-color':561,567 'tg-theme-text-color':549,555,583 'tg.backbutton':508 'tg.hapticfeedback':512 'tg.hapticfeedback.impactoccurred':593 'tg.hapticfeedback.notificationoccurred':596 'tg.hapticfeedback.selectionchanged':599 'tg.mainbutton':505 'tg.mainbutton.disable':1140 'tg.mainbutton.enable':1143 'tg.mainbutton.hide':1130,1169 'tg.mainbutton.hideprogress':532,1142 'tg.mainbutton.offclick':1131,1171 'tg.mainbutton.onclick':525,1121,1165 'tg.mainbutton.settext':522,1119,1163 'tg.mainbutton.show':524,1123,1167 'tg.mainbutton.showprogress':531,1139 'tg.opentelegramlink':448 'tg.ready':1219,1225 'tg.themeparams':510,1258 'theme':509,533,539,545,551,557,563,569,578,585,1242,1250 'titl':404 'token':414,749 'ton':33,78,101,106,120,139,240,246,256,297,328,340,365,771,823,1289,1296,1356,1388,1449 'tonconnect/ui-react':263,271,303 'tonconnectbutton':269 'tonconnectui':309,866 'tonconnectui.onstatuschange':870 'tonconnectui.sendtransaction':332 'tonconnectuiprovid':268 'tonkeep':886 'tostr':327 'tradit':94 'transact':298,315,333,841,1392 'transit':926 'treat':1473 'tree':973 'trigger':1279 'true':1019,1152 'trust':611,617 'twa':19,1437 'ui':1393 'understand':64 'unlock':408 'updat':716,727 'url':238,286,814 'urlsearchparam':680,764 'use':154,250,277,351,490,626,734,759,846,893,967,990,1063,1093,1098,1240,1254,1425,1458 'useeffect':207,868,1006,1157 'usemainbutton':1148 'user':40,60,127,180,183,203,212,438,612,641,656,767,770,799,935,1066,1084,1426,1433,1438,1445,1451 'user.id':445 'usest':1004 'usetelegram':173,206,439 'usetonconnectui':301,310,867 'util':73 'ux':91,105,133,480,482,498,928,1065,1076 'v':702,704 'valid':603,625,650,653,667,1176,1180,1185,1196,1483 'validateinitdata':674,746 'validuntil':316 'var':542,554,566,575,582 'variabl':1256 'vendor':1034 'verif':615,1199 'verifi':659 'via':129 'viewport':1262,1269 'viral':44,108,135,429,1305,1309,1312,1420 'viral-generator-build':1308,1419 'virtual':374 'visibl':1151,1162,1175 'vite':1024 'vite.config.js':1027 'vs':819 'vue':1300 'vulner':640,1188 'wallet':243,780,792,809,830,871,873,885,907,1396 'wallet.account.address':876 'walletsect':281 'web':20,36,95,98,114,236,1202,1209,1443 'web3':253 'webapp':177,1156 'webappdata':715 'well':1409 'win':977 'window.telegram':176,1155 'window.telegram.webapp':518,1111 'window.telegram.webapp.ready':1234 'without':614 'won':857 'work':774,787,859,1408 'workflow':1338,1378 'wrap':272 'xtr':419 'your-app.com':239,287,294 'your-app.com/icon.png':293 'your-domain.com':852 'your-domain.com/tonconnect-manifest.json'';':851","prices":[{"id":"6d275724-9b89-4c87-8969-3bd2d1a0634b","listingId":"02a430b1-8006-4224-a074-62489a667ce1","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:36:26.691Z"}],"sources":[{"listingId":"02a430b1-8006-4224-a074-62489a667ce1","source":"github","sourceId":"sickn33/antigravity-awesome-skills/telegram-mini-app","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/telegram-mini-app","isPrimary":false,"firstSeenAt":"2026-04-18T21:46:02.162Z","lastSeenAt":"2026-04-25T06:52:08.067Z"},{"listingId":"02a430b1-8006-4224-a074-62489a667ce1","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/telegram-mini-app","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/telegram-mini-app","isPrimary":true,"firstSeenAt":"2026-04-18T20:36:26.691Z","lastSeenAt":"2026-04-25T09:40:44.622Z"}],"details":{"listingId":"02a430b1-8006-4224-a074-62489a667ce1","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"telegram-mini-app","source":"skills_sh","category":"antigravity-awesome-skills","skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/telegram-mini-app"},"updatedAt":"2026-04-25T09:40:44.622Z"}}