🖨️ Als PDF drucken
🛠️ Red Sea Dreams - Entwicklung Dokumentation
Technologie-Stack
Frontend
Technologie
Version
Verwendung
React
18.x
UI Framework
React Router
6.x
Routing
Tailwind CSS
3.x
Styling
Axios/Fetch
-
API Calls
React Helmet
-
SEO Meta Tags
Backend
Technologie
Version
Verwendung
Python
3.11+
Programmiersprache
FastAPI
0.100+
Web Framework
Pydantic
2.x
Datenvalidierung
Motor
-
Async MongoDB Driver
HTTPX
-
HTTP Client
Datenbank
Technologie
Verwendung
MongoDB
Hauptdatenbank
Collections
hotels, rooms, bookings, customers, activities, transfers, reviews
Externe Services
Service
Verwendung
Stripe
Zahlungsabwicklung
Amadeus API
Live-Flugsuche
ExchangeRate API
Wechselkurse
Emergent Mail
E-Mail-Versand
OpenAI GPT-4o
AI Chatbot
📁 Projektstruktur
/app/
├── backend/
│ ├── .env # Umgebungsvariablen
│ ├── requirements.txt # Python Dependencies
│ ├── server.py # Haupt-Backend (FastAPI)
│ └── uploads/ # Hochgeladene Medien
│
├── frontend/
│ ├── .env # Frontend Umgebungsvariablen
│ ├── package.json # NPM Dependencies
│ ├── public/
│ │ ├── index.html # HTML Template
│ │ ├── robots.txt # SEO Robots
│ │ └── favicon.ico
│ └── src/
│ ├── App.js # Hauptkomponente (4000+ Zeilen)
│ ├── App.css # Globale Styles
│ ├── index.js # Entry Point
│ └── components/
│ ├── ui/ # Shadcn UI Components
│ └── HotelAdminDashboard.jsx
│
└── memory/
├── PRD.md # Product Requirements
├── PROJEKT_DOKUMENTATION.md
└── ENTWICKLUNG_DOKUMENTATION.md
⚙️ Umgebungsvariablen
Backend (.env)
MONGO_URL=mongodb://localhost:27017
DB_NAME=redseadreams
STRIPE_SECRET_KEY=sk_test_...
AMADEUS_API_KEY=...
AMADEUS_API_SECRET=...
EMERGENT_LLM_KEY=...
Frontend (.env)
REACT_APP_BACKEND_URL=https://your-domain.com
🗄️ Datenbank Schema
Collection: hotels
{
id : "uuid" ,
name : "Hotel Name" ,
name_en : "Hotel Name (English)" ,
location : "Marsa Alam" ,
description : "Beschreibung..." ,
description_en : "Description..." ,
stars : 5 ,
rating : 4.5 ,
reviews_count : 127 ,
amenities : [ "Pool" , "Spa" , "Restaurant" ],
media : [
{ id : "uuid" , type : "image" , url : "https://..." , caption : "" }
],
rooms : [...],
children_policy : {
infant_age : 2 ,
child_age : 12 ,
child_percentage : 50
},
notification_email : "hotel@example.com" ,
blocked : false ,
created_at : "2026-01-01T00:00:00Z"
}
Collection: rooms
{
id : "uuid" ,
hotel_id : "hotel-uuid" ,
name : "Deluxe Zimmer" ,
name_en : "Deluxe Room" ,
description : "Beschreibung..." ,
description_en : "Description..." ,
room_type : "sea_view" , // sea_view, garden_view, pool_view, standard
capacity : 2 ,
price_per_night : 150 ,
amenities : [ "AC" , "TV" , "Minibar" ],
media : [...],
price_periods : [
{
id : "uuid" ,
start_date : "2026-06-01" ,
end_date : "2026-08-31" ,
price : 200
}
]
}
Collection: bookings
{
id : "uuid" ,
booking_type : "package" , // package, hotel, activity, transfer
item_id : "hotel-uuid" ,
item_name : "Hotel Name - Zimmer" ,
customer_name : "Max Mustermann" ,
customer_email : "max@example.com" ,
customer_phone : "+49123456789" ,
customer_address : {
street : "Musterstraße 123" ,
postal_code : "12345" ,
city : "Berlin" ,
country : "Deutschland"
},
check_in : "2026-02-01" ,
check_out : "2026-02-08" ,
guests : 2 ,
total_price : 1200 ,
status : "confirmed" , // pending, confirmed, cancelled
payment_status : "paid" , // pending, paid, refunded
stripe_session_id : "cs_..." ,
extras : {
transfer : {
id : "hrg-marsa" ,
name : "Flughafen Hurghada → Marsa Alam" ,
price : 85 ,
flight_details : {
arrival_date : "2026-02-01" ,
arrival_time : "14:30" ,
flight_number : "LH1234"
}
},
activities : [
{
id : "uuid" ,
name : "Schnorchel-Tour" ,
participants : 2 ,
price : 35 ,
total : 70
}
]
},
notes : "Besondere Wünsche..." ,
created_at : "2026-01-15T10:30:00Z"
}
Collection: customers
{
id : "uuid" ,
email : "kunde@example.com" ,
password_hash : "..." ,
first_name : "Max" ,
last_name : "Mustermann" ,
phone : "+49123456789" ,
created_at : "2026-01-01T00:00:00Z"
}
Collection: reviews
{
id : "uuid" ,
hotel_id : "hotel-uuid" ,
customer_id : "customer-uuid" ,
customer_name : "Max M." ,
rating : 5 ,
comment : "Tolles Hotel!" ,
status : "approved" , // pending, approved, rejected
hotel_response : "Vielen Dank!" ,
created_at : "2026-01-10T00:00:00Z"
}
Collection: activities
{
id : "uuid" ,
name : "Schnorchel-Tour" ,
name_en : "Snorkeling Tour" ,
category : "water" , // water, land, culture
location : "Marsa Alam" ,
duration : "4h" ,
price : 35 ,
description : "Beschreibung..." ,
description_en : "Description..." ,
media : [...],
highlights : [ "Highlight 1" , "Highlight 2" ],
includes : [ "Ausrüstung" , "Mittagessen" ],
active : true
}
Collection: hotel_admins
{
id : "uuid" ,
email : "admin@hotel.com" ,
password_hash : "..." ,
hotel_id : "hotel-uuid" ,
reset_token : null ,
reset_token_expiry : null ,
created_at : "2026-01-01T00:00:00Z"
}
🔌 API Endpoints
Öffentliche Endpoints (Keine Auth)
Method
Endpoint
Beschreibung
GET
/api/hotels
Alle Hotels abrufen
GET
/api/hotels/{id}
Hotel Details
GET
/api/activities
Alle Aktivitäten
GET
/api/activities/{id}
Aktivität Details
GET
/api/transfers
Alle Transfers
GET
/api/currencies/rates
Wechselkurse
GET
/sitemap.xml
SEO Sitemap
GET
/robots.txt
SEO Robots
Buchungs-Endpoints
Method
Endpoint
Beschreibung
POST
/api/bookings
Neue Buchung erstellen
GET
/api/bookings/{id}
Buchung abrufen
POST
/api/payments/create-checkout
Stripe Session erstellen
Kunden-Endpoints
Method
Endpoint
Beschreibung
POST
/api/customers/register
Registrierung
POST
/api/customers/login
Login
GET
/api/customers/me
Profil abrufen
GET
/api/customers/bookings
Buchungshistorie
POST
/api/reviews
Bewertung erstellen
GET
/api/hotels/{id}/reviews
Hotel-Bewertungen
Hotel-Admin Endpoints (Auth erforderlich)
Method
Endpoint
Beschreibung
POST
/api/hotel-admin/login
Admin Login
GET
/api/hotel-admin/hotel
Hotel-Daten
PUT
/api/hotel-admin/hotel
Hotel aktualisieren
POST
/api/hotel-admin/rooms
Zimmer erstellen
PUT
/api/hotel-admin/rooms/{id}
Zimmer aktualisieren
DELETE
/api/hotel-admin/rooms/{id}
Zimmer löschen
POST
/api/hotel-admin/media
Medien hochladen
GET
/api/hotel-admin/bookings
Buchungen abrufen
GET
/api/hotel-admin/reviews
Bewertungen abrufen
PUT
/api/hotel-admin/reviews/{id}/approve
Bewertung freigeben
GET
/api/hotel-admin/occupancy-stats/{id}
Auslastungs-Statistiken
POST
/api/hotel-admin/forgot-password
Passwort vergessen
POST
/api/hotel-admin/reset-password
Passwort zurücksetzen
Super-Admin Endpoints (Auth erforderlich)
Method
Endpoint
Beschreibung
POST
/api/super-admin/login
Super-Admin Login
GET
/api/super-admin/hotels
Alle Hotels
PUT
/api/super-admin/hotels/{id}/block
Hotel blockieren
PUT
/api/super-admin/hotels/{id}/reset-password
Passwort zurücksetzen
GET
/api/super-admin/bookings
Alle Buchungen
POST
/api/super-admin/charter-flights
Charter-Flug erstellen
AI Chatbot
Method
Endpoint
Beschreibung
POST
/api/chatbot
Chat-Nachricht senden
🎨 Frontend Komponenten
Haupt-Seiten (in App.js)
Komponente
Route
Beschreibung
HomePage
/
Startseite mit Hero, Hotels, Aktivitäten
HotelsPage
/hotels
Hotel-Liste mit Filtern
HotelDetailPage
/hotels/:id
Hotel-Details mit Buchung
ActivitiesPage
/activities
Aktivitäten-Liste
ActivityDetailPage
/activities/:id
Aktivität-Details mit Buchung
TransfersPage
/transfers
Transfer-Buchung
PackagesPage
/packages
Paket-Buchung Wizard
BookingExtrasPage
/booking/extras
Extras hinzufügen (Transfer, Aktivitäten)
BookingSuccessPage
/booking/success
Buchungsbestätigung
CustomerDashboard
/customer/dashboard
Kunden-Dashboard
CustomerLoginPage
/customer/login
Kunden-Login
CustomerRegisterPage
/customer/register
Kunden-Registrierung
HotelAdminLoginPage
/hotel-admin/login
Hotel-Admin Login
SuperAdminLoginPage
/super-admin/login
Super-Admin Login
Separate Komponenten
Komponente
Datei
Beschreibung
HotelAdminDashboard
HotelAdminDashboard.jsx
Komplettes Hotel-Admin Dashboard
UI Components
/components/ui/*
Shadcn UI Komponenten
Context Provider
Context
Beschreibung
LanguageContext
Deutsch/Englisch Umschaltung
CurrencyContext
Währung (EUR, CHF, USD)
AuthContext
Hotel-Admin Authentifizierung
CustomerContext
Kunden-Authentifizierung
🚀 Lokale Entwicklung
Voraussetzungen
Node.js 18+
Python 3.11+
MongoDB
Backend starten
cd /app/backend
pip install -r requirements.txt
uvicorn server:app --host 0 .0.0.0 --port 8001 --reload
Frontend starten
cd /app/frontend
yarn install
yarn start
Umgebungsvariablen setzen
# Backend
cp .env.example .env
# Werte eintragen
# Frontend
cp .env.example .env
# REACT_APP_BACKEND_URL setzen
🧪 Testing
Backend testen
# API Health Check
curl http://localhost:8001/api/health
# Hotels abrufen
curl http://localhost:8001/api/hotels
Frontend testen
# Build testen
cd /app/frontend
yarn build
📦 Deployment
Preview testen
Deploy klicken
Domain verbinden (optional)
Manuelles Deployment
Backend: FastAPI mit Gunicorn/Uvicorn
Frontend: yarn build → Static Hosting
MongoDB: MongoDB Atlas oder Self-hosted
Reverse Proxy: Nginx
🔒 Sicherheit
Implementiert
Passwort-Hashing (bcrypt)
JWT Tokens für Auth
CORS Konfiguration
Input Validierung (Pydantic)
Stripe Secure Checkout
Empfehlungen für Produktion
[ ] Rate Limiting
[ ] HTTPS erzwingen
[ ] Security Headers
[ ] SQL Injection Schutz (NoSQL)
[ ] XSS Schutz
🐛 Bekannte Probleme
Technische Schulden
App.js ist zu groß (4000+ Zeilen)
Sollte in separate Dateien aufgeteilt werden
/pages, /components, /contexts Struktur
Medien-Speicherung lokal
Nicht persistent in Produktion
Migration zu S3/Cloudinary empfohlen
Keine Unit Tests
Tests sollten hinzugefügt werden
📞 Support & Kontakt
Support Agent im Chat verfügbar
Dokumentation: docs.emergent.sh
Projekt-spezifisch
PRD: /app/memory/PRD.md
Diese Dokumentation: /app/memory/ENTWICKLUNG_DOKUMENTATION.md
Dokumentation erstellt: 21. Januar 2026
Letzte Aktualisierung: 21. Januar 2026