TravelJournal ist eine selbst gehostete, interaktive Webanwendung zur Dokumentation und Visualisierung persönlicher Reisen auf einer Karte. Die Anwendung richtet sich an Reiseliebhaber, die ihre Trips visuell festhalten und teilen möchten.
-
Reisedokumentation
Erfasse Reisen mit:- Standort (Geo-Koordinaten)
- Datum
- Titel und Beschreibung
-
Kartenvisualisierung
Interaktive Darstellung aller Reiseziele via Leaflet, inkl.:- Zoom & Marker
- Benutzerabhängige Anzeige
-
Medienverwaltung
- Upload von Fotos zu einzelnen Reisen
- Anzeige im Reiseverlauf
- Speicherung im MinIO (S3-kompatibel)
-
Benutzerverwaltung
- Registrierung & Login via JWT
- Zugriffskontrolle über Spring Security
- Containerisiert als traveljournal-frontend
- Single-Page-Application mit dynamischem Routing
- Kommunikation via REST-API
- Containerisiert als traveljournal-backend
- API-Endpunkte:
- POST /api/auth – Authentifizierung
- GET/POST /api/trips – Reisen verwalten
- POST /api/images – Bilder hochladen
- JWT-Authentifizierung über Spring Security
- Relationales Datenmodell mit Foreign Key Constraints
- High Availability mit Primary-Replica-Setup (via Patroni)
- Bilder: S3-kompatibler MinIO-Speicher (geo-redundant)
- Session Cache: Redis
- Orchestrierung: Kubernetes (GCP)
- CI/CD: GitLab-Pipeline inkl. Container Registry
User
├── id (UUID)
├── username (String)
└── password_hash (String)
Trip
├── id (UUID)
├── user_id (UUID, FK → User)
├── title (String)
├── description (Text)
├── location (Latitude, Longitude)
└── date (Date)
Image
├── id (UUID)
├── trip_id (UUID, FK → Trip)
└── storage_path (String)