@wkalidev/trivia-quest-sdk 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wkalidev/trivia-quest-sdk",
3
- "version": "1.0.0",
4
- "description": "SDK for TriviaQuest - Blockchain quiz game on Celo",
3
+ "version": "1.2.0",
4
+ "description": "TriviaQ SDK Interact with TriviaQ smart - Blockchain quiz game on Celo",
5
5
  "main": "sdk/index.js",
6
6
  "types": "sdk/index.d.ts",
7
7
  "files": [
@@ -23,7 +23,7 @@
23
23
  "license": "MIT",
24
24
  "repository": {
25
25
  "type": "git",
26
- "url": "https://github.com/wkalidev/trivia-quest.git"
26
+ "url": "git+https://github.com/wkalidev/trivia-quest.git"
27
27
  },
28
28
  "homepage": "https://trivia-quest-eight.vercel.app",
29
29
  "peerDependencies": {
package/sdk/index.d.ts CHANGED
@@ -1,45 +1,69 @@
1
- export declare const CONTRACT_ADDRESS_MAINNET: "0xb215c82de33f98b270455f21f7edb7780da0d47d";
2
- export declare const CONTRACT_ADDRESS_TESTNET: "0x50b20728ba0ad803679b5428f267c89aede9a378";
3
- export declare const CONTRACT_ABI: readonly [{
4
- readonly name: "joinRound";
1
+ export declare const TRIVQ_TOKEN_ADDRESS: "0xe65fc5cacaf9a5aebbc0e151dee08a53f24a05c5";
2
+ export declare const TRIVIA_QUEST_ADDRESS: "0xffe22d3d1b63866ac9da8ac92fdb9ceddeadb0bb";
3
+ export declare const DAILY_CHECKIN_ADDRESS: "0x8650e6c477f8ae3933dc6d61d85e65c90cf71828";
4
+ export declare const REFERRAL_ADDRESS: "0xa0fcd85a25ecb71ca1ea9d63da058c832c27c62e";
5
+ export declare const TRIVQ_ABI: readonly [{
6
+ readonly name: "balanceOf";
5
7
  readonly type: "function";
6
- readonly stateMutability: "payable";
7
- readonly inputs: readonly [];
8
+ readonly stateMutability: "view";
9
+ readonly inputs: readonly [{
10
+ readonly name: "account";
11
+ readonly type: "address";
12
+ }];
13
+ readonly outputs: readonly [{
14
+ readonly name: "";
15
+ readonly type: "uint256";
16
+ }];
17
+ }, {
18
+ readonly name: "mintReward";
19
+ readonly type: "function";
20
+ readonly stateMutability: "nonpayable";
21
+ readonly inputs: readonly [{
22
+ readonly name: "player";
23
+ readonly type: "address";
24
+ }, {
25
+ readonly name: "amount";
26
+ readonly type: "uint256";
27
+ }];
8
28
  readonly outputs: readonly [];
9
29
  }, {
10
- readonly name: "getCurrentRound";
30
+ readonly name: "rewardsRemaining";
11
31
  readonly type: "function";
12
32
  readonly stateMutability: "view";
13
33
  readonly inputs: readonly [];
14
34
  readonly outputs: readonly [{
15
- readonly type: "tuple";
16
- readonly components: readonly [{
17
- readonly name: "id";
18
- readonly type: "uint256";
19
- }, {
20
- readonly name: "prizePool";
21
- readonly type: "uint256";
22
- }, {
23
- readonly name: "startTime";
24
- readonly type: "uint256";
25
- }, {
26
- readonly name: "endTime";
27
- readonly type: "uint256";
28
- }, {
29
- readonly name: "winner";
30
- readonly type: "address";
31
- }, {
32
- readonly name: "finished";
33
- readonly type: "bool";
34
- }];
35
+ readonly type: "uint256";
35
36
  }];
37
+ }];
38
+ export declare const TRIVIA_QUEST_ABI: readonly [{
39
+ readonly name: "joinRound";
40
+ readonly type: "function";
41
+ readonly stateMutability: "payable";
42
+ readonly inputs: readonly [];
43
+ readonly outputs: readonly [];
36
44
  }, {
37
- readonly name: "entryFee";
45
+ readonly name: "getCurrentRound";
38
46
  readonly type: "function";
39
47
  readonly stateMutability: "view";
40
48
  readonly inputs: readonly [];
41
49
  readonly outputs: readonly [{
50
+ readonly name: "id";
51
+ readonly type: "uint256";
52
+ }, {
53
+ readonly name: "prizePool";
54
+ readonly type: "uint256";
55
+ }, {
56
+ readonly name: "startTime";
42
57
  readonly type: "uint256";
58
+ }, {
59
+ readonly name: "endTime";
60
+ readonly type: "uint256";
61
+ }, {
62
+ readonly name: "topWinners";
63
+ readonly type: "address[]";
64
+ }, {
65
+ readonly name: "finished";
66
+ readonly type: "bool";
43
67
  }];
44
68
  }, {
45
69
  readonly name: "getLeaderboard";
@@ -63,99 +87,101 @@ export declare const CONTRACT_ABI: readonly [{
63
87
  }];
64
88
  }];
65
89
  }, {
66
- readonly name: "getPlayerStats";
90
+ readonly name: "getTotalPlayers";
67
91
  readonly type: "function";
68
92
  readonly stateMutability: "view";
69
- readonly inputs: readonly [{
70
- readonly name: "player";
71
- readonly type: "address";
72
- }];
93
+ readonly inputs: readonly [];
73
94
  readonly outputs: readonly [{
74
- readonly type: "tuple";
75
- readonly components: readonly [{
76
- readonly name: "score";
77
- readonly type: "uint256";
78
- }, {
79
- readonly name: "totalWinnings";
80
- readonly type: "uint256";
81
- }, {
82
- readonly name: "totalPoints";
83
- readonly type: "uint256";
84
- }, {
85
- readonly name: "gamesPlayed";
86
- readonly type: "uint256";
87
- }, {
88
- readonly name: "bestScore";
89
- readonly type: "uint256";
90
- }, {
91
- readonly name: "exists";
92
- readonly type: "bool";
93
- }];
95
+ readonly type: "uint256";
94
96
  }];
95
97
  }, {
96
- readonly name: "getTotalPlayers";
98
+ readonly name: "entryFee";
97
99
  readonly type: "function";
98
100
  readonly stateMutability: "view";
99
101
  readonly inputs: readonly [];
100
102
  readonly outputs: readonly [{
101
103
  readonly type: "uint256";
102
104
  }];
103
- }, {
104
- readonly name: "submitScore";
105
+ }];
106
+ export declare const DAILY_CHECKIN_ABI: readonly [{
107
+ readonly name: "checkIn";
105
108
  readonly type: "function";
106
109
  readonly stateMutability: "nonpayable";
110
+ readonly inputs: readonly [{
111
+ readonly name: "categoryId";
112
+ readonly type: "uint256";
113
+ }];
114
+ readonly outputs: readonly [];
115
+ }, {
116
+ readonly name: "getPlayerData";
117
+ readonly type: "function";
118
+ readonly stateMutability: "view";
107
119
  readonly inputs: readonly [{
108
120
  readonly name: "player";
109
121
  readonly type: "address";
122
+ }];
123
+ readonly outputs: readonly [{
124
+ readonly name: "lastCheckIn";
125
+ readonly type: "uint256";
110
126
  }, {
111
- readonly name: "score";
127
+ readonly name: "streak";
112
128
  readonly type: "uint256";
113
129
  }, {
114
- readonly name: "points";
130
+ readonly name: "totalCheckIns";
131
+ readonly type: "uint256";
132
+ }, {
133
+ readonly name: "checkInAvailable";
134
+ readonly type: "bool";
135
+ }, {
136
+ readonly name: "secondsUntilNext";
115
137
  readonly type: "uint256";
116
138
  }];
139
+ }, {
140
+ readonly name: "isCheckInAvailable";
141
+ readonly type: "function";
142
+ readonly stateMutability: "view";
143
+ readonly inputs: readonly [{
144
+ readonly name: "player";
145
+ readonly type: "address";
146
+ }];
147
+ readonly outputs: readonly [{
148
+ readonly type: "bool";
149
+ }];
150
+ }];
151
+ export declare const REFERRAL_ABI: readonly [{
152
+ readonly name: "registerReferral";
153
+ readonly type: "function";
154
+ readonly stateMutability: "nonpayable";
155
+ readonly inputs: readonly [{
156
+ readonly name: "referrer";
157
+ readonly type: "address";
158
+ }];
117
159
  readonly outputs: readonly [];
160
+ }, {
161
+ readonly name: "getReferralStats";
162
+ readonly type: "function";
163
+ readonly stateMutability: "view";
164
+ readonly inputs: readonly [{
165
+ readonly name: "user";
166
+ readonly type: "address";
167
+ }];
168
+ readonly outputs: readonly [{
169
+ readonly name: "refs";
170
+ readonly type: "uint256";
171
+ }, {
172
+ readonly name: "earned";
173
+ readonly type: "uint256";
174
+ }, {
175
+ readonly name: "referred";
176
+ readonly type: "bool";
177
+ }, {
178
+ readonly name: "referrer";
179
+ readonly type: "address";
180
+ }];
118
181
  }];
119
- export type LeaderboardEntry = {
120
- player: string;
121
- totalPoints: bigint;
122
- bestScore: bigint;
123
- gamesPlayed: bigint;
124
- };
125
- export type PlayerStats = {
126
- score: bigint;
127
- totalWinnings: bigint;
128
- totalPoints: bigint;
129
- gamesPlayed: bigint;
130
- bestScore: bigint;
131
- exists: boolean;
132
- };
133
- export type Round = {
134
- id: bigint;
135
- prizePool: bigint;
136
- startTime: bigint;
137
- endTime: bigint;
138
- winner: string;
139
- finished: boolean;
140
- };
141
- export declare function isMiniPay(): boolean;
142
- export declare function getMiniPayAccount(): Promise<string | null>;
143
- export declare function getMultiplier(streak: number): number;
144
- export declare function calculatePoints(correct: boolean, streak: number): number;
145
- export declare function getStreakLabel(streak: number): string;
146
- export declare const CELO_MAINNET: {
147
- id: number;
148
- name: string;
149
- rpcUrl: string;
150
- explorerUrl: string;
151
- contractAddress: "0xb215c82de33f98b270455f21f7edb7780da0d47d";
152
- };
153
- export declare const CELO_TESTNET: {
154
- id: number;
155
- name: string;
156
- rpcUrl: string;
157
- explorerUrl: string;
158
- contractAddress: "0x50b20728ba0ad803679b5428f267c89aede9a378";
159
- };
160
- export declare const SDK_VERSION = "1.0.0";
161
- //# sourceMappingURL=index.d.ts.map
182
+ export declare const CELO_CHAIN_ID = 42220;
183
+ export declare const CELO_RPC = "https://forno.celo.org";
184
+ export declare const DAILY_REWARD_TRIVQ = 100;
185
+ export declare const WEEK_BONUS_TRIVQ = 2000;
186
+ export declare const REFERRAL_REWARD_TRIVQ = 500;
187
+ export declare const TRIVQ_PER_POINT = 100;
package/sdk/index.js CHANGED
@@ -1,16 +1,37 @@
1
1
  "use strict";
2
- // TriviaQuest SDK
3
- // Blockchain quiz game on Celo
4
2
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.SDK_VERSION = exports.CELO_TESTNET = exports.CELO_MAINNET = exports.CONTRACT_ABI = exports.CONTRACT_ADDRESS_TESTNET = exports.CONTRACT_ADDRESS_MAINNET = void 0;
6
- exports.isMiniPay = isMiniPay;
7
- exports.getMiniPayAccount = getMiniPayAccount;
8
- exports.getMultiplier = getMultiplier;
9
- exports.calculatePoints = calculatePoints;
10
- exports.getStreakLabel = getStreakLabel;
11
- exports.CONTRACT_ADDRESS_MAINNET = "0xb215c82de33f98b270455f21f7edb7780da0d47d";
12
- exports.CONTRACT_ADDRESS_TESTNET = "0x50b20728ba0ad803679b5428f267c89aede9a378";
13
- exports.CONTRACT_ABI = [
3
+ exports.TRIVQ_PER_POINT = exports.REFERRAL_REWARD_TRIVQ = exports.WEEK_BONUS_TRIVQ = exports.DAILY_REWARD_TRIVQ = exports.CELO_RPC = exports.CELO_CHAIN_ID = exports.REFERRAL_ABI = exports.DAILY_CHECKIN_ABI = exports.TRIVIA_QUEST_ABI = exports.TRIVQ_ABI = exports.REFERRAL_ADDRESS = exports.DAILY_CHECKIN_ADDRESS = exports.TRIVIA_QUEST_ADDRESS = exports.TRIVQ_TOKEN_ADDRESS = void 0;
4
+ exports.TRIVQ_TOKEN_ADDRESS = "0xe65fc5cacaf9a5aebbc0e151dee08a53f24a05c5";
5
+ exports.TRIVIA_QUEST_ADDRESS = "0xffe22d3d1b63866ac9da8ac92fdb9ceddeadb0bb";
6
+ exports.DAILY_CHECKIN_ADDRESS = "0x8650e6c477f8ae3933dc6d61d85e65c90cf71828";
7
+ exports.REFERRAL_ADDRESS = "0xa0fcd85a25ecb71ca1ea9d63da058c832c27c62e";
8
+ exports.TRIVQ_ABI = [
9
+ {
10
+ name: "balanceOf",
11
+ type: "function",
12
+ stateMutability: "view",
13
+ inputs: [{ name: "account", type: "address" }],
14
+ outputs: [{ name: "", type: "uint256" }],
15
+ },
16
+ {
17
+ name: "mintReward",
18
+ type: "function",
19
+ stateMutability: "nonpayable",
20
+ inputs: [
21
+ { name: "player", type: "address" },
22
+ { name: "amount", type: "uint256" },
23
+ ],
24
+ outputs: [],
25
+ },
26
+ {
27
+ name: "rewardsRemaining",
28
+ type: "function",
29
+ stateMutability: "view",
30
+ inputs: [],
31
+ outputs: [{ type: "uint256" }],
32
+ },
33
+ ];
34
+ exports.TRIVIA_QUEST_ABI = [
14
35
  {
15
36
  name: "joinRound",
16
37
  type: "function",
@@ -24,26 +45,14 @@ exports.CONTRACT_ABI = [
24
45
  stateMutability: "view",
25
46
  inputs: [],
26
47
  outputs: [
27
- {
28
- type: "tuple",
29
- components: [
30
- { name: "id", type: "uint256" },
31
- { name: "prizePool", type: "uint256" },
32
- { name: "startTime", type: "uint256" },
33
- { name: "endTime", type: "uint256" },
34
- { name: "winner", type: "address" },
35
- { name: "finished", type: "bool" },
36
- ],
37
- },
48
+ { name: "id", type: "uint256" },
49
+ { name: "prizePool", type: "uint256" },
50
+ { name: "startTime", type: "uint256" },
51
+ { name: "endTime", type: "uint256" },
52
+ { name: "topWinners", type: "address[]" },
53
+ { name: "finished", type: "bool" },
38
54
  ],
39
55
  },
40
- {
41
- name: "entryFee",
42
- type: "function",
43
- stateMutability: "view",
44
- inputs: [],
45
- outputs: [{ type: "uint256" }],
46
- },
47
56
  {
48
57
  name: "getLeaderboard",
49
58
  type: "function",
@@ -62,99 +71,75 @@ exports.CONTRACT_ABI = [
62
71
  ],
63
72
  },
64
73
  {
65
- name: "getPlayerStats",
74
+ name: "getTotalPlayers",
66
75
  type: "function",
67
76
  stateMutability: "view",
68
- inputs: [{ name: "player", type: "address" }],
69
- outputs: [
70
- {
71
- type: "tuple",
72
- components: [
73
- { name: "score", type: "uint256" },
74
- { name: "totalWinnings", type: "uint256" },
75
- { name: "totalPoints", type: "uint256" },
76
- { name: "gamesPlayed", type: "uint256" },
77
- { name: "bestScore", type: "uint256" },
78
- { name: "exists", type: "bool" },
79
- ],
80
- },
81
- ],
77
+ inputs: [],
78
+ outputs: [{ type: "uint256" }],
82
79
  },
83
80
  {
84
- name: "getTotalPlayers",
81
+ name: "entryFee",
85
82
  type: "function",
86
83
  stateMutability: "view",
87
84
  inputs: [],
88
85
  outputs: [{ type: "uint256" }],
89
86
  },
87
+ ];
88
+ exports.DAILY_CHECKIN_ABI = [
90
89
  {
91
- name: "submitScore",
90
+ name: "checkIn",
92
91
  type: "function",
93
92
  stateMutability: "nonpayable",
94
- inputs: [
95
- { name: "player", type: "address" },
96
- { name: "score", type: "uint256" },
97
- { name: "points", type: "uint256" },
93
+ inputs: [{ name: "categoryId", type: "uint256" }],
94
+ outputs: [],
95
+ },
96
+ {
97
+ name: "getPlayerData",
98
+ type: "function",
99
+ stateMutability: "view",
100
+ inputs: [{ name: "player", type: "address" }],
101
+ outputs: [
102
+ { name: "lastCheckIn", type: "uint256" },
103
+ { name: "streak", type: "uint256" },
104
+ { name: "totalCheckIns", type: "uint256" },
105
+ { name: "checkInAvailable", type: "bool" },
106
+ { name: "secondsUntilNext", type: "uint256" },
98
107
  ],
108
+ },
109
+ {
110
+ name: "isCheckInAvailable",
111
+ type: "function",
112
+ stateMutability: "view",
113
+ inputs: [{ name: "player", type: "address" }],
114
+ outputs: [{ type: "bool" }],
115
+ },
116
+ ];
117
+ exports.REFERRAL_ABI = [
118
+ {
119
+ name: "registerReferral",
120
+ type: "function",
121
+ stateMutability: "nonpayable",
122
+ inputs: [{ name: "referrer", type: "address" }],
99
123
  outputs: [],
100
124
  },
125
+ {
126
+ name: "getReferralStats",
127
+ type: "function",
128
+ stateMutability: "view",
129
+ inputs: [{ name: "user", type: "address" }],
130
+ outputs: [
131
+ { name: "refs", type: "uint256" },
132
+ { name: "earned", type: "uint256" },
133
+ { name: "referred", type: "bool" },
134
+ { name: "referrer", type: "address" },
135
+ ],
136
+ },
101
137
  ];
102
- // ── MiniPay Utils ──────────────────────────────────────────
103
- function isMiniPay() {
104
- if (typeof window === "undefined")
105
- return false;
106
- return window.navigator.userAgent.includes("MiniPay");
107
- }
108
- async function getMiniPayAccount() {
109
- if (!isMiniPay())
110
- return null;
111
- try {
112
- const ethereum = window.ethereum;
113
- if (!ethereum)
114
- return null;
115
- const accounts = await ethereum.request({ method: "eth_requestAccounts" });
116
- return accounts[0] ?? null;
117
- }
118
- catch {
119
- return null;
120
- }
121
- }
122
- // ── Score Utils ────────────────────────────────────────────
123
- function getMultiplier(streak) {
124
- if (streak >= 5)
125
- return 3;
126
- if (streak >= 3)
127
- return 2;
128
- return 1;
129
- }
130
- function calculatePoints(correct, streak) {
131
- if (!correct)
132
- return 0;
133
- return 100 * getMultiplier(streak + 1);
134
- }
135
- function getStreakLabel(streak) {
136
- if (streak >= 5)
137
- return "🔥🔥🔥 x3 MEGA";
138
- if (streak >= 3)
139
- return "🔥🔥 x2 HOT";
140
- if (streak >= 1)
141
- return "🔥 Streak";
142
- return "";
143
- }
144
- // ── Network Config ─────────────────────────────────────────
145
- exports.CELO_MAINNET = {
146
- id: 42220,
147
- name: "Celo Mainnet",
148
- rpcUrl: "https://forno.celo.org",
149
- explorerUrl: "https://celoscan.io",
150
- contractAddress: exports.CONTRACT_ADDRESS_MAINNET,
151
- };
152
- exports.CELO_TESTNET = {
153
- id: 11142220,
154
- name: "Celo Sepolia",
155
- rpcUrl: "https://forno.celo-sepolia.celo-testnet.org",
156
- explorerUrl: "https://sepolia.celoscan.io",
157
- contractAddress: exports.CONTRACT_ADDRESS_TESTNET,
158
- };
159
- exports.SDK_VERSION = "1.0.0";
160
- //# sourceMappingURL=index.js.map
138
+ // Chain info
139
+ exports.CELO_CHAIN_ID = 42220;
140
+ exports.CELO_RPC = "https://forno.celo.org";
141
+ // Reward rates
142
+ exports.DAILY_REWARD_TRIVQ = 100;
143
+ exports.WEEK_BONUS_TRIVQ = 2000;
144
+ exports.REFERRAL_REWARD_TRIVQ = 500;
145
+ exports.TRIVQ_PER_POINT = 100;
package/README.md DELETED
@@ -1,119 +0,0 @@
1
- # Trivia Q 🎮
2
-
3
- > Play. Learn. Earn on Celo.
4
-
5
- Trivia Q is a blockchain-powered quiz game built on Celo where players earn real CELO rewards by answering questions about African culture, geography, Web3, science, sports, and general knowledge.
6
-
7
- ## 🌍 Why Africa?
8
-
9
- Celo's mission is financial inclusion for the unbanked. With 57% of African adults lacking bank accounts but owning smartphones, MiniPay is the perfect gateway. Trivia Q brings fun, education, and real micro-rewards to this audience.
10
-
11
- ## 🚀 Live Demo
12
-
13
- 👉 [trivia-quest-eight.vercel.app](https://trivia-quest-eight.vercel.app)
14
-
15
- ## 🎮 Game Features
16
-
17
- - ✅ 446 questions dans 6 catégories
18
- - ✅ 10 questions aléatoires par partie
19
- - ✅ Timer de 15 secondes par question
20
- - ✅ Système de Streak x2 / x3 multiplicateur de points
21
- - ✅ Animations Framer Motion
22
- - ✅ Sons & feedback audio (🔊/🔇 toggle)
23
- - ✅ Leaderboard on-chain en temps réel
24
- - ✅ Support 4 langues : 🇫🇷 FR / 🇬🇧 EN / 🇪🇸 ES / 🇮🇹 IT
25
- - ✅ MiniPay compatible (détection automatique)
26
- - ✅ PWA installable sur Android
27
-
28
- ## 📚 Question Categories
29
-
30
- | Catégorie | Nb questions |
31
- |---|---|
32
- | 🌍 Géographie Africaine | ~80 |
33
- | 💰 Web3 & Crypto | ~100 |
34
- | 📖 Histoire & Culture | ~60 |
35
- | 🔬 Science & Tech | ~80 |
36
- | ⚽ Sports | ~40 |
37
- | 🌐 Culture Générale | ~86 |
38
-
39
- ## 🏗️ Architecture
40
-
41
- - **Smart Contract** — Solidity 0.8.20 + OpenZeppelin sur Celo Mainnet
42
- - **Frontend** — Next.js 16 + TypeScript + TailwindCSS
43
- - **Animations** — Framer Motion
44
- - **Wallet** — RainbowKit + Wagmi + Viem + MiniPay hook
45
- - **i18n** — next-intl (FR, EN, ES, IT)
46
- - **Deploy** — Vercel
47
-
48
- ## 🔗 Smart Contracts
49
-
50
- | Network | Address |
51
- |---|---|
52
- | Celo Mainnet | `0xb215c82de33f98b270455f21f7edb7780da0d47d` |
53
- | Celo Sepolia (testnet) | `0x50b20728ba0ad803679b5428f267c89aede9a378` |
54
-
55
- ## 📱 MiniPay Compatible
56
-
57
- Trivia Q detects MiniPay automatically and connects the wallet without any popup — seamless UX for mobile users in Africa.
58
-
59
- ## 🔥 Streak System
60
-
61
- | Streak | Multiplicateur | Points par bonne réponse |
62
- |---|---|---|
63
- | 0-2 | x1 | 100 pts |
64
- | 3-4 | x2 🔥🔥 | 200 pts |
65
- | 5+ | x3 🔥🔥🔥 | 300 pts |
66
-
67
- ## 🏆 Leaderboard On-Chain
68
-
69
- Le leaderboard est stocké directement sur la blockchain Celo. Chaque joueur accumule des points, et les 10 meilleurs sont affichés en temps réel.
70
-
71
- ## 🌍 Multi-Language Support
72
-
73
- | Language | Code |
74
- |---|---|
75
- | 🇫🇷 Français | fr |
76
- | 🇬🇧 English | en |
77
- | 🇪🇸 Español | es |
78
- | 🇮🇹 Italiano | it |
79
-
80
- ## 🛠️ Local Setup
81
- ```bash
82
- # Clone
83
- git clone https://github.com/wkalidev/trivia-quest.git
84
- cd trivia-quest
85
-
86
- # Frontend
87
- cd frontend
88
- yarn install
89
- yarn dev
90
-
91
- # Contracts
92
- cd ../contracts
93
- npm install
94
- npx hardhat compile
95
- ```
96
-
97
- ## 🎯 Proof of Ship Checklist
98
-
99
- - ✅ Build For MiniPay — MiniPay hook integrated
100
- - ✅ Deploy On Celo — Smart contract on Celo Mainnet
101
- - ✅ Prove Your Humanity — Coinbase Verification
102
- - ✅ Submit Your Project
103
-
104
- ## 📋 Tech Stack
105
-
106
- | Layer | Tech |
107
- |---|---|
108
- | Blockchain | Celo Mainnet |
109
- | Smart Contract | Solidity 0.8.20 + OpenZeppelin |
110
- | Frontend | Next.js 16 + TypeScript |
111
- | Styling | TailwindCSS |
112
- | Animations | Framer Motion |
113
- | Web3 | Wagmi + Viem + RainbowKit |
114
- | i18n | next-intl |
115
- | Deploy | Vercel |
116
-
117
- ## 👤 Author
118
-
119
- Built by [@wkalidev](https://github.com/wkalidev) for Celo Proof of Ship — April 2026
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../sdk-src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,EAAG,4CAAqD,CAAC;AAC9F,eAAO,MAAM,wBAAwB,EAAG,4CAAqD,CAAC;AAE9F,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFf,CAAC;AAGX,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAGF,wBAAgB,SAAS,IAAI,OAAO,CAGnC;AAUD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUhE;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrD;AAGD,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,UAAU,CAAC"}
package/sdk/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../sdk-src/index.ts"],"names":[],"mappings":"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"}