Polish driver's license theoritical exam nuxt web app https://testpj.netman.ovh
Find a file
NetMan 08e2060245 i18n: german ui, readme overhaul
compose: unless-stopped
add source code, license, author notice at the bottom of index page
2025-12-17 17:48:06 +01:00
assets introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
components Change database (newer data) 2025-12-16 23:01:57 +01:00
db Change database (newer data) 2025-12-16 23:01:57 +01:00
i18n/locales i18n: german ui, readme overhaul 2025-12-17 17:48:06 +01:00
middleware introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
pages i18n: german ui, readme overhaul 2025-12-17 17:48:06 +01:00
providers introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
public introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
server i18n: questions in all langs 2025-12-16 20:59:36 +01:00
store introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
types introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
.env.example introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
.gitignore introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
app.vue introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
categories.ts Change database (newer data) 2025-12-16 23:01:57 +01:00
docker-compose.yml i18n: german ui, readme overhaul 2025-12-17 17:48:06 +01:00
Dockerfile introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
drizzle.config.ts introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
eslint.config.mjs introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
LICENSE introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
nuxt.config.ts introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
package.json introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
pnpm-lock.yaml introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
prettier.config.mjs introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
README.md i18n: german ui, readme overhaul 2025-12-17 17:48:06 +01:00
tailwind.config.js introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00
tsconfig.json introduce nuxt-prawo-jazdy 2025-12-16 20:21:04 +01:00

nuxt-prawo-jazdy

Required

db

A python script at db-prawo-jazdy is designed to convert the CSV(s) to a SQLite database for use here. When you acquire your database via that script, insert it at your desired path (default ./db/database.db) and change the DATABASE_URL environment value in .env. Visit db-prawo-jazdy for more details.

The database from November 2025 is included here at ./db/database.db

media

A shell script at media-prawo-jazdy for media files (available on the website of the Ministry of Infrastructure under the link title Pytania egzaminacyjne na prawo jazdy) will convert (copy) all .wmv files to .mp4 and copy all .jpeg files to .jpg. When you have all media and the script completed successfully, host these files on a webserver of your choice (e.g. apache, nginx), and change the CDN_URL environment value in .env to your webserver URL including the folder path to the media files. Visit media-prawo-jazdy for more details.

To-do:

  • re-forge database structure (good for now)
  • come up with how to show results appropriately
  • better answer click recognition
  • beautify website (good for now)
  • Fixed? Needs more testing, but should be fine. (question-mark?) - middleware between pages; finishing exam sometimes redirects to homepage instead of results, major issue
  • question timers
  • exam (& results?) warning leave message on exit and timer end (and definitely on refresh)
  • add keybinds:
    • S - start, D - next question, X - exam end, T/Y - yes, N - no, A - A, B - B, C - C
  • i18n - pl, en, de, ua (not all questions are available in ua, api handle)
    • UI i18n
      • pl
      • en
      • de
      • ua
    • db: examstore add language field, api handle languages (questions lang)
  • nuxt3 -> nuxt4
  • clean up js code in exam.vue and result.vue (currently a little bit of a mess)

Some information about the project

My intention is, to share access to test exams free of charge, you don't have to pay me - although you can, I greatly appreciate if you donate!

I'm planning to host this project publicly and to put non-invasive ads if it gains enough traction

All data used by this software is public information by definition provided in the Polish Constitution - article 61., and can be acquired by either checking above links on the gov website, or by writing to the Ministry (if something happened to be missing) ==> (blog post to write in the future)

This project is a website mimicking an official driver's license theoritical exam (for all license categories provided by the Ministry: A, A1, A2, AM, B, B1, C, C1, D, D1, T, PT) with a seperate media http server (not included here), connected using drizzle ORM to a SQLite database

Setup

Copy .env.example to .env and modify it to values specified in the Required#db and Required#media sections according to your case.

This project utilizes pnpm, thus it is recommended

pnpm install

Development Server

Start the development server on http://localhost:3000:

pnpm run dev

Production

Build the application for production:

pnpm build

Locally preview production build:

pnpm preview

Check out the Nuxt documentation for more information.

Licensing (AGPL-3.0-only)

nuxt-prawo-jazdy: Polish driver's license theoritical exam nuxt web app

Copyright (C) 2025 NetMan

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, AGPL-3.0-only.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.