An Ethereum knowledge quiz dApp — connect your wallet, complete 5 challenges about ETH history and ecosystem, and prove you're a true supporter.
- Land on the hero page with animated Vitalik character
- Connect your Ethereum wallet (MetaMask / injected)
- Answer 5 quiz challenges (Genesis Block → The Endgame)
- Submit your results — completion is reported via Telegram Bot
src/
├── components/
│ ├── Hero.jsx # Landing section + wallet connect
│ ├── Challenges.jsx # Quiz flow controller
│ ├── Challenge.jsx # Single question card
│ ├── Characters.jsx # Animated Vitalik character
│ └── SubmitForm.jsx # Completion form → Telegram
├── data/
│ └── challenges.js # Quiz questions & answers
├── config.js # Env vars (Telegram creds)
├── wagmi.config.js # Wallet config (mainnet)
├── App.jsx # Root component
└── index.css # Tailwind + custom animations
# 1. Install dependencies
npm install
# 2. Create .env in project root
cp .env.example .env # or create manuallyAdd your Telegram credentials to .env:
VITE_TELEGRAM_BOT_TOKEN=your_bot_token
VITE_TELEGRAM_CHAT_ID=your_chat_id
# 3. Run dev server
npm run dev| Command | Description |
|---|---|
npm run dev |
Start dev server (Vite) |
npm run build |
Production build → dist/ |
npm run preview |
Preview production build |
npm run lint |
Run ESLint |
- Wallet: RainbowKit + wagmi, Ethereum mainnet only. WalletConnect is imported but disabled — add a
projectIdinwagmi.config.jsto enable - Styling: Tailwind v4 + custom CSS classes in
index.cssfor branded animations (glow, float, card backgrounds). Extend existing classes rather than adding inline styles - State: No router, no global state lib. Wallet connection state from wagmi gates the quiz section. Quiz progress is local component state
- Telegram: On quiz completion,
SubmitForm.jsxPOSTs results to Telegram Bot API using env credentials - Quiz data: All questions live in
src/data/challenges.js— edit there to add/change challenges