Skip to content

Introduction

GIS Data is a geographic information system for visualizing and analyzing traffic data in Slovenia. It provides interactive map-based views of traffic accidents and road section data, with filtering, export, and administrative capabilities.

System Overview

The project is a pnpm monorepo with 8 workspace packages:

PackagePurposePort
frontendPublic-facing map application8000
apiNestJS REST API8001
adminAdmin dashboard8002
helpUser documentation (VitePress)8003
docsDeveloper documentation (VitePress)8004
sharedShared entities, types, and constants
data-fetchingBackground worker: fetches raw data
data-processingBackground worker: transforms raw data

Tech Stack

Frontend & Admin:

  • Vue 3.5, Vite 6, TypeScript 5.7
  • Tailwind CSS 4 (PostCSS-based, no config file — tokens in @theme block)
  • Pinia (state), Vue Router, TanStack Vue Query, PrimeVue (Aura preset)
  • Vuelidate for form validation
  • Mapbox GL JS map rendering (Onest font, custom markers, clustering)
  • Storybook 8 for component documentation

API:

  • NestJS 11, TypeORM 0.3, PostgreSQL 16 with PostGIS 3.4
  • JWT authentication (httpOnly cookies), role-based access control (superadmin > admin > user)
  • BullMQ job queues (Redis), Resend for transactional email
  • Swagger/OpenAPI auto-generated docs at /docs
  • Bull Board queue dashboard at /api/queues (superadmin only)

Infrastructure:

  • Docker Compose with PostGIS, Redis, and live-reload containers
  • TypeORM migrations for schema management
  • Husky pre-commit hooks (lint, type-check, build)

Data Flow

External Source (AVP WFS)

  data-fetching worker
  (fetches → raw_data table)

  data-processing worker
  (transforms → accidents, road_sections)

  NestJS API
  (serves filtered, paginated data)

  Frontend / Admin
  (interactive map, dashboards)

User Roles

RoleAccess
userView map, accidents, export data
admin+ Manage users, view audit logs
superadmin+ Data upload, GDPR operations, system config

Language

  • UI text, error messages, and labels are in Slovenian (sl-SI)
  • API Swagger descriptions are in Slovenian
  • Code, comments, and developer docs are in English
  • Internal error messages (e.g., NotFoundException) are in English