A web dashboard for analyzing your Relay Protocol cross-chain transaction history. Paste a wallet address or ENS name — no wallet connection required.
- Wallet Analytics — transaction count, total volume (USD), success rate, failed & refunded counts
- Top Chains — favorite chain, top origin, top destination
- Leaderboard — Supabase-powered ranking synced every 6 hours via GitHub Actions
- ENS Support —
.ethdomain resolution powered by viem - Shareable URLs — direct links to any wallet's stats
- Pixel Avatars — unique avatar per wallet with Blockscan integration
| Category | Tools |
|---|---|
| Frontend | React 19, TypeScript 5.9, Vite 7 |
| Styling | Tailwind CSS 4, shadcn/ui |
| Data | Supabase, Relay API, Axios, Viem |
| Tooling | Bun, Biome |
| CI/CD | GitHub Actions, GitHub Pages |
- Bun (v1.1+)
bun install
cp .env.example .env # configure your Supabase keysbun dev # http://localhost:5173
bun run build # production build
bun preview # preview production buildbun run lint # check
bun run lint:fix # auto-fix
bun run format # formatSee .env.example for all variables.
| Variable | Context | Description |
|---|---|---|
VITE_SUPABASE_URL |
Frontend | Supabase project URL |
VITE_SUPABASE_ANON_KEY |
Frontend | Supabase anonymous key (safe to expose) |
SUPABASE_URL |
Sync script | Supabase project URL |
SUPABASE_SERVICE_KEY |
Sync script | Supabase service role key (keep secret) |
RELAY_API_KEY |
Sync script | Optional — higher Relay API rate limits |
- Create a Supabase project
- Run
supabase/schema.sqlto create tables and RLS policies - Run
supabase/functions.sqlto create the upsert function - Add the environment variables above to your
.envand GitHub repository secrets
The leaderboard sync runs automatically via the sync workflow every 6 hours. First run seeds the cursor — data collection starts from that point forward (no historical backfill).
relay-protocol-stats/
├── src/
│ ├── components/ # UI components (WalletInput, StatsDisplay, Leaderboard, etc.)
│ ├── services/ # API clients (relayApi, leaderboardApi, ens)
│ ├── pages/ # Route pages (LeaderboardPage)
│ ├── lib/ # Utilities (supabase client, helpers)
│ ├── types/ # TypeScript type definitions
│ ├── App.tsx # Main app with routing
│ └── index.css # Global styles and animations
├── scripts/ # Sync scripts (sync-leaderboard.ts)
├── supabase/ # Database schema and functions
├── .github/workflows/ # CI/CD (deploy, sync)
├── biome.json # Linter/formatter config
└── package.json
Found a bug? Open an issue. Contributions welcome — see CONTRIBUTING.md.
Like this project? Leave a ⭐
Want to support my work? Become a sponsor 💖 or buy me a coffee ☕
Read the project's code of conduct.
This project is licensed under MIT License.
This project is created by Waren Gonzaga, with the help of awesome contributors.
💻💖☕ by Waren Gonzaga | YHWH 🙏