Umfrage is a survey application that started as a minimal Nuxt starter and gradually took shape around authentication, survey workflows, results reporting, and deployment automation. This page gives a readable overview of the repository without requiring a deep look at the source.

How the project is put together

The frontend uses Nuxt UI for the interactive shell and page structure. The backend runs through Nitro routes under server/api/, while Prisma handles schema management, migrations, seed data, and the generated client. Shared helpers, DTOs, and table logic live in focused folders so the UI and server concerns stay clearly separated.


Backend at a glance
  • API routes validate input on the server and handle survey access, login, and results.
  • Prisma powers database access and keeps schema changes versioned in prisma/migrations/.
  • Generated client code lives under server/generated/prisma and is used by server routes.
  • Authorization and request helpers are grouped in server/utils/ and lib/.
CI / CD

The repository uses GitLab CI to build, test, package, and deploy the app. The pipeline has grown from basic build checks into a Docker-based flow with registry pushes, environment validation, and deployment jobs that run Docker Compose on the target host.

In practice this means the pipeline can generate Prisma artifacts, verify the Nuxt app, build the production image, and publish it under predictable tags for release and branch tracking.

Codebase layout
  • UI: pages, components, composables, and the shared table logic used across the app.
  • Server: API routes, middleware, plugins, utilities, and generated Prisma client code.
  • Data: schema, migrations, and seed scripts in prisma/.
  • Docs: public-facing documentation pages in pages/Documentation/.

Rough history

Below is a condensed history of the repository, assembled from the commit history and grouped into eight readable steps.

Current shape

The project now has a clear split between public pages, admin tooling, survey APIs, and deployment automation. The work around it continues to focus on keeping the UI readable, the backend typed, and CI/CD stable enough for repeatable releases.

Initial commit
1. Template scaffolded
The repo starts from a Pages/Nuxt starter, which gave the project its initial application shell and structure.
Early planning
2. Project planning added
Issues, milestones, and a concrete working plan were created so the app could move from an idea into tracked delivery.
UI foundation
3. UI direction settled
The app moved from Vuetify-style experimentation to Nuxt UI, with a custom header, navigation, and page styling approach.
Auth phase
4. Login and app shell landed
Authentication UI, app-bar behavior, and the main shell became stable enough to support protected areas like admin views.
Database phase
5. Prisma and typed data access
Prisma was introduced for database access, schema management, and generated types to keep server code consistent.
Feature build-out
6. Core survey features shipped
Survey viewing, access codes, admin panel work, and answer handling became the center of the app's domain logic.
Product maturity
7. Results, docs, and i18n expanded
Aggregated results, documentation pages, and localization made the app more usable and easier to explain.
Current direction
8. CI/CD and deployment hardened
GitLab CI, Docker builds, compose-based deployment, and runtime environment validation were refined into a repeatable release path.