A gamified AR token discovery app for Solana. Users collect meme coins in AR Hunt mode, track progress per token, and unlock rewards. Built with Expo (React Native) and Zustand.
DexHunter runs as a single Expo app: after a splash screen with your logo, users sign in and get a tabbed home (Home, AR Hunt, Rewards, Profile). The AR Hunt screen loads 15 meme/trending coins from the Jupiter API and shows them as tappable tokens over the camera; each capture is stored and reflected in the Rewards screen as per-token progress (e.g. 2/5) with a claim-status message. Wallet connection and claim submission are mock only (no real blockchain). All state is persisted locally via Zustand and AsyncStorage.
- Splash & Auth — App logo from
assets/images/, animated splash, then sign-in with username. - Home — Welcome, daily login bonus, XP/level, quick entry to AR Hunt.
- AR Hunt — Camera-based hunt: 15 meme coins from Jupiter spawn as floating tokens; tap to capture. Wallet status (Connect Wallet / connected address) in the top bar.
- Rewards (Claim) — Scrollable token progress for the 15 allowed coins: name, count (e.g. 2/5), progress bar, per-token claim status. Mock wallet connect and Submit Claim.
- Profile — User stats, level, XP, inventory of captured tokens; tap for detail; sign out.
- Framework: Expo ~54, React 19, React Native 0.81
- Navigation: React Navigation (native-stack + bottom tabs)
- State: Zustand with AsyncStorage persistence
- Data: Jupiter Lite API (
lite-api.jup.ag/tokens/v2) for token listing and 15 meme/trending coins - Camera/AR: expo-camera, expo-sensors (accelerometer)
Dex_Hunter/
App.tsx # Entry, SafeAreaProvider, NavigationContainer
app.json # Expo config (DexHunter, camera permission)
assets/images/ # App logo (e.g. image.jpeg) used on splash
src/
navigation/ # RootNavigator, MainTabs, types
screens/ # Splash, Auth, Home, ARGameplay, Claim, Profile, CoinDetail
store/gameStore.ts # Zustand store (auth, XP, tokens, rewards, wallet)
services/jupiterService.ts # Jupiter API, fetchMemeCoins(15), checkTokenListed
components/ # layout, game (HUDBar, GlassCard, NeonButton), ui
utils/theme.ts # COLORS
- Splash — Logo + title + progress bar; after hydration goes to Auth or Main.
- Auth — Sign-in with username; daily login bonus applied.
- Main Tabs — Home, Hunt (AR), Claim (Rewards), Profile.
- AR Hunt — Start Hunt fetches 15 meme coins via
fetchMemeCoins(15), stores symbols inallowedRewardSymbols, spawns only those tokens. Tap to capture; wallet UI in top bar (mock). - Rewards — Token progress from
capturedTokensfiltered byallowedRewardSymbols. Each row: name, count/5, progress bar, claim status. Wallet connect + Submit Claim (mock). - Profile — Stats and inventory; tap token for CoinDetail modal.
Persisted to AsyncStorage. Key fields:
- Auth:
isAuthed,username,signIn,signOut - Progress:
xp,level,addXP - Tokens:
capturedTokens,captureToken - Rewards:
tokenCounts,allowedRewardSymbols,setAllowedRewardSymbols,collectedTokens,claimEligible,walletConnected,walletAddress,claimSubmitted,connectWallet,submitClaim - Stats:
totalScans,totalCaptures,accuracy,streak,claimDailyLogin
Reward rules: only the 15 coins from Jupiter are shown in AR and in Rewards. Per-token threshold is 5 for "unlock" status. Wallet and claim are mock (no backend).
- Base:
https://lite-api.jup.ag/tokens/v2 - Endpoints:
/search?query=...(listing check),/toptrending?interval=24h&limit=15(meme coins),/recent(fallback). If both fail, a fixed list of 15 meme symbols is used.
npm install
npx expo start -cLogo path: assets/images/image.jpeg. Camera permission required for AR Hunt (see app.json).
- Required tokens per coin: 5 (
REQUIRED_TOKENSin ClaimScreen and store). - Meme coins count: 15 (
fetchMemeCoins(15)in jupiterService, set when starting AR Hunt).