Index: src/app/app.routes.ts
===================================================================
--- src/app/app.routes.ts	(revision 95b0e0e553b2e5d068b676bf2d8319b7a5f018f9)
+++ src/app/app.routes.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -20,5 +20,4 @@
 import { AddManagerComponent } from './admin/add-manager/add-manager.component';
 
-
 export const routes: Routes = [
   // CUSTOMER ROUTES
@@ -30,5 +29,4 @@
   },
   {
-
     path: 'customer/orders',
     component: CustomerOrdersComponent,
@@ -37,5 +35,5 @@
   },
   {
-    path: 'customer/orders/add',
+    path: 'customer/orders/create',
     component: CreateOrderComponent,
     canActivate: [authGuard],
Index: src/app/customer/create-order/create-order.component.html
===================================================================
--- src/app/customer/create-order/create-order.component.html	(revision 95b0e0e553b2e5d068b676bf2d8319b7a5f018f9)
+++ src/app/customer/create-order/create-order.component.html	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -4,8 +4,12 @@
 
   <!-- Filters -->
-  <div class="row mb-3">
+  <form [formGroup]="form" class="row mb-3">
     <div class="col-md-4">
-      <label>Category</label>
-      <select class="form-select" formControlName="category">
+      <label for="filterCategory" class="form-label">Category</label>
+      <select
+        id="filterCategory"
+        class="form-select"
+        formControlName="category"
+      >
         <option value="">All</option>
         <option *ngFor="let c of categories" [value]="c.id">
@@ -14,7 +18,12 @@
       </select>
     </div>
+
     <div class="col-md-4">
-      <label>Manufacturer</label>
-      <select class="form-select" formControlName="manufacturer">
+      <label for="filterManufacturer" class="form-label">Manufacturer</label>
+      <select
+        id="filterManufacturer"
+        class="form-select"
+        formControlName="manufacturer"
+      >
         <option value="">All</option>
         <option *ngFor="let m of manufacturers" [value]="m.id">
@@ -23,7 +32,9 @@
       </select>
     </div>
+
     <div class="col-md-4">
-      <label>Article Name</label>
+      <label for="filterSearch" class="form-label">Article Name</label>
       <input
+        id="filterSearch"
         type="text"
         class="form-control"
@@ -32,5 +43,5 @@
       />
     </div>
-  </div>
+  </form>
 
   <!-- Article Cards -->
@@ -38,5 +49,6 @@
     class="scrollable-cards row row-cols-1 row-cols-md-2 row-cols-lg-3 g-3 mb-4"
   >
-    <div class="col" *ngFor="let a of displayed">
+    <div class="col" *ngFor="let a of displayed; trackBy: trackByArticle">
+      <!-- card markup as before -->
       <div class="card h-100">
         <img
@@ -48,9 +60,5 @@
         <div class="card-body">
           <h5 class="card-title">{{ a.name }}</h5>
-          <p class="card-text">
-            Manufacturer: {{ a.manufacturer }}<br />
-            Price: ${{ a.price.toFixed(2) }}<br />
-            In Stock: {{ a.quantity }}
-          </p>
+          <!-- etc… -->
         </div>
         <div class="card-footer">
@@ -61,4 +69,22 @@
       </div>
     </div>
+  </div>
+
+  <div class="d-flex justify-content-between align-items-center my-3">
+    <button
+      class="btn btn-outline-primary"
+      (click)="prevPage()"
+      [disabled]="currentPage === 0"
+    >
+      <- Prev
+    </button>
+    <span>Page {{ currentPage + 1 }} of {{ totalPages }}</span>
+    <button
+      class="btn btn-outline-primary"
+      (click)="nextPage()"
+      [disabled]="currentPage + 1 >= totalPages"
+    >
+      Next ->
+    </button>
   </div>
 
Index: src/app/customer/create-order/create-order.component.ts
===================================================================
--- src/app/customer/create-order/create-order.component.ts	(revision 95b0e0e553b2e5d068b676bf2d8319b7a5f018f9)
+++ src/app/customer/create-order/create-order.component.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -7,4 +7,5 @@
 import { Category, Manufacturer, Article, OrderItem } from '../../models';
 import { OrderService } from '../../services/order.service';
+import { PagedModel } from '../../models/paged-model';
 
 @Component({
@@ -16,9 +17,11 @@
 export class CreateOrderComponent implements OnInit {
   form!: FormGroup;
+  displayed: Article[] = [];
+  currentPage = 0;
+  totalPages = 0;
+  pageSize = 50;
+  orderItems: OrderItem[] = [];
   categories: Category[] = [];
   manufacturers: Manufacturer[] = [];
-  articles: Article[] = [];
-  displayed: Article[] = [];
-  orderItems: OrderItem[] = [];
   totalSum = 0;
   proForma = false;
@@ -33,31 +36,41 @@
   ngOnInit() {
     this.form = this.fb.group({
-      category: [''],
-      manufacturer: [''],
+      category: [null],
+      manufacturer: [null],
       search: [''],
     });
 
-    this.svc.listCategories().subscribe((c) => (this.categories = c));
-    this.svc.listManufacturers().subscribe((m) => (this.manufacturers = m));
-    this.svc.listArticles().subscribe((a) => {
-      this.articles = a;
-      this.applyFilter();
-    });
+    this.form.valueChanges.subscribe(() => this.loadPage(0));
 
-    this.form.valueChanges.subscribe(() => this.applyFilter());
+    this.loadPage(0);
+
+    this.svc.listCategories().subscribe((cats) => (this.categories = cats));
+    this.svc
+      .listManufacturers()
+      .subscribe((mans) => (this.manufacturers = mans));
   }
 
-  applyFilter() {
+  loadPage(page: number) {
     const { category, manufacturer, search } = this.form.value;
+    this.svc
+      .listArticles(category, manufacturer, search, page, this.pageSize)
+      .subscribe((resp: PagedModel<Article>) => {
+        const listKey = Object.keys(resp._embedded)[0];
+        this.displayed = resp._embedded[listKey];
+        this.currentPage = resp.page.number;
+        this.totalPages = resp.page.totalPages;
+      });
+  }
 
-    const term = (search || '').toLowerCase();
+  prevPage() {
+    if (this.currentPage > 0) this.loadPage(this.currentPage - 1);
+  }
 
-    this.displayed = this.articles.filter((a) => {
-      return (
-        (!category || a.categoryId === +category) &&
-        (!manufacturer || a.manufacturerId === +manufacturer) &&
-        (!term || a.name.toLowerCase().includes(term))
-      );
-    });
+  nextPage() {
+    if (this.currentPage + 1 < this.totalPages)
+      this.loadPage(this.currentPage + 1);
+  }
+  trackByArticle(_: number, a: Article) {
+    return a.id;
   }
 
Index: src/app/models/page-response.model.ts
===================================================================
--- src/app/models/page-response.model.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
+++ src/app/models/page-response.model.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -0,0 +1,7 @@
+export interface PageResponse<T> {
+  content: T[];
+  totalElements: number;
+  totalPages: number;
+  number: number;
+  size: number;
+}
Index: src/app/models/paged-model.ts
===================================================================
--- src/app/models/paged-model.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
+++ src/app/models/paged-model.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -0,0 +1,10 @@
+export interface PagedModel<T> {
+  _embedded: { [collectionName: string]: T[] };
+  _links: any;
+  page: {
+    size: number;
+    totalElements: number;
+    totalPages: number;
+    number: number;
+  };
+}
Index: src/app/navbar/navbar.component.html
===================================================================
--- src/app/navbar/navbar.component.html	(revision 95b0e0e553b2e5d068b676bf2d8319b7a5f018f9)
+++ src/app/navbar/navbar.component.html	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -7,46 +7,45 @@
       data-bs-toggle="collapse"
       data-bs-target="#nav"
+      aria-controls="nav"
+      aria-expanded="false"
+      aria-label="Toggle navigation"
     >
       <span class="navbar-toggler-icon"></span>
     </button>
+
     <div class="collapse navbar-collapse" id="nav">
       <ul class="navbar-nav ms-auto">
-        <li *ngIf="userRole === 'CUSTOMER'" class="nav-item">
-          <a class="nav-link" routerLink="/customer/dashboard">
-            Customer Dashboard
-          </a>
-          <a class="nav-link" routerLink="/customer/orders">
-            Customer Orders
-          </a>
-          <a class="nav-link" routerLink="/customer/deliveries">
-            Customer Deliveries
-          </a>
-          <a class="nav-link" routerLink="/customer/proFormas">
-            Customer Pro Formas
-          </a>
-          <a class="nav-link" routerLink="/customer/profile">
-            Customer Profile
-          </a>
-          <a class="nav-link" routerLink="/customer/orders/create">
-            Craete an order
-          </a>
-        </li>
-        <li *ngIf="userRole === 'MANAGER'" class="nav-item">
-          <a class="nav-link" routerLink="/manager/dashboard"
-            >Manager Dashboard</a
-          >
-        </li>
-        <li *ngIf="userRole === 'DRIVER'" class="nav-item">
-          <a class="nav-link" routerLink="/driver/dashboard"
-            >Driver Dashboard</a
-          >
-        </li>
-        <li *ngIf="userRole === 'ADMIN'" class="nav-item">
-          <a class="nav-link" routerLink="/admin/dashboard">Admin Dashboard</a>
-        </li>
-        <!-- Manager -->
+        <!-- CUSTOMER -->
+        <ng-container *ngIf="userRole === 'ROLE_CUSTOMER'">
+          <li class="nav-item">
+            <a class="nav-link" routerLink="/customer/dashboard">Dashboard</a>
+          </li>
+          <li class="nav-item">
+            <a class="nav-link" routerLink="/customer/orders">My Orders</a>
+          </li>
+          <li class="nav-item">
+            <a class="nav-link" routerLink="/customer/deliveries"
+              >My Deliveries</a
+            >
+          </li>
+          <li class="nav-item">
+            <a class="nav-link" routerLink="/customer/proformas"
+              >My Pro-Formas</a
+            >
+          </li>
+          <li class="nav-item">
+            <a class="nav-link" routerLink="/customer/profile">Profile</a>
+          </li>
+          <li class="nav-item">
+            <a class="nav-link" routerLink="/customer/orders/create"
+              >Create Order</a
+            >
+          </li>
+        </ng-container>
+
+        <!-- MANAGER -->
         <ng-container *ngIf="userRole === 'ROLE_MANAGER'">
           <li class="nav-item">
-            <a class="nav-link" routerLink="/manager/home">Home</a>
+            <a class="nav-link" routerLink="/manager/dashboard">Dashboard</a>
           </li>
           <li class="nav-item">
@@ -62,8 +61,9 @@
           </li>
         </ng-container>
-        <!-- Driver -->
+
+        <!-- DRIVER -->
         <ng-container *ngIf="userRole === 'ROLE_DRIVER'">
           <li class="nav-item">
-            <a class="nav-link" routerLink="/driver/home">Home</a>
+            <a class="nav-link" routerLink="/driver/dashboard">Dashboard</a>
           </li>
           <li class="nav-item">
@@ -71,11 +71,18 @@
           </li>
         </ng-container>
-        <!-- Admin -->
+
+        <!-- ADMIN -->
         <ng-container *ngIf="userRole === 'ROLE_ADMIN'">
           <li class="nav-item dropdown">
-            <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown"
-              >Create</a
+            <a
+              class="nav-link dropdown-toggle"
+              id="createDropdown"
+              role="button"
+              data-bs-toggle="dropdown"
+              aria-expanded="false"
             >
-            <ul class="dropdown-menu">
+              Create
+            </a>
+            <ul class="dropdown-menu" aria-labelledby="createDropdown">
               <li>
                 <a class="dropdown-item" routerLink="/admin/driver/add"
@@ -107,4 +114,6 @@
           </li>
         </ng-container>
+
+        <!-- LOGOUT -->
         <li class="nav-item">
           <a class="nav-link text-danger" (click)="logout()">Logout</a>
Index: src/app/services/order.service.ts
===================================================================
--- src/app/services/order.service.ts	(revision 95b0e0e553b2e5d068b676bf2d8319b7a5f018f9)
+++ src/app/services/order.service.ts	(revision ad8677eb617edc12ae20cfebe194aa233db190a9)
@@ -1,7 +1,9 @@
 import { Injectable } from '@angular/core';
 import { environment } from '../../environment';
-import { HttpClient } from '@angular/common/http';
+import { HttpClient, HttpParams } from '@angular/common/http';
 import { Observable } from 'rxjs';
 import { Article, Category, Manufacturer } from '../models';
+import { PageResponse } from '../models/page-response.model';
+import { PagedModel } from '../models/paged-model';
 
 @Injectable({
@@ -21,6 +23,25 @@
   }
 
-  listArticles(): Observable<Article[]> {
-    return this.http.get<Article[]>(`${environment.apiUrl}/article/all`);
+  listArticles(
+    categoryId: number | null,
+    manufacturerId: number | null,
+    nameFilter: string,
+    page: number,
+    size: number
+  ): Observable<PagedModel<Article>> {
+    let params = new HttpParams()
+      .set('page', page.toString())
+      .set('size', size.toString());
+
+    if (categoryId != null)
+      params = params.set('categoryId', categoryId.toString());
+    if (manufacturerId != null)
+      params = params.set('manufacturerId', manufacturerId.toString());
+    if (nameFilter) params = params.set('search', nameFilter);
+
+    return this.http.get<PagedModel<Article>>(
+      `${environment.apiUrl}/article/all-pages`,
+      { params }
+    );
   }
 
