Index: backend/GlobeGuru-backend/src/main/java/AccountHandler.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/AccountHandler.java	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/src/main/java/AccountHandler.java	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -16,6 +16,4 @@
 
 public class AccountHandler implements HttpHandler {
-
-    // Simple in-memory session management
     private static final Map<String, String> sessions = new ConcurrentHashMap<>();
     private static final String CLIENT_ID = "376204422797-s8f05nn6drmec1cko2h4kg1nk24abgc9.apps.googleusercontent.com";
Index: backend/GlobeGuru-backend/src/main/java/DatabaseUtil.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/DatabaseUtil.java	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/src/main/java/DatabaseUtil.java	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -31,4 +31,5 @@
                              "price REAL, " +
                              "dateRange TEXT, " +
+                             "numberOfPeople INTEGER, " +
                              "isPriceChanged BOOLEAN DEFAULT 0, " +
                              "newPrice REAL DEFAULT 0)"
@@ -55,5 +56,5 @@
             stmt.setString(1, username);
             stmt.setString(2, email);
-            stmt.setString(3, password); // Store hashed
+            stmt.setString(3, password);
             return stmt.executeUpdate() > 0;
         }
@@ -69,8 +70,8 @@
                     String storedPassword = rs.getString("password");
                     if (password == null) {
-                        // Assume this is a Google login
+                        // Google login
                         return storedPassword == null;
                     }
-                    return password.equals(storedPassword); // Check hashed password
+                    return password.equals(storedPassword);
                 }
             }
@@ -92,5 +93,4 @@
             try (ResultSet rs = selectStmt.executeQuery()) {
                 if (rs.next()) {
-                    // User exists, delete the user and their favourite options
                     deleteStmt.setInt(1, userId);
                     int rowsAffected = deleteStmt.executeUpdate();
@@ -101,5 +101,4 @@
                     return rowsAffected > 0;
                 } else {
-                    // User does not exist
                     return false;
                 }
@@ -135,5 +134,5 @@
     }
 
-    public static List<Option> queryOptions(String destination, String dateQuery, boolean dateFlag) throws SQLException {
+    public static List<Option> queryOptions(String destination, String dateQuery, int numPeople, boolean dateFlag) throws SQLException {
         List<Option> options = new ArrayList<>();
         String sql = "SELECT * FROM options WHERE (country LIKE ? OR hotelName LIKE ?)";
@@ -143,6 +142,10 @@
         } //append date
         if (dateFlag) {   //search only from dates
-            sql += "AND dateRange LIKE ?";
-        }
+            sql += " AND dateRange LIKE ?";
+        }
+        if(numPeople != 0) { //with number of people
+            sql += " AND numberOfPeople = ?";
+        }
+
         System.out.println("Searching for dest:" + destination + "\n" + sql);
         try (Connection conn = getConnection();
@@ -156,5 +159,7 @@
                 stmt.setString(3, dateQuery + "%");
             }
-            // Execute query
+            if(numPeople != 0) {
+                stmt.setInt(4, numPeople);
+            }
             try (ResultSet rs = stmt.executeQuery()) {
                 while (rs.next()) {
@@ -167,4 +172,5 @@
                     option.setPrice(rs.getFloat("price"));
                     option.setDateRange(rs.getString("dateRange"));
+                    option.setNumPeople(rs.getInt("numberOfPeople"));
                     options.add(option);
                 }
@@ -185,5 +191,5 @@
     }
 
-    //TODO add frontend
+
     public static boolean removeFavoriteOption(int userId, int optionId) throws SQLException {
         String sql = "DELETE FROM savedOptions WHERE userId = ? AND optionId = ?";
@@ -269,5 +275,5 @@
 
     public static void saveOptionToDatabase(Option option) {
-        String sql = "INSERT INTO options (link, imgSrc, hotelName, country, price, dateRange, isPriceChanged, newPrice) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
+        String sql = "INSERT INTO options (link, imgSrc, hotelName, country, price, dateRange,numberOfPeople, isPriceChanged, newPrice) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
         try (Connection conn = DriverManager.getConnection("jdbc:sqlite:globe_guru.db");
              PreparedStatement stmt = conn.prepareStatement(sql)) {
@@ -278,6 +284,7 @@
             stmt.setFloat(5, option.getPrice());
             stmt.setString(6, option.getDateRange());
-            stmt.setBoolean(7, option.isPriceChanged());
-            stmt.setFloat(8, option.getNewPrice());
+            stmt.setInt(7,option.getNumPeople());
+            stmt.setBoolean(8, option.isPriceChanged());
+            stmt.setFloat(9, option.getNewPrice());
             stmt.executeUpdate();
         } catch (SQLException e) {
@@ -293,5 +300,4 @@
             PreparedStatement stmt = conn.prepareStatement(sql)){
             stmt.executeUpdate();
-            //Remake the options DB
             initializeDatabase();
 
@@ -334,4 +340,5 @@
                     existingOption.setPriceChanged(rs.getBoolean("isPriceChanged"));
                     existingOption.setNewPrice(rs.getInt("newPrice"));
+                    existingOption.setNumPeople(rs.getInt("numberOfPeople"));
                     return existingOption;
                 }
Index: backend/GlobeGuru-backend/src/main/java/FrontendHandler.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/FrontendHandler.java	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/src/main/java/FrontendHandler.java	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -101,5 +101,7 @@
         String departureDate = formData.get("departureDate");
         String nightsNumberStr = formData.get("nightsNumber");
+        String numPeopleStr = formData.get("numberPeople");
         int numberOfNights = (nightsNumberStr != null && !nightsNumberStr.isEmpty()) ? Integer.parseInt(nightsNumberStr) : 0;
+        int numPeople = Integer.parseInt(numPeopleStr);
         String queryDate = "";
         boolean dateFlag = false;
@@ -121,5 +123,5 @@
         List<Option> options;
         try {
-            options = DatabaseUtil.queryOptions(destination, queryDate, dateFlag);
+            options = DatabaseUtil.queryOptions(destination, queryDate, numPeople, dateFlag);
         } catch (SQLException e) {
             e.printStackTrace();
Index: backend/GlobeGuru-backend/src/main/java/Option.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/Option.java	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/src/main/java/Option.java	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -8,5 +8,5 @@
     private String link;
     private String imgSrc;
-
+    private int numPeople;
     //Price changing
     private float newPrice = 0;
@@ -69,4 +69,12 @@
     }
 
+    public int getNumPeople() {
+        return numPeople;
+    }
+
+    public void setNumPeople(int numPeople) {
+        this.numPeople = numPeople;
+    }
+
     @Override
     public boolean equals(Object obj) {
Index: backend/GlobeGuru-backend/src/main/java/ScraperThread.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/ScraperThread.java	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/src/main/java/ScraperThread.java	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -58,5 +58,5 @@
     }
 
-    private void connectToWeb(String queryUrl) {
+    private void connectToWeb(String queryUrl, int numPeople) {
         driver.get(queryUrl);
 
@@ -65,5 +65,5 @@
             case "https://booking.escapetravel.mk/":
                 wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#hotels-container")));
-                try { Thread.sleep(5000);} catch (InterruptedException e) { e.printStackTrace(); }
+                try { Thread.sleep(10000);} catch (InterruptedException e) { e.printStackTrace(); }//price fetch
                 break;
             case "https://magelantravel.mk/":
@@ -82,20 +82,4 @@
 
         switch (url) {
-            case "https://www.fibula.com.mk/":
-                parentDiv = doc.selectFirst("div.flex.flex-col.gap-5");
-                if (parentDiv != null) {
-                    childDivs = parentDiv.select("div");
-                    for (Element div : childDivs) {
-                        String data = div.html();
-                        Option option = optionParser(data);
-                        if (option != null && optionSet.add(option)) {
-                            uniqueOptions.add(option);
-                            System.out.println("Parsed " + option);
-                        }
-                    }
-                } else {
-                    System.out.println("Parent div not found");
-                }
-                break;
             case "https://booking.escapetravel.mk/":
                 parentDiv = doc.selectFirst("#hotels-container");
@@ -104,5 +88,5 @@
                     for (Element div : childDivs) {
                         String data = div.outerHtml();
-                        Option option = optionParser(data);
+                        Option option = optionParser(data,numPeople);
                         if (option != null) {
                             Option existingOption = DatabaseUtil.findOption(option);
@@ -133,5 +117,5 @@
                     for (Element div : childDivs) {
                         String data = div.outerHtml();
-                        Option newOption = optionParser(data);
+                        Option newOption = optionParser(data,numPeople);
                         if (newOption != null) {
                             Option existingOption = DatabaseUtil.findOption(newOption);
@@ -161,5 +145,5 @@
 
 
-    private Option optionParser(String data) {
+    private Option optionParser(String data, int numPeople) {
         Document doc = Jsoup.parse(data);
         Option created = new Option();
@@ -167,7 +151,9 @@
             case "https://magelantravel.mk/":
                 created = parseMagelan(doc);
+                created.setNumPeople(numPeople);
                 break;
             case "https://booking.escapetravel.mk/":
                 created = parseEscapeTravel(doc);
+                created.setNumPeople(numPeople);
                 break;
             default:
@@ -210,5 +196,6 @@
         created.setHotelName(card.attr("data-title"));
         Element countryP = doc.selectFirst("p.text-info");
-        created.setCountry(countryP != null ? countryP.text() : null);
+        String country = countryP.text().replaceAll("leto hoteli", "");
+        created.setCountry(country);
         Element priceElem = doc.selectFirst("span.hotel-price");
         String priceText = priceElem.text();
@@ -267,6 +254,8 @@
                         String country = countryNode.asText();
                         for (int nokevanja = 2; nokevanja <= 10; nokevanja++) {
-                            String queryUrl = url + "/destinacii?ah_tip=1&iframe=&affiliate_code=&carter_id=0&carter_region=&carter_dataod=&carter_datado=&destinacija=" + country + "&oddatum=" + date + "&nokevanja=" + nokevanja + "&dodatum=&broj_vozrasni=2&broj_deca=0&spdete1=0&spdete2=0&spdete3=0&spdete4=0";
-                            connectToWeb(queryUrl);
+                            for(int lugje = 1; lugje <= 4; lugje++) {
+                                String queryUrl = url + "/destinacii?ah_tip=1&iframe=&affiliate_code=&carter_id=0&carter_region=&carter_dataod=&carter_datado=&destinacija=" + country + "&oddatum=" + date + "&nokevanja=" + nokevanja + "&dodatum=&broj_vozrasni=" + lugje + "&broj_deca=0&spdete1=0&spdete2=0&spdete3=0&spdete4=0";
+                                connectToWeb(queryUrl,lugje);
+                            }
                         }
                     }
@@ -282,5 +271,5 @@
                 ClassLoader classLoader = getClass().getClassLoader();
                 JsonNode root = mapper.readTree(new File(classLoader.getResource("CountriesList.json").getFile()));
-                JsonNode countries = root.get("countries"); // Assuming "destinations" key in JSON
+                JsonNode countries = root.get("countries");
                 SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
                 Calendar calendar = Calendar.getInstance();
@@ -292,6 +281,8 @@
                         String country = countryNode.asText();
                         for(int nokevanja = 2; nokevanja <=10; nokevanja ++) {
-                            String queryUrl = url + "/hotels?Search=" + country + "&Date=" + date + "&Nights=" + nokevanja + "&Rooms=1&Adults=2";
-                            connectToWeb(queryUrl);
+                            for(int lugje = 1; lugje <= 4; lugje++) {
+                                String queryUrl = url + "/hotels?Search=" + country + "&Date=" + date + "&Nights=" + nokevanja + "&Rooms=1&Adults=" + lugje;
+                                connectToWeb(queryUrl,lugje);
+                            }
                         }
                     }
Index: backend/GlobeGuru-backend/src/main/java/Server.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/Server.java	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/src/main/java/Server.java	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -28,4 +28,5 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
@@ -34,5 +35,5 @@
 
 public class Server {
-
+    private static final ExecutorService executorService = Executors.newFixedThreadPool(1);
     public static void main(String[] args) throws IOException, SQLException {
         // Start HTTP server
@@ -57,6 +58,22 @@
 
         server.start();
-
         System.out.println("Server started on port 8000");
+
+        LocalDateTime lastUpdateTime = getLastUpdateTime();
+        LocalDateTime now = LocalDateTime.now();
+        if (ChronoUnit.MONTHS.between(lastUpdateTime, now) >= 3) {
+            System.out.println("Automatic Update");
+            Future<Void> future = executorService.submit(new Scraper());
+            Server.updateLastUpdateTime();
+            executorService.submit(() -> {
+                try {
+                    future.get();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            });
+
+        }
+
     }
     static class RemoveFromSavedTripsHandler implements HttpHandler {
Index: backend/GlobeGuru-backend/target/classes/lastUpdateTime.json
===================================================================
--- backend/GlobeGuru-backend/target/classes/lastUpdateTime.json	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ backend/GlobeGuru-backend/target/classes/lastUpdateTime.json	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -1,3 +1,3 @@
 {
-  "lastUpdateTime" : "2025-01-09T17:43:12.148699200"
+  "lastUpdateTime" : "2025-01-09T19:56:28.178946100"
 }
Index: frontend/index.html
===================================================================
--- frontend/index.html	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ frontend/index.html	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -37,4 +37,6 @@
             <label for="Nights">Број на ноќи</label>
             <input type="number" id="Nights" name="nightsNumber">
+            <label for="NumPeople">Број на лица</label>
+            <input type="number" id="NumPeople" name="numberPeople" min="0" max="4" value="0" placeholder="внесете 0 за без ограничување">
             <input type="submit" class="button" value="Пребарај" >
         </form>
Index: frontend/js/formHandler.js
===================================================================
--- frontend/js/formHandler.js	(revision c164f8f00c59f28d9cb253011c0a27c7471171ee)
+++ frontend/js/formHandler.js	(revision 53bad7e9fe25086caaf4c4a4a2f09ebde2e8cc2c)
@@ -1,4 +1,4 @@
 document.addEventListener('DOMContentLoaded', function() {
-    const form = document.getElementById('form-id'); // Ensure the form has the correct ID
+    const form = document.getElementById('form-id');
     const loadingOverlay = document.getElementById('loadingOverlay');
 
@@ -27,5 +27,4 @@
                 errorMessage += "Внесете дестинација.\n";
             }
-
         });
 
@@ -35,5 +34,4 @@
         }
 
-        // Show the loading overlay
         loadingOverlay.style.display = 'flex';
 
@@ -48,5 +46,4 @@
             .then(response => response.json())
             .then(data => {
-
                 loadingOverlay.style.display = 'none';
 
@@ -64,10 +61,9 @@
                     const optionDiv = document.createElement('div');
                     optionDiv.classList.add('option');
-                    //Option from
 
                     //image
                     const img = document.createElement('img');
                     img.classList.add('image');
-                    img.src = item.imgSrc; // Use item.imageSrc if available
+                    img.src = item.imgSrc;
                     optionDiv.appendChild(img);
                     const WrapperDiv = document.createElement('div');
@@ -89,4 +85,17 @@
                     dateParagraph.textContent = item.dateRange;
                     WrapperDiv.appendChild(dateParagraph);
+                    const peopleParaghraph = document.createElement('p');
+                    peopleParaghraph.id = 'numPeople';
+                    if(item.numPeople === 1){
+                    peopleParaghraph.textContent = item.numPeople + " лице";
+                    }
+                    else peopleParaghraph.textContent = item.numPeople + " лица";
+                    WrapperDiv.appendChild(peopleParaghraph);
+
+                    const infoDiv = document.createElement('div');
+
+
+
+
                     //price
                     const priceHeading = document.createElement('h1');
@@ -97,4 +106,6 @@
                     priceParagraph.textContent = item.price + "EUR";
                     WrapperDiv.appendChild(priceParagraph);
+
+
 
                     //  link and button
@@ -124,5 +135,4 @@
 
                     optionDiv.appendChild(btnWrapDiv);
-                    // Append option div to dataList
                     dataList.appendChild(optionDiv);
                 });
@@ -131,5 +141,4 @@
             .catch(error => {
                 console.error('Error fetching data:', error);
-                // Hide the loading overlay in case of error
                 loadingOverlay.style.display = 'none';
             });
