├── .gitignore
├── README.md
├── app
├── data.js
├── favicon.ico
├── globals.css
├── layout.js
├── page.js
└── quiz
│ └── page.jsx
├── jsconfig.json
├── next.config.js
├── package-lock.json
├── package.json
└── public
├── next.svg
└── vercel.svg
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | ```
14 |
15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
16 |
17 | You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.
18 |
19 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
20 |
21 | ## Learn More
22 |
23 | To learn more about Next.js, take a look at the following resources:
24 |
25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
27 |
28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
29 |
30 | ## Deploy on Vercel
31 |
32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
33 |
34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
35 |
--------------------------------------------------------------------------------
/app/data.js:
--------------------------------------------------------------------------------
1 | export const quiz = {
2 | totalQuestions: 5,
3 | questions: [
4 | {
5 | id: 1,
6 | question: 'What is the capital of France?',
7 | answers: ['Madrid', 'Paris', 'Rome', 'Berlin'],
8 | correctAnswer: 'Paris',
9 | },
10 | {
11 | id: 2,
12 | question: 'What is the largest planet in our solar system?',
13 | answers: ['Mars', 'Jupiter', 'Venus', 'Saturn'],
14 | correctAnswer: 'Jupiter',
15 | },
16 | {
17 | id: 3,
18 | question: 'What is the smallest country in the world?',
19 | answers: ['Monaco', 'Maldives', 'Vatican City', 'San Marino'],
20 | correctAnswer: 'Vatican City',
21 | },
22 | {
23 | id: 4,
24 | question: 'What is the most widely spoken language in the world?',
25 | answers: ['English', 'Mandarin', 'Spanish', 'Hindi'],
26 | correctAnswer: 'Mandarin',
27 | },
28 | {
29 | id: 5,
30 | question: 'Who is the founder of Microsoft?',
31 | answers: ['Steve Jobs', 'Bill Gates', 'Elon Musk', 'Mark Zuckerberg'],
32 | correctAnswer: 'Bill Gates',
33 | },
34 | ],
35 | };
36 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireclint/nextjs13-quiz-app/d28238ff34ce1bb10c9cc11266d2e58983c548d6/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | padding: 0;
4 | margin: 0;
5 | }
6 |
7 | html, body {
8 | overflow-x: hidden;
9 | background-color: #000925;
10 | }
11 |
12 | main {
13 | padding: 1rem;
14 | }
15 |
16 | h1, h2 {
17 | color: #eee;
18 | }
19 |
20 | h3 {
21 | padding-bottom: 2rem;
22 | color: #000105;
23 | font-size: 1.8rem;
24 | }
25 |
26 | button {
27 | padding: 16px 8px;
28 | width: 100%;
29 | margin-top: 12px;
30 | font-size: 1rem;
31 | border-radius: 4px;
32 | cursor: pointer;
33 | background-color: #808080;
34 | color: #f8f8f8;
35 | }
36 |
37 | .btn-disabled {
38 | background-color: lightgray;
39 | }
40 |
41 | li {
42 | list-style-type: none;
43 | cursor: pointer;
44 | margin: 9px 0;
45 | padding: 16px 8px;
46 | color: #000105;
47 | border: 1px solid lightgray;
48 | }
49 |
50 | .li-hover:hover {
51 | background-color: #d8d8d8;
52 | columns: #fff;
53 | }
54 |
55 | .li-selected {
56 | color: #fff;
57 | background-color: #000925;
58 | }
59 |
60 | .container {
61 | max-width: 740px;
62 | width: 100%;
63 | margin: auto;
64 | padding: 1rem;
65 | }
66 |
67 | .quiz-container {
68 | background-color: #f8f8f8;
69 | padding: 1rem;
70 | margin-top: 2rem;
71 | border-radius: 4px;
72 | }
73 |
74 | .container p {
75 | padding: 8px 0;
76 | }
--------------------------------------------------------------------------------
/app/layout.js:
--------------------------------------------------------------------------------
1 | import './globals.css'
2 | import { Inter } from 'next/font/google'
3 |
4 | const inter = Inter({ subsets: ['latin'] })
5 |
6 | export const metadata = {
7 | title: 'Create Next App',
8 | description: 'Generated by create next app',
9 | }
10 |
11 | export default function RootLayout({ children }) {
12 | return (
13 |
14 |
{children}
15 |
16 | )
17 | }
18 |
--------------------------------------------------------------------------------
/app/page.js:
--------------------------------------------------------------------------------
1 | import Link from 'next/link';
2 |
3 | export default function Home() {
4 | return (
5 |
6 |
7 |
Quiz App
8 |
9 |
10 |
11 |
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/app/quiz/page.jsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 | import React, { useState } from 'react';
3 | import { quiz } from '../data.js';
4 |
5 | const page = () => {
6 | const [activeQuestion, setActiveQuestion] = useState(0);
7 | const [selectedAnswer, setSelectedAnswer] = useState('');
8 | const [checked, setChecked] = useState(false);
9 | const [selectedAnswerIndex, setSelectedAnswerIndex] = useState(null);
10 | const [showResult, setShowResult] = useState(false);
11 | const [result, setResult] = useState({
12 | score: 0,
13 | correctAnswers: 0,
14 | wrongAnswers: 0,
15 | });
16 |
17 | const { questions } = quiz;
18 | const { question, answers, correctAnswer } = questions[activeQuestion];
19 |
20 | // Select and check answer
21 | const onAnswerSelected = (answer, idx) => {
22 | setChecked(true);
23 | setSelectedAnswerIndex(idx);
24 | if (answer === correctAnswer) {
25 | setSelectedAnswer(true);
26 | console.log('true');
27 | } else {
28 | setSelectedAnswer(false);
29 | console.log('false');
30 | }
31 | };
32 |
33 | // Calculate score and increment to next question
34 | const nextQuestion = () => {
35 | setSelectedAnswerIndex(null);
36 | setResult((prev) =>
37 | selectedAnswer
38 | ? {
39 | ...prev,
40 | score: prev.score + 5,
41 | correctAnswers: prev.correctAnswers + 1,
42 | }
43 | : {
44 | ...prev,
45 | wrongAnswers: prev.wrongAnswers + 1,
46 | }
47 | );
48 | if (activeQuestion !== questions.length - 1) {
49 | setActiveQuestion((prev) => prev + 1);
50 | } else {
51 | setActiveQuestion(0);
52 | setShowResult(true);
53 | }
54 | setChecked(false);
55 | };
56 |
57 | return (
58 |
59 |
Quiz Page
60 |
61 |
62 | Question: {activeQuestion + 1}
63 | /{questions.length}
64 |
65 |
66 |
67 | {!showResult ? (
68 |
69 |
{questions[activeQuestion].question}
70 | {answers.map((answer, idx) => (
71 | onAnswerSelected(answer, idx)}
74 | className={
75 | selectedAnswerIndex === idx ? 'li-selected' : 'li-hover'
76 | }
77 | >
78 | {answer}
79 |
80 | ))}
81 | {checked ? (
82 |
85 | ) : (
86 |
90 | )}
91 |
92 | ) : (
93 |
94 |
Results
95 |
Overall {(result.score / 25) * 100}%
96 |
97 | Total Questions: {questions.length}
98 |
99 |
100 | Total Score: {result.score}
101 |
102 |
103 | Correct Answers: {result.correctAnswers}
104 |
105 |
106 | Wrong Answers: {result.wrongAnswers}
107 |
108 |
109 |
110 | )}
111 |
112 |
113 | );
114 | };
115 |
116 | export default page;
117 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./*"]
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {}
3 |
4 | module.exports = nextConfig
5 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nextjs13-quiz-app",
3 | "version": "0.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "nextjs13-quiz-app",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "next": "13.4.4",
12 | "react": "18.2.0",
13 | "react-dom": "18.2.0"
14 | }
15 | },
16 | "node_modules/@next/env": {
17 | "version": "13.4.4",
18 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.4.tgz",
19 | "integrity": "sha512-q/y7VZj/9YpgzDe64Zi6rY1xPizx80JjlU2BTevlajtaE3w1LqweH1gGgxou2N7hdFosXHjGrI4OUvtFXXhGLg=="
20 | },
21 | "node_modules/@next/swc-darwin-arm64": {
22 | "version": "13.4.4",
23 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.4.tgz",
24 | "integrity": "sha512-xfjgXvp4KalNUKZMHmsFxr1Ug+aGmmO6NWP0uoh4G3WFqP/mJ1xxfww0gMOeMeSq/Jyr5k7DvoZ2Pv+XOITTtw==",
25 | "cpu": [
26 | "arm64"
27 | ],
28 | "optional": true,
29 | "os": [
30 | "darwin"
31 | ],
32 | "engines": {
33 | "node": ">= 10"
34 | }
35 | },
36 | "node_modules/@next/swc-darwin-x64": {
37 | "version": "13.4.4",
38 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.4.tgz",
39 | "integrity": "sha512-ZY9Ti1hkIwJsxGus3nlubIkvYyB0gNOYxKrfsOrLEqD0I2iCX8D7w8v6QQZ2H+dDl6UT29oeEUdDUNGk4UEpfg==",
40 | "cpu": [
41 | "x64"
42 | ],
43 | "optional": true,
44 | "os": [
45 | "darwin"
46 | ],
47 | "engines": {
48 | "node": ">= 10"
49 | }
50 | },
51 | "node_modules/@next/swc-linux-arm64-gnu": {
52 | "version": "13.4.4",
53 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.4.tgz",
54 | "integrity": "sha512-+KZnDeMShYkpkqAvGCEDeqYTRADJXc6SY1jWXz+Uo6qWQO/Jd9CoyhTJwRSxvQA16MoYzvILkGaDqirkRNctyA==",
55 | "cpu": [
56 | "arm64"
57 | ],
58 | "optional": true,
59 | "os": [
60 | "linux"
61 | ],
62 | "engines": {
63 | "node": ">= 10"
64 | }
65 | },
66 | "node_modules/@next/swc-linux-arm64-musl": {
67 | "version": "13.4.4",
68 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.4.tgz",
69 | "integrity": "sha512-evC1twrny2XDT4uOftoubZvW3EG0zs0ZxMwEtu/dDGVRO5n5pT48S8qqEIBGBUZYu/Xx4zzpOkIxx1vpWdE+9A==",
70 | "cpu": [
71 | "arm64"
72 | ],
73 | "optional": true,
74 | "os": [
75 | "linux"
76 | ],
77 | "engines": {
78 | "node": ">= 10"
79 | }
80 | },
81 | "node_modules/@next/swc-linux-x64-gnu": {
82 | "version": "13.4.4",
83 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.4.tgz",
84 | "integrity": "sha512-PX706XcCHr2FfkyhP2lpf+pX/tUvq6/ke7JYnnr0ykNdEMo+sb7cC/o91gnURh4sPYSiZJhsF2gbIqg9rciOHQ==",
85 | "cpu": [
86 | "x64"
87 | ],
88 | "optional": true,
89 | "os": [
90 | "linux"
91 | ],
92 | "engines": {
93 | "node": ">= 10"
94 | }
95 | },
96 | "node_modules/@next/swc-linux-x64-musl": {
97 | "version": "13.4.4",
98 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.4.tgz",
99 | "integrity": "sha512-TKUUx3Ftd95JlHV6XagEnqpT204Y+IsEa3awaYIjayn0MOGjgKZMZibqarK3B1FsMSPaieJf2FEAcu9z0yT5aA==",
100 | "cpu": [
101 | "x64"
102 | ],
103 | "optional": true,
104 | "os": [
105 | "linux"
106 | ],
107 | "engines": {
108 | "node": ">= 10"
109 | }
110 | },
111 | "node_modules/@next/swc-win32-arm64-msvc": {
112 | "version": "13.4.4",
113 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.4.tgz",
114 | "integrity": "sha512-FP8AadgSq4+HPtim7WBkCMGbhr5vh9FePXiWx9+YOdjwdQocwoCK5ZVC3OW8oh3TWth6iJ0AXJ/yQ1q1cwSZ3A==",
115 | "cpu": [
116 | "arm64"
117 | ],
118 | "optional": true,
119 | "os": [
120 | "win32"
121 | ],
122 | "engines": {
123 | "node": ">= 10"
124 | }
125 | },
126 | "node_modules/@next/swc-win32-ia32-msvc": {
127 | "version": "13.4.4",
128 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.4.tgz",
129 | "integrity": "sha512-3WekVmtuA2MCdcAOrgrI+PuFiFURtSyyrN1I3UPtS0ckR2HtLqyqmS334Eulf15g1/bdwMteePdK363X/Y9JMg==",
130 | "cpu": [
131 | "ia32"
132 | ],
133 | "optional": true,
134 | "os": [
135 | "win32"
136 | ],
137 | "engines": {
138 | "node": ">= 10"
139 | }
140 | },
141 | "node_modules/@next/swc-win32-x64-msvc": {
142 | "version": "13.4.4",
143 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.4.tgz",
144 | "integrity": "sha512-AHRITu/CrlQ+qzoqQtEMfaTu7GHaQ6bziQln/pVWpOYC1wU+Mq6VQQFlsDtMCnDztPZtppAXdvvbNS7pcfRzlw==",
145 | "cpu": [
146 | "x64"
147 | ],
148 | "optional": true,
149 | "os": [
150 | "win32"
151 | ],
152 | "engines": {
153 | "node": ">= 10"
154 | }
155 | },
156 | "node_modules/@swc/helpers": {
157 | "version": "0.5.1",
158 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz",
159 | "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==",
160 | "dependencies": {
161 | "tslib": "^2.4.0"
162 | }
163 | },
164 | "node_modules/busboy": {
165 | "version": "1.6.0",
166 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
167 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
168 | "dependencies": {
169 | "streamsearch": "^1.1.0"
170 | },
171 | "engines": {
172 | "node": ">=10.16.0"
173 | }
174 | },
175 | "node_modules/caniuse-lite": {
176 | "version": "1.0.30001489",
177 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz",
178 | "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==",
179 | "funding": [
180 | {
181 | "type": "opencollective",
182 | "url": "https://opencollective.com/browserslist"
183 | },
184 | {
185 | "type": "tidelift",
186 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
187 | },
188 | {
189 | "type": "github",
190 | "url": "https://github.com/sponsors/ai"
191 | }
192 | ]
193 | },
194 | "node_modules/client-only": {
195 | "version": "0.0.1",
196 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
197 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
198 | },
199 | "node_modules/js-tokens": {
200 | "version": "4.0.0",
201 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
202 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
203 | },
204 | "node_modules/loose-envify": {
205 | "version": "1.4.0",
206 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
207 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
208 | "dependencies": {
209 | "js-tokens": "^3.0.0 || ^4.0.0"
210 | },
211 | "bin": {
212 | "loose-envify": "cli.js"
213 | }
214 | },
215 | "node_modules/nanoid": {
216 | "version": "3.3.6",
217 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
218 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
219 | "funding": [
220 | {
221 | "type": "github",
222 | "url": "https://github.com/sponsors/ai"
223 | }
224 | ],
225 | "bin": {
226 | "nanoid": "bin/nanoid.cjs"
227 | },
228 | "engines": {
229 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
230 | }
231 | },
232 | "node_modules/next": {
233 | "version": "13.4.4",
234 | "resolved": "https://registry.npmjs.org/next/-/next-13.4.4.tgz",
235 | "integrity": "sha512-C5S0ysM0Ily9McL4Jb48nOQHT1BukOWI59uC3X/xCMlYIh9rJZCv7nzG92J6e1cOBqQbKovlpgvHWFmz4eKKEA==",
236 | "dependencies": {
237 | "@next/env": "13.4.4",
238 | "@swc/helpers": "0.5.1",
239 | "busboy": "1.6.0",
240 | "caniuse-lite": "^1.0.30001406",
241 | "postcss": "8.4.14",
242 | "styled-jsx": "5.1.1",
243 | "zod": "3.21.4"
244 | },
245 | "bin": {
246 | "next": "dist/bin/next"
247 | },
248 | "engines": {
249 | "node": ">=16.8.0"
250 | },
251 | "optionalDependencies": {
252 | "@next/swc-darwin-arm64": "13.4.4",
253 | "@next/swc-darwin-x64": "13.4.4",
254 | "@next/swc-linux-arm64-gnu": "13.4.4",
255 | "@next/swc-linux-arm64-musl": "13.4.4",
256 | "@next/swc-linux-x64-gnu": "13.4.4",
257 | "@next/swc-linux-x64-musl": "13.4.4",
258 | "@next/swc-win32-arm64-msvc": "13.4.4",
259 | "@next/swc-win32-ia32-msvc": "13.4.4",
260 | "@next/swc-win32-x64-msvc": "13.4.4"
261 | },
262 | "peerDependencies": {
263 | "@opentelemetry/api": "^1.1.0",
264 | "fibers": ">= 3.1.0",
265 | "react": "^18.2.0",
266 | "react-dom": "^18.2.0",
267 | "sass": "^1.3.0"
268 | },
269 | "peerDependenciesMeta": {
270 | "@opentelemetry/api": {
271 | "optional": true
272 | },
273 | "fibers": {
274 | "optional": true
275 | },
276 | "sass": {
277 | "optional": true
278 | }
279 | }
280 | },
281 | "node_modules/picocolors": {
282 | "version": "1.0.0",
283 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
284 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
285 | },
286 | "node_modules/postcss": {
287 | "version": "8.4.14",
288 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
289 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
290 | "funding": [
291 | {
292 | "type": "opencollective",
293 | "url": "https://opencollective.com/postcss/"
294 | },
295 | {
296 | "type": "tidelift",
297 | "url": "https://tidelift.com/funding/github/npm/postcss"
298 | }
299 | ],
300 | "dependencies": {
301 | "nanoid": "^3.3.4",
302 | "picocolors": "^1.0.0",
303 | "source-map-js": "^1.0.2"
304 | },
305 | "engines": {
306 | "node": "^10 || ^12 || >=14"
307 | }
308 | },
309 | "node_modules/react": {
310 | "version": "18.2.0",
311 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
312 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
313 | "dependencies": {
314 | "loose-envify": "^1.1.0"
315 | },
316 | "engines": {
317 | "node": ">=0.10.0"
318 | }
319 | },
320 | "node_modules/react-dom": {
321 | "version": "18.2.0",
322 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
323 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
324 | "dependencies": {
325 | "loose-envify": "^1.1.0",
326 | "scheduler": "^0.23.0"
327 | },
328 | "peerDependencies": {
329 | "react": "^18.2.0"
330 | }
331 | },
332 | "node_modules/scheduler": {
333 | "version": "0.23.0",
334 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
335 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
336 | "dependencies": {
337 | "loose-envify": "^1.1.0"
338 | }
339 | },
340 | "node_modules/source-map-js": {
341 | "version": "1.0.2",
342 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
343 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
344 | "engines": {
345 | "node": ">=0.10.0"
346 | }
347 | },
348 | "node_modules/streamsearch": {
349 | "version": "1.1.0",
350 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
351 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
352 | "engines": {
353 | "node": ">=10.0.0"
354 | }
355 | },
356 | "node_modules/styled-jsx": {
357 | "version": "5.1.1",
358 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
359 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
360 | "dependencies": {
361 | "client-only": "0.0.1"
362 | },
363 | "engines": {
364 | "node": ">= 12.0.0"
365 | },
366 | "peerDependencies": {
367 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
368 | },
369 | "peerDependenciesMeta": {
370 | "@babel/core": {
371 | "optional": true
372 | },
373 | "babel-plugin-macros": {
374 | "optional": true
375 | }
376 | }
377 | },
378 | "node_modules/tslib": {
379 | "version": "2.5.2",
380 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz",
381 | "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA=="
382 | },
383 | "node_modules/zod": {
384 | "version": "3.21.4",
385 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
386 | "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==",
387 | "funding": {
388 | "url": "https://github.com/sponsors/colinhacks"
389 | }
390 | }
391 | }
392 | }
393 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nextjs13-quiz-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "next": "13.4.4",
13 | "react": "18.2.0",
14 | "react-dom": "18.2.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------