├── .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 | --------------------------------------------------------------------------------