Skip to content

CBS-Studios/Drava

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DRAVA – Drive. Track. Compete.

DRAVA ist eine mobile App zur automatischen Aufzeichnung, Visualisierung und Analyse von Autofahrten. GPS-Tracking kombiniert mit Statistiken und Gamification.

Features

  • 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

Tech Stack

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

Projektstruktur

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

Schnellstart (Entwicklung)

Voraussetzungen

1. Repository klonen

git clone <repo-url>
cd drava

2. Datenbank starten

docker compose up -d

Startet PostgreSQL auf Port 5432.

3. Backend einrichten

cd backend

# .env Datei aus Template erstellen
cp .env.example .env

# Dependencies installieren + Datenbank vorbereiten
npm run setup

# Entwicklungsserver starten
npm run dev

Das Backend läuft auf http://localhost:3000. Test: http://localhost:3000/api/health

4. Mobile App starten

cd mobile

# Dependencies installieren
npm install

# Expo starten
npm start

QR-Code mit Expo Go scannen. Die App erkennt automatisch die IP des Entwicklungsrechners.


API Endpunkte

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

Deployment (Production)

Option A: Docker Compose (empfohlen)

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 --build

Das Backend wird gebaut und ist auf Port 3000 erreichbar.

Option B: Manuell auf Server

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

Option C: Railway / Render / Fly.io

  1. Backend-Ordner als separates Repo oder Subfolder deployen
  2. PostgreSQL-Addon aktivieren
  3. Umgebungsvariablen setzen:
    • DATABASE_URL → von der Plattform bereitgestellt
    • JWT_SECRET → sicherer Zufallsstring
    • JWT_REFRESH_SECRET → sicherer Zufallsstring
    • PORT → meist automatisch gesetzt
  4. Build Command: npm run build
  5. Start Command: npm start

Mobile App mit deployed Backend verbinden

In mobile/services/api.ts die Production-URL setzen:

// In getBaseUrl():
return 'https://deine-api-domain.com/api';

Nützliche Befehle

# 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

Umgebungsvariablen

Backend (backend/.env)

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors