Files
shop/shopsystem-analyse.tex
Marek Lenczewski d4001afd53 Initial commit
2026-04-04 13:52:48 +02:00

1900 lines
71 KiB
TeX

% =============================================================================
% Analyse und Planung eines Custom E-Commerce Shopsystems
% B2C & B2B -- Weltweiter Einsatz
% Erstellt: April 2026
% =============================================================================
\documentclass[a4paper,12pt]{article}
% --- Sprache & Encoding ---
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
% --- Layout ---
\usepackage[margin=2.5cm]{geometry}
\usepackage{fancyhdr}
\usepackage{titlesec}
\usepackage{microtype}
\usepackage{parskip}
% --- Tabellen ---
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{tabularx}
\usepackage{array}
\usepackage{multirow}
% --- Farben ---
\usepackage[table,dvipsnames]{xcolor}
\definecolor{mustgreen}{HTML}{2E7D32}
\definecolor{shouldblue}{HTML}{1565C0}
\definecolor{canyellow}{HTML}{F9A825}
\definecolor{notgray}{HTML}{757575}
\definecolor{stackhighlight}{HTML}{E3F2FD}
\definecolor{sectioncolor}{HTML}{1A237E}
\definecolor{linkcolor}{HTML}{0D47A1}
% --- Listen ---
\usepackage{enumitem}
% --- Code ---
\usepackage{listings}
\lstset{
basicstyle=\ttfamily\small,
breaklines=true,
frame=single,
backgroundcolor=\color{gray!5},
rulecolor=\color{gray!30},
}
% --- Sonstiges ---
\usepackage{graphicx}
\usepackage{pdflscape}
\usepackage{hyperref}
% --- Hyperref-Setup ---
\hypersetup{
colorlinks=true,
linkcolor=linkcolor,
urlcolor=linkcolor,
citecolor=linkcolor,
pdftitle={Analyse und Planung eines Custom E-Commerce Shopsystems},
pdfsubject={Technologie-Evaluierung, Feature-Analyse und Architekturempfehlung},
pdfkeywords={E-Commerce, B2C, B2B, NestJS, Next.js, PostgreSQL, Shopsystem},
}
% --- Header/Footer ---
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small\textit{Shopsystem-Analyse}}
\fancyhead[R]{\small\textit{B2C \& B2B}}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
% --- Custom Commands ---
\newcommand{\must}{\textcolor{mustgreen}{\textbf{PFLICHT}}}
\newcommand{\should}{\textcolor{shouldblue}{\textbf{SOLL}}}
\newcommand{\can}{\textcolor{canyellow}{\textbf{KANN}}}
\newcommand{\notneed}{\textcolor{notgray}{\textbf{NICHT BENÖTIGT}}}
\newcommand{\pro}{\textcolor{mustgreen}{\checkmark}}
\newcommand{\con}{\textcolor{red}{$\times$}}
\newcommand{\neutral}{\textcolor{canyellow}{$\sim$}}
% --- Abschnittsformatierung ---
\titleformat{\section}
{\Large\bfseries\color{sectioncolor}}{\thesection}{1em}{}
\titleformat{\subsection}
{\large\bfseries\color{sectioncolor!80}}{\thesubsection}{1em}{}
\titleformat{\subsubsection}
{\normalsize\bfseries\color{sectioncolor!60}}{\thesubsubsection}{1em}{}
% --- Neue Spaltentypen ---
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
% =============================================================================
\begin{document}
% --- Titelseite ---
\begin{titlepage}
\centering
\vspace*{3cm}
{\Huge\bfseries\color{sectioncolor} Analyse und Planung eines\\[0.3em]
Custom E-Commerce Shopsystems\par}
\vspace{1.5cm}
{\Large Technologie-Evaluierung, Feature-Analyse\\[0.3em]
und Architekturempfehlung\par}
\vspace{1cm}
{\large\textbf{B2C \& B2B -- Weltweiter Einsatz}\par}
\vspace{3cm}
\begin{tabular}{ll}
\textbf{Dokumenttyp:} & Technische Analyse \\
\textbf{Version:} & 1.0 \\
\textbf{Datum:} & April 2026 \\
\textbf{Status:} & Entwurf \\
\end{tabular}
\vfill
{\small Dieses Dokument dient als Entscheidungsgrundlage für die Technologieauswahl
und Feature-Priorisierung eines maßgeschneiderten E-Commerce-Systems.}
\end{titlepage}
% --- Inhaltsverzeichnis ---
\setcounter{tocdepth}{3}
\tableofcontents
\newpage
% =============================================================================
% KAPITEL 1: EINLEITUNG
% =============================================================================
\section{Einleitung}
\label{sec:einleitung}
\subsection{Projektzielsetzung}
Ziel dieses Projekts ist die Entwicklung eines maßgeschneiderten E-Commerce-Shopsystems,
das sowohl B2C- (Business-to-Consumer) als auch B2B-Geschäftsmodelle (Business-to-Business)
unterstützt. Das System soll weltweit einsetzbar sein und sich durch eine moderne,
skalierbare Architektur auszeichnen.
Im Gegensatz zu bestehenden SaaS-Lösungen (Shopify, WooCommerce) oder
Open-Source-Plattformen (Magento, PrestaShop) bietet ein Custom-System folgende Vorteile:
\begin{itemize}[leftmargin=2em]
\item \textbf{Volle Kontrolle} über Funktionalität, Datenhoheit und Geschäftslogik
\item \textbf{Keine GMV-Gebühren} oder plattformabhängige Einschränkungen
\item \textbf{Maßgeschneiderte B2B-Workflows}, die in Standard-Plattformen oft fehlen
\item \textbf{Skalierbarkeit} ohne Plattform-Limits
\item \textbf{Unabhängigkeit} von Drittanbieter-Roadmaps und Lizenzänderungen
\end{itemize}
\subsection{Systemarchitektur -- Überblick}
Das System besteht aus drei Hauptkomponenten:
\begin{description}[leftmargin=2em, labelwidth=2em]
\item[Backend] RESTful API (optional GraphQL) mit Geschäftslogik, Datenbankzugriff,
Authentifizierung und Integration externer Dienste (Zahlungen, Versand, Steuern).
\item[Frontend] Server-Side-Rendered (SSR) Webshop für Endkunden (B2C) und
Geschäftskunden (B2B) mit optimierter Performance und SEO.
\item[Admin] Verwaltungsoberfläche für Produkte, Bestellungen, Kunden, Einstellungen
und Reporting -- separates Deployment mit eigenem Berechtigungssystem.
\end{description}
\subsection{Methodik}
Die Technologiebewertung in diesem Dokument basiert auf folgenden Kriterien:
\begin{enumerate}[leftmargin=2em]
\item \textbf{Ecosystem-Größe} -- Verfügbarkeit von Paketen, Plugins und Community-Support
\item \textbf{TypeScript-Unterstützung} -- Typsicherheit für weniger Fehler und bessere DX
\item \textbf{Skalierbarkeit} -- Fähigkeit, mit wachsender Last umzugehen
\item \textbf{Time-to-Market} -- Geschwindigkeit der Entwicklung bis zum MVP
\item \textbf{B2B-Eignung} -- Unterstützung komplexer Geschäftslogik
\item \textbf{Internationalisierung} -- Multi-Sprache, Multi-Währung, Multi-Region
\item \textbf{Entwickler-Verfügbarkeit} -- Einstellbarkeit von qualifizierten Entwicklern
\item \textbf{Langfristige Wartbarkeit} -- Clean Code, Testbarkeit, Modularität
\end{enumerate}
Features werden nach dem MoSCoW-Prinzip priorisiert:
\must{} (Pflicht), \should{} (Soll), \can{} (Kann) und \notneed{} (Nicht benötigt).
% =============================================================================
% KAPITEL 2: TECHNOLOGIE-ANALYSE
% =============================================================================
\newpage
\section{Technologie-Analyse}
\label{sec:technologie}
\subsection{Backend-Frameworks}
\label{subsec:backend}
Die Wahl des Backend-Frameworks bestimmt maßgeblich die Architektur, Entwicklungsgeschwindigkeit
und Skalierbarkeit des gesamten Systems. Für ein E-Commerce-System mit hohen Anforderungen
an Datenintegrität, API-Performance und B2B-Geschäftslogik wurden fünf Frameworks evaluiert.
\begin{table}[htbp]
\centering
\caption{Backend-Framework-Vergleich}
\label{tab:backend}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X X X}
\toprule
\textbf{Kriterium} & \textbf{NestJS} & \textbf{FastAPI} & \textbf{Django} & \textbf{Go (Gin)} & \textbf{Rust (Actix)} \\
\midrule
Sprache & TypeScript & Python & Python & Go & Rust \\
Typsicherheit & Hoch & Mittel & Gering & Hoch & Sehr hoch \\
Performance & Gut & Gut & Mittel & Sehr gut & Exzellent \\
Ecosystem & Sehr groß & Groß & Sehr groß & Mittel & Klein \\
Lernkurve & Mittel & Niedrig & Mittel & Mittel & Hoch \\
B2B-Eignung & Sehr gut & Gut & Gut & Gut & Gut \\
Time-to-Market & Schnell & Schnell & Mittel & Mittel & Langsam \\
E-Commerce-Ref. & Medusa, Vendure & Saleor & Saleor & -- & -- \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{NestJS (Node.js/TypeScript)} ist die ausgereifteste Wahl für ein modernes E-Commerce-Backend.
Es bietet Enterprise-Patterns wie Dependency Injection, modulare Architektur, Guards und Interceptors.
Die TypeScript-Durchgängigkeit mit dem Frontend eliminiert Kontextwechsel.
Medusa.js und Vendure -- zwei führende Open-Source-E-Commerce-Plattformen -- basieren auf diesem Stack.
\textbf{FastAPI (Python)} überzeugt durch schnelle Entwicklung und native Async-Unterstützung.
Ideal, wenn KI/ML-Features (Produktempfehlungen, Preisoptimierung) im Vordergrund stehen.
\textbf{Django (Python)} bietet ein \enquote{Batteries-included}-Konzept mit eingebautem ORM,
Admin-Panel und Sicherheitsfeatures. Saleor, eine der reifsten Open-Source-Commerce-Plattformen,
nutzt Django als Basis.
\textbf{Go} und \textbf{Rust} bieten überlegene Rohperformance, eignen sich jedoch eher für
spezialisierte Microservices (Zahlungsverarbeitung, Echtzeit-Inventar) als für die gesamte
Anwendungsschicht. Die kleineren Ecosystems erhöhen den Entwicklungsaufwand.
\subsection{Frontend-Frameworks}
\label{subsec:frontend}
Für ein weltweit eingesetztes E-Commerce-Frontend sind Server-Side Rendering (SSR),
SEO-Optimierung und Performance entscheidend. Vier Frameworks wurden verglichen.
\begin{table}[htbp]
\centering
\caption{Frontend-Framework-Vergleich}
\label{tab:frontend}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X X}
\toprule
\textbf{Kriterium} & \textbf{Next.js (React)} & \textbf{Nuxt (Vue)} & \textbf{SvelteKit} & \textbf{Angular} \\
\midrule
SSR/SSG & Exzellent (ISR) & Sehr gut & Gut & Gut \\
Ecosystem & Sehr groß & Groß & Wachsend & Groß \\
TypeScript & Nativ & Nativ & Nativ & Nativ \\
Bundle-Größe & Mittel & Mittel & Sehr klein & Groß \\
SEO & Exzellent & Sehr gut & Gut & Mittel \\
Komponentenbib. & Sehr viele & Viele & Wenige & Viele \\
Lernkurve & Mittel & Niedrig & Niedrig & Hoch \\
Arbeitsmarkt & Sehr groß & Groß & Klein & Groß \\
E-Commerce-Eig. & Exzellent & Sehr gut & Gut & Mittel \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{Next.js (React)} ist der klare Favorit für E-Commerce:
\begin{itemize}[leftmargin=2em]
\item \textbf{Incremental Static Regeneration (ISR)} ermöglicht gecachte Produktseiten mit automatischer Aktualisierung
\item \textbf{Server Components} reduzieren die Bundle-Größe und verbessern die Ladezeit
\item \textbf{Image Optimization} ist eingebaut -- kritisch für Produktfotografie
\item Der \textbf{größte Arbeitsmarkt} vereinfacht die Teambildung
\end{itemize}
\textbf{Nuxt (Vue)} ist eine starke Alternative mit einfacherer Lernkurve, besonders in Europa beliebt.
\textbf{SvelteKit} liefert die kleinsten Bundle-Größen -- ideal für Mobile-First-Strategien --
hat aber ein kleineres Ecosystem und weniger E-Commerce-spezifische Bibliotheken.
\subsection{Datenbanken}
\label{subsec:datenbanken}
E-Commerce-Daten erfordern ACID-Konformität (Zahlungen, Bestellungen), flexible
Attributspeicherung (Produktvarianten) und performante Suchabfragen.
\begin{table}[htbp]
\centering
\caption{Datenbank-Vergleich}
\label{tab:datenbanken}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X}
\toprule
\textbf{Kriterium} & \textbf{PostgreSQL} & \textbf{MySQL 8.x} & \textbf{MongoDB} \\
\midrule
ACID-Konformität & Vollständig & Vollständig & Eingeschränkt \\
JSON-Unterstützung & JSONB (indexiert) & JSON (eingeschränkt) & Nativ \\
Volltextsuche & Eingebaut & Eingebaut & Eingebaut \\
Relationale Integrität & Exzellent & Gut & Keine (FK) \\
Skalierbarkeit & Vertikal + Read-Replicas & Vertikal + Replikation & Horizontal (Sharding) \\
Analytische Queries & Sehr performant & Mittel & Langsam \\
Multi-Tenancy & Schemas möglich & Datenbanken & Collections \\
E-Commerce-Eignung & Exzellent & Gut & Eingeschränkt \\
ORM-Support & Prisma, TypeORM & Prisma, TypeORM & Mongoose \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{PostgreSQL} ist die empfohlene Wahl:
\begin{itemize}[leftmargin=2em]
\item JSONB-Spalten ermöglichen flexible Produktattribute bei voller Indexierung
\item ACID-Konformität sichert finanzielle Datenintegrität
\item 65--80\% kürzere Ausführungszeiten bei komplexen Filterabfragen gegenüber MongoDB
\item Alle führenden E-Commerce-Plattformen (Medusa, Saleor, Vendure) nutzen PostgreSQL
\end{itemize}
\textbf{MongoDB} eignet sich \textit{nicht} als primäre Datenbank für E-Commerce aufgrund
fehlender referentieller Integrität und langsamerer analytischer Abfragen. Die Flexibilität
für Produktvarianten wird durch PostgreSQL JSONB gleichwertig abgedeckt.
\subsection{Suchmaschinen}
\label{subsec:suche}
Eine leistungsfähige Produktsuche ist umsatzkritisch. Kunden, die die Suche nutzen,
konvertieren 2--3x häufiger als Browser. Vier Suchmaschinen wurden verglichen.
\begin{table}[htbp]
\centering
\caption{Such-Engine-Vergleich}
\label{tab:suche}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X X}
\toprule
\textbf{Kriterium} & \textbf{Meilisearch} & \textbf{Elasticsearch} & \textbf{Algolia} & \textbf{Typesense} \\
\midrule
Antwortzeit & $<$50ms & $>$100ms & $<$100ms & $<$100ms \\
Setup & Einfach & Komplex & SaaS (einfach) & Einfach \\
Self-Hosted & Ja & Ja & Nein (SaaS) & Ja \\
Kosten & Kostenlos (OSS) & Kostenlos (OSS) & Teuer & Günstig \\
Tippfehler-Tol. & Ja (Standard) & Konfigurierbar & Ja & Ja \\
Facettierung & Ja & Ja (mächtig) & Ja & Ja \\
Mehrsprachigkeit & Gut & Sehr gut & Sehr gut & Gut \\
Eignung & Ideal für E-Com. & Enterprise & Premium & Gute Alternative \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{Meilisearch} ist die Empfehlung für den Start:
In Rust geschrieben, liefert es Antwortzeiten unter 50ms mit eingebauter Tippfehlertoleranz.
Self-Hosted und kostenlos, mit einfacher REST-API. Für Enterprise-Szenarien mit
10M+ Produkten kann später auf Elasticsearch gewechselt werden.
\subsection{Zahlungsanbieter}
\label{subsec:zahlung}
Für weltweiten Einsatz muss das System mehrere Zahlungsanbieter unterstützen,
da regionale Präferenzen stark variieren (SEPA in EU, Alipay in Asien, ACH in USA).
\begin{table}[htbp]
\centering
\caption{Payment-Provider-Vergleich}
\label{tab:zahlung}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X X}
\toprule
\textbf{Kriterium} & \textbf{Stripe} & \textbf{Mollie} & \textbf{Adyen} & \textbf{PayPal} \\
\midrule
Länder & 195+ & EU-fokussiert & 187 & Weltweit \\
Zahlungsmethoden & Sehr viele & EU-Methoden & 250+ & PayPal + Karten \\
B2B (Rechnung) & Stripe Billing & Klarna, SEPA & Ja & Nein \\
API-Qualität & Exzellent & Sehr gut & Gut & Mittel \\
PCI-Compliance & SAQ-A & SAQ-A & SAQ-A & SAQ-A \\
Gebühren (EU) & 1,5\% + 0,25\euro{} & 1,2--2,9\% & Interchange++ & 1,5--3,5\% \\
Marktplatz-Support & Connect & -- & for Platforms & -- \\
Eignung & Primär & EU-Ergänzung & Enterprise & Ergänzung \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{Empfehlung:} Stripe als primärer Provider (beste API, weltweite Abdeckung),
Mollie als Ergänzung für europäische Zahlungsmethoden (iDEAL, Bancontact, EPS, Giropay).
Für B2B-Kauf auf Rechnung: Stripe Billing oder Klarna B2B über Mollie.
\textbf{Wichtig:} Keine eigene Zahlungsabwicklung implementieren -- die PCI-DSS-Anforderungen
sind zu aufwändig. Stattdessen Tokenisierung über den jeweiligen Provider nutzen (SAQ-A Level).
\subsection{Infrastruktur \& Deployment}
\label{subsec:infrastruktur}
\begin{table}[htbp]
\centering
\caption{Infrastruktur-Vergleich}
\label{tab:infrastruktur}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X X}
\toprule
\textbf{Kriterium} & \textbf{Hetzner} & \textbf{DigitalOcean} & \textbf{AWS} & \textbf{GCP} \\
\midrule
Kosten & Sehr günstig & Günstig & Mittel--Hoch & Mittel \\
EU-Rechenzentren & Ja (DE, FI) & Ja & Ja & Ja \\
DSGVO & Exzellent (DE) & Gut & Gut & Gut \\
Managed Services & Begrenzt & Mittel & Sehr viele & Viele \\
Skalierbarkeit & Manuell & Gut & Exzellent & Exzellent \\
Kubernetes & Nein & Ja (DOKS) & Ja (EKS) & Ja (GKE) \\
Eignung Start & MVP/Start & Wachstum & Enterprise & Enterprise \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{Empfohlener Deployment-Stack:}
\begin{itemize}[leftmargin=2em]
\item \textbf{Containerisierung:} Docker + Docker Compose (Standard für alle Umgebungen)
\item \textbf{CI/CD:} GitHub Actions (automatisierte Tests, Linting, Deployment)
\item \textbf{Phase 1:} Hetzner Cloud oder DigitalOcean (kosteneffizient, EU-Rechenzentren)
\item \textbf{Phase 2+:} Migration zu AWS ECS oder Kubernetes bei Bedarf
\item \textbf{CDN:} Cloudflare (kostenloser Tier, DDoS-Schutz, globale Edge-Server)
\item \textbf{Dateispeicher:} S3-kompatibel (MinIO self-hosted oder AWS S3)
\end{itemize}
% =============================================================================
% KAPITEL 3: EMPFOHLENER TECHNOLOGIE-STACK
% =============================================================================
\newpage
\section{Empfohlener Technologie-Stack}
\label{sec:stack}
\subsection{Gewichtete Entscheidungsmatrix}
Vier Stack-Kombinationen wurden nach neun Kriterien bewertet (Skala 1--10).
Die Gewichtung reflektiert die Prioritäten des Projekts: schnelle Markteinführung,
B2B-Fähigkeit und weltweite Einsetzbarkeit.
\begin{landscape}
\begin{table}[htbp]
\centering
\caption{Gewichtete Entscheidungsmatrix -- Technologie-Stacks}
\label{tab:matrix}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\linewidth}{l C{1.2cm} X X X X}
\toprule
\textbf{Kriterium} & \textbf{Gew.} &
\textbf{Stack 1: NestJS + Next.js + PG} &
\textbf{Stack 2: FastAPI + React + PG} &
\textbf{Stack 3: Nuxt + Node + Mongo} &
\textbf{Stack 4: Go + React + PG} \\
\midrule
Time-to-Market & 20\% & 9 \quad (1,80) & 7 \quad (1,40) & 8 \quad (1,60) & 5 \quad (1,00) \\
TypeScript-Durchgäng. & 15\% & 10 \quad (1,50) & 5 \quad (0,75) & 8 \quad (1,20) & 4 \quad (0,60) \\
Ecosystem \& Pakete & 15\% & 9 \quad (1,35) & 8 \quad (1,20) & 7 \quad (1,05) & 6 \quad (0,90) \\
Perform. \& Skalierb. & 15\% & 7 \quad (1,05) & 7 \quad (1,05) & 6 \quad (0,90) & 10 \quad (1,50) \\
B2B-Eignung & 10\% & 9 \quad (0,90) & 8 \quad (0,80) & 6 \quad (0,60) & 7 \quad (0,70) \\
Entwickler-Verfügb. & 10\% & 9 \quad (0,90) & 8 \quad (0,80) & 7 \quad (0,70) & 5 \quad (0,50) \\
AI/ML-Integration & 5\% & 6 \quad (0,30) & 10 \quad (0,50) & 5 \quad (0,25) & 6 \quad (0,30) \\
Community \& Support & 5\% & 9 \quad (0,45) & 8 \quad (0,40) & 7 \quad (0,35) & 6 \quad (0,30) \\
Wartbarkeit & 5\% & 8 \quad (0,40) & 7 \quad (0,35) & 7 \quad (0,35) & 8 \quad (0,40) \\
\midrule
\textbf{Gesamtpunktzahl} & \textbf{100\%} &
\cellcolor{stackhighlight}\textbf{8,65} &
\textbf{7,25} &
\textbf{7,00} &
\textbf{6,20} \\
\bottomrule
\end{tabularx}
\end{table}
\end{landscape}
\subsection{Empfehlung: Stack 1}
\begin{center}
\colorbox{stackhighlight}{%
\parbox{0.9\textwidth}{%
\centering\large\bfseries
NestJS + Next.js + PostgreSQL + Redis + Meilisearch + Stripe/Mollie
}%
}
\end{center}
\vspace{0.5em}
\textbf{Begründung:}
\begin{enumerate}[leftmargin=2em]
\item \textbf{Eine Sprache (TypeScript)} über den gesamten Stack -- Backend, Frontend, Admin.
Kein Kontextwechsel, gemeinsame Typdefinitionen, Code-Sharing zwischen Schichten.
\item \textbf{NestJS} liefert Enterprise-Architektur (Dependency Injection, Module, Guards,
Interceptors) -- ideal für komplexe B2B-Geschäftslogik wie Genehmigungsworkflows
und kundenspezifische Preisgestaltung.
\item \textbf{Next.js} bietet SSR, ISR und Server Components für optimale SEO und
Performance -- kritisch für Produktseiten und internationale Reichweite.
\item \textbf{Größtes Ecosystem} und Arbeitsmarkt -- einfachere Teambildung und
schnellere Problemlösung durch Community-Support.
\item \textbf{Direkte Referenzarchitekturen}: Medusa.js (Node.js/TypeScript) und
Vendure (NestJS/TypeScript) als bewährte Vorbilder.
\end{enumerate}
\subsection{Detaillierter Stack-Überblick}
\begin{table}[htbp]
\centering
\caption{Detaillierter Technologie-Stack}
\label{tab:stackdetail}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l l l X}
\toprule
\textbf{Schicht} & \textbf{Technologie} & \textbf{Version} & \textbf{Bemerkung} \\
\midrule
Backend & NestJS + TypeScript & 10.x+ & Modulare Architektur, DI \\
Frontend (Shop) & Next.js + React & 15.x+ & App Router, Server Components \\
Frontend (Admin) & Next.js + React & 15.x+ & Separates Deployment \\
ORM & Prisma & 6.x+ & Type-safe Database Access \\
Datenbank & PostgreSQL & 16+ & JSONB für flexible Attribute \\
Cache & Redis & 7+ & Sessions, Cart, Rate-Limiting \\
Suche & Meilisearch & 1.x+ & Produkt- und Inhaltssuche \\
Zahlungen & Stripe + Mollie & -- & Stripe primär, Mollie für EU \\
Job-Queue & BullMQ & 5.x+ & E-Mails, Importe, Exporte \\
Dateispeicher & S3-kompatibel & -- & MinIO oder AWS S3 \\
Deployment & Docker Compose & -- & Kubernetes optional später \\
CI/CD & GitHub Actions & -- & Automatisierte Tests + Deploy \\
CDN & Cloudflare & -- & Edge-Caching, DDoS-Schutz \\
Validierung & Zod & 3.x+ & TypeScript-native Validierung \\
Testing & Jest + Playwright & -- & Unit-, Integration-, E2E-Tests \\
\bottomrule
\end{tabularx}
\end{table}
% =============================================================================
% KAPITEL 4: FEATURE-ANALYSE
% =============================================================================
\newpage
\section{Feature-Analyse}
\label{sec:features}
Dieses Kapitel listet alle Features nach Priorität geordnet. Jede Kategorie enthält
konkrete Einzelfeatures mit Zuordnung zu den Systemkomponenten (Backend, Frontend, Admin).
% ---------------------------------------------------------------------------
\subsection{Pflicht-Features (\must)}
\label{subsec:must}
Die folgenden 13 Feature-Kategorien sind für ein funktionsfähiges E-Commerce-System
unabdingbar. Ohne sie kann kein Verkauf stattfinden oder das System entspricht nicht
den gesetzlichen Anforderungen.
\begin{longtable}{c l l c}
\caption{Pflicht-Features -- Übersicht} \label{tab:must} \\
\toprule
\textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\
\midrule
\endfirsthead
\toprule
\textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\
\midrule
\endhead
\bottomrule
\endfoot
P01 & Produktverwaltung & Backend + Admin & Hoch \\
P02 & Benutzer \& Authentifizierung & Backend + Frontend & Mittel \\
P03 & Warenkorb \& Checkout & Alle & Hoch \\
P04 & Bestellverwaltung & Backend + Admin & Hoch \\
P05 & Zahlungsabwicklung & Backend + Frontend & Hoch \\
P06 & Versand \& Lieferung & Backend + Admin & Mittel \\
P07 & Steuerberechnung & Backend & Hoch \\
P08 & Sicherheit \& DSGVO & Alle & Hoch \\
P09 & Produktsuche & Backend + Frontend & Mittel \\
P10 & Responsives Design & Frontend & Mittel \\
P11 & Mehrsprachigkeit (i18n) & Alle & Mittel \\
P12 & Mehrwährungsfähigkeit & Backend + Frontend & Mittel \\
P13 & Admin-Panel & Admin & Hoch \\
\end{longtable}
\subsubsection{P01 -- Produktverwaltung}
Grundlage jedes E-Commerce-Systems. Ohne Produkte kein Verkauf.
\begin{itemize}[leftmargin=2em]
\item Produktanlage mit Titel, Beschreibung (Rich Text), SKU, EAN/GTIN
\item Varianten-Management (Größe, Farbe, Material) mit eigenen SKUs und Preisen
\item Digitale und physische Produkte unterscheiden
\item Produktbilder mit Galerie, Zoom und Alt-Texten
\item Hierarchische Kategorien und Tags
\item Produktattribute (filterbar): Gewicht, Maße, Material, Marke
\item Lagerbestandsverwaltung: Bestand pro Variante, Reservierung bei Checkout
\item Produkt-Status: Entwurf, Aktiv, Archiviert
\item Massenimport/-export (CSV/JSON)
\item B2B: Kundenspezifische Produktsichtbarkeit (Katalogbeschränkung)
\end{itemize}
\subsubsection{P02 -- Benutzer \& Authentifizierung}
Erforderlich für Bestellhistorie, gespeicherte Adressen und Personalisierung.
\begin{itemize}[leftmargin=2em]
\item E-Mail/Passwort-Registrierung mit E-Mail-Verifizierung
\item Passwort-Zurücksetzen (tokenbasiert, zeitlich begrenzt)
\item Optionaler Social Login (Google, Apple)
\item Kundenprofil: Name, Adressen (Rechnung/Lieferung), Telefon
\item B2B: Firmenkonten mit Mitarbeiterverwaltung und Rollenkonzept
\item Gastbestellung (ohne Registrierung)
\item Session-Management und sichere Token-Verwaltung (JWT + Refresh-Tokens)
\item Rate-Limiting auf Login-Versuche (Brute-Force-Schutz)
\item Multi-Faktor-Authentifizierung (MFA) für Admin-Zugänge
\end{itemize}
\subsubsection{P03 -- Warenkorb \& Checkout}
Der kritischste Conversion-Pfad. Jeder Reibungspunkt kostet Umsatz.
\begin{itemize}[leftmargin=2em]
\item Warenkorb: Hinzufügen, Entfernen, Mengenänderung
\item Persistenter Warenkorb (Session + Datenbank für eingeloggte Nutzer)
\item Warenkorb-Zusammenführung bei Login (Gast-Cart $\rightarrow$ User-Cart)
\item Mehrstufiger oder Single-Page-Checkout
\item Rechnungs-/Lieferadresse (getrennt oder identisch)
\item Versandmethoden-Auswahl mit Echtzeitpreisen
\item Zahlungsmethoden-Auswahl
\item Gutscheincode-Eingabe
\item Bestellübersicht vor Abschluss
\item B2B: Bestellnummer (PO-Number) eingeben, Genehmigungsworkflow
\item Warenkorbabbruch-Tracking für spätere Wiederansprache
\end{itemize}
\subsubsection{P04 -- Bestellverwaltung}
Kerngeschäftsdatensatz. Rechtlich erforderliche Aufbewahrung der Bestellhistorie.
\begin{itemize}[leftmargin=2em]
\item Automatische Bestellnummer-Generierung
\item Status-Workflow: Ausstehend $\rightarrow$ Bestätigt $\rightarrow$ In Bearbeitung $\rightarrow$ Versendet $\rightarrow$ Zugestellt
\item Kundenseitige Statusanzeige mit Sendungsverfolgung
\item Admin: Bestellliste mit Filter, Suche, Sortierung
\item Admin: Bestelldetails, manuelle Statusänderung
\item Nachbestellung aus Bestellhistorie (Re-Order)
\item B2B: Erweiterte Status (Genehmigung ausstehend, Freigegeben, Gesperrt)
\item Rechnungserstellung (PDF) pro Bestellung
\item Bestellnotizen (intern und kundensichtbar)
\end{itemize}
\subsubsection{P05 -- Zahlungsabwicklung}
Unterstützung mehrerer Zahlungsmethoden ist für weltweiten Einsatz unerlässlich.
\begin{itemize}[leftmargin=2em]
\item Stripe-Integration: Kreditkarte, SEPA, Apple Pay, Google Pay
\item Mollie-Integration: iDEAL, Bancontact, EPS, Giropay, Klarna
\item PayPal als optionaler dritter Provider
\item Provider-Abstraktion: einheitliches Interface für alle Zahlungsanbieter
\item Tokenisierung (keine Kartendaten im System speichern)
\item 3D Secure 2.0 für Kreditkartenzahlungen
\item Webhook-Verarbeitung für asynchrone Zahlungsbestätigungen
\item Teil- und Vollrückerstattungen
\item B2B: Kauf auf Rechnung (Net 30/60/90), SEPA-Lastschrift
\item Mehrwährungsfähige Zahlungen
\end{itemize}
\subsubsection{P06 -- Versand \& Lieferung}
Verschiedene Produkte, Gewichte und Zielorte erfordern unterschiedliche Versandoptionen.
\begin{itemize}[leftmargin=2em]
\item Mehrere Versanddienstleister (DHL, DPD, UPS, FedEx, lokale Carrier)
\item Echtzeit-Versandkostenberechnung oder feste Versandkostentabellen
\item Adressvalidierung (länderspezifisch)
\item Versandetikett-Generierung
\item Sendungsverfolgungsnummern mit Carrier-Tracking-Links
\item Kostenloser Versand ab Bestellwert (konfigurierbar)
\item B2B: Speditionsversand für Großbestellungen
\item Internationale Versandregeln und Zolldeklarationen
\end{itemize}
\subsubsection{P07 -- Steuerberechnung}
Gesetzliche Pflicht. Fehlerhafte Steuerberechnung führt zu Bußgeldern.
\begin{itemize}[leftmargin=2em]
\item Automatische MwSt-Berechnung nach Kundenstandort
\item EU-MwSt: 15--27\% je nach Land, OSS-Regelung für digitale Güter
\item US Sales Tax: Bundesstaat- und City-Level (2000+ Jurisdiktionen)
\item UK VAT: 20\% Standard nach Brexit
\item Steuersätze pro Produktkategorie (Normalsatz, ermäßigt, befreit)
\item B2B: Reverse-Charge-Verfahren bei gültiger USt-IdNr
\item USt-IdNr-Validierung über VIES (EU)
\item Steuerberichte für Buchhaltung (Export CSV/PDF)
\item Integration mit TaxJar oder Avalara für automatisierte Steuerberechnung
\end{itemize}
\subsubsection{P08 -- Sicherheit \& DSGVO}
Nicht verhandelbar. DSGVO-Verstöße: bis zu 20 Mio. EUR oder 4\% des Jahresumsatzes.
\begin{itemize}[leftmargin=2em]
\item HTTPS/TLS 1.3 für gesamte Kommunikation
\item Passwort-Hashing mit bcrypt oder Argon2
\item Verschlüsselung sensibler Daten (PII) in der Datenbank
\item DSGVO: Einwilligungsmanagement, Cookie-Banner, Datenschutzerklärung
\item Recht auf Löschung (Konto- und Datenlöschung auf Anfrage)
\item Datenportabilität (Export persönlicher Daten als JSON/CSV)
\item Audit-Logging aller Admin-Aktionen
\item CORS, CSP, HSTS und weitere Security-Header
\item Rate-Limiting und DDoS-Schutz
\item Regelmäßige Dependency-Updates (Sicherheitspatches)
\end{itemize}
\subsubsection{P09 -- Produktsuche}
Kunden erwarten schnelle, relevante Suchergebnisse.
\begin{itemize}[leftmargin=2em]
\item Volltextsuche über Produktnamen, Beschreibungen, SKUs
\item Autocomplete/Suchvorschläge während der Eingabe
\item Tippfehlertoleranz (Fuzzy-Matching)
\item Antwortzeit unter 200ms
\item Ergebnis-Paginierung
\item B2B: Suche nach SKU, Artikelnummer, interner Bezeichnung
\item Indexierung über Meilisearch mit automatischer Synchronisation
\end{itemize}
\subsubsection{P10 -- Responsives Design}
Über 50\% des E-Commerce-Traffics kommt von Mobilgeräten.
\begin{itemize}[leftmargin=2em]
\item Mobile-First responsive Design
\item Touch-optimierte Buttons und Interaktionen
\item Lazy Loading für Bilder
\item Optimierte Ladezeit auf 3G/4G-Verbindungen ($<$3 Sekunden)
\item Mobile-Wallet-Support (Apple Pay, Google Pay)
\item Testen auf verschiedenen Geräten und Bildschirmgrößen
\end{itemize}
\subsubsection{P11 -- Mehrsprachigkeit (i18n)}
60\% der Onlinekäufer kaufen selten auf englischsprachigen Seiten.
13\% höhere Conversion bei muttersprachlicher Darstellung.
\begin{itemize}[leftmargin=2em]
\item UI-Lokalisierung: alle Texte, Fehlermeldungen, E-Mails
\item Produktbeschreibungen in mehreren Sprachen
\item Spracherkennung (Accept-Language Header + GeoIP)
\item Sprachumschalter ohne Session-Verlust
\item URL-Struktur: \texttt{/de/produkte}, \texttt{/en/products}, \texttt{/fr/produits}
\item RTL-Unterstützung für Arabisch
\item i18next oder react-intl als Frontend-Bibliothek
\item Anbindung an Übersetzungsmanagement-Plattform (Crowdin, Lokalise)
\end{itemize}
\subsubsection{P12 -- Mehrwährungsfähigkeit}
Kunden erwarten Preise in ihrer lokalen Währung.
\begin{itemize}[leftmargin=2em]
\item Automatische Währungserkennung (GeoIP-basiert)
\item Manueller Währungsumschalter
\item Basiswährung + automatische Umrechnung über Echtzeit-Wechselkurse
\item Alternativ: feste Preise pro Währung (wichtig für B2B-Verträge)
\item Korrekte Währungsformatierung pro Locale (\$100.00 vs. 100,00~\euro{} vs. ¥100)
\item Unterstützung gängiger Währungen: EUR, USD, GBP, CHF, JPY, CNY etc.
\item Währungsspezifische Zahlungsabwicklung
\end{itemize}
\subsubsection{P13 -- Admin-Panel}
Zentrale Verwaltungsoberfläche für den täglichen Betrieb.
\begin{itemize}[leftmargin=2em]
\item Dashboard: Umsatz, Bestellungen, Neukunden, Topseller
\item Produktverwaltung: CRUD, Massenbearbeitung, Bildupload
\item Bestellverwaltung: Liste, Detail, Statusänderung, Rückerstattung
\item Kundenverwaltung: Übersicht, Bestellhistorie, Notizen
\item Einstellungen: Shop-Name, Währung, Steuersätze, Versandoptionen
\item E-Mail-Template-Verwaltung
\item Benutzerrollen und Berechtigungen (Admin, Manager, Support)
\item Einfache Berichte (Umsatz nach Zeitraum, Kategorie, Kunde)
\item Export-Funktionen (CSV/PDF)
\end{itemize}
% ---------------------------------------------------------------------------
\subsection{Soll-Features (\should)}
\label{subsec:should}
Diese 12 Feature-Kategorien verbessern das System erheblich und sind für ein
wettbewerbsfähiges Produkt wichtig. Sie sollten in Phase 2 implementiert werden.
\begin{longtable}{c l l c}
\caption{Soll-Features -- Übersicht} \label{tab:should} \\
\toprule
\textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\
\midrule
\endfirsthead
\toprule
\textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\
\midrule
\endhead
\bottomrule
\endfoot
S01 & B2B-Preisgestaltung & Backend + Admin & Hoch \\
S02 & Erweiterte Suche \& Filter & Backend + Frontend & Mittel \\
S03 & Aktionen \& Rabatte & Backend + Admin & Mittel \\
S04 & Wunschliste & Backend + Frontend & Niedrig \\
S05 & Bewertungen \& Rezensionen & Backend + Frontend & Mittel \\
S06 & E-Mail-Benachrichtigungen & Backend & Mittel \\
S07 & SEO-Optimierung & Frontend + Backend & Mittel \\
S08 & Analytics \& Reporting & Admin + Backend & Mittel \\
S09 & CMS / Blog & Alle & Mittel \\
S10 & Multi-Warehouse-Inventar & Backend + Admin & Hoch \\
S11 & Retouren \& RMA & Backend + Admin & Mittel \\
S12 & REST/GraphQL API & Backend & Mittel \\
\end{longtable}
\subsubsection{S01 -- B2B-Preisgestaltung}
Kern-Feature für B2B. Ohne kundenspezifische Preise kein ernsthafter B2B-Betrieb.
\begin{itemize}[leftmargin=2em]
\item Kundengruppen-basierte Preise (Händler, Großhändler, VIP)
\item Kundenspezifische Preislisten (vertraglich vereinbart)
\item Staffelpreise: 1--10 Stk. $\rightarrow$ 10~\euro{}, 11--50 Stk. $\rightarrow$ 9~\euro{}, 50+ Stk. $\rightarrow$ 8~\euro{}
\item Rabatte auf Kategorie- oder Produktebene pro Kundengruppe
\item Netto-Preisanzeige für B2B-Kunden, Brutto für B2C
\item Mindestbestellmenge (MOQ) pro Produkt konfigurierbar
\item Angebotsanfrage (RFQ) für individuelle Preisverhandlung
\end{itemize}
\subsubsection{S02 -- Erweiterte Suche \& Filter}
Verbessert die Conversion um 10--20\% durch gezieltes Finden.
\begin{itemize}[leftmargin=2em]
\item Facettierte Suche: Preis, Kategorie, Marke, Farbe, Größe, Bewertung
\item Dynamische Filteranzahl (zeigt verfügbare Produkte pro Filter)
\item Sortierung: Relevanz, Preis, Neuheit, Beliebtheit, Bewertung
\item Gespeicherte Suchen (besonders für B2B-Wiederholungskäufe)
\item Filterbare Produktlisten in Kategorieseiten
\end{itemize}
\subsubsection{S03 -- Aktionen \& Rabatte}
Marketing-Werkzeug zur Umsatzsteigerung und Kundengewinnung.
\begin{itemize}[leftmargin=2em]
\item Gutscheincodes: prozentual, absolut, kostenloser Versand
\item Einmal- oder Mehrfachverwendung, ablaufdatumbasiert
\item Automatische Kampagnen: Zeitraum, Kategorie, Mindestbestellwert
\item Warenkorb-Aktionen: \enquote{Kaufe 2, erhalte 3. gratis}
\item Bundle-Rabatte: Produktkombinationen günstiger
\item Treuestufen: Rabatt basierend auf Gesamtumsatz des Kunden
\end{itemize}
\subsubsection{S04 -- Wunschliste}
Erhöht Wiederbesuchsrate. Kunden speichern Produkte für späteren Kauf.
\begin{itemize}[leftmargin=2em]
\item Produkte zur Wunschliste hinzufügen/entfernen
\item Wunschliste teilen (URL-basiert)
\item Benachrichtigung bei Preissenkung oder Wiederverfügbarkeit
\item Produktvergleich (2--5 Produkte nebeneinander)
\end{itemize}
\subsubsection{S05 -- Bewertungen \& Rezensionen}
Social Proof steigert Conversion. Bewertungen sind wertvoller SEO-Content.
\begin{itemize}[leftmargin=2em]
\item 5-Sterne-Bewertung + Freitextrezension
\item Nur nach Kaufabschluss bewertbar (verifizierte Käufe)
\item Admin-Moderation vor Veröffentlichung
\item \enquote{Hilfreich}-Markierung durch andere Kunden
\item Durchschnittsbewertung auf Produktseite und in Suchergebnissen
\item Antwortfunktion für den Shopbetreiber
\end{itemize}
\subsubsection{S06 -- E-Mail-Benachrichtigungen}
Reduziert Support-Anfragen und hält Kunden informiert.
\begin{itemize}[leftmargin=2em]
\item Bestellbestätigung (sofort nach Bestellabschluss)
\item Zahlungsbestätigung
\item Versandbestätigung mit Tracking-Link
\item Zustellungsbenachrichtigung
\item Passwort-Zurücksetzen, Kontobestätigung
\item Optionale Warenkorbabbruch-E-Mail
\item Template-Engine mit Variablen (Bestellnummer, Kundenname, Produkte)
\item Anbindung an E-Mail-Service (SendGrid, AWS SES, Brevo)
\end{itemize}
\subsubsection{S07 -- SEO-Optimierung}
Kritisch für organisches Wachstum. Produktseiten müssen in Suchmaschinen gefunden werden.
\begin{itemize}[leftmargin=2em]
\item Individuelle Meta-Tags (Title, Description) pro Seite
\item Saubere URL-Struktur: \texttt{/produkte/rote-laufschuhe}
\item Automatische XML-Sitemap-Generierung
\item Structured Data / JSON-LD (Product, BreadcrumbList, Organization)
\item Canonical-Tags zur Vermeidung von Duplicate Content
\item Open Graph und Twitter Cards für Social Sharing
\item Bildoptimierung mit Alt-Texten und WebP-Format
\item hreflang-Tags für mehrsprachige Seiten
\end{itemize}
\subsubsection{S08 -- Analytics \& Reporting}
Datenbasierte Entscheidungen für Sortiment, Preise und Marketing.
\begin{itemize}[leftmargin=2em]
\item Umsatz-Dashboard: Tages-, Wochen-, Monatsumsatz, YoY-Vergleich
\item Top-Produkte, Kategorie-Performance
\item Kundenanalyse: Neukunden vs. Wiederkäufer, Customer Lifetime Value
\item Bestandsberichte: Slow-Mover, Out-of-Stock-Rate
\item Conversion-Funnel: Besucher $\rightarrow$ Warenkorb $\rightarrow$ Checkout $\rightarrow$ Kauf
\item Google Analytics 4 (GA4) Integration
\item Export in CSV/PDF für Buchhaltung und Management
\end{itemize}
\subsubsection{S09 -- CMS / Blog}
Content-Marketing treibt organischen Traffic und baut Autorität auf.
\begin{itemize}[leftmargin=2em]
\item Statische Seiten (Über uns, Kontakt, AGB, Datenschutz)
\item WYSIWYG-Editor für Seiteninhalt
\item Blog mit Kategorien, Tags, Autor, Veröffentlichungsdatum
\item Zeitgesteuerte Veröffentlichung (Scheduled Publishing)
\item Wiederverwendbare Content-Blöcke (Testimonials, Feature-Boxen)
\item SEO-Felder pro Seite/Beitrag
\end{itemize}
\subsubsection{S10 -- Multi-Warehouse-Inventar}
Für skalierende Unternehmen mit mehreren Lagerstandorten.
\begin{itemize}[leftmargin=2em]
\item Mehrere Lagerorte anlegen
\item Bestand pro Variante und Lagerort verwalten
\item Automatische Lagerort-Auswahl bei Bestellung (Nähe zum Kunden)
\item Lagerumzüge zwischen Standorten tracken
\item Verfügbarkeitsanzeige: verfügbar, reserviert, verkaufbar
\item Nachbestellpunkte und Bestandsalarme
\end{itemize}
\subsubsection{S11 -- Retouren \& RMA}
Kunden erwarten einen einfachen Rückgabeprozess. Gute Retourenpolitik erhöht Conversion.
\begin{itemize}[leftmargin=2em]
\item Retourenanfrage aus Bestellhistorie erstellen
\item RMA-Nummern-Generierung
\item Retourenetikett-Generierung
\item Rückgabefrist konfigurierbar (z.B. 30 Tage)
\item Teilretouren (einzelne Artikel einer Bestellung)
\item Rückerstattung oder Gutschrift nach Wareneingang
\item Zustandsbewertung zurückgesendeter Ware
\end{itemize}
\subsubsection{S12 -- REST/GraphQL API}
Ermöglicht Mobile Apps, Drittanbieter-Integrationen und headless Betrieb.
\begin{itemize}[leftmargin=2em]
\item REST API für alle Kernressourcen (Produkte, Bestellungen, Kunden, Cart)
\item OpenAPI/Swagger-Dokumentation (automatisch generiert)
\item Optional: GraphQL-Endpunkt für flexiblere Frontend-Abfragen
\item API-Versionierung (v1, v2) für Abwärtskompatibilität
\item API-Key-Authentifizierung und OAuth 2.0
\item Rate-Limiting pro API-Key
\item Webhooks für Events (Bestellung erstellt, Zahlung bestätigt, Versand)
\item Webhook-Retry-Mechanismus und Logging
\end{itemize}
% ---------------------------------------------------------------------------
\subsection{Kann-Features (\can)}
\label{subsec:can}
Diese 11 Feature-Kategorien sind Nice-to-have und sollten in Phase 3 oder
bedarfsgesteuert implementiert werden. Sie bieten Mehrwert, sind aber nicht
geschäftskritisch.
\begin{longtable}{c l l c}
\caption{Kann-Features -- Übersicht} \label{tab:can} \\
\toprule
\textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\
\midrule
\endfirsthead
\toprule
\textbf{Nr.} & \textbf{Kategorie} & \textbf{Komponente} & \textbf{Komplexität} \\
\midrule
\endhead
\bottomrule
\endfoot
K01 & Treueprogramm / Bonuspunkte & Alle & Mittel \\
K02 & Abonnements / Wiederkehrende Best. & Backend + Frontend & Hoch \\
K03 & Marktplatz (Multi-Vendor) & Alle & Sehr hoch \\
K04 & KI-gestützte Empfehlungen & Backend + Frontend & Hoch \\
K05 & Live-Chat / Chatbot & Frontend & Mittel \\
K06 & Social-Media-Integration & Frontend & Niedrig \\
K07 & Geschenkkarten & Backend + Frontend & Mittel \\
K08 & EDI / PunchOut (Enterprise) & Backend & Hoch \\
K09 & A/B-Testing & Frontend + Backend & Mittel \\
K10 & PWA-Support & Frontend & Mittel \\
K11 & Multi-Tenant / Multi-Store & Alle & Sehr hoch \\
\end{longtable}
\subsubsection{K01 -- Treueprogramm / Bonuspunkte}
Steigert Customer Lifetime Value und Wiederkaufrate.
\begin{itemize}[leftmargin=2em]
\item Punktesystem: 1 Punkt pro 1~\euro{} Umsatz
\item Punkte einlösen gegen Rabatte oder Gratisprodukte
\item Ablaufdatum für Punkte (konfigurierbar)
\item Mitgliedsstufen: Bronze, Silber, Gold mit steigenden Vorteilen
\item Empfehlungsprogramm: Belohnung für Weiterempfehlung
\end{itemize}
\subsubsection{K02 -- Abonnements / Wiederkehrende Bestellungen}
Wiederkehrender Umsatz, Kundenkomfort bei Verbrauchsartikeln.
\begin{itemize}[leftmargin=2em]
\item Abo-Produkte mit flexiblen Intervallen (wöchentlich, monatlich, quartalsweise)
\item Pausieren, Überspringen, Kündigen durch Kunden
\item Automatische Verlängerung und Zahlung
\item Erinnerung vor Verlängerung
\item Mengenänderung zwischen Zyklen
\end{itemize}
\subsubsection{K03 -- Marktplatz (Multi-Vendor)}
Erweitert das Sortiment ohne eigenes Inventar. Erfordert erheblichen Zusatzaufwand.
\begin{itemize}[leftmargin=2em]
\item Vendor-Registrierung und -Freischaltung
\item Vendor-Dashboard: eigene Produkte, Bestellungen, Umsatz
\item Provisionsmodell (konfigurierbar pro Vendor)
\item Admin-Genehmigung neuer Produkte
\item Vendor-Auszahlungsmanagement
\item Separate Vendor-Bewertungen
\end{itemize}
\subsubsection{K04 -- KI-gestützte Empfehlungen}
Erhöht den durchschnittlichen Bestellwert durch personalisierte Vorschläge.
\begin{itemize}[leftmargin=2em]
\item \enquote{Ähnliche Produkte} auf Produktseiten
\item \enquote{Häufig zusammen gekauft} im Warenkorb
\item Personalisierte Empfehlungen basierend auf Kauf- und Browsinghistorie
\item Collaborative Filtering oder Content-Based Algorithmen
\item Empfehlungen in E-Mails
\end{itemize}
\subsubsection{K05 -- Live-Chat / Chatbot}
Echtzeit-Support verbessert Kundenzufriedenheit und reduziert Warenkorbabbrüche.
\begin{itemize}[leftmargin=2em]
\item Chat-Widget auf der Website
\item KI-Chatbot für häufige Fragen (FAQ, Bestellstatus)
\item Eskalation an menschlichen Mitarbeiter
\item Offline-Nachrichtenerfassung
\item Chat-Verlaufshistorie
\end{itemize}
\subsubsection{K06 -- Social-Media-Integration}
Kostenloser Marketing-Kanal durch Social Sharing.
\begin{itemize}[leftmargin=2em]
\item Social Login (Facebook, Google, Apple)
\item Produkt-Teilen auf Social Media
\item Instagram/TikTok Shopping-Integration
\item Social-Media-Pixel für Remarketing (Meta, TikTok)
\end{itemize}
\subsubsection{K07 -- Geschenkkarten}
Zusätzliche Umsatzquelle und Geschenkoption.
\begin{itemize}[leftmargin=2em]
\item Digitale Geschenkkarten mit festen oder individuellen Beträgen
\item E-Mail-Zustellung mit personalisierter Nachricht
\item Einlösung im Checkout
\item Restguthaben-Verwaltung
\item Optionales Ablaufdatum
\end{itemize}
\subsubsection{K08 -- EDI / PunchOut (Enterprise B2B)}
Für Integration mit Großkunden-Beschaffungssystemen (SAP Ariba, Coupa).
\begin{itemize}[leftmargin=2em]
\item EDI-Nachrichtenformate (X12, EDIFACT) empfangen und verarbeiten
\item PunchOut-Katalog: Produktkatalog über cXML bereitstellen
\item Automatische Bestellverarbeitung aus Procurement-Systemen
\item Authentifizierung gegenüber Einkaufssystem des Kunden
\end{itemize}
\subsubsection{K09 -- A/B-Testing}
Datengesteuerte Optimierung von Conversion-Raten.
\begin{itemize}[leftmargin=2em]
\item Test-Framework: Varianten von UI, Preisen, Content ausspielen
\item Traffic-Splitting zwischen Varianten
\item Statistische Auswertung (Signifikanzniveau)
\item Gewinner-Deklaration und automatisches Rollout
\end{itemize}
\subsubsection{K10 -- PWA-Support}
App-ähnliche Erfahrung ohne App-Store-Installation.
\begin{itemize}[leftmargin=2em]
\item Service Worker für Offline-Funktionalität
\item Install-Prompt (Manifest.json, App-Icon, Splashscreen)
\item Push-Notifications für Bestellstatus und Angebote
\item Cache-Strategien für häufig besuchte Seiten
\end{itemize}
\subsubsection{K11 -- Multi-Tenant / Multi-Store}
Mehrere Shops/Marken aus einer Instanz betreiben. Hohe architektonische Komplexität.
\begin{itemize}[leftmargin=2em]
\item Separate Stores mit eigenen Produkten, Preisen, Einstellungen
\item Datenisolierung pro Store (Kunden, Bestellungen)
\item Geteilte Ressourcen: Produktkatalog mit store-spezifischen Preisen
\item Ein Admin-Panel für alle Stores
\item Store-spezifische Domains, Währungen, Sprachen
\end{itemize}
% ---------------------------------------------------------------------------
\subsection{Nicht benötigte Features (\notneed)}
\label{subsec:notneed}
Die folgenden Funktionen liegen außerhalb des Systemscopes. Sie werden besser
durch spezialisierte Drittanbieter abgedeckt und per API angebunden.
\begin{table}[htbp]
\centering
\caption{Abgrenzung -- Nicht benötigte Features}
\label{tab:notneed}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X}
\toprule
\textbf{Kategorie} & \textbf{Begründung} & \textbf{Alternative (Integration)} \\
\midrule
Eigene Buchhaltung / ERP &
Zu komplex, regulatorisch anspruchsvoll,
schnell veraltet. Besser als Integration. &
DATEV, sevDesk, lexoffice, Xero, NetSuite \\
Vollständiges WMS &
Lagerverwaltung (Picking, Packing, Routenoptimierung)
ist hochspezialisiert. &
ShipHero, Fulfillmenttools, externe WMS per API \\
Eigene Zahlungsabwicklung &
PCI-DSS Level 1 erfordert jährliche Audits
(\$50K--\$500K). Unverhältnismäßig. &
Stripe, Mollie, Adyen (Tokenisierung) \\
E-Mail-Marketing-Plattform &
Spezialisierte Tools bieten Segmentierung,
Automation und Analytics auf Enterprise-Niveau. &
Mailchimp, Brevo (ex-Sendinblue), Klaviyo \\
Social-Media-Management &
Nicht Kernaufgabe eines Shopsystems.
Separater Workflow und Tools. &
Buffer, Hootsuite, Later \\
Vollständiges CRM &
Kundenbeziehungsmanagement umfasst
Sales-Pipeline, Ticketing, Anrufmanagement. &
HubSpot, Salesforce, Pipedrive \\
\bottomrule
\end{tabularx}
\end{table}
\textbf{Prinzip:} Das Shopsystem stellt für jede dieser Kategorien
Schnittstellen (REST API, Webhooks) bereit, über die Drittanbieter
angebunden werden. Es implementiert diese Funktionen nicht selbst.
% =============================================================================
% KAPITEL 5: B2B-SPEZIFISCHE ANFORDERUNGEN
% =============================================================================
\newpage
\section{B2B-spezifische Anforderungen}
\label{sec:b2b}
Der gleichzeitige Support von B2C und B2B ist eine der größten Herausforderungen
des Systems. B2B-Kunden haben fundamental andere Anforderungen als Endverbraucher.
\subsection{B2B vs. B2C -- Fundamentale Unterschiede}
\begin{table}[htbp]
\centering
\caption{B2B vs. B2C -- Feature-Vergleich}
\label{tab:b2bvsb2c}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X}
\toprule
\textbf{Aspekt} & \textbf{B2C} & \textbf{B2B} & \textbf{Implementierung} \\
\midrule
Preisgestaltung &
Einheitlich für alle Kunden &
Kundenspezifisch, vertraglich &
Preisgruppen-Engine, Preislisten \\
Preisanzeige &
Brutto (inkl. MwSt) &
Netto (zzgl. MwSt) &
Toggle basierend auf Kontotyp \\
Bestellprozess &
Sofortkauf, keine Genehmigung &
Genehmigungspflichtig ab Betrag X &
Workflow-Engine mit Eskalation \\
Zahlung &
Sofort (Karte, PayPal) &
Auf Rechnung (Net 30/60/90) &
Kreditlimit-Prüfung, Invoicing \\
Konto &
Einzelperson &
Firma mit mehreren Mitarbeitern &
Company-Account-Hierarchie \\
Bestellmenge &
Einzelstücke &
Großmengen, Paletten &
MOQ, Staffelpreise, Schnellbestellung \\
Katalog &
Gesamtes Sortiment &
Kundenspezifischer Katalog &
Katalogzuweisung pro Kundengruppe \\
Kaufentscheidung &
Emotional, schnell &
Rational, mehrere Entscheider &
Angebotssystem, Verhandlung \\
\bottomrule
\end{tabularx}
\end{table}
\subsection{Firmenkonten \& Rollenmanagement}
\begin{itemize}[leftmargin=2em]
\item \textbf{Company Account:} Übergeordnetes Konto mit Firmendaten
(Name, USt-IdNr, Adresse, Zahlungsbedingungen)
\item \textbf{Mitarbeiter-Accounts:} Zugeordnet zum Company Account, mit individuellen Rollen:
\begin{description}[leftmargin=2em]
\item[Einkäufer] Kann bestellen bis zu einem Betragslimit
\item[Genehmiger] Kann Bestellungen freigeben
\item[Admin] Kann Mitarbeiter verwalten, Rollen zuweisen
\item[Finanz] Kann Rechnungen einsehen und Zahlungen verwalten
\item[Viewer] Nur Lesezugriff auf Bestellhistorie und Katalog
\end{description}
\item \textbf{Einladungsworkflow:} Admin lädt Mitarbeiter per E-Mail ein
\item \textbf{Budgetlimits:} Pro Mitarbeiter oder Abteilung konfigurierbar
\end{itemize}
\subsection{Genehmigungsworkflows}
\begin{enumerate}[leftmargin=2em]
\item Einkäufer legt Bestellung an und übermittelt zur Genehmigung
\item System prüft: Bestellwert $>$ Limit $\rightarrow$ Genehmigung erforderlich
\item Genehmiger erhält E-Mail-Benachrichtigung
\item Genehmiger: Freigeben, Ablehnen oder Kommentieren
\item Bei Mehrstufigkeit: Eskalation an nächste Ebene
\item Nach Freigabe: automatische Zahlungsauslösung und Bestellverarbeitung
\end{enumerate}
\subsection{Zahlungsbedingungen}
\begin{itemize}[leftmargin=2em]
\item \textbf{Kauf auf Rechnung:} Net 30, Net 60, Net 90 (pro Kunde konfigurierbar)
\item \textbf{Kreditlimit:} Maximaler offener Rechnungsbetrag pro Firma
\item \textbf{SEPA-Lastschrift:} Einmaliges Mandat, wiederkehrende Einzüge
\item \textbf{Vorkasse:} Überweisung mit automatischer Zuordnung (IBAN-Referenz)
\item \textbf{Skonto:} 2\% Rabatt bei Zahlung innerhalb von 10 Tagen
\item \textbf{Zahlungserinnerungen:} Automatisiert bei Fälligkeit und Überfälligkeit
\end{itemize}
\subsection{Schnellbestellung \& CSV-Upload}
B2B-Kunden kennen ihre Artikelnummern und wollen schnell große Bestellungen aufgeben:
\begin{itemize}[leftmargin=2em]
\item \textbf{Quick-Order-Formular:} SKU + Menge eingeben, direkt in den Warenkorb
\item \textbf{CSV-Upload:} Bestellliste hochladen (SKU, Menge) für Massenbestellungen
\item \textbf{Bestellvorlagen:} Wiederkehrende Bestellungen als Template speichern
\item \textbf{Nachbestellung:} Ein-Klick-Wiederholung vergangener Bestellungen
\end{itemize}
% =============================================================================
% KAPITEL 6: INTERNATIONALISIERUNG
% =============================================================================
\newpage
\section{Internationalisierung}
\label{sec:i18n}
Für weltweiten Einsatz muss das System von Beginn an auf Internationalisierung
ausgelegt sein. Nachträgliches Hinzufügen ist um ein Vielfaches aufwändiger.
\subsection{Übersicht der Anforderungen}
\begin{table}[htbp]
\centering
\caption{Internationalisierungsanforderungen}
\label{tab:i18n}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X}
\toprule
\textbf{Aspekt} & \textbf{Ansatz} & \textbf{Technologie} \\
\midrule
Übersetzungen &
Key-Value mit Pluralisierung und ICU Message Format &
i18next / next-intl \\
Währungen &
Echtzeit-Kurse + manuell gepflegte Preise pro Währung &
Open Exchange Rates API \\
Datumsformate &
Locale-basierte Formatierung &
Intl API (ECMAScript) \\
Zahlenformate &
Locale-basiert (1.000,50 vs. 1,000.50) &
Intl.NumberFormat \\
Adressen &
Länderspezifische Adressfelder und Validierung &
Google Address Validation API \\
Rechtstexte &
Separate AGB, Widerrufsbelehrung, Datenschutz pro Land &
CMS mit Sprachzuordnung \\
Maßeinheiten &
Metrisch (EU) vs. Imperial (US, UK) &
Konfiguration pro Region \\
RTL-Support &
Arabisch, Hebräisch: Right-to-Left Layout &
CSS logical properties, dir-Attribut \\
\bottomrule
\end{tabularx}
\end{table}
\subsection{Mehrsprachigkeit (i18n)}
\textbf{URL-Strategie:} Sprachpräfix im Pfad (empfohlen für SEO):
\begin{lstlisting}
example.com/de/produkte/rote-schuhe
example.com/en/products/red-shoes
example.com/fr/produits/chaussures-rouges
\end{lstlisting}
\textbf{Vorteile:} Eine Domain, zentralisierte Domain-Autorität,
einfachere Verwaltung als Subdomains.
\textbf{Spracherkennung (Priorität):}
\begin{enumerate}[leftmargin=2em]
\item URL-Pfad (\texttt{/de/...})
\item Gespeicherte Benutzerpräferenz (Cookie/Account)
\item Accept-Language Header des Browsers
\item GeoIP-basierter Fallback
\end{enumerate}
\textbf{Übersetzungsmanagement:}
\begin{itemize}[leftmargin=2em]
\item Entwickler pflegen Schlüssel in JSON-Dateien (Standardsprache: Englisch)
\item Professionelle Übersetzer arbeiten über Plattform (Crowdin, Lokalise)
\item Automatischer Pull der Übersetzungen ins Repository via CI/CD
\item Produktbeschreibungen: mehrsprachige Felder in der Datenbank
\end{itemize}
\subsection{Mehrwährungsfähigkeit}
\textbf{Zwei Strategien (beide unterstützen):}
\begin{description}[leftmargin=2em]
\item[Automatische Umrechnung] Basiswährung (EUR) + Echtzeit-Wechselkurse.
Gut für B2C mit vielen Märkten. Preise können zwischen Seitenbesuchen schwanken.
\item[Feste Preise pro Währung] Manuell gepflegte Preise in jeder Währung.
Wichtig für B2B-Verträge und Preiskonsistenz. Höherer Pflegeaufwand.
\end{description}
\textbf{Währungsformatierung} muss locale-korrekt sein:
\begin{itemize}[leftmargin=2em]
\item USA: \$1,000.00
\item Deutschland: 1.000,00~\euro{}
\item Japan: ¥1,000 (keine Dezimalstellen)
\item Schweiz: CHF 1'000.00
\end{itemize}
\subsection{Regionale Rechtsanforderungen}
\begin{itemize}[leftmargin=2em]
\item \textbf{EU:} DSGVO, Widerrufsbelehrung, Preisangabenverordnung (Grundpreis),
Impressumspflicht, Cookie-Consent
\item \textbf{Deutschland:} Buttonlösung (\enquote{Zahlungspflichtig bestellen}),
Fernabsatzgesetz, Verpackungsgesetz
\item \textbf{UK:} UK GDPR (post-Brexit), Consumer Rights Act, VAT-Regeln
\item \textbf{USA:} CCPA/CPRA (Kalifornien), CAN-SPAM Act, keine einheitliche Datenschutzregelung
\item \textbf{Weitere:} LGPD (Brasilien), PIPA (Südkorea), APPI (Japan)
\end{itemize}
% =============================================================================
% KAPITEL 7: SICHERHEIT & COMPLIANCE
% =============================================================================
\newpage
\section{Sicherheit \& Compliance}
\label{sec:sicherheit}
\subsection{DSGVO / GDPR}
Die DSGVO gilt für alle Unternehmen, die personenbezogene Daten von EU-Bürgern
verarbeiten -- unabhängig vom Firmensitz.
\textbf{Kernprinzipien und ihre Umsetzung im System:}
\begin{itemize}[leftmargin=2em]
\item \textbf{Datenminimierung:} Nur erforderliche Daten erheben.
Keine Pflichtfelder für nicht-benötigte Informationen.
\item \textbf{Zweckbindung:} Daten nur für den angegebenen Zweck verwenden.
Klare Trennung von Bestelldaten und Marketingdaten.
\item \textbf{Einwilligungsmanagement:} Explizites Opt-in für Newsletter,
Cookie-Tracking, personalisierte Werbung. Kein Pre-Checked-Checkbox.
\item \textbf{Recht auf Löschung:} Kundenkonto vollständig löschbar.
Bestelldaten anonymisieren (gesetzliche Aufbewahrungsfristen beachten).
\item \textbf{Datenportabilität:} Export aller persönlichen Daten als JSON/CSV.
\item \textbf{Auftragsverarbeitung:} DPA (Data Processing Agreement)
mit allen Drittanbietern (Stripe, Meilisearch Cloud, etc.).
\item \textbf{Datenschutzerklärung:} Detailliert, verständlich, pro Sprache/Land.
\end{itemize}
\subsection{PCI-DSS Compliance}
Da keine Kartendaten im System gespeichert oder verarbeitet werden
(Tokenisierung über Stripe/Mollie), gilt \textbf{SAQ-A} -- das niedrigste
Compliance-Level:
\begin{itemize}[leftmargin=2em]
\item Zahlungsformulare werden als iFrames der Payment-Provider eingebettet
\item Keine Kartendaten berühren das eigene Backend
\item TLS 1.2+ für alle Verbindungen
\item Regelmäßige Vulnerability-Scans
\end{itemize}
\subsection{OWASP Top 10 -- Maßnahmen}
\begin{table}[htbp]
\centering
\caption{Sicherheitsmaßnahmen gegen OWASP Top 10}
\label{tab:owasp}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X}
\toprule
\textbf{Bedrohung} & \textbf{Maßnahme} & \textbf{Implementierung} \\
\midrule
Injection &
Parameterisierte Queries, kein String-Concatenation &
Prisma ORM (prepared statements) \\
Broken Auth &
Sichere Token-Verwaltung, MFA für Admin &
JWT + Refresh-Token, Passport.js \\
XSS &
Output-Encoding, Content Security Policy &
React (auto-escaping), Helmet.js \\
CSRF &
SameSite-Cookies, CSRF-Tokens &
NestJS CSRF-Guard \\
SSRF &
URL-Validierung, Allowlist für externe Requests &
Input-Validierung mit Zod \\
Security Misc. &
Security-Header, Dependency-Updates &
Helmet.js, Dependabot/Renovate \\
Insecure Design &
Threat Modeling, Security Reviews &
Architektur-Review vor Deployment \\
Broken Access &
RBAC, Ressourcen-basierte Autorisierung &
NestJS Guards + CASL-Bibliothek \\
Crypto Failures &
Starke Hashing-Algorithmen, Verschlüsselung &
Argon2 (Passwörter), AES-256 (PII) \\
Logging/Monitor. &
Zentrale Logs, Alerting bei Anomalien &
Winston + Loki oder CloudWatch \\
\bottomrule
\end{tabularx}
\end{table}
\subsection{Authentifizierung \& Autorisierung}
\begin{description}[leftmargin=2em]
\item[JWT + Refresh-Token] Access-Token (15 Min. Gültigkeit) + Refresh-Token
(7 Tage, in httpOnly-Cookie). Token-Rotation bei jedem Refresh.
\item[OAuth 2.0] Für API-Zugriff durch Drittanbieter. Authorization Code Flow
mit PKCE für öffentliche Clients.
\item[RBAC] Role-Based Access Control mit feingranularen Berechtigungen.
Rollen: Super-Admin, Shop-Admin, Support, B2B-Admin, B2B-Einkäufer, B2B-Genehmiger.
\item[MFA] Pflicht für Admin-Zugänge. Optional (empfohlen) für B2B-Genehmiger.
TOTP-basiert (Google Authenticator, Authy).
\end{description}
% =============================================================================
% KAPITEL 8: OPEN-SOURCE-REFERENZARCHITEKTUREN
% =============================================================================
\newpage
\section{Open-Source-Referenzarchitekturen}
\label{sec:referenz}
Drei führende Open-Source-E-Commerce-Plattformen dienen als Referenz für
Architekturentscheidungen. Ziel ist nicht die Übernahme einer Plattform,
sondern das Lernen aus bewährten Mustern.
\begin{table}[htbp]
\centering
\caption{Open-Source-Referenzplattformen im Vergleich}
\label{tab:referenz}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l X X X}
\toprule
\textbf{Kriterium} & \textbf{Medusa.js} & \textbf{Saleor} & \textbf{Vendure} \\
\midrule
Sprache &
TypeScript (Node.js) &
Python (Django) &
TypeScript (NestJS) \\
API &
REST (+ GraphQL geplant) &
GraphQL &
GraphQL \\
Datenbank &
PostgreSQL &
PostgreSQL &
PostgreSQL / MySQL \\
Architektur &
Modular (Plugin-System) &
Monolith (modular) &
Plugin-basiert \\
Multi-Currency &
Ja (Multi-Region) &
Ja (sehr ausgereift) &
Ja (Plugin) \\
B2B-Support &
Begrenzt (Custom) &
Begrenzt (Extension) &
Plugin möglich \\
Admin-Panel &
Eigenes (React) &
Dashboard (React) &
Angular Admin UI \\
GitHub-Stars &
$\sim$31K &
$\sim$21K &
$\sim$6K \\
\midrule
\textbf{Stärken} &
Erweiterbarkeit, DX,
größte Community &
Multi-Channel, GraphQL,
i18n out-of-the-box &
Saubere NestJS-Architektur,
Type-Safety \\
\textbf{Schwächen} &
Weniger Features als Saleor,
B2B braucht Custom-Code &
Python (anderer Stack),
kleinere Community &
Kleinste Community,
Angular-Admin \\
\textbf{Relevanz} &
\textbf{Hoch} -- gleicher Stack &
Mittel -- Architektur-Referenz &
\textbf{Hoch} -- NestJS-Referenz \\
\bottomrule
\end{tabularx}
\end{table}
\subsection{Learnings für unser System}
\begin{description}[leftmargin=2em]
\item[Von Medusa.js lernen:]
Modulares Plugin-System, bei dem jedes Modul (Produkte, Bestellungen, Zahlungen)
unabhängig ersetzt werden kann. Multi-Region-Konzept für länderspezifische
Einstellungen (Währung, Steuern, Lager).
\item[Von Saleor lernen:]
GraphQL-Schema-Design für E-Commerce. Ausgereifte Multi-Currency/Multi-Language-Implementierung.
Channel-basiertes Multi-Store-Konzept.
\item[Von Vendure lernen:]
NestJS-spezifische Patterns: Dependency Injection für Service-Layer,
Custom Decorators für Autorisierung, Event-Bus für lose Kopplung.
State-Machine für Bestellstatus.
\end{description}
\textbf{Wichtig:} Keine dieser Plattformen als Fork übernehmen. Die Abweichung
von der Upstream-Codebasis macht Updates nach 3--6 Monaten praktisch unmöglich.
Stattdessen: eigenes System bauen, Patterns und API-Design als Referenz nutzen.
% =============================================================================
% KAPITEL 9: ARCHITEKTUR-ÜBERSICHT
% =============================================================================
\newpage
\section{Architektur-Übersicht}
\label{sec:architektur}
\subsection{Architekturansatz: Modularer Monolith}
Das System startet als \textbf{modularer Monolith} -- ein einzelnes Deployment
mit klar getrennten internen Modulen. Dieser Ansatz kombiniert:
\begin{itemize}[leftmargin=2em]
\item \textbf{Einfachheit eines Monolithen:} Ein Deployment, ein Repository,
einfaches Debugging, keine Netzwerk-Latenz zwischen Modulen
\item \textbf{Modularität für spätere Zerlegung:} Jedes Modul hat klare Grenzen
(eigenes Interface, eigene DTOs), sodass es bei Bedarf als Microservice
extrahiert werden kann
\end{itemize}
\textbf{Kein Microservice-Start!} Microservices verursachen bei kleinen Teams
mehr Overhead als Nutzen (Network Calls, Distributed Tracing, Service Discovery,
Deployment-Komplexität). Die Zerlegung erfolgt erst bei konkretem Bedarf.
\subsection{System-Komponenten}
\begin{table}[htbp]
\centering
\caption{Architektur-Komponenten}
\label{tab:architektur}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l l X}
\toprule
\textbf{Komponente} & \textbf{Technologie} & \textbf{Verantwortlichkeit} \\
\midrule
API-Server &
NestJS &
REST-Endpunkte, Middleware, Guards, Validierung \\
Produkt-Modul &
NestJS Module &
Katalog, Varianten, Kategorien, Attribute, Suche \\
Bestell-Modul &
NestJS Module &
Cart, Checkout, Bestellungen, Status-Workflow \\
Zahlungs-Modul &
NestJS Module &
Provider-Abstraktion (Strategy Pattern), Webhooks \\
Kunden-Modul &
NestJS Module &
Auth, Profile, Firmenkonten, Rollen \\
B2B-Modul &
NestJS Module &
Preislisten, Genehmigungen, Zahlungsbedingungen \\
Versand-Modul &
NestJS Module &
Carrier-Integration, Tracking, Etiketten \\
Such-Service &
Meilisearch &
Produkt-Indexierung und -Abfragen \\
Cache-Layer &
Redis &
Sessions, Warenkörbe, Rate-Limiting, Caching \\
Job-Queue &
BullMQ (Redis) &
E-Mails, Import/Export, Bildverarbeitung \\
Datei-Speicher &
S3 / MinIO &
Produktbilder, Dokumente, Exporte \\
Event-Bus &
NestJS EventEmitter &
Lose Kopplung zwischen Modulen \\
\bottomrule
\end{tabularx}
\end{table}
\subsection{API-Design}
\textbf{Primär: REST API} mit klarer Ressourcen-Struktur:
\begin{lstlisting}
GET /api/v1/products # Produktliste (paginiert, filterbar)
GET /api/v1/products/:id # Produktdetails
POST /api/v1/cart/items # Artikel zum Warenkorb hinzufuegen
POST /api/v1/checkout # Checkout starten
GET /api/v1/orders # Bestellhistorie
POST /api/v1/orders/:id/return # Retoure anfragen
\end{lstlisting}
\textbf{Optional: GraphQL} als zweiter Endpunkt für Frontend-Entwickler,
die flexiblere Abfragen benötigen (z.B. Produktseite mit Reviews,
Related Products und Inventory in einem Request).
\textbf{Webhooks} für asynchrone Events:
\begin{lstlisting}
POST /webhooks/stripe # Stripe-Zahlungsbestaetigung
POST /webhooks/shipping # Carrier-Tracking-Updates
\end{lstlisting}
\subsection{Datenbank-Schema (Kernentitäten)}
\begin{lstlisting}
Produkt 1 --- N Variante
Produkt N --- M Kategorie
Variante 1 --- N Lagereintrag (pro Lagerort)
Kunde 1 --- N Adresse
Kunde 1 --- N Bestellung
Kunde N --- 1 Firma (B2B)
Firma 1 --- N Mitarbeiter (Kunde mit Rolle)
Bestellung 1 --- N Bestellposition
Bestellung 1 --- 1 Zahlung
Bestellung 1 --- N Versand
Bestellung 1 --- N Rechnung
Preisliste N --- M Kundengruppe
Preisliste 1 --- N Preislisteneintrag (Produkt + Preis)
\end{lstlisting}
\subsection{Event-Driven Architecture}
Module kommunizieren über Events statt direkter Aufrufe:
\begin{lstlisting}
order.created -> E-Mail-Service (Bestellbestaetigung senden)
order.created -> Inventar-Service (Bestand reservieren)
payment.confirmed -> Bestell-Service (Status aktualisieren)
order.shipped -> E-Mail-Service (Versandbestaetigung senden)
order.shipped -> Tracking-Service (Tracking-Updates starten)
\end{lstlisting}
\textbf{Vorteil:} Module kennen einander nicht direkt. Neue Features
(z.B. Analytics, Loyalty-Punkte) können als Listener hinzugefügt werden,
ohne bestehenden Code zu ändern.
\subsection{Caching-Strategie}
\begin{description}[leftmargin=2em]
\item[Produktkatalog] Redis-Cache mit TTL (5--15 Min.), Invalidierung bei Admin-Änderung
\item[Warenkorb] Redis mit Session-ID als Key. TTL: 7 Tage (Gast), unbegrenzt (eingeloggt)
\item[Suchergebnisse] Meilisearch hat eigenes Caching. Zusätzlich CDN-Caching für häufige Queries
\item[Seitencaching] Next.js ISR für Produktseiten, Kategorieseiten, Blog-Beiträge
\item[API-Responses] ETag-basiertes Caching für unveränderliche Ressourcen
\end{description}
% =============================================================================
% KAPITEL 10: ZUSAMMENFASSUNG & EMPFEHLUNG
% =============================================================================
\newpage
\section{Zusammenfassung \& Empfehlung}
\label{sec:zusammenfassung}
\subsection{Empfohlener Stack (Zusammenfassung)}
\begin{center}
\colorbox{stackhighlight}{%
\parbox{0.92\textwidth}{%
\textbf{Backend:} NestJS + TypeScript + Prisma + PostgreSQL \\
\textbf{Frontend:} Next.js + React + TypeScript \\
\textbf{Admin:} Next.js + React (separates Deployment) \\
\textbf{Suche:} Meilisearch \quad \textbf{Cache:} Redis \quad \textbf{Queue:} BullMQ \\
\textbf{Zahlungen:} Stripe (primär) + Mollie (EU) \\
\textbf{Deployment:} Docker Compose + GitHub Actions + Cloudflare CDN
}%
}
\end{center}
\subsection{Phasenplan}
\begin{table}[htbp]
\centering
\caption{Implementierungs-Phasenplan}
\label{tab:phasen}
\rowcolors{2}{gray!8}{white}
\small
\begin{tabularx}{\textwidth}{l l X l}
\toprule
\textbf{Phase} & \textbf{Zeitraum} & \textbf{Features} & \textbf{Team} \\
\midrule
Phase 1 (MVP) &
Monat 1--6 &
Alle Pflicht-Features (P01--P13):
Produktverwaltung, Auth, Cart/Checkout, Bestellungen, Zahlungen,
Versand, Steuern, Sicherheit, Suche, Responsive Design,
i18n, Multi-Currency, Admin-Panel &
3--4 Entwickler \\
Phase 2 &
Monat 7--12 &
Priorisierte Soll-Features:
B2B-Preisgestaltung (S01), Erweiterte Suche (S02),
Rabatte (S03), E-Mail-Benachrichtigungen (S06),
SEO (S07), Analytics (S08), API (S12) &
3--5 Entwickler \\
Phase 3 &
Ab Monat 13 &
Verbleibende Soll-Features (S04, S05, S09--S11)
und bedarfsgesteuerte Kann-Features (K01--K11) &
4--6 Entwickler \\
\bottomrule
\end{tabularx}
\end{table}
\subsection{Nächste Schritte}
Nach Genehmigung dieses Analysedokuments folgen:
\begin{enumerate}[leftmargin=2em]
\item \textbf{Detaillierte technische Spezifikation} -- Datenbankschema,
API-Endpunkte, Modulstruktur
\item \textbf{UI/UX-Design} -- Wireframes und Prototypen für Shop, Checkout, Admin
\item \textbf{Projektsetup} -- Repository, CI/CD-Pipeline, Docker-Konfiguration,
Coding-Standards, Linting
\item \textbf{Sprint-Planung} -- Aufgaben für Phase 1 in 2-Wochen-Sprints aufteilen
\item \textbf{Infrastruktur} -- Hosting einrichten, Datenbank provisionieren,
Staging-Umgebung deployen
\end{enumerate}
% =============================================================================
\end{document}