E-StoreX is a modern, scalable, and feature-rich E-Commerce frontend application built with Angular 19.
This project was built to demonstrate advanced frontend architecture, clean code practices, and real-world application flows. It allows users to browse products, manage their cart, place orders, and pay securely using Stripe. The application is designed to be production-ready, featuring strong separation of concerns, modern state management using Signals, and full responsive design.
Target Audience: Recruiters, Technical Leads, and Developers looking for a reference implementation of a complex Angular application.
Key Goals:
- Demonstrate Scalable Architecture (Core/Features/Shared pattern).
- Showcase modern Angular features (Signals, Control Flow, Standalone Components).
- Implement real-world complex flows (Auth, Payment, Order Management).
- Provide a premium, responsive User Experience.
- Live Demo: e-store-x.web.app
- Frontend Repository: github.com/Ibrahim-Hassan74/E-StoreX
- Backend Repository: github.com/Ibrahim-Hassan74/EStoreX
- API Swagger: estorex.runasp.net/swagger
The application provides a comprehensive shopping experience:
- Browsing & Filtering: Advanced product filtering by Category, Brand, Price Range, and Search terms.
- Product Details: Detailed view with image galleries, descriptions, and user ratings.
- Real-time Availability: Dynamic stock checking and status updates.
- Secure Auth: Login and Registration with JWT authentication.
- OAuth Integration: Secure login via Google and GitHub.
- Password Management: Forgot Password and Reset Password flows with email tokens.
- Profile Management: Update personal details and saved addresses (shipping/billing).
- Security: usage of
AuthGuardto protect private routes.
- Smart Cart: Persistent cart management (supports Guest users via LocalStorage and merges upon Login).
- Wishlist: Save products for later.
- Real-time Updates: Cart totals and badge counts update instantly via Signals.
- Multi-step Checkout: Organized flow:
Shipping AddressβDelivery MethodβPayment. - Stripe Integration: Secure credit card processing using Stripe Elements.
- Order Creation: Seamless order generation and payment confirmation.
- Order History: List of past orders with status indicators (Pending, Shipped, Delivered).
- Order Details: Detailed receipt view including items, shipping cost, and delivery status.
- Responsive Design: Fully optimized for Mobile, Tablet, and Desktop.
- Error Handling: Global
ErrorInterceptorand user-friendly toast notifications. - Loading States: Centralized loading indicators for async operations.
- SEO Ready: Server-Side Rendering (SSR) support.
The project follows a Modular & Feature-Based Architecture to ensure scalability and maintainability.
The application is split into three main layers:
- Core Module (
app/core): containing singleton services and low-level infrastructure. - Shared Module (
app/shared): containing reusable UI components and models. - Feature Modules (
app/features): containing domain-specific logic (pages, components).
Instead of using heavy external libraries, this project uses Service-based State Management with Angular Signals.
- Data Access: Services (e.g.,
BasketService) handle HTTP API calls (RxJS). - State Holders: State Services (e.g.,
BasketStateService) hold application state inWritableSignals. - Reactivity: Components read state via
Computedsignals, ensuring fine-grained reactivity.
To avoid repetitive HTTP boilerplate code, the project implements a generic abstract ResourceService<T>.
- Purpose: Encapsulates common HTTP operations (
GET,POST,PUT,DELETE). - Standardization: Automatically handles
BaseURLconcatenation and request headers. - Usage: Feature services (e.g.,
ProductService,OrdersService) extend this class, focusing only on domain-specific endpoints while inheriting robust error handling and type safety.
src/app/
βββ core/ # Singleton objects (loaded once)
β βββ guards/ # Auth & Admin route guards
β βββ interceptors/ # HTTP Interceptors (JWT, Errors)
β βββ services/ # Global Business Logic
β β βββ resource.service.ts # Generic HTTP wrapper
β β βββ ...
β βββ layout/ # Global Layout (Navbar, Footer)
β
βββ features/ # Business Features (Lazy Loaded)
β βββ auth/ # Login, Register, OAuth
β βββ product/ # Product Browsing
β βββ cart/ # Basket Logic
β βββ checkout/ # Checkout Steps
β βββ account/ # User Profile
β
βββ shared/ # Reusable Artifacts
βββ components/ # Generic UI Components
βββ models/ # TypeScript Interfaces
- Framework: Angular 19 (Latest version)
- Language: TypeScript
- Styling: TailwindCSS v4 & SCSS
- Reactivity: RxJS & Angular Signals
- Routing: Angular Router (Lazy Loading configured)
- Payment: Stripe.js
- Build Tool: Angular CLI & Vite
The checkout process is a critical part of this application, designed to be secure and robust.
- Initialization:
CheckoutServiceloads saved addresses; Stripe Elements initialize. - Order Creation: User confirms details -> App creates Order via API -> Backend returns Stripe ClientSecret.
- Payment Confirmation: App calls
stripe.confirmCardPayment()with ClientSecret. - Completion: On success, App clears cart and redirects to Order Success page.
- Node.js (Latest LTS)
- Angular CLI (
npm install -g @angular/cli)
-
Clone the repository
git clone https://github.com/Ibrahim-Hassan74/E-StoreX-Frontend.git cd E-StoreX -
Install Dependencies
npm install
-
Environment Configuration Open
src/environments/environment.ts:export const environment = { production: false, baseURL: "https://estorex.runasp.net/api/v1/", // Backend API stripeKey: "pk_test_...", // Your Stripe Publishable Key };
-
Run the Application
npm start
Navigate to
http://localhost:4200/.
Ibrahim Hassan
I am a passionate Software Engineer specializing in Backend Development, currently expanding my expertise into Full-Stack Architecture. This project represents my journey into mastering modern Frontend Engineering.