Index: .gitignore
===================================================================
--- .gitignore	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ .gitignore	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -32,2 +32,6 @@
 ### VS Code ###
 .vscode/
+
+# Ignore application properties
+src/main/resources/application.properties
+
Index: src/main/java/mk/ukim/finki/easyfood/model/Item.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Item.java	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ src/main/java/mk/ukim/finki/easyfood/model/Item.java	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -8,4 +8,5 @@
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Set;
 
 @Entity
@@ -34,4 +35,7 @@
     @Column(name = "description", columnDefinition = "TEXT")
     private String description;
+
+    @OneToMany(mappedBy = "item")
+    private Set<MenuItem> menuItems;
 
     public Item() {
Index: src/main/java/mk/ukim/finki/easyfood/repository/ItemRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/ItemRepository.java	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ src/main/java/mk/ukim/finki/easyfood/repository/ItemRepository.java	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -3,4 +3,5 @@
 import mk.ukim.finki.easyfood.model.Item;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
@@ -9,5 +10,5 @@
 
 @Repository
-public interface ItemRepository extends JpaRepository<Item, Long> {
+public interface ItemRepository extends JpaRepository<Item, Long>, JpaSpecificationExecutor<Item> {
     Optional<Item> findByName(String name);
 
Index: src/main/java/mk/ukim/finki/easyfood/service/ItemService.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/ItemService.java	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ src/main/java/mk/ukim/finki/easyfood/service/ItemService.java	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -17,3 +17,5 @@
 
     Item findById(Long itemId);
+
+    List<Item> searchItems(String searchTerm);
 }
Index: src/main/java/mk/ukim/finki/easyfood/service/impl/ItemServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/impl/ItemServiceImpl.java	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ src/main/java/mk/ukim/finki/easyfood/service/impl/ItemServiceImpl.java	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.easyfood.service.impl;
 
+import jakarta.persistence.criteria.Join;
 import mk.ukim.finki.easyfood.model.*;
 
@@ -9,6 +10,9 @@
 import mk.ukim.finki.easyfood.repository.RestaurantRepository;
 import mk.ukim.finki.easyfood.service.ItemService;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+import jakarta.persistence.criteria.Predicate; // This is the correct one
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -72,3 +76,31 @@
     }
 
+    @Override
+    public List<Item> searchItems(String searchTerm) {
+        Specification<Item> specification = (root, query, criteriaBuilder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+
+            if (searchTerm != null && !searchTerm.trim().isEmpty()) {
+                String likePattern = "%" + searchTerm.toLowerCase() + "%";
+                Predicate itemNamePredicate = criteriaBuilder.like(criteriaBuilder.lower(root.get("name")), likePattern);
+
+                Join<Item, Object> menuItemJoin = root.join("menuItems");
+
+                Join<Object, Object> menuJoin = menuItemJoin.join("menu");
+
+                Join<Object, Object> restaurantJoin = menuJoin.join("restaurant");
+
+                Predicate restaurantNamePredicate = criteriaBuilder.like(criteriaBuilder.lower(restaurantJoin.get("name")), likePattern);
+
+                query.distinct(true);
+
+                predicates.add(criteriaBuilder.or(itemNamePredicate, restaurantNamePredicate));
+            }
+
+            return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+        };
+
+        return itemRepository.findAll(specification);
+    }
+
 }
Index: src/main/java/mk/ukim/finki/easyfood/web/controller/HomeController.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/web/controller/HomeController.java	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ src/main/java/mk/ukim/finki/easyfood/web/controller/HomeController.java	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -12,4 +12,5 @@
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
@@ -30,13 +31,24 @@
 
 
-    @GetMapping()
-    public String getHomePage(Model model, Authentication authentication) {
+    @GetMapping
+    public String getHomePage(Model model,
+                              Authentication authentication,
+                              @RequestParam(required = false) String searchTerm) {
         List<Category> categories = categoryService.listCategories();
-        List<Item> items = itemService.findAll();
+        List<Item> items;
+
+        // If a search term is present, show search results; otherwise, show all items
+        if (searchTerm != null && !searchTerm.trim().isEmpty()) {
+            items = itemService.searchItems(searchTerm);
+            model.addAttribute("searchTerm", searchTerm);
+        } else {
+            items = itemService.findAll();
+        }
+
         List<Item> recommendedItems = itemService.findRecommendedItems();
+
         model.addAttribute("categories", categories);
         model.addAttribute("items", items);
         model.addAttribute("recommendedItems", recommendedItems);
-
 
         Long userId = null;
Index: src/main/resources/templates/main_pg.html
===================================================================
--- src/main/resources/templates/main_pg.html	(revision 15c0ff74c54630af66e583925df149e17032aba5)
+++ src/main/resources/templates/main_pg.html	(revision 5c4432d911c3d799e4a56ecddcf7a9ca22805433)
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
 <head>
     <meta charset="UTF-8">
@@ -54,13 +54,8 @@
         }
 
-        .recommended-scroll {
-            display: flex;
-            gap: 1rem;
-            overflow-x: auto;
-            padding-bottom: 1rem;
-            scroll-behavior: smooth;
-        }
-
-        .recommended-scroll .card {
+        /* This CSS is for the items-container now */
+        .items-container .card,
+        .recommended-scroll .card,
+        .recommended-scroll-items .card {
             flex: 0 0 auto;
             width: 14rem;
@@ -70,9 +65,13 @@
         }
 
-        .recommended-scroll .card:hover {
+        .items-container .card:hover,
+        .recommended-scroll .card:hover,
+        .recommended-scroll-items .card:hover {
             transform: scale(1.05);
         }
 
-        .recommended-scroll img {
+        .items-container img,
+        .recommended-scroll img,
+        .recommended-scroll-items img {
             height: 140px;
             object-fit: cover;
@@ -102,5 +101,7 @@
         }
 
-        .recommended-scroll-items {
+        .recommended-scroll-items,
+        .recommended-scroll,
+        .items-scroll {
             display: flex;
             gap: 1rem;
@@ -109,28 +110,8 @@
             scroll-behavior: smooth;
         }
-
-        .recommended-scroll-items .card {
-            flex: 0 0 auto;
-            width: 14rem;
-            border-radius: 12px;
-            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-            transition: transform 0.2s;
-        }
-
-        .recommended-scroll-items .card:hover {
-            transform: scale(1.05);
-        }
-
-        .recommended-scroll-items img {
-            height: 140px;
-            object-fit: cover;
-            border-top-left-radius: 12px;
-            border-top-right-radius: 12px;
-        }
     </style>
 </head>
 <body class="bg-light">
 
-<!-- Navbar -->
 <nav class="navbar bg-body-tertiary shadow-sm">
     <div class="container-fluid">
@@ -138,6 +119,7 @@
             <img src="/images/logo.JPG" alt="Logo" height="90" class="d-inline-block align-text-top">
         </a>
-        <form class="d-flex mx-auto w-50" role="search">
-            <input class="form-control me-2" type="search" placeholder="Search for food..." aria-label="Search">
+        <form th:action="@{/home}" method="get" class="d-flex mx-auto w-50" role="search">
+            <input class="form-control me-2" type="search" name="searchTerm" th:value="${searchTerm}"
+                   placeholder="Search for food..." aria-label="Search">
             <button class="btn btn-warning" type="submit">Search</button>
         </form>
@@ -145,5 +127,4 @@
             <a href="cart.html" class="btn btn-outline-secondary rounded-circle p-2 position-relative">
                 <img src="https://cdn-icons-png.flaticon.com/512/1170/1170678.png" alt="Cart" width="22" height="22">
-                <!-- Fixed cart badge with proper conditional display -->
                 <span class="cart-badge bg-warning text-dark"
                       th:classappend="${numberOfItems == 0} ? 'd-none' : ''"
@@ -157,5 +138,4 @@
 </nav>
 
-<!-- Quote -->
 <div class="text-center my-3">
     <blockquote class="blockquote">
@@ -164,5 +144,4 @@
 </div>
 
-<!-- Cuisine Section (Dynamic Categories) -->
 <div id="cuisine" class="container-fluid">
     <div th:each="category : ${categories}" class="card bg-warning d-flex justify-content-center align-items-center">
@@ -171,17 +150,24 @@
 </div>
 
-<div id="Recommended" class="container-fluid my-4">
-    <h4 class="mb-3">Featured Items</h4>
-    <div class="recommended-scroll">
-        <div class="card" th:each="item : ${items}">
-            <img th:src="@{'/images/media/' + ${item.imageUrl}}" class="card-img-top" th:alt="${item.name}">
-            <div class="card-body">
-                <h5 class="card-title" th:text="${item.name}">Item Name</h5>
-                <p class="card-text text-muted" th:text="${item.price} + '$'">Price</p>
+<div class="container-fluid my-4">
+    <div class="items-container">
+        <h4 th:if="${searchTerm} != null">Search Results for: <span th:text="${searchTerm}"></span></h4>
+        <h4 th:unless="${searchTerm} != null">Featured Items</h4>
 
-                <form th:action="@{/cart/add}" method="post">
-                    <input type="hidden" name="itemId" th:value="${item.id}"/>
-                    <button type="submit" class="btn btn-warning w-100">Add to cart</button>
-                </form>
+        <div class="recommended-scroll">
+            <div class="card" th:each="item : ${items}">
+                <img th:src="@{'/images/media/' + ${item.imageUrl}}" class="card-img-top" th:alt="${item.name}">
+                <div class="card-body">
+                    <h5 class="card-title" th:text="${item.name}">Item Name</h5>
+                    <p class="card-text text-muted" th:text="${item.price} + '$'">Price</p>
+
+                    <form th:action="@{/cart/add}" method="post">
+                        <input type="hidden" name="itemId" th:value="${item.id}"/>
+                        <button type="submit" class="btn btn-warning w-100">Add to cart</button>
+                    </form>
+                </div>
+            </div>
+            <div th:if="${items.isEmpty()}">
+                <p>No results found.</p>
             </div>
         </div>
