Hunty is a cross-platform scavenger-hunt platform and dApp that combines web, mobile, and on-chain rewards. Creators publish location-based hunts and players complete challenges to earn NFTs, tokens, and other reward assets via Stellar/Soroban.
- Multi-platform: Web app built with Next.js App Router and a React Native mobile app in
mobile/. - On-chain rewards: Stellar/Soroban smart-contract integrations, wallet adapters, and NFT reward flows.
- Decentralized assets: IPFS-hosted media and metadata for hunts, NFTs, and rewards.
- Developer tooling: Type-safe TypeScript code, Vitest unit tests, and Playwright E2E tests.
- Create, publish, and manage hunts from a creator dashboard.
- Schedule hunts with start/end datetimes, timezone-aware display, countdowns for upcoming hunts, and reminder emails before launch.
- Play hunts with location and clue validation, progress tracking, and completion flows.
- Mint and claim NFT rewards and on-chain token payouts for completed hunts.
- Community and leaderboard features for social play and competition.
- Frontend: Next.js, React, TypeScript
- Mobile: Expo / React Native
- Storage: IPFS for media and metadata
- Blockchain: Stellar + Soroban smart contracts, Freighter wallet support
- Testing: Vitest for unit tests, Playwright for E2E
- Tooling: pnpm, Tailwind CSS, PostCSS
app/— Next.js app router routes and pages for the web UIcomponents/— Reusable React components and UI patternslib/— Core utilities, blockchain adapters, stores, and helpersmobile/— Expo React Native mobile app and mobile-specific assetspublic/— Static assets served by the web appe2e/— End-to-end Playwright testscomponents/__tests__/,lib/__tests__/— Unit tests
- Node.js 18+ and pnpm
- Git
- For blockchain features: Stellar wallet (e.g., Freighter)
- For file uploads: Pinata account (Get API key)
- For email features: Resend account (Get API key)
- Clone the repository:
git clone https://github.com/Samuel1-ona/hunty.git
cd hunty- Install dependencies at the root:
pnpm install- Set up environment variables:
# Copy the example environment file
cp .env.example .env.localOpen .env.local and configure your environment variables. See .env.example for detailed documentation of all available options. Key variables include:
- PINATA_JWT - Required for IPFS file uploads
- RESEND_API_KEY - Required for email notifications
- NEXT_PUBLIC_WC_PROJECT_ID - Required for WalletConnect support
- DATABASE_URL - PostgreSQL connection string
- Contract addresses - Your deployed Soroban smart contract addresses
For detailed setup instructions, see DEVELOPMENT.md.
- Run the web app in development:
pnpm devThe app will be available at http://localhost:3000.
- Start the mobile app from
mobile/:
cd mobile
pnpm install
expo start- Mobile EAS Build & OTA setup:
cd mobile
pnpm run build:android:dev
pnpm run build:ios:preview
pnpm run update:preview- Configure reminder emails (optional but recommended for scheduled start reminders):
export RESEND_API_KEY=your_api_key- Run tests:
- Run tests:
pnpm test
pnpm run test:coverage
pnpm run e2eThe local coverage command writes an HTML report to coverage/index.html.
Creators can now define a hunt start and end time in their local timezone. The app stores those values in UTC internally and displays them for viewers in their browser timezone. Scheduled hunts automatically transition through scheduled → active → ended, and the reminder API can send a start-notice email to the creator ahead of launch.
This repository includes a local Docker development environment for the web app and a PostgreSQL database container.
- Build and start the development stack:
docker compose up --build- Open the web app at:
http://localhost:3000- PostgreSQL is available at
localhost:5432with:
POSTGRES_USER=huntyPOSTGRES_PASSWORD=huntyPOSTGRES_DB=hunty_dev
-
Code changes are mounted from the host into the container, so hot reload works automatically.
-
Stop the stack:
docker compose down- This project prefers
pnpm; apnpm-lock.yamlis included. - On-chain reward flows require wallet integrations and a local or testnet Stellar environment.
- See
lib/walletAdapter.tsandlib/stellarErrors.tsfor wallet helpers and common error handling.
- Finalize and audit Soroban reward contracts.
- Improve on-chain UX with clearer signing prompts and gasless flows.
- Add persistent IPFS pinning and CDN fallback for asset availability.
- Expand mobile parity with offline play support.
- Add creator templates, analytics, and better minting tools.
- Build community features like messaging, team hunts, and governance.
- See
CONTRIBUTING.mdfor contribution guidelines. - Use branches for feature work and include tests with focused changes.
- Open issues or PRs on the repository.
- Tag maintainers for urgent review requests.
This project is open source under the MIT License.