1900 lines
71 KiB
TeX
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}
|