Track 3: Solana Phone / Web3 Tasks¶
Timeline: After Track 1 MVP, ~April-June 2026 Tasks: 48 Total Hours: 168h (21 working days) Repos: backend-api, athion-sdk, app-user, coach-app, champion-stats-hub Dependencies: Track 1 MVP must be functional first Status tracking:
[ ]To Do |[~]In Progress |[x]Done
Branch Naming Convention¶
All branches: feature/T3-XXX-short-description
Progress¶
| Phase | Tasks | Hours | Done | % |
|---|---|---|---|---|
| A: dApp Store Publish | T3-001..004 | 4h | 0 | 0% |
| B: Wallet Integration (MWA) | T3-005..017 | 56h | 0 | 0% |
| C: NFT Achievement Badges | T3-018..033 | 72h | 0 | 0% |
| D: Health-to-Earn (conditional) | T3-034..041 | 40h | 0 | 0% |
| Infrastructure & Testing | T3-042..048 | 20h | 0 | 0% |
| Total | 48 | 168h | 0 | 0% |
Key Decisions¶
- Phase D (Health-to-Earn) is CONDITIONAL — only proceed if Phases A-C show traction
- Compressed NFTs via Metaplex Bubblegum — <$0.01/mint vs $1-2 for regular NFTs
- No official Flutter SDK for Solana Mobile Stack — need platform channels
- Sellwyse is a real product first, crypto layer on top (NOT a move-to-earn app)
Phase A: dApp Store Publish (4h)¶
| ID | Task | Repo | Branch | Status | Est. Hours | Done When |
|---|---|---|---|---|---|---|
| T3-001 | Build Android APK release variant for Solana dApp Store | app-user | feature/T3-001-apk-release-build |
[ ] | 1h | APK builds successfully with release signing. Size under 100MB |
| T3-002 | Write dApp Store listing: description, screenshots, category (Health & Fitness) | app-user | feature/T3-002-dapp-store-listing |
[ ] | 1h | Listing copy written. 4+ screenshots prepared. Category set |
| T3-003 | Submit to Solana dApp Store review | app-user | feature/T3-003-dapp-store-submit |
[ ] | 1h | Submission complete. Tracking review status |
| T3-004 | Monitor review and address feedback | app-user | feature/T3-004-dapp-store-review |
[ ] | 1h | App approved and live on dApp Store |
Phase B: Wallet Integration via MWA (56h)¶
| ID | Task | Repo | Branch | Status | Est. Hours | Done When |
|---|---|---|---|---|---|---|
| T3-005 | Research Solana Mobile Wallet Adapter (MWA) protocol | research | feature/T3-005-mwa-research |
[ ] | 4h | MWA docs read. Understand authorize/sign/send flow |
| T3-006 | Create solana_wallet_service.dart platform channel (Android) |
app-user | feature/T3-006-wallet-platform-channel |
[ ] | 8h | Platform channel connects Flutter to Android MWA SDK. Compiles |
| T3-007 | Implement wallet authorize flow — connect wallet | app-user | feature/T3-007-wallet-authorize-flow |
[ ] | 6h | User taps "Connect Wallet" -> MWA popup -> wallet app opens -> user approves -> public key returned to app |
| T3-008 | Store wallet public key in backend user profile | backend-api | feature/T3-008-wallet-address-column |
[ ] | 3h | New wallet_address column on users table. PUT /profile accepts wallet_address. Validated as valid Solana public key |
| T3-009 | Display connected wallet in app profile | app-user | feature/T3-009-wallet-profile-display |
[ ] | 3h | Profile shows truncated wallet address (e.g., "7xKX...9fPq"). Disconnect button. Connected/disconnected state |
| T3-010 | Implement sign message flow for authentication | app-user | feature/T3-010-wallet-sign-auth |
[ ] | 6h | App requests wallet signature on a nonce message. Backend verifies signature matches stored public key. Auth alternative to email/password |
| T3-011 | Backend signature verification endpoint | backend-api | feature/T3-011-wallet-verify-endpoint |
[ ] | 4h | POST /auth/wallet-verify accepts {publicKey, signature, message}. Verifies ed25519 signature. Returns JWT token if valid |
| T3-012 | USDC SPL token balance display | app-user | feature/T3-012-usdc-balance-display |
[ ] | 4h | Fetch USDC balance from Solana RPC for connected wallet. Display in wallet screen. Auto-refresh every 30s |
| T3-013 | Send USDC payment for coaching sessions | app-user | feature/T3-013-usdc-payment-send |
[ ] | 6h | User can pay for coaching session with USDC. Transaction built, signed via MWA, sent to Solana. Confirmation waited. Backend updated on success |
| T3-014 | Backend payment verification — on-chain confirmation | backend-api | feature/T3-014-payment-onchain-verify |
[ ] | 4h | Backend verifies USDC transfer on-chain via Solana RPC. Checks: correct amount, correct recipient, finalized. Updates session payment status |
| T3-015 | Receive USDC — coach payout flow | backend-api + coach-app | feature/T3-015-coach-usdc-payout |
[ ] | 4h | Coach can request payout in USDC to their connected wallet. Backend builds transfer, requires admin approval, executes |
| T3-016 | Transaction history from on-chain data | app-user | feature/T3-016-tx-history-onchain |
[ ] | 4h | Wallet screen shows recent Solana transactions: date, type, amount, status. Fetched from Solana RPC getSignaturesForAddress |
| T3-017 | iOS wallet adapter (if Solana Mobile supports iOS) | app-user | feature/T3-017-ios-wallet-adapter |
[ ] | 4h | Check if MWA works on iOS or needs alternative (e.g., deep link to Phantom). Implement appropriate flow |
Phase C: NFT Achievement Badges (72h)¶
| ID | Task | Repo | Branch | Status | Est. Hours | Done When |
|---|---|---|---|---|---|---|
| T3-018 | Design 10 achievement badge NFT artworks | design | feature/T3-018-badge-nft-artwork |
[ ] | 8h | 10 badge designs: First Steps, 7-Day Streak, 30-Day Streak, 10K Steps Day, Marathon Distance, Sleep Master, Early Bird, Night Owl, Social Butterfly, Iron Will. Each as 512x512 PNG |
| T3-019 | Create NFT metadata JSON for each badge | backend-api | feature/T3-019-nft-metadata-json |
[ ] | 3h | Metaplex-compatible JSON metadata for each badge: name, symbol, description, image URI, attributes (tier, category, rarity) |
| T3-020 | Set up Metaplex Bubblegum compressed NFT tree | backend-api | feature/T3-020-bubblegum-merkle-tree |
[ ] | 6h | Create merkle tree on Solana devnet using Bubblegum. Tree can hold 1M+ compressed NFTs. Cost: ~$50 for tree creation |
| T3-021 | Implement mint compressed NFT function | backend-api | feature/T3-021-mint-compressed-nft |
[ ] | 8h | Backend function: mint_badge(user_wallet, badge_type) -> mints compressed NFT to user's wallet via Bubblegum. Cost: <$0.01 per mint |
| T3-022 | Badge trigger system — detect achievements | backend-api | feature/T3-022-badge-trigger-system |
[ ] | 8h | Background job checks user milestones: 7-day streak? First 10K steps day? Triggers NFT mint when milestone reached. Idempotent — won't mint same badge twice |
| T3-023 | POST /achievements/mint — manual mint trigger with validation | backend-api | feature/T3-023-achievements-mint-endpoint |
[ ] | 4h | Endpoint validates user earned the badge. Prevents duplicate mints. Returns mint transaction signature |
| T3-024 | GET /achievements — list user's NFT badges | backend-api | feature/T3-024-achievements-list-endpoint |
[ ] | 3h | Returns list of user's earned badges with: name, image, earned_at, mint_status, transaction_signature. Both minted and unminted (earned but no wallet connected) |
| T3-025 | Badge display in app — achievement gallery | app-user | feature/T3-025-badge-gallery-ui |
[ ] | 6h | Achievement screen shows all 10 badges. Earned = color + date. Unearned = greyed out with progress bar. Tap earned -> show NFT details + on-chain link |
| T3-026 | Badge share card — shareable achievement image | app-user | feature/T3-026-badge-share-card |
[ ] | 4h | Share button generates branded card with badge image, user stats, Sellwyse branding. Share to Twitter/Instagram/Telegram |
| T3-027 | Badge notification on earn | app-user | feature/T3-027-badge-earn-notification |
[ ] | 2h | Push notification when badge earned: "You earned the 7-Day Streak badge!" Tap -> achievement screen |
| T3-028 | Web achievement gallery | champion-stats-hub | feature/T3-028-web-achievement-gallery |
[ ] | 4h | /achievements page shows badge collection. Same earned/unearned display. Link to Solana Explorer for minted NFTs |
| T3-029 | Leaderboard by badges earned | backend-api | feature/T3-029-badge-leaderboard |
[ ] | 4h | GET /leaderboard/badges — ranked by total badges earned. Shows top 50. User's rank included |
| T3-030 | Badge rarity display — % of users who have each badge | backend-api + app-user | feature/T3-030-badge-rarity-display |
[ ] | 3h | Each badge shows "Earned by X% of users". Calculated from total users vs badge holders |
| T3-031 | Seasonal/limited badges — time-limited achievement NFTs | backend-api | feature/T3-031-seasonal-limited-badges |
[ ] | 4h | Admin can create time-limited badges (e.g., "March Madness" — 100K steps in March). Auto-expires. Creates FOMO |
| T3-032 | Badge collection completeness — "Collect them all" progress | app-user | feature/T3-032-badge-collection-progress |
[ ] | 3h | Progress bar: "5/10 badges collected". Completion unlocks special badge (meta-achievement) |
| T3-033 | SDK badge service | athion-sdk | feature/T3-033-sdk-badge-service |
[ ] | 4h | AchievementService with methods: listBadges(), getBadge(id), mintBadge(badgeType), getLeaderboard(). Typed models |
Phase D: Health-to-Earn (40h, conditional on Phase A-C traction)¶
| ID | Task | Repo | Branch | Status | Est. Hours | Done When |
|---|---|---|---|---|---|---|
| T3-034 | Design health-to-earn token economics | research | feature/T3-034-token-economics-design |
[ ] | 8h | Token model: earn rate per activity, daily caps, anti-gaming measures, sustainability analysis. Document: why this won't be another STEPN |
| T3-035 | SPL token creation (or use existing) | backend-api | feature/T3-035-spl-token-creation |
[ ] | 4h | Create SPL token for health rewards OR use USDC rewards. Decision based on Phase D research |
| T3-036 | Earn calculation engine — steps/sleep/workouts -> points | backend-api | feature/T3-036-earn-calculation-engine |
[ ] | 8h | Function: calculate_earn(user_id, date) -> points earned. Inputs: steps, sleep quality, workout completion. Anti-gaming: GPS verification, device attestation |
| T3-037 | Daily earn summary and claim | app-user | feature/T3-037-daily-earn-summary |
[ ] | 4h | Daily summary card: "You earned 150 points today" with breakdown. Claim button transfers tokens to wallet |
| T3-038 | Earn history and lifetime stats | app-user | feature/T3-038-earn-history-stats |
[ ] | 3h | Earn history screen: daily earnings chart, lifetime total, streak multiplier status |
| T3-039 | Anti-gaming detection | backend-api | feature/T3-039-anti-gaming-detection |
[ ] | 6h | Detect: impossible step counts (>100K/day), sleep logging while active, GPS spoofing signals. Flag suspicious activity. Withhold rewards pending review |
| T3-040 | Reward shop — spend points on premium features | backend-api + app-user | feature/T3-040-reward-shop |
[ ] | 4h | Simple shop: redeem points for premium features (AI analytics, coach session discount). No physical goods initially |
| T3-041 | Leaderboard — top earners | backend-api | feature/T3-041-earner-leaderboard |
[ ] | 3h | GET /leaderboard/earn — weekly/monthly top earners. Prizes for top 10 (extra points, exclusive badges) |
Infrastructure & Testing (20h)¶
| ID | Task | Repo | Branch | Status | Est. Hours | Done When |
|---|---|---|---|---|---|---|
| T3-042 | Solana RPC configuration — mainnet + devnet | backend-api | feature/T3-042-solana-rpc-config |
[ ] | 2h | Config for Solana RPC endpoints. Devnet for testing, mainnet for production. Rate limiting. Fallback RPC providers |
| T3-043 | Solana keypair management — secure key storage | backend-api | feature/T3-043-keypair-management |
[ ] | 3h | Mint authority keypair stored in AWS Secrets Manager. Never exposed in code. Rotation procedure documented |
| T3-044 | Devnet testing — full flow with test SOL | backend-api + app-user | feature/T3-044-devnet-full-test |
[ ] | 4h | Full test on devnet: connect wallet -> earn badge -> mint NFT -> view on explorer. Test SOL from faucet |
| T3-045 | Mainnet deployment checklist | backend-api | feature/T3-045-mainnet-deploy-checklist |
[ ] | 2h | Checklist: tree created, metadata uploaded, RPC configured, keypair secured, fee payer funded, monitoring set up |
| T3-046 | Error handling for Solana transactions | backend-api | feature/T3-046-solana-error-handling |
[ ] | 3h | Handle: network errors, insufficient SOL, transaction timeout, duplicate mint attempts. User-friendly error messages |
| T3-047 | Solana transaction monitoring | backend-api | feature/T3-047-solana-tx-monitoring |
[ ] | 2h | Log all Solana transactions: type, signature, status, cost. Dashboard shows daily mint count, SOL spent, success rate |
| T3-048 | Track 3 integration tests | backend-api | feature/T3-048-track3-integration-tests |
[ ] | 4h | Integration tests: wallet connect, badge mint, payment flow, earn calculation. All pass on devnet |