2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00
2026-07-16 09:35:32 +02:00

d4rk_tablet — Behörden-MDT / CAD

Eigenständige Behörden-Software (MDT/CAD) für FiveM. Läuft unabhängig vom Game-Server: im Spiel (NUI-iframe) und im Browser (Leitstelle, 2. Monitor, echtes Tablet).

Das komplette System lebt im Backend/Web. Bürger & Fahrzeuge werden MDT-eigen geführt (nicht aus QBox gelesen) — so lassen sich auch illegale Einreise, unbekannte Täter (John Doe) und gefälschte Kennzeichen sauber abbilden.

Architektur

apps/tablet-web   React 18 + Vite 5 + Tailwind 4 + Zustand + TanStack Query + Lucide
backend/api       Fastify + Drizzle ORM (mysql2) + Socket.io  →  liest QBox-MariaDB direkt
fivem-bridge      minimale Lua-Resource (Token, NUI, Positionen, Waypoint)
packages/shared   TS-DTOs (zod) + Socket-Events + RBAC — von web & backend genutzt

Setup

pnpm install               # Node >=20, pnpm 10
cp .env.example .env        # DB-Creds, JWT-, HMAC-, Discord-Secrets eintragen
pnpm dev                    # startet web (5173) + api (3000) via Turborepo

Weitere Scripts: pnpm typecheck, pnpm build, pnpm db:generate, pnpm db:migrate.

Datenbank

  • Komplett eigenständig: alle Daten in eigenen mdt_*-Tabellen (Migrations via Drizzle Kit).
  • Bürger (mdt_citizens) und Fahrzeuge (mdt_vehicles) werden von der Behörde selbst geführt — QBox-Tabellen werden nicht mehr gelesen (bewusste Entscheidung für Hardcore-RP).

Milestones

  1. Scaffold — Monorepo, shared DTOs, Fastify + Vite Skelett, Drizzle-Setup
  2. Auth — JWT + RBAC-Guards, /auth/fivem (HMAC), Discord OAuth, Dev-Login
  3. Personen + Fahrzeuge — QBox-Reads (JSON-Parsing), REST + RBAC, TanStack-Query-UI. Siehe docs/dev-setup.md für Seed + Live-Test
  4. Strafakten / Haftbefehle — Strafenkatalog, Akte anlegen (Charges × Anzahl → Summe Bußgeld/Haft), Haftbefehl ausstellen/aufheben. Behörden-Branding + Tablet-Statusbar.
  5. Realtime-Dispatch + Map — Socket.io (JWT-Auth, Dept-Rooms), Einsätze live, Officer-Positionen live. MapLibre GTA-Satelliten-Map (Tiles served vom Backend /tiles/, Game→lng/lat-Projektion). HMAC-Bridge-Endpoints (/bridge/*).
  6. Rechte & Mitarbeiter — Hybrid-Rechte (granulare Nodes, QBox-Rang-Matrix Overrides, ins JWT gebacken). Visueller Rechte-Explorer (Baum MDT/CAD/Admin, Tri-State, Suche, Rollen-Templates) + Mitarbeiter-Verwaltung. Guards prüfen permissions.
  7. FiveM-Bridge — Lua-Resource (fivem-bridge/): Tablet öffnen (NUI-iframe + Token via postMessage), Server-Token-Flow (Shared-Secret), server-seitiger Positions-Push, Dienst-Sync, Dispatch-Export, Waypoint. Siehe docs/fivem-bridge.md. Backend-Contract verifiziert; Lua-Ingame-Test beim Betreiber.
  8. 🚧 Weitere Module (aus EMS-MDT-Vorlage): Start-Dashboard (Uhr, Termine, Schwarzes Brett) · Dokumente (Ordner + Tiptap Rich-Text [Tabellen/Aufgabenlisten/Link/Bild/…], Aktenzeichen DO-JJJJ-MM-TT-###) · Bürgerakten (MDT-eigene, voll editierbare Bürger-Registry: anlegen/bearbeiten/löschen, Mugshot-URL, Aufenthaltsstatus inkl. illegaler Einreise, Aliasse, Personenbeschreibung, Lizenzen, Fahndung) · Fahrzeug-Registry (MDT-eigen: anlegen/bearbeiten/löschen, Halter-Verknüpfung, Kennzeichen-Status registriert/gefälscht/gestohlen) · EMS-Behandlungsakten (Pendant zu Strafakten: Patient-Suche, Aktenzeichen TR-JJJJ-MM-TT-###, Diagnose + Behandlung als Tiptap Rich-Text, offen/abgeschlossen) · Gesetze (Strafgesetzbuch-Nachschlagewerk: nach Kategorie gruppiert, durchsuchbar, Gesetzestext als Tiptap Rich-Text + Bußgeld/Haftzeit, pflegbar mit mdt.laws.manage) · Kalender (echte Monatsansicht, Termine/Events mit Kategorie-Farben, Einladung einzelner/mehrerer Personen, Selbst-Eintragung + RSVP [Zusage/Absage/Vielleicht], Tiptap-Beschreibung) · Mein Profil · Dispatch-Units
  9. Freigabe-System (ACL) — konfigurierbare Behörden-Registry + Gruppen/Teams + modernes Freigabe-Panel (Lesen/Schreiben × Behörden/Gruppen/Personen, öffentlich-Toggle) auf Dokumenten/Ordnern und Bürgerakten (dort als Sichtbarkeits-ACL: welche Behörde sieht welche Akte). Verwaltung: Rechte-Matrix · Mitarbeiter · Behörden · Gruppen.
  10. Feature-Flags · Dienststatus-Gating · Ownership · Temporär/Vertretung · Audit-Log · Deployment

Dev-Hinweise

  • Browser-Dev ohne Login: VITE_DEV_AUTH_BYPASS=true in .env → Mock-Officer (police, admin).
  • Auth-Token kommt im NUI per postMessage({ action: 'auth', token, user }).
S
Description
No description provided
Readme
239 KiB
Languages
TypeScript 96.5%
Lua 1.8%
CSS 1%
JavaScript 0.5%
HTML 0.2%