Index: backend/GlobeGuru-backend/src/main/java/AccountHandler.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/AccountHandler.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ 	(revision )
@@ -1,215 +1,0 @@
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
-import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
-import com.google.api.client.http.HttpTransport;
-import com.google.api.client.http.javanet.NetHttpTransport;
-import com.google.api.client.json.JsonFactory;
-import com.google.api.client.json.jackson2.JacksonFactory;
-import com.sun.net.httpserver.HttpExchange;
-import com.sun.net.httpserver.HttpHandler;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.sql.SQLException;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class AccountHandler implements HttpHandler {
-    private static final Map<String, String> sessions = new ConcurrentHashMap<>();
-    private static final String CLIENT_ID = "376204422797-s8f05nn6drmec1cko2h4kg1nk24abgc9.apps.googleusercontent.com";
-
-    @Override
-    public void handle(HttpExchange exchange) throws IOException {
-        String path = exchange.getRequestURI().getPath();
-        String method = exchange.getRequestMethod();
-
-        if ("POST".equalsIgnoreCase(method)) {
-            switch (path) {
-                case "/account/register":
-                    handleRegister(exchange);
-                    break;
-                case "/account/login":
-                    handleLogin(exchange);
-                    break;
-                case "/account/logout":
-                    handleLogout(exchange);
-                    break;
-                case "/account/delete":
-                    handleDeleteAccount(exchange);
-                    break;
-                default:
-                    Server.sendResponse(exchange, 404, "Endpoint not found");
-            }
-        } else if ("GET".equalsIgnoreCase(method) && path.equalsIgnoreCase("/account/session")) {
-            handleSession(exchange);
-        } else {
-            Server.sendResponse(exchange, 405, "Method not allowed");
-        }
-    }
-
-    private void handleSession(HttpExchange exchange) throws IOException {
-        String sessionId = getSessionId(exchange);
-        ObjectMapper mapper = new ObjectMapper();
-        Map<String, Object> response = new HashMap<>();
-        if (sessionId != null && sessions.containsKey(sessionId)) {
-            response.put("loggedIn", true);
-            response.put("user", sessions.get(sessionId));
-            try {
-                response.put("isAdmin", DatabaseUtil.isAdmin(sessions.get(sessionId)));
-            } catch (SQLException e) {
-                e.printStackTrace();
-                response.put("isAdmin", false);
-            }
-        } else {
-            response.put("loggedIn", false);
-        }
-
-        String jsonResponse = mapper.writeValueAsString(response);
-        Server.sendResponse(exchange, 200, jsonResponse);
-    }
-
-    private String getSessionId(HttpExchange exchange) {
-        List<String> cookies = exchange.getRequestHeaders().get("Cookie");
-        if (cookies != null) {
-            for (String cookie : cookies) {
-                if (cookie.contains("sessionId=")) {
-                    return cookie.replaceAll("g_state=\\{\"i_l\":0\\}; sessionId=", "");
-                }
-            }
-        }
-        return null;
-    }
-
-
-    private void handleRegister(HttpExchange exchange) throws IOException {
-        String requestBody = new String(exchange.getRequestBody().readAllBytes());
-        ObjectMapper mapper = new ObjectMapper();
-        Map<String, String> formData = mapper.readValue(requestBody, Map.class);
-        String username = formData.get("username");
-        String email = formData.get("email");
-        String password = formData.get("password");
-
-        try {
-            if (DatabaseUtil.registerUser(username, email, password)) {
-                Server.sendResponse(exchange, 200, "{\"message\": \"Registration successful!\"}");
-            } else {
-                Server.sendResponse(exchange, 400, "{\"message\": \"Registration failed! User may already exist.\"}");
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-            Server.sendResponse(exchange, 500, "{\"message\": \"Internal server error\"}");
-        }
-    }
-
-    private void handleLogin(HttpExchange exchange) throws IOException {
-        String requestBody = new String(exchange.getRequestBody().readAllBytes());
-        ObjectMapper mapper = new ObjectMapper();
-        Map<String, String> formData = mapper.readValue(requestBody, Map.class);
-
-        if (formData.containsKey("id_token")) {
-            handleGoogleSignIn(exchange, formData.get("id_token"));
-        } else {
-            handleFormLogin(exchange, formData.get("email"), formData.get("password"));
-        }
-    }
-
-    private void handleGoogleSignIn(HttpExchange exchange, String idTokenString) throws IOException {
-        HttpTransport transport = new NetHttpTransport();
-        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
-
-        GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
-                .setAudience(Collections.singletonList(CLIENT_ID)).build();
-
-        try {
-            GoogleIdToken idToken = verifier.verify(idTokenString);
-            if (idToken != null) {
-                GoogleIdToken.Payload payload = idToken.getPayload();
-                String email = payload.getEmail();
-                if (DatabaseUtil.userExists(email)) {
-                    System.out.println("User exists, logging in");
-                    handleFormLogin(exchange, email, null);
-                } else {
-                    System.out.println("User does not exist, creating new user");
-                    String name = (String) payload.get("name");
-                    DatabaseUtil.registerUser(name, email, null); // Password is null for Google login
-                    String response = createSession(email);
-                    Server.sendResponse(exchange, 200, response);
-                }
-            } else {
-                String response = "{\"message\": \"Invalid ID token\"}";
-                System.out.println(response);
-                Server.sendResponse(exchange, 401, response);
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-            String response = "{\"message\": \"Database error\"}";
-            System.out.println(response);
-            Server.sendResponse(exchange, 500, response);
-        } catch (GeneralSecurityException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private void handleFormLogin(HttpExchange exchange, String email, String password) throws IOException {
-        try {
-            if (DatabaseUtil.userExists(email)) {
-                if (DatabaseUtil.authenticateUser(email, password)) {
-                    String response = createSession(email);
-                    Server.sendResponse(exchange, 200, response);
-                } else {
-                    String response = "{\"message\": \"Invalid password\"}";
-                    System.out.println(response);
-                    Server.sendResponse(exchange, 401, response);
-                }
-            } else {
-                String response = "{\"message\": \"User does not exist\"}";
-                System.out.println(response);
-                Server.sendResponse(exchange, 404, response);
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-            String response = "{\"message\": \"Database error: " + e.getMessage() + "\"}";
-            System.out.println(response);
-            Server.sendResponse(exchange, 500, response);
-        }
-    }
-
-    private void handleLogout(HttpExchange exchange) throws IOException {
-        String sessionId = getSessionId(exchange);
-        if (sessionId != null && sessions.containsKey(sessionId)) {
-            sessions.remove(sessionId);
-            Server.sendResponse(exchange, 200, "{\"message\": \"Logout successful\"}");
-        } else {
-            Server.sendResponse(exchange, 401, "{\"message\": \"Not logged in\"}");
-        }
-    }
-
-    private void handleDeleteAccount(HttpExchange exchange) throws IOException {
-        String userIdStr = new String(exchange.getRequestBody().readAllBytes()).replaceAll("\"", "");
-        int userId = Integer.parseInt(userIdStr);
-        Map<String, Object> response = new HashMap<>();
-        try {
-            boolean success = DatabaseUtil.deleteUser(userId);
-            response.put("success", success);
-            if (!success) {
-                response.put("message", "User not found");
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-            response.put("success", false);
-            response.put("message", "Database error: " + e.getMessage());
-        }
-
-        String jsonResponse = new ObjectMapper().writeValueAsString(response);
-        Server.sendResponse(exchange, 200, jsonResponse);
-    }
-
-
-    private String createSession(String email) throws SQLException {
-        String sessionId = UUID.randomUUID().toString();
-        sessions.put(sessionId, email);
-        boolean isAdmin = DatabaseUtil.isAdmin(email);
-        return "{\"message\": \"" + email + " logged in!\", \"sessionId\": \"" + sessionId + "\", \"isAdmin\": " + isAdmin + "}";
-    }
-
-}
Index: backend/GlobeGuru-backend/src/main/java/Change.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/Change.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ 	(revision )
@@ -1,44 +1,0 @@
-public class Change {
-    private String attribute;
-    private String oldValue;
-    private String newValue;
-
-    public Change(String attribute, String oldValue, String newValue) {
-        this.attribute = attribute;
-        this.oldValue = oldValue;
-        this.newValue = newValue;
-    }
-
-    public String getAttribute() {
-        return attribute;
-    }
-
-    public void setAttribute(String attribute) {
-        this.attribute = attribute;
-    }
-
-    public String getOldValue() {
-        return oldValue;
-    }
-
-    public void setOldValue(String oldValue) {
-        this.oldValue = oldValue;
-    }
-
-    public String getNewValue() {
-        return newValue;
-    }
-
-    public void setNewValue(String newValue) {
-        this.newValue = newValue;
-    }
-
-    @Override
-    public String toString() {
-        return "Change{" +
-                "attribute='" + attribute + '\'' +
-                ", oldValue='" + oldValue + '\'' +
-                ", newValue='" + newValue + '\'' +
-                '}';
-    }
-}
Index: backend/GlobeGuru-backend/src/main/java/DatabaseUtil.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/DatabaseUtil.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ 	(revision )
@@ -1,420 +1,0 @@
-import java.io.IOException;
-import java.sql.*;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class DatabaseUtil {
-
-    private static final String DB_URL = "jdbc:sqlite:globe_guru.db";
-
-    public static Connection getConnection() throws SQLException {
-        return DriverManager.getConnection(DB_URL);
-    }
-    public static void initializeDatabase() throws SQLException {
-        try (Connection conn = getConnection();
-             PreparedStatement stmt1 = conn.prepareStatement(
-                     "CREATE TABLE IF NOT EXISTS users (" +
-                             "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
-                             "username TEXT NOT NULL UNIQUE, " +
-                             "email TEXT NOT NULL UNIQUE, " +
-                             "password TEXT, " +
-                             "isAdmin BOOLEAN NOT NULL DEFAULT FALSE)"
-             );
-             PreparedStatement stmt2 = conn.prepareStatement(
-                     "CREATE TABLE IF NOT EXISTS options (" +
-                             "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
-                             "link TEXT, " +
-                             "imgSrc TEXT, " +
-                             "hotelName TEXT, " +
-                             "country TEXT, " +
-                             "dateRange TEXT, " +
-                             "numberOfPeople INTEGER, " +
-                             "isPriceChanged BOOLEAN DEFAULT 0, " +
-                             "newPrice REAL DEFAULT 0)"
-             );
-             PreparedStatement stmt3 = conn.prepareStatement(
-                     "CREATE TABLE IF NOT EXISTS savedOptions (" +
-                             "userId INTEGER," +
-                             "detailId INTEGER," +
-                             "FOREIGN KEY(userId) REFERENCES users(id)," +
-                             "FOREIGN KEY(detailId) REFERENCES optionDetails(id)," +
-                             "UNIQUE(userId, detailId))"
-             );
-             PreparedStatement stmt4 = conn.prepareStatement(
-                     "CREATE TABLE IF NOT EXISTS optionDetails (" +
-                             "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
-                             "optionId INTEGER NOT NULL, " +
-                             "type TEXT, " +
-                             "board TEXT, " +
-                             "amenities TEXT, " +
-                             "price REAL," +
-                             "FOREIGN KEY(optionId) REFERENCES options(id))"
-             );
-             PreparedStatement stmt5 = conn.prepareStatement(
-                     "CREATE TABLE IF NOT EXISTS changeLog(" +
-                             "id INTEGER PRIMARY KEY AUTOINCREMENT," +
-                             "detail_id INTEGER NOT NULL," +
-                             "attribute TEXT NOT NULL," +
-                             "oldValue TEXT," +
-                             "newValue TEXT," +
-                             "FOREIGN KEY(detail_id) REFERENCES optionDetails(id))"
-             )) {
-
-            stmt1.executeUpdate();
-            stmt2.executeUpdate();
-            stmt3.executeUpdate();
-            stmt4.executeUpdate();
-            stmt5.executeUpdate();
-        }
-    }
-
-    public static boolean registerUser(String username, String email, String password) throws SQLException {
-        String sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setString(1, username);
-            stmt.setString(2, email);
-            stmt.setString(3, password);
-            return stmt.executeUpdate() > 0;
-        }
-    }
-    public static boolean authenticateUser(String email, String password) throws SQLException {
-        String sql = "SELECT password FROM users WHERE email = ?";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setString(1, email);
-            try (ResultSet rs = stmt.executeQuery()) {
-                if (rs.next()) {
-                    String storedPassword = rs.getString("password");
-                    if (password == null) {
-                        // Google login
-                        return storedPassword == null;
-                    }
-                    return password.equals(storedPassword);
-                }
-            }
-        }
-        return false;
-    }
-    public static boolean deleteUser(int userId) throws SQLException {
-        String selectSql = "SELECT userId FROM users WHERE userId = ?";
-        String deleteSql = "DELETE FROM users WHERE userId = ?";
-        String deleteFavoritesSql = "DELETE FROM savedOptions WHERE userId = ?";
-
-        try (Connection conn = getConnection();
-             PreparedStatement selectStmt = conn.prepareStatement(selectSql);
-             PreparedStatement deleteStmt = conn.prepareStatement(deleteSql);
-             PreparedStatement deleteFavoritesStmt = conn.prepareStatement(deleteFavoritesSql)) {
-
-            selectStmt.setInt(1, userId);
-            try (ResultSet rs = selectStmt.executeQuery()) {
-                if (rs.next()) {
-                    deleteStmt.setInt(1, userId);
-                    int rowsAffected = deleteStmt.executeUpdate();
-
-                    deleteFavoritesStmt.setInt(1, userId);
-                    deleteFavoritesStmt.executeUpdate();
-
-                    return rowsAffected > 0;
-                } else {
-                    return false;
-                }
-            }
-        }
-    }
-    public static boolean userExists(String email) throws SQLException {
-        String query = "SELECT COUNT(*) FROM users WHERE email = ?";
-        try (Connection connection = getConnection();
-             PreparedStatement statement = connection.prepareStatement(query)) {
-            statement.setString(1, email);
-            ResultSet resultSet = statement.executeQuery();
-            if (resultSet.next()) {
-                return resultSet.getInt(1) > 0;
-            }
-        }
-        return false;
-    }
-    public static boolean isAdmin(String email) throws SQLException {
-        String selectSql = "SELECT isAdmin FROM users WHERE email = ?";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(selectSql)) {
-            stmt.setString(1, email);
-            try (ResultSet rs = stmt.executeQuery()) {
-                if (rs.next()) {
-                    return rs.getBoolean("isAdmin");
-                }
-            }
-        }
-        return false;
-    }
-    public static boolean saveFavoriteOption(int userId, int detailId) throws SQLException {
-        String sql = "INSERT INTO savedOptions (userId, detailId) VALUES (?, ?) ON CONFLICT DO NOTHING";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setInt(1, userId);
-            stmt.setInt(2, detailId);
-            return stmt.executeUpdate() > 0;
-        }
-    }
-    public static boolean removeFavoriteOption(int userId, int detailId) throws SQLException {
-        String sql = "DELETE FROM savedOptions WHERE userId = ? AND detailId = ?";
-        try (Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setInt(1, userId);
-            stmt.setInt(2, detailId);
-            return stmt.executeUpdate() > 0;
-        }
-    }
-    public static List<Option> getSavedTripsByUser(int userId) throws SQLException {
-        List<Option> savedTrips = new ArrayList<>();
-        String sql = "SELECT od.id AS detail_id, o.*, od.* FROM savedOptions so " +
-                "JOIN optionDetails od ON so.detailId = od.id " +
-                "JOIN options o ON od.optionId = o.id " +
-                "WHERE so.userId = ?";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setInt(1, userId);
-            try (ResultSet rs = stmt.executeQuery()) {
-                while (rs.next()) {
-                    Option option = new Option();
-                    option.setId(rs.getInt("detail_id"));
-                    option.setLink(rs.getString("link"));
-                    option.setImgSrc(rs.getString("imgSrc"));
-                    option.setHotelName(rs.getString("hotelName"));
-                    option.setCountry(rs.getString("country"));
-                    option.setDateRange(rs.getString("dateRange"));
-                    option.setNumPeople(rs.getInt("numberOfPeople"));
-                    option.setType(rs.getString("type"));
-                    option.setBoard(rs.getString("board"));
-                    option.setAmenities(rs.getString("amenities"));
-                    option.setPrice(rs.getFloat("price"));
-                    savedTrips.add(option);
-                }
-            }
-        }
-        return savedTrips;
-    }
-    public static int getUserIdByEmail(String email) throws SQLException {
-        String sql = "SELECT id FROM users WHERE email = ?";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setString(1, email);
-            try (ResultSet rs = stmt.executeQuery()) {
-                if (rs.next()) {
-                    return rs.getInt("id");
-                } else {
-                    throw new SQLException("User not found");
-                }
-            }
-        }
-    }
-    public static List<Option> poolOptionDetails(int id) throws SQLException{
-        String sql = "SELECT * FROM optionDetails WHERE optionId = ?";
-        List<Option> options = new ArrayList<>();
-        try(Connection conn = getConnection();
-            PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setInt(1,id);
-            try(ResultSet rs = stmt.executeQuery()){
-                while (rs.next()){
-                    Option o = new Option();
-                    o.setAmenities(rs.getString("amenities"));
-                    o.setType(rs.getString("type"));
-                    o.setBoard(rs.getString("board"));
-                    o.setPrice(rs.getFloat("price"));
-                    o.setId(id);
-                    o.setDetail_id(rs.getInt("id"));
-                }
-            }
-
-        }
-        return options;
-    }
-    public static List<Option> queryOptions(String destination, String dateQuery, int numPeople, boolean dateFlag) throws SQLException {
-        List<Option> options = new ArrayList<>();
-        String sql = "SELECT o.*, od.id AS detail_id, od.type, od.board, od.amenities, od.price AS detail_price " +
-                "FROM options o " +
-                "LEFT JOIN optionDetails od ON o.id = od.optionId " +
-                "WHERE (o.country LIKE ? OR o.hotelName LIKE ?) " +
-                "AND od.type IS NOT NULL " +
-                "AND od.board IS NOT NULL " +
-                "AND od.price > 0";
-
-        if (dateQuery != null && !dateQuery.isEmpty() && !dateFlag) {
-            sql += " AND o.dateRange = ?";
-        }
-        if (dateFlag) {
-            sql += " AND o.dateRange LIKE ?";
-        }
-        if (numPeople != 0) {
-            sql += " AND o.numberOfPeople = ?";
-        }
-
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setString(1, "%" + destination + "%");
-            stmt.setString(2, "%" + destination + "%");
-            int paramIndex = 3;
-            if (dateQuery != null && !dateQuery.isEmpty() && !dateFlag) {
-                stmt.setString(paramIndex++, dateQuery);
-            }
-            if (dateFlag) {
-                stmt.setString(paramIndex++, dateQuery + "%");
-            }
-            if (numPeople != 0) {
-                stmt.setInt(paramIndex, numPeople);
-            }
-
-            try (ResultSet rs = stmt.executeQuery()) {
-                while (rs.next()) {
-                    Option option = new Option();
-                    option.setId(rs.getInt("detail_id"));
-                    option.setLink(rs.getString("link"));
-                    option.setImgSrc(rs.getString("imgSrc"));
-                    option.setHotelName(rs.getString("hotelName"));
-                    option.setCountry(rs.getString("country"));
-                    option.setDateRange(rs.getString("dateRange"));
-                    option.setNumPeople(rs.getInt("numberOfPeople"));
-                    option.setType(rs.getString("type"));
-                    option.setBoard(rs.getString("board"));
-                    option.setAmenities(rs.getString("amenities"));
-                    option.setPrice(rs.getFloat("detail_price"));
-                    options.add(option);
-                }
-            }
-        }
-
-        System.out.println("Found " + options.size() + " options");
-        return options;
-    }
-    public static int saveOptionToDatabase(Option option) {
-        String sql = "INSERT INTO options (link, imgSrc, hotelName, country, dateRange,numberOfPeople) VALUES (?, ?, ?, ?, ?, ?)";
-        int id = 0;
-        try (Connection conn = DriverManager.getConnection("jdbc:sqlite:globe_guru.db");
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setString(1, option.getLink());
-            stmt.setString(2, option.getImgSrc());
-            stmt.setString(3, option.getHotelName());
-            stmt.setString(4, option.getCountry());
-            stmt.setString(5, option.getDateRange());
-            stmt.setInt(6,option.getNumPeople());
-            stmt.executeUpdate();
-            try(ResultSet genKey = stmt.getGeneratedKeys()){
-                if(genKey.next()){
-                    id = genKey.getInt(1);
-                }
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-        }
-        return id;
-    }
-    public static void saveOptionDetails(int id, String type, String board, String amenity, float price) {
-        String sql = "INSERT INTO optionDetails (optionId, type, board, amenities, price) VALUES (?, ?, ?, ?, ?)";
-
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setInt(1, id);
-            stmt.setString(2, type);
-            stmt.setString(3, board);
-            stmt.setString(4, amenity);
-            stmt.setFloat(5, price);
-            stmt.executeUpdate();
-        } catch (SQLException e) {
-            e.printStackTrace();
-        }
-    }
-    public static void dropOptions() throws SQLException {
-        String sql = "DROP TABLE options";
-        try (
-            Connection conn = getConnection();
-            PreparedStatement stmt = conn.prepareStatement(sql)){
-            stmt.executeUpdate();
-            initializeDatabase();
-
-        }
-    }
-    public static void updateOptionDetails(int detail_id, String type, String board, String amenities, float price) {
-        try (Connection conn = getConnection()) {
-            String selectSql = "SELECT * FROM optionDetails WHERE id = ?";
-            PreparedStatement selectStmt = conn.prepareStatement(selectSql);
-            selectStmt.setInt(1, detail_id);
-            ResultSet rs = selectStmt.executeQuery();
-
-            if (rs.next()) {
-                String oldType = rs.getString("type");
-                String oldBoard = rs.getString("board");
-                String oldAmenities = rs.getString("amenities");
-                float oldPrice = rs.getFloat("price");
-
-                insertChangeLog(detail_id, "type", oldType, type);
-                insertChangeLog(detail_id, "board", oldBoard, board);
-                insertChangeLog(detail_id, "amenities", oldAmenities, amenities);
-                insertChangeLog(detail_id, "price", String.valueOf(oldPrice), String.valueOf(price));
-            }
-
-            String sql = "UPDATE optionDetails SET ";
-            List<String> updates = new ArrayList<>();
-            if (type != null && !type.isEmpty()) updates.add("type = '" + type + "'");
-            if (board != null && !board.isEmpty()) updates.add("board = '" + board + "'");
-            if (amenities != null && !amenities.isEmpty()) updates.add("amenities = '" + amenities + "'");
-            if (price > 0) updates.add("price = " + price);
-
-            sql += String.join(", ", updates);
-            sql += " WHERE id = " + detail_id;
-
-            try (PreparedStatement stmt = conn.prepareStatement(sql)) {
-                stmt.executeUpdate();
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-        }
-    }
-    private static void insertChangeLog(int detail_id, String attribute, String oldValue, String newValue) {
-        if (!oldValue.equals(newValue)) {
-            String sql = "INSERT INTO changeLog (detail_id, attribute, oldValue, newValue) VALUES (?, ?, ?, ?)";
-            try (Connection conn = getConnection();
-                 PreparedStatement stmt = conn.prepareStatement(sql)) {
-                stmt.setInt(1, detail_id);
-                stmt.setString(2, attribute);
-                stmt.setString(3, oldValue);
-                stmt.setString(4, newValue);
-                stmt.executeUpdate();
-            } catch (SQLException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-    public static int getCurrentOptionsCount() throws SQLException {
-        String sql = "SELECT COUNT(*) AS optionsCount FROM options";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql);
-             ResultSet rs = stmt.executeQuery()) {
-            if (rs.next()) {
-                return rs.getInt("optionsCount");
-            } else {
-                return 0;
-            }
-        }
-    }
-    public static int getChangedOptionsCountSinceLastUpdate() throws SQLException, IOException {
-        LocalDateTime lastUpdateTime = Server.getLastUpdateTime();
-        if (lastUpdateTime == null) {
-            return 0;
-        }
-        String sql = "SELECT COUNT(*) AS changedOptionsCount FROM options WHERE lastModified > ?";
-        try (Connection conn = getConnection();
-             PreparedStatement stmt = conn.prepareStatement(sql)) {
-            stmt.setTimestamp(1, Timestamp.valueOf(lastUpdateTime));
-            try (ResultSet rs = stmt.executeQuery()) {
-                if (rs.next()) {
-                    return rs.getInt("changedOptionsCount");
-                } else {
-                    return 0;
-                }
-            }
-        }
-    }
-
-}
Index: backend/GlobeGuru-backend/src/main/java/FrontendHandler.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/FrontendHandler.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ 	(revision )
@@ -1,166 +1,0 @@
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpExchange;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.sql.SQLException;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.io.File;
-
-public class FrontendHandler implements HttpHandler {
-    private static final ExecutorService executorService = Executors.newFixedThreadPool(1);
-
-    @Override
-    public void handle(HttpExchange exchange) throws IOException {
-        String uri = exchange.getRequestURI().toString();
-        String path = exchange.getRequestURI().getPath();
-        String method = exchange.getRequestMethod();
-
-        if ("GET".equalsIgnoreCase(method)) {
-            handleGetRequests(exchange, path, uri);
-        } else if ("POST".equalsIgnoreCase(method)) {
-            handlePostRequests(exchange, path);
-        } else {
-            Server.sendResponse(exchange, 405, "{\"message\": \"Method not allowed.\"}");
-        }
-    }
-
-    private void handleGetRequests(HttpExchange exchange, String path, String uri) throws IOException {
-        switch (path) {
-            case "/admin/last-update-time":
-                String lastUpdateTimeResponse = "{\"lastUpdateTime\": \"" + Server.getLastUpdateTime().toString() + "\"}";
-                Server.sendResponse(exchange, 200, lastUpdateTimeResponse);
-                break;
-            case "/admin/current-options-count":
-                int currentOptionsCount;
-                try {
-                    currentOptionsCount = DatabaseUtil.getCurrentOptionsCount();
-                } catch (SQLException e) {
-                    throw new RuntimeException(e);
-                }
-                String currentOptionsCountResponse = "{\"currentOptionsCount\": " + currentOptionsCount + "}";
-                Server.sendResponse(exchange, 200, currentOptionsCountResponse);
-                break;
-            case "/admin/changed-options-count":
-                int changedOptionsCount;
-                try {
-                    changedOptionsCount = DatabaseUtil.getChangedOptionsCountSinceLastUpdate();
-                } catch (SQLException e) {
-                    throw new RuntimeException(e);
-                }
-                String changedOptionsCountResponse = "{\"changedOptionsCount\": " + changedOptionsCount + "}";
-                Server.sendResponse(exchange, 200, changedOptionsCountResponse);
-                break;
-            case"/admin/drop-db":
-                try {
-                    System.out.println("DROPPING DATABASE!");
-                    DatabaseUtil.dropOptions();
-                } catch (SQLException e) {
-                    throw new RuntimeException(e);
-                }
-                break;
-            default:
-                serveStaticFiles(exchange, uri);
-                break;
-        }
-    }
-
-    private void handlePostRequests(HttpExchange exchange, String path) throws IOException {
-        if (path.equalsIgnoreCase("/admin/start-scraper")) {
-            Future<Void> future = executorService.submit(new Scraper());
-            Server.updateLastUpdateTime();
-            Server.sendResponse(exchange, 200, "{\"message\": \"Starting options update.\"}");
-            executorService.submit(() -> {
-                try {
-                    future.get();
-                } catch (Exception e) {
-                    e.printStackTrace();
-
-                }
-            });
-        } else if (path.equalsIgnoreCase("/submit")) {
-            handleFormSubmit(exchange);
-        }else {
-            Server.sendResponse(exchange, 404, "{\"message\": \"Endpoint not found.\"}");
-        }
-    }
-
-    private void handleFormSubmit(HttpExchange exchange) throws IOException {
-        String requestBody = new String(exchange.getRequestBody().readAllBytes());
-        System.out.println("Form data: " + requestBody);
-        ObjectMapper mapper = new ObjectMapper();
-        Map<String, String> formData = mapper.readValue(requestBody, Map.class);
-        String destination = formData.get("destination");
-        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;
-
-        if (departureDate != null && !departureDate.isEmpty()) {
-            if (numberOfNights != 0) {
-                queryDate = LocalDate.parse(departureDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"))
-                        .format(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
-                String dateTo = LocalDate.parse(departureDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"))
-                        .plusDays(numberOfNights).format(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
-                queryDate += " - " + dateTo;
-            } else {
-                dateFlag = true; // send only from date
-                queryDate = LocalDate.parse(departureDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"))
-                        .format(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
-            }
-        }
-
-        List<Option> options;
-        try {
-            options = DatabaseUtil.queryOptions(destination, queryDate, numPeople, dateFlag);
-        } catch (SQLException e) {
-            e.printStackTrace();
-            exchange.sendResponseHeaders(500, -1);
-            exchange.close();
-            return;
-        }
-        Server.sendResponse(exchange, 200, mapper.writeValueAsString(options));
-    }
-
-    private void serveStaticFiles(HttpExchange exchange, String uri) throws IOException {
-        File file;
-        String contentType = "text/html";
-
-        if (uri.equals("/admin-panel")) {
-            System.out.println("Serving admin panel");
-            file = new File(System.getProperty("user.dir") + "/frontend/admin-panel.html");
-        } else {
-            file = new File(System.getProperty("user.dir") + "/frontend" + uri);
-            if (uri.endsWith(".css")) {
-                contentType = "text/css";
-            } else if (uri.endsWith(".js")) {
-                contentType = "application/javascript";
-            }
-        }
-
-        if (!file.exists() || !file.isFile()) {
-            file = new File("frontend/index.html");
-        }
-
-        if (file.exists() && file.isFile()) {
-            exchange.getResponseHeaders().set("Content-Type", contentType);
-            exchange.sendResponseHeaders(200, file.length());
-            OutputStream outputStream = exchange.getResponseBody();
-            Files.copy(file.toPath(), outputStream);
-            outputStream.close();
-        } else {
-            exchange.sendResponseHeaders(404, -1);
-        }
-    }
-
-}
Index: backend/GlobeGuru-backend/src/main/java/Option.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/Option.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ backend/GlobeGuru-backend/src/main/java/Option.java	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
@@ -1,77 +1,15 @@
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
 public class Option {
-    private int id;
-    private int detail_id;
     private String hotelName;
     private String country;
-    private float price;
-    private String link;
+    private String price;
+    private String link; // Ensure to add a field for link
     private String imgSrc;
-    private String type;
-    private String board;
-    private String amenities;
-    private int numPeople;
-    private String dateRange;
-    private List<Change> changes = new ArrayList<>();
+    // Constructor
+    public Option(){}
 
-    public String getDateRange() {
-        return dateRange;
+    public boolean isEmpty(){
+        return (hotelName == null || country == null || price == null || link == null || imgSrc == null);
     }
-
-    public void setDateRange(String dateRange) {
-        this.dateRange = dateRange;
-    }
-
-    public int getDetail_id() {
-        return detail_id;
-    }
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public void setDetail_id(int detail_id) {
-        this.detail_id = detail_id;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getBoard() {
-        return board;
-    }
-
-    public void setBoard(String board) {
-        this.board = board;
-    }
-
-    public String getAmenities() {
-        return amenities;
-    }
-
-    public void setAmenities(String amenities) {
-        this.amenities = amenities;
-    }
-
-    public int getNumPeople() {
-        return numPeople;
-    }
-
-    public void setNumPeople(int numPeople) {
-        this.numPeople = numPeople;
-    }
-
+    // Getters and setters (ensure you have these methods)
     public String getHotelName() {
         return hotelName;
@@ -90,9 +28,9 @@
     }
 
-    public float getPrice() {
+    public String getPrice() {
         return price;
     }
 
-    public void setPrice(float price) {
+    public void setPrice(String price) {
         this.price = price;
     }
@@ -106,57 +44,21 @@
     }
 
+    public void setImgSrc(String imgSrc) {
+        this.imgSrc = imgSrc;
+    }
+
     public String getImgSrc() {
         return imgSrc;
     }
 
-    public void setImgSrc(String imgSrc) {
-        this.imgSrc = imgSrc;
-    }
-
-    public void addChange(String attribute, String oldValue, String newValue) {
-        this.changes.add(new Change(attribute, oldValue, newValue));
-    }
-
-    public List<Change> getChanges() {
-        return changes;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) return true;
-        if (obj == null || getClass() != obj.getClass()) return false;
-        Option option = (Option) obj;
-        return Float.compare(option.price, price) == 0
-                && Objects.equals(hotelName, option.hotelName)
-                && Objects.equals(country, option.country)
-                && Objects.equals(link, option.link);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(hotelName, country, price, link);
-    }
-
+    // toString method (for debugging purposes)
     @Override
     public String toString() {
         return "Option{" +
-                "id=" + id +
-                ", dateRange='" + dateRange + '\'' +
-                ", hotelName='" + hotelName + '\'' +
+                "hotelName='" + hotelName + '\'' +
                 ", country='" + country + '\'' +
-                ", price=" + price +
+                ", price='" + price + '\'' +
                 ", link='" + link + '\'' +
-                ", imgSrc='" + imgSrc + '\'' +
-                ", type='" + type + '\'' +
-                ", board='" + board + '\'' +
-                ", amenities='" + amenities + '\'' +
-                ", numPeople=" + numPeople +
-                ", changes=" + changes +
                 '}';
     }
-
-    public boolean isEmpty() {
-        return (link.isEmpty() || country.isEmpty() || hotelName.isEmpty());
-    }
 }
-
Index: backend/GlobeGuru-backend/src/main/java/Scraper.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/Scraper.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ backend/GlobeGuru-backend/src/main/java/Scraper.java	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
@@ -7,20 +7,21 @@
 import java.util.Iterator;
 import java.util.List;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.CountDownLatch;
 
-public class Scraper implements Callable<Void> {
-
+public class Scraper extends Thread {
     private List<String> urls;
+    private String destination;
+    private String departureDate;
+    private int numberOfPeople;
+    private ConcurrentLinkedQueue<Option> optionsQueue;
     private CountDownLatch latch;
 
-    public Scraper() {
+    public Scraper(String destination, String departureDate, int numberOfPeople) {
         urls = new ArrayList<>();
+        this.optionsQueue = new ConcurrentLinkedQueue<>();
         ObjectMapper mapper = new ObjectMapper();
         try {
-            ClassLoader classLoader = getClass().getClassLoader();
-            JsonNode root = mapper.readTree(new File(classLoader.getResource("URLsJSON.json").getFile()));
-
+            JsonNode root = mapper.readTree(new File("src/main/java/URLsJSON.json"));
             JsonNode urlNode = root.get("agencyurls");
             if (urlNode.isArray()) {
@@ -35,14 +36,24 @@
             throw new RuntimeException(e);
         }
+        this.destination = destination;
+        this.departureDate = departureDate;
+        this.numberOfPeople = numberOfPeople;
         this.latch = new CountDownLatch(urls.size());
     }
 
-
-    public Void call() {
+    @Override
+    public void run() {
         System.out.println("Scraper has started ");
         for (String url : urls) {
-            new ScraperThread(url, latch).start();
+            new ScraperThread(url, destination, departureDate, numberOfPeople, optionsQueue, latch).start();
         }
-        return null;
+    }
+    public List<Option> getOptions() {
+        try {
+            latch.await();  // Wait for all threads to finish
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return new ArrayList<>(optionsQueue);
     }
 }
Index: backend/GlobeGuru-backend/src/main/java/ScraperServer.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/ScraperServer.java	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
+++ backend/GlobeGuru-backend/src/main/java/ScraperServer.java	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
@@ -0,0 +1,85 @@
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+import org.openqa.selenium.internal.Debug;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.nio.file.Files;
+import java.util.List;
+import java.util.Map;
+
+public class ScraperServer {
+
+    public static void main(String[] args) throws IOException {
+        // Start HTTP server
+        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
+        server.createContext("/", new FrontendHandler());
+        server.createContext("/submit", new FormHandler());
+        server.start();
+
+        System.out.println("Server started on port 8000");
+    }
+
+    static class FrontendHandler implements HttpHandler {
+        public void handle(HttpExchange exchange) throws IOException {
+            String uri = exchange.getRequestURI().toString();
+            File file = new File("frontend" + uri);
+            if (!file.exists() || !file.isFile()) {
+                file = new File("frontend/index.html"); // Default to index.html
+            }
+
+            exchange.sendResponseHeaders(200, file.length());
+            OutputStream outputStream = exchange.getResponseBody();
+            Files.copy(file.toPath(), outputStream);
+            outputStream.close();
+        }
+    }
+
+    static class FormHandler implements HttpHandler {
+        @Override
+        public void handle(HttpExchange exchange) throws IOException {
+            if (exchange.getRequestMethod().equalsIgnoreCase("POST")) {
+                // Read form data from request body
+                String requestBody = new String(exchange.getRequestBody().readAllBytes());
+                System.out.println("Form data: " + requestBody);
+
+                ObjectMapper mapper = new ObjectMapper();
+                Map<String, String> formData = mapper.readValue(requestBody, Map.class);
+                String destination = formData.get("destination");
+                String departureDate = formData.get("departureDate");
+                int numberOfPeople = Integer.parseInt(formData.get("numberOfPeople"));
+
+                // Start Scraper thread with form data
+                Scraper scraper = new Scraper(destination, departureDate, numberOfPeople);
+                scraper.start();
+
+                // Wait for the scraper threads to finish
+                try {
+                    scraper.join(); // Ensure the scraper thread completes
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+
+                List<Option> options = scraper.getOptions();
+                //System.out.println("Scraper finished with options: " + options);
+
+                // Respond with JSON data
+                String optionsJson = mapper.writeValueAsString(options);
+                exchange.getResponseHeaders().set("Content-Type", "application/json");
+                exchange.sendResponseHeaders(200, optionsJson.getBytes().length);
+                OutputStream outputStream = exchange.getResponseBody();
+                outputStream.write(optionsJson.getBytes());
+                outputStream.close();
+            } else {
+                // Method not allowed
+                exchange.sendResponseHeaders(405, -1);
+                exchange.close();
+            }
+        }
+    }
+
+}
Index: backend/GlobeGuru-backend/src/main/java/ScraperThread.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/ScraperThread.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ backend/GlobeGuru-backend/src/main/java/ScraperThread.java	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
@@ -1,7 +1,3 @@
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
 import org.openqa.selenium.chrome.ChromeDriver;
 import org.openqa.selenium.chrome.ChromeOptions;
@@ -10,18 +6,5 @@
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
-import org.openqa.selenium.support.ui.ExpectedCondition;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
-
-import javax.xml.crypto.Data;
-import java.io.File;
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
+
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.CountDownLatch;
@@ -29,198 +12,109 @@
 public class ScraperThread extends Thread {
     private String url;
+    private String destination;
+    private String departureDate;
+    private int numberOfPeople;
+    private ConcurrentLinkedQueue<Option> uniqueOptions;
     private CountDownLatch latch;
 
-    public ScraperThread(String url, CountDownLatch latch) {
+    public ScraperThread(String url, String destination, String departureDate, int numberOfPeople, ConcurrentLinkedQueue<Option> optionsQueue, CountDownLatch latch) {
         this.url = url;
+        this.destination = destination;
+        this.departureDate = departureDate;
+        this.numberOfPeople = numberOfPeople;
+        this.uniqueOptions = optionsQueue;
         this.latch = latch;
     }
 
-    public WebDriver driver;
-
-    private void initializeWebDriver() {
-        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver-win64\\chromedriver.exe");
+    private void connectToWeb(String queryUrl) {
+        // Selenium
         ChromeOptions options = new ChromeOptions();
-        options.setBinary("C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe");
-        options.addArguments("--headless");
+        options.setBinary("C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"); // Path to Brave, remove for Chrome compatibility
+        options.addArguments("--headless");  // Run in headless mode
         options.addArguments("--disable-gpu");
-        options.addArguments("--remote-allow-origins=*");
-        options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
-        driver = new ChromeDriver(options);
-    }
-
-    private void closeWebDriver() {
-        if (driver != null) {
+        options.addArguments("--window-size=1920,1080");
+        options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); // User-Agent
+
+        // chromeDriver
+        System.setProperty("webdriver.chrome.driver", "C:\\drivers\\chromedriver.exe");
+        System.setProperty("webdriver.http.factory", "jdk-http-client");
+        WebDriver driver = new ChromeDriver(options);
+        try {
+            // Navigate to URL
+            driver.get(queryUrl);
+            Thread.sleep(10000); // Sleep to fetch all data
+
+            // Get page source
+            String pageSource = driver.getPageSource();
+            System.out.println("Thread " + Thread.currentThread().getId() + " connected to " + queryUrl);
+
+            // Get only options
+            Document doc = Jsoup.parse(pageSource);
+            Element parentDiv;
+            Elements childDivs;
+            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) {
+                                if (uniqueOptions.add(option)) {
+                                    System.out.println("Parsed Option: " + option);
+                                }
+                            }
+                        }
+                    } else {
+                        System.out.println("Parent div not found");
+                    }
+                    break;
+                case "https://booking.escapetravel.mk/":
+                    parentDiv = doc.selectFirst("div.container.pt-4.pt-md-6.scroll-into-view");
+                    Element subParent;
+                    System.out.println(parentDiv);
+                    if(parentDiv != null) {
+                         subParent = parentDiv.selectFirst("div.row");
+                    }else{
+                        System.out.println("Parent div not found");
+                        break;
+                    }
+
+                    if (subParent != null) {
+                        childDivs = subParent.select("div.col-md-3");
+
+                        for (Element div : childDivs) {
+                            String data = div.html();
+                            Option option = optionParser(data);
+                            if (option != null) {
+                                if (uniqueOptions.add(option)) {
+                                    System.out.println("Parsed option: " + option);
+                                }
+                            }
+                        }
+                    }else {
+                        System.out.println("subparent div not found");
+                    }
+                    break;
+            }
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        } finally {
             driver.quit();
-        }
-    }
-
-    private void connectToWeb(String queryUrl, int numPeople) {
-        driver.get(queryUrl);
-
-        WebDriverWait wait = new WebDriverWait(driver, 40); // 40s timeout buffer
-        switch (url) {
-            case "https://booking.escapetravel.mk/":
-                wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#hotels-container")));
-                try { Thread.sleep(10000);} catch (InterruptedException e) { e.printStackTrace(); }//price fetch
-                break;
-            case "https://magelantravel.mk/":
-                wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.sodrzina")));
-                break;
-        }
-
-        String pageSource = driver.getPageSource();
-        System.out.println("Connected to " + queryUrl);
-        Document doc = Jsoup.parse(pageSource);
-        Element parentDiv;
-        Elements childDivs;
-
-        switch (url) {
-            case "https://booking.escapetravel.mk/":
-                parentDiv = doc.selectFirst("#hotels-container");
-                if (parentDiv != null) {
-                    childDivs = parentDiv.select("a.hotel-item");
-                    for (Element div : childDivs) {
-                        String data = div.outerHtml();
-                        Option option = optionParser(data, numPeople);
-                        if (option != null) {
-                            option.setId(DatabaseUtil.saveOptionToDatabase(option));
-                            scrapeOptionInfo(option);
-                            System.out.println("Parsed " + option);
-                        }
-                    }
-                } else {
-                    System.out.println("Parent div not found");
-                }
-                break;
-            case "https://magelantravel.mk/":
-                parentDiv = doc.selectFirst("div.sodrzina");
-                if (parentDiv != null) {
-                    childDivs = parentDiv.select("div.destinacija");
-                    childDivs.removeIf(div -> div.attr("style").contains("display:none") || div.attr("style").contains("display: none"));
-                    System.out.println("Filtered childDivs size: " + childDivs.size());
-                    for (Element div : childDivs) {
-                        String data = div.outerHtml();
-                        Option newOption = optionParser(data, numPeople);
-                        if (newOption != null) {
-                            newOption.setId(DatabaseUtil.saveOptionToDatabase(newOption));
-                            scrapeOptionInfo(newOption);
-                            System.out.println("Parsed " + newOption);
-                        }
-                    }
-                } else {
-                    System.out.println("Parent div not found");
-                }
-                break;
-            default:
-                System.out.println("URL not recognized for parsing.");
-        }
-
-    }
-    private void scrapeOptionInfo(Option option) {
-        String url = option.getLink();
-        if(url.contains("magelantravel.mk")) {
-            System.out.println("Scraping info for " + option.getHotelName());
-         String[] dates = option.getDateRange().split(" - ");
-         url += "&checkin=" + dates[0] + "&checkout=" + dates[1] + "&adult=" + option.getNumPeople();
-
-         driver.get(url);
-         try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } //data fetch
-         String pageSource = driver.getPageSource();
-         Document doc = Jsoup.parse(pageSource);
-         Elements roomOptions = doc.select(".tblroom > tbody > tr");
-         for (Element roomOption : roomOptions) {
-             String type = roomOption.select("a.tblroom-type").text();
-
-             String board = roomOption.select(".rezervacija-objekt").text();
-             if(board.length() > 2) {
-                 board = board.substring(0, 2);
-             }
-             if(board.isEmpty() || type.isEmpty()) continue;
-
-             Elements amenityElement = roomOption.select(".objekt-opis");
-             String amenity = (amenityElement != null ? amenityElement.text() : "");
-             System.out.println(amenity + " " + board + " " + type );
-             String priceText = roomOption.select(".tbl-cena").text().replace("€", "").trim();
-             float price;
-             if (!priceText.isEmpty()) {
-                 price = Float.parseFloat(priceText);
-             }else continue;
-
-             //Check for changes
-             int odId = checkForChanges(option.getId(), type, board,amenity,price);
-             if(odId != 0) { //true = changes found - update details
-                 DatabaseUtil.updateOptionDetails(odId,type,board,amenity,price);
-             }else{ //false = not found / no changes - save regular
-                 DatabaseUtil.saveOptionDetails(option.getId(), type, board, amenity, price);
-             }
-         }
-        }
-        else if(url.contains("booking.escapetravel.mk")){
-            System.out.println("Scraping info for " + url);
-
-            driver.get(url);
-            try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } //data fetch
-            String pageSource = driver.getPageSource();
-            Document doc = Jsoup.parse(pageSource);
-            Elements roomOptions = doc.select("#hotel-rooms-container .hotel-room-row");
-            for(Element roomOption : roomOptions){
-                String type = roomOption.select("td.align-middle").first().text();
-                String board = roomOption.select("td.align-middle.text-primary.lead").text();
-                if (board.isEmpty() || type.isEmpty())  continue;
-                String priceText = roomOption.select("td.align-middle.text-end .text-success.d-block.lead").text().replace("€", "").trim();
-                float price;
-                if (!priceText.isEmpty()) {
-                    price = Float.parseFloat(priceText.replace(",", ""));
-                } else continue;
-
-                Elements amenityElements = doc.select("div.row > div.col-6.col-md-3.col-xl-2");
-                StringBuilder amenities = new StringBuilder();
-                for (Element amenityElement : amenityElements) {
-                    amenities.append(amenityElement.text()).append(", ");
-                }
-                if (!amenities.isEmpty()) {
-                    amenities.setLength(amenities.length() - 2);
-                }
-                System.out.println(type + board + price + amenities);
-                int odId = checkForChanges(option.getId(), type, board,amenities.toString(),price);
-                if(odId != 0) { //true = changes found - update details
-                    DatabaseUtil.updateOptionDetails(odId,type,board,amenities.toString(),price);
-                }else{ //false = not found / no changes - save regular
-                    DatabaseUtil.saveOptionDetails(option.getId(), type, board, amenities.toString(), price);
-                }
-            }
-
-        }
-    }
-    private int checkForChanges(int id, String type, String board, String amenities, float price){ //return true for changes, false for no changes
-        try {
-            List<Option> pooled = DatabaseUtil.poolOptionDetails(id);
-            if (pooled.isEmpty()) { //not saved = no changes - save regular
-                return 0;
-            }else{ //got the options saved details
-                for(Option o : pooled){
-                    if(o.getType().equals(type) && o.getBoard().equals(board)){//for the room and board check amenity and price changes (Assumption type of room and board do not change)
-                        if((!o.getAmenities().equals(amenities)) || o.getPrice() != price){
-                            return o.getDetail_id(); //Change
-                        }
-                    }
-                }
-            }
-        }catch(SQLException e){
-            e.printStackTrace();
-        }
-        return 0; //no changes detected
-    }
-    private Option optionParser(String data, int numPeople){
+            latch.countDown();
+        }
+    }
+
+    private Option optionParser(String data) {
         Document doc = Jsoup.parse(data);
         Option created = new Option();
+
         switch (url) {
-            case "https://magelantravel.mk/":
-                created = parseMagelan(doc);
-                created.setNumPeople(numPeople);
+            case "https://www.fibula.com.mk/":
+                created = parseFibula(doc);
                 break;
             case "https://booking.escapetravel.mk/":
                 created = parseEscapeTravel(doc);
-                created.setNumPeople(numPeople);
                 break;
             default:
@@ -228,130 +122,92 @@
                 break;
         }
+
         if (created.isEmpty()) {
             return null;
         }
+
         return created;
     }
 
-    private Option parseMagelan(Document doc) {
+    private Option parseFibula(Document doc) {
         Option created = new Option();
-        Element linkElement = doc.selectFirst("div.ponuda-sredina");
-        int id = Integer.parseInt(linkElement.attr("data-id"));
-        int turop = Integer.parseInt(linkElement.attr("data-turop"));
-        created.setLink("https://magelantravel.mk/ponudi.php?type=1&objektid=" + id + "&turop=" + turop);
-        Element imgElement = doc.selectFirst("div.imgLiquidFill.imgLiquid.ponuda-img.zoom");
-        created.setImgSrc(imgElement != null ? url + imgElement.attr("style")
-                .split("url\\(")[1].split("\\)")[0].replace("'", "").replace("./", "/") : null);
-        Element hotelNameElement = doc.selectFirst("div.ponuda-objekt");
+
+        Element linkElement = doc.selectFirst("a[target='_blank']");
+        created.setLink(linkElement != null ? url + linkElement.attr("href") : null);
+
+        Element imgElement = doc.selectFirst("div.md\\:aspect-none img");
+        created.setImgSrc(imgElement != null ? imgElement.attr("src") : null);
+
+        Element hotelNameElement = doc.selectFirst("h5.text-md");
         created.setHotelName(hotelNameElement != null ? hotelNameElement.text() : null);
-        Element countryElement = doc.selectFirst("l.ponuda-lokacija");
+
+        Element countryElement = doc.selectFirst("small.text-navy");
         created.setCountry(countryElement != null ? countryElement.text() : null);
-        Element dateElement = doc.selectFirst("l.ponuda-opis.termin");
-        created.setDateRange(dateElement != null ? dateElement.text() : null);
+
+        Element priceElement = doc.selectFirst("small.line-through");
+        String price = priceElement != null ? priceElement.text().replaceAll("[^\\d.]", "") : "0";
+        created.setPrice(price);
+
         return created;
     }
+
     private Option parseEscapeTravel(Document doc) {
         Option created = new Option();
-        Element card = doc.selectFirst("a.hotel-item");
-        String link = card.attr("href");
-        created.setLink(link);
-        created.setImgSrc(card.attr("data-picture"));
-        created.setHotelName(card.attr("data-title"));
-        Element countryP = doc.selectFirst("p.text-info");
-        String country = countryP.text().replaceAll("leto hoteli", "");
-        created.setCountry(country);
-        String[] queryParams = link.split("[?&]");
-        String startDateStr = null;
-        int nights = 0;
-        for (String param : queryParams) {
-            if (param.startsWith("Date=")) {
-                startDateStr = param.split("=")[1];
+
+        // Extract link
+        Element linkElement = doc.selectFirst("a[target='_blank']");
+        created.setLink(linkElement != null ? linkElement.attr("href") : null);
+
+        // Extract image source
+        Element imgElement = doc.selectFirst("img.card-img-top");
+        created.setImgSrc(imgElement != null ? imgElement.attr("src") : null);
+
+        // Extract hotel name
+        Element hotelNameElement = doc.selectFirst("h3.fw-bold.text-body.mb-2");
+        created.setHotelName(hotelNameElement != null ? hotelNameElement.text() : null);
+
+        // Extract country/location
+        Element countryElement = doc.selectFirst("h5.fw-light.text-primary.mb-1");
+        created.setCountry(countryElement != null ? countryElement.text() : null);
+
+        // Extract price
+        Element priceElement = doc.selectFirst("h4.fw-light.text-success.mb-0");
+        String price = priceElement != null ? priceElement.text().replaceAll("[^\\d.]", "") : "0";
+        created.setPrice(price);
+
+        return created;
+    }
+
+
+    @Override
+        public void run() {
+            System.out.println("Thread started for url: " + url);
+            StringBuilder builder = new StringBuilder();
+            builder.append(url);
+            String queryUrl;
+            switch (url) {
+                case "https://www.fibula.com.mk/":
+                    builder.append("search?productType=2&"); // search for hotels
+                    for (int i = 0; i < numberOfPeople; i++) { // add all passengers (default adults)
+                        builder.append("passengers=1993-01-01&");
+                    }
+                    queryUrl = builder.toString();
+                    System.out.println(queryUrl);
+                    connectToWeb(queryUrl);
+                    break;
+                case "https://booking.escapetravel.mk/":
+                    builder.append("destinations?Category=&Search=&DateFrom=");
+                    builder.append(departureDate);
+                    builder.append("&Rooms=1&Adults=");
+                    builder.append(numberOfPeople);
+                    queryUrl = builder.toString();
+                    System.out.println(queryUrl);
+                    connectToWeb(queryUrl);
+                    break;
+                default:
+                    System.out.println("Not available for current url");
+                    latch.countDown();
+                    break;
             }
-            if (param.startsWith("Nights=")) {
-                nights = Integer.parseInt(param.split("=")[1]);
-            }
-        }
-        if (startDateStr != null && nights > 0)
-        {
-            SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
-            try {
-                Date startDate = dateFormat.parse(startDateStr);
-
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(startDate);
-                calendar.add(Calendar.DAY_OF_YEAR, nights);
-                Date endDate = calendar.getTime();
-                String dateRange = dateFormat.format(startDate) + " - " + dateFormat.format(endDate);
-                created.setDateRange(dateRange);
-            }catch (ParseException e){
-                e.printStackTrace();
-            }
-        }
-        return created;
-    }
-
-    @Override
-    public void run() {
-        System.out.println("Thread started for url: " + url);
-        initializeWebDriver();
-        if ("https://magelantravel.mk/".equals(url)) {
-            ObjectMapper mapper = new ObjectMapper();
-            try {
-                ClassLoader classLoader = getClass().getClassLoader();
-                JsonNode root = mapper.readTree(new File(classLoader.getResource("CountriesList.json").getFile()));
-                JsonNode countries = root.get("countries");
-                SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
-                Calendar calendar = Calendar.getInstance();
-                calendar.add(Calendar.DAY_OF_YEAR, 1);
-
-                for (int i = 0; i < 90; i++) { // next three months
-                    String date = dateFormat.format(calendar.getTime());
-                    for (JsonNode countryNode : countries) {
-                        String country = countryNode.asText();
-                        for (int nokevanja = 2; nokevanja <= 10; nokevanja++) {
-                            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);
-                            }
-                        }
-                    }
-                    calendar.add(Calendar.DAY_OF_YEAR, 1); // next day
-                }
-
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        } else if ("https://booking.escapetravel.mk/".equals(url)) {
-            ObjectMapper mapper = new ObjectMapper();
-            try {
-                ClassLoader classLoader = getClass().getClassLoader();
-                JsonNode root = mapper.readTree(new File(classLoader.getResource("CountriesList.json").getFile()));
-                JsonNode countries = root.get("countries");
-                SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
-                Calendar calendar = Calendar.getInstance();
-                calendar.add(Calendar.DAY_OF_YEAR, 1);
-
-                for (int i = 0; i < 90; i++) { // next three months
-                    String date = dateFormat.format(calendar.getTime());
-                    for (JsonNode countryNode : countries) {
-                        String country = countryNode.asText();
-                        for(int nokevanja = 2; nokevanja <=10; nokevanja ++) {
-                            for(int lugje = 1; lugje <= 4; lugje++) {
-                                String queryUrl = url + "/hotels?Search=" + country + "&Date=" + date + "&Nights=" + nokevanja + "&Rooms=1&Adults=" + lugje;
-                                connectToWeb(queryUrl,lugje);
-                            }
-                        }
-                    }
-                    calendar.add(Calendar.DAY_OF_YEAR, 1); // next day
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        } else {
-            // Handle other URLs
-        }
-        closeWebDriver();
-        latch.countDown();
-    }
-
-}
+        }
+    }
Index: backend/GlobeGuru-backend/src/main/java/Server.java
===================================================================
--- backend/GlobeGuru-backend/src/main/java/Server.java	(revision df7f3908d4d04d0a62480f95b6d163db19795365)
+++ 	(revision )
@@ -1,212 +1,0 @@
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
-import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
-import com.google.api.client.http.HttpTransport;
-import com.google.api.client.http.javanet.NetHttpTransport;
-import com.google.api.client.json.JsonFactory;
-import com.google.api.client.json.jackson2.JacksonFactory;
-
-import com.sun.net.httpserver.HttpExchange;
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpServer;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import java.net.InetSocketAddress;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.security.GeneralSecurityException;
-import java.sql.SQLException;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.*;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-public class Server {
-    private static final ExecutorService executorService = Executors.newFixedThreadPool(1);
-    public static void main(String[] args) throws IOException, SQLException {
-        // Start HTTP server
-        DatabaseUtil.initializeDatabase();
-        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
-        server.createContext("/", new FrontendHandler());
-        server.createContext("/submit", new FrontendHandler());
-        server.createContext("/admin/start-scraper", new FrontendHandler());
-        server.createContext("/admin/last-update-time", new FrontendHandler());
-        server.createContext("/admin/current-options-count", new FrontendHandler());
-        server.createContext("/admin/changed-options-count", new FrontendHandler());
-
-        server.createContext("/account/login", new AccountHandler());
-        server.createContext("/account/register", new AccountHandler());
-        server.createContext("/account/delete-account", new AccountHandler());
-        server.createContext("/account/session", new AccountHandler());
-
-
-        server.createContext("/save-favorite", new SaveFavoriteHandler());
-        server.createContext("/get-saved-trips", new GetSavedTripsHandler());
-        server.createContext("/remove-from-saved", new RemoveFromSavedTripsHandler());
-
-        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 {
-        @Override
-        public void handle(HttpExchange exchange) throws IOException {
-            if (exchange.getRequestMethod().equalsIgnoreCase("POST")) {
-                String requestBody = new String(exchange.getRequestBody().readAllBytes());
-                ObjectMapper mapper = new ObjectMapper();
-                Map<String, Object> requestData = mapper.readValue(requestBody, Map.class);
-                String userEmail = (String) requestData.get("userEmail");
-                int optionId = (int) requestData.get("optionId");
-
-                int userId;
-                try {
-                    userId = DatabaseUtil.getUserIdByEmail(userEmail);
-                    boolean removed = DatabaseUtil.removeFavoriteOption(userId, optionId);
-                    if (removed) {
-                        sendResponse(exchange, 200, "{\"success\": true}");
-                    } else {
-                        sendResponse(exchange, 500, "{\"success\": false, \"message\": \"Failed to remove option\"}");
-                    }
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    sendResponse(exchange, 500, "{\"message\": \"Failed to retrieve user ID.\"}");
-                }
-            } else {
-                sendResponse(exchange, 405, "{\"message\": \"Method not allowed.\"}");
-            }
-        }
-    }
-    static class SaveFavoriteHandler implements HttpHandler {
-        @Override
-        public void handle(HttpExchange exchange) throws IOException {
-            if (exchange.getRequestMethod().equalsIgnoreCase("POST")) {
-                String requestBody = new String(exchange.getRequestBody().readAllBytes());
-                ObjectMapper mapper = new ObjectMapper();
-                Map<String, String> requestData = mapper.readValue(requestBody, Map.class);
-                String optionId = requestData.get("optionId");
-                String userEmail = requestData.get("user");
-
-                int userId;
-                try {
-                    userId = DatabaseUtil.getUserIdByEmail(userEmail);
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    sendResponse(exchange, 500, "{\"message\": \"Failed to retrieve user ID.\"}");
-                    return;
-                }
-
-                try {
-                    if (DatabaseUtil.saveFavoriteOption(userId, Integer.parseInt(optionId))) {
-                        sendResponse(exchange, 200, "{\"message\": \"Favorite saved successfully!\"}");
-                    } else {
-                        sendResponse(exchange, 500, "{\"message\": \"Failed to save favorite.\"}");
-                    }
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    sendResponse(exchange, 500, "{\"message\": \"Failed to save favorite.\"}");
-                }
-            } else {
-                sendResponse(exchange, 405, "{\"message\": \"Method not allowed.\"}");
-            }
-        }
-
-    }
-    static class GetSavedTripsHandler implements HttpHandler {
-        @Override
-        public void handle(HttpExchange exchange) throws IOException {
-            if (exchange.getRequestMethod().equalsIgnoreCase("POST")) {
-                String requestBody = new String(exchange.getRequestBody().readAllBytes());
-                ObjectMapper mapper = new ObjectMapper();
-                Map<String, String> requestData = mapper.readValue(requestBody, Map.class);
-                String userEmail = requestData.get("userEmail");
-
-                int userId;
-                try {
-                    userId = DatabaseUtil.getUserIdByEmail(userEmail);
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    sendResponse(exchange, 500, "{\"message\": \"Failed to retrieve user ID.\"}");
-                    return;
-                }
-
-                List<Option> savedTrips;
-                try {
-                    savedTrips = DatabaseUtil.getSavedTripsByUser(userId);
-                } catch (SQLException e) {
-                    e.printStackTrace();
-                    sendResponse(exchange, 500, "{\"message\": \"Failed to retrieve saved trips.\"}");
-                    return;
-                }
-
-                String responseJson = mapper.writeValueAsString(Map.of("savedTrips", savedTrips));
-                System.out.println(responseJson);
-                sendResponse(exchange, 200, responseJson);
-            } else {
-                sendResponse(exchange, 405, "{\"message\": \"Method not allowed.\"}");
-            }
-        }
-    }
-    public static LocalDateTime getLastUpdateTime() throws IOException {
-        ClassLoader classLoader = Server.class.getClassLoader();
-        ObjectMapper mapper = new ObjectMapper();
-        JsonNode root = mapper.readTree(new File(classLoader.getResource("lastUpdateTime.json").getFile()));
-        String lastUpdateTimeStr = root.get("lastUpdateTime").asText();
-        return LocalDateTime.parse(lastUpdateTimeStr);
-    }
-    public static void updateLastUpdateTime() throws IOException {
-        LocalDateTime now = LocalDateTime.now();
-        ObjectMapper mapper = new ObjectMapper();
-        ObjectNode rootNode = mapper.createObjectNode();
-        rootNode.put("lastUpdateTime", now.toString());
-
-        File file = new File(Server.class.getClassLoader().getResource("lastUpdateTime.json").getFile());
-
-        mapper.writerWithDefaultPrettyPrinter().writeValue(file, rootNode);
-
-        System.out.println("Last update time saved: " + now);
-    }
-
-    public static void sendResponse(HttpExchange exchange, int statusCode, String response) throws IOException {
-        byte[] responseBytes = response.getBytes(StandardCharsets.UTF_8);
-        exchange.getResponseHeaders().add("Cross-Origin-Opener-Policy", "unsafe-none");
-        exchange.getResponseHeaders().add("Cross-Origin-Embedder-Policy", "require-corp");
-        exchange.getResponseHeaders().add("Content-Type", "application/json");
-        exchange.getResponseHeaders().add("Transfer-Encoding", "chunked");
-        exchange.sendResponseHeaders(statusCode, 0);
-        try (OutputStream os = exchange.getResponseBody()) {
-            os.write(responseBytes);
-        }
-    }
-}
-
-
-
-
Index: backend/GlobeGuru-backend/src/main/java/URLsJSON.json
===================================================================
--- backend/GlobeGuru-backend/src/main/java/URLsJSON.json	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
+++ backend/GlobeGuru-backend/src/main/java/URLsJSON.json	(revision d4d8f6155e80421fe9fc8c1ee34e0b784226b96c)
@@ -0,0 +1,7 @@
+{
+  "agencyurls":
+          [
+            "https://www.fibula.com.mk/",
+            "https://booking.escapetravel.mk/"
+          ]
+}
