DRAVA ist eine mobile App zur automatischen Aufzeichnung, Visualisierung und Analyse von Autofahrten. GPS-Tracking kombiniert mit Statistiken und Gamification.
- Automatische Fahrtaufzeichnung – Erkennung und Speicherung von Fahrten mittels GPS-Daten
- Interaktive Karte – Strecken visuell nachverfolgen inkl. Distanz, Fahrtdauer, Durchschnitts- und Maximalgeschwindigkeit
- Detaillierte Analyse – Geschwindigkeitsverläufe und weitere Statistiken grafisch aufbereitet
- Persönliches Profil – Alle Fahrten gespeichert und in einer übersichtlichen Gesamtstatistik zusammengefasst
- Leaderboards & Challenges – Wettbewerb mit Freunden und anderen Fahrer:innen für zusätzliche Motivation
| Bereich | Technologie |
|---|---|
| Mobile App | Expo (React Native) + TypeScript |
| Backend API | Express.js + TypeScript |
| Datenbank | PostgreSQL 16 |
| ORM | Prisma 7 |
| Auth | JWT (Access + Refresh Tokens) |
| State | Zustand + TanStack React Query |
| Container | Docker |
drava/
├── backend/ # Express API Server
│ ├── src/
│ │ ├── controllers/ # Route Handler
│ │ ├── middleware/ # Auth Middleware
│ │ ├── routes/ # API Routes
│ │ └── lib/ # Prisma Client
│ ├── prisma/
│ │ └── schema.prisma # Datenbank Schema
│ ├── Dockerfile # Production Build
│ └── .env.example # Env Template
├── mobile/ # Expo App
│ ├── app/ # Screens (File-based Routing)
│ │ ├── (auth)/ # Login & Registrierung
│ │ ├── (tabs)/ # Hauptnavigation
│ │ └── drive/ # Fahrt-Details
│ ├── services/ # API Client
│ ├── stores/ # Zustand Stores
│ ├── types/ # TypeScript Types
│ └── utils/ # Hilfsfunktionen
├── docker-compose.yml # PostgreSQL + Backend
└── README.md
- Node.js ≥ 20
- Docker Desktop
- Expo Go auf dem Smartphone
- Smartphone und PC im selben WLAN
git clone <repo-url>
cd dravadocker compose up -dStartet PostgreSQL auf Port 5432.
cd backend
# .env Datei aus Template erstellen
cp .env.example .env
# Dependencies installieren + Datenbank vorbereiten
npm run setup
# Entwicklungsserver starten
npm run devDas Backend läuft auf http://localhost:3000. Test: http://localhost:3000/api/health
cd mobile
# Dependencies installieren
npm install
# Expo starten
npm startQR-Code mit Expo Go scannen. Die App erkennt automatisch die IP des Entwicklungsrechners.
| Methode | Route | Beschreibung |
|---|---|---|
POST |
/api/auth/register |
Registrierung |
POST |
/api/auth/login |
Login |
POST |
/api/auth/refresh |
Token erneuern |
GET |
/api/auth/me |
Eigenes Profil |
GET |
/api/drives |
Fahrten auflisten |
POST |
/api/drives |
Fahrt speichern |
GET |
/api/drives/:id |
Fahrt-Details |
DELETE |
/api/drives/:id |
Fahrt löschen |
GET |
/api/users/profile |
Profil abrufen |
PUT |
/api/users/profile |
Profil bearbeiten |
GET |
/api/leaderboard |
Rangliste |
GET |
/api/health |
Health Check |
Setzt JWT Secrets als Umgebungsvariablen und startet alles:
# .env mit echten Secrets erstellen
JWT_SECRET=mein-sicherer-secret-key
JWT_REFRESH_SECRET=mein-sicherer-refresh-key
# Backend + DB starten
docker compose --profile production up -d --buildDas Backend wird gebaut und ist auf Port 3000 erreichbar.
cd backend
# .env mit Production-Werten konfigurieren
cp .env.example .env
# DATABASE_URL, JWT_SECRET, JWT_REFRESH_SECRET anpassen!
# Build
npm ci
npm run build
# Datenbank Schema anwenden
npx prisma db push
# Starten (mit PM2 oder systemd)
node dist/index.js- Backend-Ordner als separates Repo oder Subfolder deployen
- PostgreSQL-Addon aktivieren
- Umgebungsvariablen setzen:
DATABASE_URL→ von der Plattform bereitgestelltJWT_SECRET→ sicherer ZufallsstringJWT_REFRESH_SECRET→ sicherer ZufallsstringPORT→ meist automatisch gesetzt
- Build Command:
npm run build - Start Command:
npm start
In mobile/services/api.ts die Production-URL setzen:
// In getBaseUrl():
return 'https://deine-api-domain.com/api';# Backend
npm run dev # Dev Server mit Hot Reload
npm run build # TypeScript kompilieren
npm run setup # Ersteinrichtung (install + Prisma)
npm run db:studio # Prisma Studio (DB GUI)
npm run db:push # Schema auf DB anwenden
npm run db:reset # DB zurücksetzen
# Mobile
npm start # Expo Dev Server
npm run android # Android starten
npm run ios # iOS starten
# Docker
docker compose up -d # DB starten
docker compose down # DB stoppen
docker compose --profile production up -d --build # Alles starten
docker compose logs -f api # Backend Logs| Variable | Beschreibung | Beispiel |
|---|---|---|
DATABASE_URL |
PostgreSQL Connection String | postgresql://user:pass@host:5432/drava |
JWT_SECRET |
Secret für Access Tokens | Zufallsstring, mind. 32 Zeichen |
JWT_REFRESH_SECRET |
Secret für Refresh Tokens | Zufallsstring, mind. 32 Zeichen |
PORT |
Server Port | 3000 |