{"id":"02a430b1-8006-4224-a074-62489a667ce1","shortId":"379EzW","kind":"skill","title":"telegram-mini-app","tagline":"Expert in building Telegram Mini Apps (TWA) - web apps that run","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","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-telegram-mini-app","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-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":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 37911 github stars · SKILL.md body (13,997 chars)","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-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:51:52.642Z","embedding":null,"createdAt":"2026-04-18T20:36:26.691Z","updatedAt":"2026-05-18T18:51:52.642Z","lastSeenAt":"2026-05-18T18:51:52.642Z","tsv":"'+10':470 '/api/action':745 '/heavychart':993 '/icon.png':301 '/share/url?url=$':457 '/tonconnect-manifest.json'';':859 '/your_bot?start=ref_$':450 '000000':566 '1':835,1345,1385 '100':432,433 '1000':325 '1e9':332 '2':840,1349,1392 '200kb':971 '3':846,1356,1396 '3390ec':578 '4':1360,1400 '401':758 '5':1364,1404 '6':1368,1408 '60':326 '800m':64 'a.localecompare':704 'access':412 'achiev':480 'action':1075,1109,1196,1221,1238,1259,1281 'ad':383,385,387 'adapt':540,1253 'add':1222,1282,1357,1401 'address':328 'alreadi':67 'amount':312,330,331,345,431 'android':826,898 'anim':1001 'api':44,106,122,742 'app':4,10,13,18,24,27,43,52,58,62,73,81,105,110,121,124,131,138,143,150,157,166,168,206,227,229,234,241,243,261,279,281,297,348,354,361,364,378,485,493,500,503,799,816,844,921,929,966,1006,1053,1209,1216,1242,1336,1352,1374,1379,1438,1450,1456,1462 'app.jsx':204 'app.post':744 'architect':59 'architectur':125 'array.from':699 'ask':1496 'async':319 'audit':636,1411 'authent':47,134 'automat':917 'await':337 'b':703,705 'back':512 'backend':616 'background':580,1019 'badg':481 'bash':266 'basic':170 'behavior':823 'bg':546,552,585 'blind':626 'blockchain':85,108,146,253,1298,1300,1303,1381,1423 'blockchain-defi':1299,1380,1422 'bodi':579 'bonus':478,483 'bot':221,224,405,1286,1291,1293,1342,1365,1419 'bot.command':228,406 'bottoken':682,723 'bounc':946 'boundari':1504 'break':640,811,950,1078 'build':7,21,49,61,258,1036,1350,1397 'builder':1292,1317,1343,1420,1428 'bundl':958,968 'button':341,465,510,513,520,527,570,576,1046,1057,1066,1084 'calcul':725 'calculatedhash':728,738 'call':1224,1230,1239 'came':667 'capabl':118 'check':461,1183 'checkout/payment':1112 'clarif':1498 'clear':1471 'click':533 'client':624 'close':198,200 'code':955,974 'coin':471 'collabor':1283 'collect':397 'color':547,553,559,565,571,577,586,587,593,1257,1266 'command':1287 'common':833 'complain':942 'compon':285,988 'confirm':848 'confus':1073 'connect':113,127,247,250,263,778,787,803,830,869,881,1395 'console.log':880 'const':180,207,314,317,320,442,446,452,522,683,688,697,716,727,748,767,772,855,871,989,1007,1115,1159 'contain':661 'continu':529 'continue/next':1110 'contract':1297 'convent':506 'correct':853 'cover':37 'creat':713 'createhmac':719,730 'criteria':1507 'crypto':91,116,676,678,718,729 'css':541,997,1261 'ctx':230,408 'ctx.reply':231 'ctx.replywithinvoice':409 'currenc':424 'custom':1045,1055,1064,1083 'daili':475 'data':619,625,651,766,1017 'datacheckstr':698,734 'date.now':324 'deep':812 'default':1035 'defi':78,1301,1372,1382,1387,1424 'deleg':1284 'depend':981 'deploy':1409 'describ':1475 'descript':413 'design':93,498,1346,1386 'desktop':795,911 'dev':903 'devic':887 'differ':822 'digest':724,735 'digit':396 'direct':634 'display':386 'doesn':800,837 'dom':1044 'earn':392,1330 'ecosystem':40,74 'edg':607 'element':507 'els':1147,1174 'empti':421 'encodeuricompon':458 'ensur':860 'environ':1487 'environment-specif':1486 'error':760 'etc':1391 'exampl':369 'expand':195,197,210,215 'expect':1081 'experi':36 'expert':5,19,1492 'expertis':102 'explod':76 'export':177,1034 'fail':788,796,845 'failur':637 'fallback':906 'fals':1011 'featur':374,416,1304,1359,1388 'feedback':595,598 'feel':922,1059,1085 'ffffff':554 'file':290 'first':219 'fix':655,828,850,964,1098,1195,1220,1237,1258,1280 'flow':1111 'foreign':1086 'form':1106,1120 'framework':1310 'friend':469 'frontend':1307,1308,1309,1383,1421 'function':178,205,280,286,310,440,679,1005,1121,1134,1140,1153 'game':77,1320,1325,1331,1347 'gamif':472,1321,1323,1338 'gamification-loop':1322,1337 'generat':1316,1427 'get':152 'good':381 'grow':1371 'gzip':972 'handl':532,868,918 'handlepay':318,343 'handler':1288 'haptic':517,594 'hash':689,691,693,726,739,1204 'heavi':987 'heavychart':990 'hello':217 'hex':736 'hide':1130 'hidemainbutton':1135 'high':375,382,398,614,784,945,1188,1212 'hook':1151 'hooks/usetelegram.js':176 'html':172 'https':861 'iconurl':298 'id':194 'imag':995 'immedi':1015 'imperson':649 'implement':508,1113,1197,1405 'impli':1435,1442,1447,1454,1460 'import':273,306,675,992 'in-app':129,376 'includ':1219 'inconsist':1070,1087 'info':663 'initdata':610,641,657,660,681,687,749,753,762,771,1185,1192,1201 'initdataunsaf':188,192,633 'initi':937 'inlin':237 'input':1501 'insid':30 'instal':268 'instead':998,1047 'integr':128,147,222,248,264,271,1294,1361,1393 'interact':940 'interfac':501 'invalid':761 'invit':468 'io':824,896 'issu':814,832 'janki':925 'javascript':223,402,521,596,674,743,953,1032,1114 'join':696,711 'js':1000 'json':291,759 'json.parse':774 'jsx':175,272,305,437,851,907,984,1004,1152 'k':707,709 'key':715 'keyboard':238 'know':83,1093 'label':429 'lag':930 'laggi':939 'larg':957 'launch':1369 'lazi':976,985,991 'leaderboard':479 'light':597,600 'like':35 'limit':1463 'link':813 'list':914 'load':535,938,961,977,986,1002,1016,1138,1142,1144,1235 'loadappconfig':1022 'loaduserdata':1021 'local':902 'localhost':862 'loop':1324,1339 'lost':849 'main':509,519,526 'mainbutton':1049,1067,1079,1100,1105 'make':350 'manag':1403 'manifest':289,854 'manifesturl':856 'manualchunk':1039 'map':706 'markup':236 'match':1472 'math.floor':323 'may':1233 'measur':1407 'mechan':115,144,436,1319,1326,1348,1355 'medium':388,393,927,1051,1227,1250,1272 'mention':1433,1440,1445,1452,1458 'messag':327,1189,1213,1228,1251,1273 'meta':1269,1276 'mini':3,9,17,23,51,57,72,109,123,137,142,149,156,165,167,226,260,296,347,353,360,363,484,492,499,502,843,920,965,1335,1351,1373,1378,1437,1461 'miss':1206,1267,1274,1509 'mobil':782,790,797,831,867,904,916,1279 'model':368 'monet':54,89,349,365 'money':351 'much':952 'multipl':890 'must':664 'n':712 'name':220,294 'nanoton':336 'nativ':34,1062 'native-lik':33 'need':1133 'never':1068 'new':164,401,685,769 'nft':394 'ngrok':900 'node.js':672 'non':1061 'non-nat':1060 'notifications/onboarding':1367 'npm':267 'onclick':342,466,1124,1128,1156,1172,1178,1180 'open':232,240,802,818,839 'openmask':893 'optim':962,994,1031 'other':650 'output':1038,1481 'paradigm':98 'param':684,768 'params.delete':692 'params.entries':700 'params.get':690,775 'pattern':140,148,487 'pay':344,808 'payload':417 'payment':45,117,132,372,1363 'paymentbutton':311 'perform':967 'permiss':1502 'plan':359 'platform':505 'poor':933 'possibl':653 'potenti':370 'premium':373,407,411,418,430 'prevent':670 'price':428 'primari':1108 'problem':821,834 'process.env.bot':754 'promise.all':1020 'proper':1101 'provid':419 'purchas':379 'qr':909 'queri':193 'queryid':190 'quick':982 'rate':947 'react':173,270,1041,1043,1150,1305 'react-dom':1042 'readi':201,203,211,214,1008,1027,1244 'real':886 'recommend':654,827,963,1097 'referr':389,438,482,1312 'referral/viral':1358 'referrallink':447,459 'referralshar':441 'relat':1412 'repli':235 'req':746 'req.body':750 'requir':1500 'res':747 'res.status':757 'retent':474 'return':184,216,282,288,340,464,737,756,819,841,875,1028,1029,1166,1176 'revenu':362,366 'review':1493 'reward':476 'role':55 'rollupopt':1037 'root':542 'rout':978 'run':15,29 'safe':763 'safeti':1503 'sale':395 'scope':1474 'script':1210,1217 'secret':714 'secretkey':717,732 'secur':635,645,1193,1406 'select':604 'send':225,302 'server':629,1199 'server-sid':628,1198 'setmainbuttonload':1141 'setreadi':1009,1024 'setup':151,169,174,265 'sever':613,783,926,1050,1187,1211,1226,1249,1271 'sha256':720,731 'shake':980 'share':390,453,467,1313 'sharp':606 'show':525,908,912,1013,1118,1234 'showmainbutton':1122 'side':630,1200 'situat':615,785,928,1052 'size':959,969 'skeleton':1014 'skill':1332,1375,1413,1466 'skill-telegram-mini-app' 'slow':923,931,936 'smart':1296 'social':80 'sort':694,701 'source-sickn33' 'specif':489,1488 'speed':944 'split':956,975 'spoof':644 'spoofing/tampering':671 'stake':1390 'star':400,423,427,434 'start':153,162 'state':536,870,1139,1236 'stop':1494 'strategi':1003 'streak':477 'stream':367 'structur':171 'stuck':804 'submiss':1107 'submit':1056,1065 'submitform':534 'substitut':1484 'success':601,603,1506 'swap':1389 'symptom':622,792,935,1063 'system':439 't.me':449,456 't.me/share/url?url=$':455 't.me/your_bot?start=ref_$':448 'tag':1270,1277 'tamper':652 'tap':1096,1328,1354 'tap-to-earn':1327 'target':970 'task':1470 'telegram':2,8,16,22,31,41,56,65,96,103,119,136,155,384,399,426,491,612,669,791,1089,1207,1214,1232,1247,1255,1290,1334,1341,1377,1418,1436,1448 'telegram-bot-build':1289,1340,1417 'telegram-mini-app':1,1333,1376 'test':883,884,888,894,905,1490 'text':239,460,558,564,592,1123,1126,1155,1170,1179 'tg':181,185,187,191,196,199,202,208,443,523,544,550,556,562,568,574,583,590,1116,1160,1165 'tg-theme-bg-color':543,549,582 'tg-theme-button-color':567,573 'tg-theme-text-color':555,561,589 'tg.backbutton':514 'tg.hapticfeedback':518 'tg.hapticfeedback.impactoccurred':599 'tg.hapticfeedback.notificationoccurred':602 'tg.hapticfeedback.selectionchanged':605 'tg.mainbutton':511 'tg.mainbutton.disable':1146 'tg.mainbutton.enable':1149 'tg.mainbutton.hide':1136,1175 'tg.mainbutton.hideprogress':538,1148 'tg.mainbutton.offclick':1137,1177 'tg.mainbutton.onclick':531,1127,1171 'tg.mainbutton.settext':528,1125,1169 'tg.mainbutton.show':530,1129,1173 'tg.mainbutton.showprogress':537,1145 'tg.opentelegramlink':454 'tg.ready':1225,1231 'tg.themeparams':516,1264 'theme':515,539,545,551,557,563,569,575,584,591,1248,1256 'titl':410 'token':420,755 'ton':39,84,107,112,126,145,246,252,262,303,334,346,371,777,829,1295,1302,1362,1394,1455 'tonconnect/ui-react':269,277,309 'tonconnectbutton':275 'tonconnectui':315,872 'tonconnectui.onstatuschange':876 'tonconnectui.sendtransaction':338 'tonconnectuiprovid':274 'tonkeep':892 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'tostr':333 'tradit':100 'transact':304,321,339,847,1398 'transit':932 'treat':1479 'tree':979 'trigger':1285 'true':1025,1158 'trust':617,623 'twa':11,25,1443 'ui':1399 'understand':70 'unlock':414 'updat':722,733 'url':244,292,820 'urlsearchparam':686,770 'use':160,256,283,357,496,632,740,765,852,899,973,996,1069,1099,1104,1246,1260,1431,1464 'useeffect':213,874,1012,1163 'usemainbutton':1154 'user':46,66,133,186,189,209,218,444,618,647,662,773,776,805,941,1072,1090,1432,1439,1444,1451,1457 'user.id':451 'usest':1010 'usetelegram':179,212,445 'usetonconnectui':307,316,873 'util':79 'ux':97,111,139,486,488,504,934,1071,1082 'v':708,710 'valid':609,631,656,659,673,1182,1186,1191,1202,1489 'validateinitdata':680,752 'validuntil':322 'var':548,560,572,581,588 'variabl':1262 'vendor':1040 'verif':621,1205 'verifi':665 'via':135 'viewport':1268,1275 'viral':50,114,141,435,1311,1315,1318,1426 'viral-generator-build':1314,1425 'virtual':380 'visibl':1157,1168,1181 'vite':1030 'vite.config.js':1033 'vs':825 'vue':1306 'vulner':646,1194 'wallet':249,786,798,815,836,877,879,891,913,1402 'wallet.account.address':882 'walletsect':287 'web':12,26,42,101,104,120,242,1208,1215,1449 'web3':259 'webapp':183,1162 'webappdata':721 'well':1415 'win':983 'window.telegram':182,1161 'window.telegram.webapp':524,1117 'window.telegram.webapp.ready':1240 'without':620 'won':863 'work':780,793,865,1414 'workflow':1344,1384 'wrap':278 'xtr':425 'your-app.com':245,293,300 'your-app.com/icon.png':299 'your-domain.com':858 'your-domain.com/tonconnect-manifest.json'';':857","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-05-18T18:51:52.642Z"},{"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-05-07T22:40:42.566Z"}],"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","github":{"repo":"sickn33/antigravity-awesome-skills","stars":37911,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-05-18T08:24:49Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"4cd42788c0b0052ef4cdd6a3c4d7d138ec2042eb","skill_md_path":"skills/telegram-mini-app/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/telegram-mini-app"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"telegram-mini-app","description":"Expert in building Telegram Mini Apps (TWA) - web apps that run"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/telegram-mini-app"},"updatedAt":"2026-05-18T18:51:52.642Z"}}