diff --git a/benchmarks/app-store-ratings.yml b/benchmarks/app-store-ratings.yml index 387e884e..cc2de5a6 100644 --- a/benchmarks/app-store-ratings.yml +++ b/benchmarks/app-store-ratings.yml @@ -2,10 +2,10 @@ slug: app-store-ratings number: "202" -title: "Crypto trading app iOS ratings: PumpFun vs Fomo vs Phantom vs Moonshot, live" -seo_title: "Crypto trading app App Store ratings 2026: PumpFun, Fomo, Phantom, Moonshot" -seo_description: "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars. PumpFun vs Fomo vs Phantom vs Moonshot vs DEX Screener ranked live from iTunes ratings." -subtitle: Live Apple App Store ratings for the leading crypto trading and meme coin apps on iOS. Updated every 30 minutes from the iTunes lookup API. Rating is the current average across all user reviews. Review count shows how many users voted. +title: "Crypto trading app iOS ratings: Coinbase vs Bybit vs Fomo vs PumpFun, live" +seo_title: "Crypto trading app App Store ratings 2026: Coinbase, Bybit, Kraken, Fomo, PumpFun, GMGN, Moonshot" +seo_description: "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars. Coinbase vs Bybit vs Kraken vs Fomo vs PumpFun vs GMGN vs Moonshot ranked live from iTunes ratings." +subtitle: Live Apple App Store ratings for the leading crypto trading apps on iOS. Updated every 30 minutes from the iTunes lookup API. Rating is the current average across all user reviews. Review count shows how many users voted. category: Trading status: live @@ -17,17 +17,14 @@ disclaimer: | Ratings reflect the current all-time average user rating from the Apple App Store as returned by the iTunes lookup API. Apple does not expose star-distribution breakdowns or time-windowed averages via the public API. A high rating with few reviews carries more statistical uncertainty than the same rating with tens of thousands of reviews. The review count column shows how many users contributed to each rating. seo_intro: | - The PumpFun and Fomo battle for Solana meme coin traders has moved to the - App Store. Both launched iOS apps within months of each other in 2024 to - 2025, and user ratings are a live signal of trader satisfaction. Fomo - launched in April 2025 and has already accumulated over 7,000 ratings - despite being newer than PumpFun, suggesting a highly engaged user base. - Phantom, the dominant Solana wallet, leads on raw review volume with over - 64,000 ratings. Moonshot by DEX Screener targets fiat-onboarding with Apple - Pay integration and has 28,000 ratings. DEX Screener, the leading token - analytics app, rounds out the comparison. This benchmark is the only live - ranking of crypto trading app satisfaction on the App Store, updated every - 30 minutes. + This benchmark ranks the top crypto trading apps on the iOS App Store by + user rating, updated live every 30 minutes from the iTunes lookup API. It + spans both centralized exchange apps (Coinbase, Bybit, Kraken, Binance.US) + and on-chain trading terminals (Fomo, GMGN, PumpFun, Moonshot). Coinbase + leads on raw review volume with over 1.8 million ratings, making it the + most statistically reliable data point in the set. On-chain apps like Fomo + have accumulated over 7,000 ratings since launching in April 2025, signaling + strong early engagement from DeFi-native traders. abstract: | The harness polls the iTunes public lookup API @@ -36,25 +33,27 @@ abstract: | places by Apple) and userRatingCount (total all-time reviews). The harness exposes three gauges per app: app_store_rating, app_store_reviews_total, and app_store_health. No API key is required. Apple caches the endpoint - but updates it within hours of new reviews arriving. The benchmark YAML - selects five crypto trading apps with iOS presence. + but updates it within hours of new reviews arriving. methodology: - "Source: Apple iTunes public lookup API (itunes.apple.com/lookup?id=&country=us). No authentication required. Returns averageUserRating and userRatingCount." - "Poll cadence: harness fetches each app every 30 minutes. Ratings change slowly (daily to weekly) so 30-minute polling captures all meaningful changes while respecting Apple caching." - "Rating: Apple computes the average across all all-time user reviews. Apple does not expose time-windowed (e.g. current version only) averages via the public API endpoint used here." - "Review count: total number of ratings ever submitted on the US App Store. Higher = more statistically reliable average." - - "PumpFun (ID 6717572591): launched Oct 2024. Bonding-curve launchpad and trading app for Solana meme coins." + - "Coinbase (ID 886427730): the largest US crypto exchange. Over 1.8 million App Store ratings." + - "Bybit (ID 1488296980): major global exchange strong on derivatives and spot trading." + - "Kraken (ID 1481947260): veteran US exchange with strong security reputation." + - "Binance.US (ID 1492670702): US-regulated arm of Binance, available on the US App Store." - "Fomo (ID 6741115427): launched Apr 2025. Social copy-trading and meme coin terminal, backed by Index Ventures and USV." - - "Phantom (ID 1598432977): the dominant Solana wallet with integrated DEX swap functionality." + - "GMGN (ID 6745328711): AI-powered trading terminal focused on Solana meme coins." + - "PumpFun (ID 6717572591): launched Oct 2024. Bonding-curve launchpad and trading app for Solana meme coins." - "Moonshot (ID 6503993131): mobile-first meme coin launchpad with fiat onramp via Apple Pay, by DEX Screener." - - "DEX Screener (ID 1631840457): leading multi-chain token analytics and charting app." findings: - "{{best_name}} leads crypto trading apps on the iOS App Store at {{best_p50}} stars." - - "Fomo has accumulated over 7,000 ratings since its April 2025 launch, roughly 3x more than PumpFun despite launching 6 months later, signalling strong mobile-native engagement." - - "Phantom leads on review volume with over 64,000 ratings, reflecting its position as the primary Solana wallet for retail users." - - "Moonshot targets the fiat-onboarding angle with Apple Pay support; its 28,000 ratings reflect strong traction among non-crypto-native users." + - "Coinbase dominates on review volume with over 1.8 million ratings, making it the most statistically robust data point in the set." + - "Fomo has accumulated over 7,000 ratings since its April 2025 launch despite being one of the newest entrants, signaling strong mobile-native engagement." + - "On-chain trading apps (Fomo, GMGN, PumpFun, Moonshot) compete directly with major CEX apps for the same mobile trader." source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/app-store-ratings @@ -69,7 +68,7 @@ metric_panels: metric: app_store_reviews_total unit: count higher_is_better: true - description: "Total number of user ratings submitted on the US App Store. More reviews = more statistically reliable average. Phantom leads with 64k+ ratings; Fomo has 7k+ despite launching only in April 2025." + description: "Total number of user ratings submitted on the US App Store. More reviews = more statistically reliable average. Coinbase leads with 1.8M+ ratings." ledger_columns: - { label: "Rating", slot: p50 } @@ -77,17 +76,58 @@ ledger_columns: faq: - q: "Why does the App Store rating matter for a trading app?" - a: "App Store ratings are the most visible public signal of user satisfaction for mobile products. For trading apps competing for the same Solana meme trader, a higher rating and more reviews signals a better-received product. Fomo's 4.77 rating with 7,000+ reviews compared to PumpFun's 4.70 with 2,200 reviews reflects a more engaged early adopter base." + a: "App Store ratings are the most visible public signal of user satisfaction for mobile products. For trading apps competing for the same users, a higher rating and more reviews signals a better-received product." - q: "How often do App Store ratings change?" a: "Slowly. Individual ratings accumulate continuously but the average moves over days to weeks. The harness polls every 30 minutes to capture any meaningful shift; in practice the number updates at most once or twice per day." - q: "Why is this the US App Store only?" a: "The iTunes public lookup API returns US store data by default. Review counts and ratings can differ by country. The US store is the largest single market and the standard reference for app comparisons." - q: "Does this include Google Play ratings?" - a: "No. Neither Fomo nor PumpFun has an Android app as of August 2026. All five apps in this bench are iOS-only." + a: "No. This benchmark covers the US App Store only. CEX apps like Coinbase and Bybit have Android versions but on-chain apps like Fomo and PumpFun are iOS-only as of 2026." - q: "What is Moonshot?" a: "Moonshot is a mobile-first meme coin launchpad built by DEX Screener, the leading token analytics platform. It differentiates via fiat onboarding through Apple Pay, targeting users who want to buy meme coins without setting up a crypto wallet first." + - q: "Why Binance.US and not Binance?" + a: "The global Binance app is not available on the US App Store due to regulatory restrictions. Binance.US is the separate US-licensed entity with its own app (ID 1492670702) available to American users." providers: + - slug: coinbase + name: Coinbase + tag: "US crypto exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 886427730, US store, all-time average). Review count from app_store_reviews_total{app=\"coinbase\"}." + queries: + p50: app_store_rating{app="coinbase"} + p90: app_store_rating{app="coinbase"} + p99: app_store_rating{app="coinbase"} + mean: app_store_rating{app="coinbase"} + success: app_store_health{app="coinbase"} + sample_size: app_store_reviews_total{app="coinbase"} + series: app_store_rating{app="coinbase"} + + - slug: bybit + name: Bybit + tag: "Global derivatives exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1488296980, US store, all-time average). Review count from app_store_reviews_total{app=\"bybit\"}." + queries: + p50: app_store_rating{app="bybit"} + p90: app_store_rating{app="bybit"} + p99: app_store_rating{app="bybit"} + mean: app_store_rating{app="bybit"} + success: app_store_health{app="bybit"} + sample_size: app_store_reviews_total{app="bybit"} + series: app_store_rating{app="bybit"} + + - slug: kraken + name: Kraken + tag: "US crypto exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1481947260, US store, all-time average). Review count from app_store_reviews_total{app=\"kraken\"}." + queries: + p50: app_store_rating{app="kraken"} + p90: app_store_rating{app="kraken"} + p99: app_store_rating{app="kraken"} + mean: app_store_rating{app="kraken"} + success: app_store_health{app="kraken"} + sample_size: app_store_reviews_total{app="kraken"} + series: app_store_rating{app="kraken"} + - slug: fomo name: Fomo tag: "Social trading app, Solana" @@ -101,32 +141,6 @@ providers: sample_size: app_store_reviews_total{app="fomo"} series: app_store_rating{app="fomo"} - - slug: phantom - name: Phantom - tag: "Solana wallet, DEX aggregator" - formula: "Apple App Store average rating (iTunes lookup API, app ID 1598432977, US store, all-time average). Review count from app_store_reviews_total{app=\"phantom\"}." - queries: - p50: app_store_rating{app="phantom"} - p90: app_store_rating{app="phantom"} - p99: app_store_rating{app="phantom"} - mean: app_store_rating{app="phantom"} - success: app_store_health{app="phantom"} - sample_size: app_store_reviews_total{app="phantom"} - series: app_store_rating{app="phantom"} - - - slug: dex-screener - name: DEX Screener - tag: "Multi-chain token analytics app" - formula: "Apple App Store average rating (iTunes lookup API, app ID 1631840457, US store, all-time average). Review count from app_store_reviews_total{app=\"dex-screener\"}." - queries: - p50: app_store_rating{app="dex-screener"} - p90: app_store_rating{app="dex-screener"} - p99: app_store_rating{app="dex-screener"} - mean: app_store_rating{app="dex-screener"} - success: app_store_health{app="dex-screener"} - sample_size: app_store_reviews_total{app="dex-screener"} - series: app_store_rating{app="dex-screener"} - - slug: gmgn name: GMGN tag: "AI trading terminal, Solana" @@ -165,3 +179,16 @@ providers: success: app_store_health{app="moonshot"} sample_size: app_store_reviews_total{app="moonshot"} series: app_store_rating{app="moonshot"} + + - slug: binance-us + name: Binance.US + tag: "US-regulated Binance exchange" + formula: "Apple App Store average rating (iTunes lookup API, app ID 1492670702, US store, all-time average). Review count from app_store_reviews_total{app=\"binance-us\"}." + queries: + p50: app_store_rating{app="binance-us"} + p90: app_store_rating{app="binance-us"} + p99: app_store_rating{app="binance-us"} + mean: app_store_rating{app="binance-us"} + success: app_store_health{app="binance-us"} + sample_size: app_store_reviews_total{app="binance-us"} + series: app_store_rating{app="binance-us"} diff --git a/harnesses/app-store-ratings/cmd/script/main.go b/harnesses/app-store-ratings/cmd/script/main.go index c910a648..fd54dba8 100644 --- a/harnesses/app-store-ratings/cmd/script/main.go +++ b/harnesses/app-store-ratings/cmd/script/main.go @@ -16,9 +16,11 @@ var apps = []struct { {"pumpfun", "6717572591"}, {"fomo", "6741115427"}, {"gmgn", "6745328711"}, - {"phantom", "1598432977"}, {"moonshot", "6503993131"}, - {"dex-screener", "1631840457"}, + {"coinbase", "886427730"}, + {"bybit", "1488296980"}, + {"kraken", "1481947260"}, + {"binance-us", "1492670702"}, } func main() { diff --git a/harnesses/memecoin-platforms/cmd/monitor/main.go b/harnesses/memecoin-platforms/cmd/monitor/main.go index b19ac938..39015314 100644 --- a/harnesses/memecoin-platforms/cmd/monitor/main.go +++ b/harnesses/memecoin-platforms/cmd/monitor/main.go @@ -22,25 +22,28 @@ func main() { heliusKey := os.Getenv("HELIUS_API_KEY") - mobulaClient := &http.Client{Timeout: 30 * time.Second} + mobulaClient := &http.Client{ + Timeout: 30 * time.Second, + Transport: &http.Transport{Proxy: nil}, + } // rpcClient routes through rotating proxy to avoid per-IP rate limits var rpcClient *http.Client if proxyRaw := os.Getenv("HTTPS_PROXY"); proxyRaw != "" { if proxyURL, err := url.Parse(proxyRaw); err == nil { rpcClient = &http.Client{ - Timeout: 15 * time.Second, + Timeout: 30 * time.Second, Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}, } log.Printf("rpc: rotating proxy enabled") } } if rpcClient == nil { - rpcClient = &http.Client{Timeout: 15 * time.Second} + rpcClient = &http.Client{Timeout: 30 * time.Second} } // heliusClient used as fallback for older tx not in public RPC history - heliusClient := &http.Client{Timeout: 15 * time.Second} + heliusClient := &http.Client{Timeout: 30 * time.Second} setSolPrice(175.0) updateSolPrice(mobulaClient) diff --git a/public/logos/binance-us.jpg b/public/logos/binance-us.jpg new file mode 100644 index 00000000..6b24fa2b Binary files /dev/null and b/public/logos/binance-us.jpg differ diff --git a/public/logos/bybit.jpg b/public/logos/bybit.jpg index de2bba1d..4ea8413e 100644 Binary files a/public/logos/bybit.jpg and b/public/logos/bybit.jpg differ diff --git a/public/logos/coinbase.jpg b/public/logos/coinbase.jpg new file mode 100644 index 00000000..287d5fb4 Binary files /dev/null and b/public/logos/coinbase.jpg differ diff --git a/public/logos/kraken.jpg b/public/logos/kraken.jpg new file mode 100644 index 00000000..f00da4ff Binary files /dev/null and b/public/logos/kraken.jpg differ diff --git a/src/app/apps/page.tsx b/src/app/apps/page.tsx index c849bc20..7b9d9905 100644 --- a/src/app/apps/page.tsx +++ b/src/app/apps/page.tsx @@ -20,6 +20,8 @@ export const metadata: Metadata = pageMetadata({ export const revalidate = 300; +const WINDOWS = ["24h", "7d", "30d"] as const; + export default async function AppsHubPage() { const [evmData, solanaData, solPrice] = await Promise.all([ fetchEVMRevenue(), @@ -43,30 +45,39 @@ export default async function AppsHubPage() { const bscChain = evmRow?.chains["bsc"]; const baseChain = evmRow?.chains["base"]; + // EVM fees are always 24h — we don't have multi-window EVM data. const ethFees = ethChain ? ethChain.stable24h + (ethChain.native?.usd ?? 0) : null; const bscFees = bscChain ? bscChain.stable24h + (bscChain.native?.usd ?? 0) : null; const baseFees = baseChain ? baseChain.stable24h + (baseChain.native?.usd ?? 0) : null; + const evmTotal = (ethFees ?? 0) + (bscFees ?? 0) + (baseFees ?? 0); + + const windows: UnifiedAppRow["windows"] = {}; - let solanaFees: number | null = null; - if (solRow && solPrice !== null) { - const window24h = solRow.windows["24h"]; - if (window24h) { - solanaFees = (window24h.txCount * window24h.avgPlatformFeeLamports) / 1e9 * solPrice; + for (const w of WINDOWS) { + let solanaFees: number | null = null; + if (solRow && solPrice !== null) { + const wData = solRow.windows[w]; + if (wData) { + solanaFees = (wData.txCount * wData.avgPlatformFeeLamports) / 1e9 * solPrice; + } } + windows[w] = { + solana: solanaFees, + ethereum: ethFees, + bsc: bscFees, + base: baseFees, + total: (solanaFees ?? 0) + evmTotal, + }; } - const total24h = - (solanaFees ?? 0) + (ethFees ?? 0) + (bscFees ?? 0) + (baseFees ?? 0); - return { meta, - fees: { solana: solanaFees, ethereum: ethFees, bsc: bscFees, base: baseFees }, + windows, stableOnly: { ethereum: ethChain?.coverage === "stable-only", bsc: bscChain?.coverage === "stable-only", base: baseChain?.coverage === "stable-only", }, - total24h, }; }); @@ -101,7 +112,7 @@ export default async function AppsHubPage() {

Solana fees = txCount × avgPlatformFeeLamports / 1e9 × SOL price. - EVM fees = stable (USDC/USDT) + native where traceable.{" "} + EVM fees = stable (USDC/USDT) + native where traceable, always 24h.{" "} Detailed execution metrics → diff --git a/src/components/trading-apps-leaderboard.tsx b/src/components/trading-apps-leaderboard.tsx index ea80b9cf..d15ccc37 100644 --- a/src/components/trading-apps-leaderboard.tsx +++ b/src/components/trading-apps-leaderboard.tsx @@ -1,23 +1,27 @@ "use client"; import Image from "next/image"; +import Link from "next/link"; import { useState } from "react"; import { logoPath } from "@/lib/logo-manifest"; import type { AppMeta } from "@/lib/trading-apps-config"; +type FeeWindow = { + solana: number | null; + ethereum: number | null; + bsc: number | null; + base: number | null; + total: number; +}; + export type UnifiedAppRow = { meta: AppMeta; - fees: { - solana: number | null; - ethereum: number | null; - bsc: number | null; - base: number | null; - }; + windows: Record; stableOnly: { ethereum: boolean; bsc: boolean; base: boolean }; - total24h: number; }; type TabKey = "all" | "meme-bot" | "telegram-bot"; +type WindowKey = "24h" | "7d" | "30d"; const TABS: { key: TabKey; label: string }[] = [ { key: "all", label: "All" }, @@ -25,6 +29,12 @@ const TABS: { key: TabKey; label: string }[] = [ { key: "telegram-bot", label: "Telegram Bots" }, ]; +const WINDOWS: { key: WindowKey; label: string }[] = [ + { key: "24h", label: "24h" }, + { key: "7d", label: "7d" }, + { key: "30d", label: "30d" }, +]; + const CATEGORY_BADGE: Record = { "meme-bot": "bg-orange-500/10 text-orange-400 border border-orange-500/20", "telegram-bot": "bg-blue-500/10 text-blue-400 border border-blue-500/20", @@ -79,9 +89,12 @@ export function TradingAppsLeaderboard({ updatedAt: string | null; }) { const [tab, setTab] = useState("all"); + const [window, setWindow] = useState("24h"); const filtered = tab === "all" ? rows : rows.filter((r) => r.meta.category === tab); - const sorted = [...filtered].sort((a, b) => b.total24h - a.total24h); + const sorted = [...filtered].sort( + (a, b) => (b.windows[window]?.total ?? 0) - (a.windows[window]?.total ?? 0) + ); const hasStableOnly = sorted.some( (r) => r.stableOnly.ethereum || r.stableOnly.bsc || r.stableOnly.base @@ -106,11 +119,29 @@ export function TradingAppsLeaderboard({ ))} - {updatedAt && ( - - Updated {new Date(updatedAt).toLocaleString()} - - )} +

+
+ {WINDOWS.map((w) => ( + + ))} +
+ {updatedAt && ( + + {new Date(updatedAt).toLocaleString()} + + )} +
@@ -120,16 +151,23 @@ export function TradingAppsLeaderboard({ # App Category - Solana + + + Solana + + Ethereum BSC Base - Total 24h + + Total {window} + {sorted.map((row, i) => { - const { meta, fees, stableOnly } = row; + const { meta, stableOnly } = row; + const fees = row.windows[window] ?? { solana: null, ethereum: null, bsc: null, base: null, total: 0 }; const logo = meta.logoKey ? logoPath(meta.logoKey) : null; return ( @@ -141,23 +179,37 @@ export function TradingAppsLeaderboard({ {i + 1} - - {logo && ( - {meta.name} +
+ + {logo && ( + {meta.name} + )} + {meta.name} + + {meta.benchUrl && ( + + + )} - {meta.name} - +
@@ -169,7 +221,7 @@ export function TradingAppsLeaderboard({ - {row.total24h > 0 ? fmtUSD(row.total24h) : } + {fees.total > 0 ? fmtUSD(fees.total) : } ); @@ -181,6 +233,12 @@ export function TradingAppsLeaderboard({ {hasStableOnly && (

° USDC only (no native trace on Base). + {window !== "24h" && " EVM fees are always 24h — only Solana has multi-window data."} +

+ )} + {!hasStableOnly && window !== "24h" && ( +

+ EVM fees (ETH/BSC/Base) are always 24h — only Solana has multi-window data.

)}
diff --git a/src/lib/brand.ts b/src/lib/brand.ts index 01e9f993..79f73740 100644 --- a/src/lib/brand.ts +++ b/src/lib/brand.ts @@ -79,10 +79,12 @@ const BRANDS: Record = { // ─── Crypto trading apps (bench № 202) ─── pumpfun: { color: "#00C851" }, // pump.fun green - phantom: { color: "#AB9FF2" }, // phantom purple moonshot: { color: "#F97316" }, // moonshot orange - "dex-screener": { color: "#1C1C1C", dark: true }, // dex screener dark fomo: { color: "#7C3AED" }, // fomo violet + coinbase: { color: "#0052FF" }, // coinbase blue + bybit: { color: "#F7A600" }, // bybit yellow + kraken: { color: "#5741D9" }, // kraken purple + "binance-us": { color: "#F0B90B" }, // binance yellow // ─── Trading / perps ─── hyperliquid: { color: "#22D3EE" }, // cyan diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 4137b373..3f67360b 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -303,9 +303,8 @@ const RAW: Record = { // ─── App Store ratings (bench № 202) ─── pumpfun: "/logos/pumpfun.svg", - phantom: "/logos/phantom.svg", moonshot: "/logos/moonshot.svg", - "dex-screener": "/logos/dex-screener.png", + "binance-us": "/logos/binance-us.jpg", // ─── Hyperliquid frontends (bench № 030) ─── "phantom-perps": "/logos/phantom-perps.svg", axiom: "/logos/axiom.png", diff --git a/src/lib/trading-apps-config.ts b/src/lib/trading-apps-config.ts index 65d07c44..8195d67e 100644 --- a/src/lib/trading-apps-config.ts +++ b/src/lib/trading-apps-config.ts @@ -10,13 +10,13 @@ export type AppMeta = { }; export const TRADING_APPS: AppMeta[] = [ - { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: null, evmKey: "pumpfun", solanaKey: "pump.fun" }, - { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: null, evmKey: null, solanaKey: "fomo" }, - { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: null, evmKey: null, solanaKey: "bullx" }, - { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: null, evmKey: null, solanaKey: "photon" }, - { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: null, evmKey: "gmgn", solanaKey: "gmgn" }, - { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: null, evmKey: "axiom", solanaKey: "axiom" }, - { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: null, evmKey: "maestro", solanaKey: null }, - { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: null, evmKey: "banana-gun", solanaKey: null }, - { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: null, evmKey: null, solanaKey: "trojan" }, + { id: "pump.fun", name: "pump.fun", category: "meme-bot", logoKey: "pump-fun", productUrl: "https://pump.fun", benchUrl: "/apps/exec", evmKey: "pumpfun", solanaKey: "pump.fun" }, + { id: "fomo", name: "FOMO", category: "meme-bot", logoKey: "fomo", productUrl: "https://fomo.fund", benchUrl: "/apps/exec", evmKey: null, solanaKey: "fomo" }, + { id: "bullx", name: "BullX", category: "meme-bot", logoKey: "bullx", productUrl: "https://bullx.io", benchUrl: "/apps/exec", evmKey: null, solanaKey: "bullx" }, + { id: "photon", name: "Photon", category: "meme-bot", logoKey: "photon", productUrl: "https://photon-sol.tinyastro.io", benchUrl: "/apps/exec", evmKey: null, solanaKey: "photon" }, + { id: "gmgn", name: "GMGN", category: "telegram-bot", logoKey: "gmgn", productUrl: "https://gmgn.ai", benchUrl: "/apps/exec", evmKey: "gmgn", solanaKey: "gmgn" }, + { id: "axiom", name: "Axiom", category: "telegram-bot", logoKey: "axiom", productUrl: "https://axiom.trade", benchUrl: "/apps/exec", evmKey: "axiom", solanaKey: "axiom" }, + { id: "maestro", name: "Maestro", category: "telegram-bot", logoKey: "maestro", productUrl: "https://maestro.bots.gg", benchUrl: "/apps/exec", evmKey: "maestro", solanaKey: null }, + { id: "banana-gun", name: "Banana Gun", category: "telegram-bot", logoKey: "banana-gun", productUrl: "https://t.me/BananaGunSniper_bot", benchUrl: "/apps/exec", evmKey: "banana-gun", solanaKey: null }, + { id: "trojan", name: "Trojan", category: "telegram-bot", logoKey: "trojan", productUrl: "https://trojan.bot", benchUrl: "/apps/exec", evmKey: null, solanaKey: "trojan" }, ];