Appearance
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:
| Package | Purpose | Port |
|---|---|---|
frontend | Public-facing map application | 8000 |
api | NestJS REST API | 8001 |
admin | Admin dashboard | 8002 |
help | User documentation (VitePress) | 8003 |
docs | Developer documentation (VitePress) | 8004 |
shared | Shared entities, types, and constants | — |
data-fetching | Background worker: fetches raw data | — |
data-processing | Background 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
@themeblock) - 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
| Role | Access |
|---|---|
user | View 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