Alle Projekte

Marketplace

Bestes Projekt

Plattformü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.

iOS · Android
ExpoReact NativeFirebaseTypeScriptZod
Das Problem

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.

Die Lösung

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.

Architektur

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.

Design-System

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.

Hauptfunktionen

### 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.

Galerie

Unter der Haube

Code
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.