Marketplace
Bestes ProjektPlattformübergreifender mobiler Marketplace mit adaptivem Dunkel-/Hell-Theme, Firebase-Backend, Echtzeit-Firestore-Synchronisation und vollständiger Sprachunterstützung (EN/DE). Erstellt mit Expo SDK 54.
Die Erstellung eines modernen Marketplace bedeutet die Wahl zwischen kostspieliger nativer Entwicklung für jede Plattform oder langsamen hybriden Alternativen. Die meisten Lösungen bieten kein adaptives Theme, wirken auf Mobilgeräten schwer und binden an ein einzelnes Ökosystem ohne Echtzeit-Funktionen.


Ein plattformübergreifender Marketplace der native Qualität auf iOS, Android und Web aus einer einzigen Expo-Codebasis liefert. Mit Firebase-Echtzeit-Synchronisation, nahtlosem Checkout-Ablauf, Push-Benachrichtigungen und einem ausgereiften adaptiven Theme das System-Dunkel/Hell-Bevorzugungen respektiert.


Expo Router steuert dateibasierte Navigation über 14+ Bildschirme mit auth-geschützter Weiterleitung. Firebase handled Authentifizierung, Firestore liefert Echtzeit-Datensynchronisation via onSnapshot-Listener. Zustand wird über React Context mit benutzerdefinierten Hooks verwaltet. Zod-Schemas gewährleisten typsichere Validierung von Registrierung bis Checkout.


Ein kohärentes Design-System mit lila (#6055D8) Akzent, 16px Border-Radius auf Inputs, pillenförmigen Buttons und konsistenten Abständen. Jede Komponente passt sich automatisch über useColorScheme an das System-Farbschema an. Acht Skeleton-Varianten sorgen für wahrgenommenes flüssiges Laden auf allen Bildschirmen.


### Echtzeit-Synchronisation Firestore onSnapshot-Listener halten Produkte, Warenkorb und Bestellungen über Geräte hinweg sofort synchronisiert. Kein Polling, kein manuelles Aktualisieren. ### Adaptives Theme Automatischer Dunkel-/Hell-Modus über alle 14+ Bildschirme. System-Farbschema-Erkennung mit sanften Übergängen und semantischem Token-System. ### Vollständige Sprachunterstützung Englische und deutsche Übersetzungen basierend auf i18n-js mit automatischer Geräte-Spracherkennung via expo-localization. Umschaltbar ohne App-Neustart. ### Typsichere Formulare Zod-Schemas + react-hook-form steuern die Validierung von Auth bis Checkout. Geteilte Typableitung zwischen Validierungslogik und UI. ### 8 Skeleton-Varianten Animierte Ladungs-Skeletons für Produkte, Banner, Bestellungen, Warenkorb-Zeilen, Formularabschnitte und mehr — kein Inhaltsblitz, wahrgenommene flüssige Leistung. ### Push-Benachrichtigungen Expo Push API + Firebase Cloud Messaging v1 für Bestell-Updates und werbliche Benachrichtigungen. Systemberechtigungs-Schalter mit Echtzeit-Feedback. ### Auth-Ablauf E-Mail/Passwort-Login, Google Sign-In, Passwort-Zurücksetzen und Telegram OIDC. Persistente Sitzungen via AsyncStorage mit automatischem Auth-Guard-Routing. ### Promo-System Serverseitige Promo-Code-Validierung via Firestore. Konfigurierbare Rabattsätze und Ablaufdaten über Firebase Console verwaltet.








Unter der Haube
import { onSnapshot, doc, getDoc, setDoc, serverTimestamp } from 'firebase/firestore';
export const CartService = {
subscribe(callback: (items: CartItem[]) => void): Unsubscribe {
const uid = auth.currentUser?.uid;
if (!uid) { callback([]); return () => {}; }
return onSnapshot(doc(db, 'carts', uid), (snapshot) => {
callback(snapshot.exists() ? (snapshot.data().items ?? []) : []);
});
},
async upsertItem(item: CartItem): Promise<void> {
const uid = auth.currentUser!.uid;
const cartRef = doc(db, 'carts', uid);
const snapshot = await getDoc(cartRef);
const currentItems: CartItem[] = snapshot.exists()
? (snapshot.data().items ?? []) : [];
const idx = currentItems.findIndex(i => i.id === item.id);
if (idx >= 0) {
currentItems[idx].quantity += item.quantity;
} else {
currentItems.push(item);
}
await setDoc(cartRef, { items: currentItems, updatedAt: serverTimestamp() });
},
};Möchten Sie mehr sehen?
Durchstöbern Sie den vollständigen Projektkatalog oder laden Sie den Quellcode herunter.