---
title: Introduction
description: Quiz Tracker lets you build a quiz, take it one question at a time, and keep a scored history of every attempt.
url: https://quiz-tracker.thally.app/
---

# Introduction

Quiz Tracker lets you build a quiz, take it one question at a time, and keep a scored history of every attempt.

## What it does

You create a quiz from three question types: free text, multiple choice, and
true or false. Anyone can then take it one question at a time. When they
submit, the server grades the answers and stores the attempt, so you can
reopen any past result with a per-question breakdown.

![The score screen after submitting a quiz: 2 of 3 correct, with each answer marked](/images/score-breakdown.png)

Grading forgives the differences a person wouldn't count. Case, extra spaces,
accents and edge punctuation are ignored, so `Paris.` matches `paris`. The
correct answers never reach the browser while someone is taking a quiz.

## Who it's for

- **Developers learning a full-stack pattern.** It shows a Next.js App Router
  app with a real REST layer, Zod validation shared by the API and the forms,
  and Prisma 7 on Postgres.
- **Tutors and teams who want a self-hosted quiz tool** they can read end to
  end and change.
- **Anyone scripting against a small, well-behaved API.** Every request and
  error uses one documented JSON shape.

It is not a learning management system. There are no user accounts, no
quiz editing after creation, and history keeps the latest ten attempts per quiz.

## How it's built

| Layer | Technology |
| --- | --- |
| Web app and API | Next.js 16 App Router, React 19, TypeScript |
| Validation | Zod, one schema per operation, shared by client and server |
| Database | PostgreSQL 17 through Prisma 7 and the `pg` driver adapter |
| Client data | TanStack Query and react-hook-form |
| Tests | Vitest unit and route-handler integration tests |

The source is on GitHub at
[SECHUBSYSTEM/quiz-tracker](https://github.com/SECHUBSYSTEM/quiz-tracker)
under the MIT license.

## Where to go next

#### [Run it locally](/quickstart)

    Start Postgres, run the app, and score your first quiz.

#### [Script the API](/guides/api)

    Create quizzes and submit attempts with curl or fetch.

#### [API reference](/api)

    Every endpoint, request body and response shape.

#### [Fix a problem](/quickstart#if-something-goes-wrong)

    Common errors and what they mean.