Index: src/main/java/com/db/finki/www/build_board/config/BeanConfig.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/config/BeanConfig.java	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/java/com/db/finki/www/build_board/config/BeanConfig.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -2,4 +2,5 @@
 
 import com.db.finki.www.build_board.service.AuthenticationSuccessHandlerImpl;
+import com.db.finki.www.build_board.service.threads.impl.FileUploadService;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
Index: src/main/java/com/db/finki/www/build_board/config/WebConfig.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/config/WebConfig.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
+++ src/main/java/com/db/finki/www/build_board/config/WebConfig.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -0,0 +1,18 @@
+package com.db.finki.www.build_board.config;
+
+import com.db.finki.www.build_board.service.threads.impl.FileUploadService;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.io.File;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/avatars/**")
+                .addResourceLocations("file:" + FileUploadService.USER_AVATAR_DIR + File.separator);
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -35,5 +35,5 @@
                 .csrf(AbstractHttpConfigurer::disable)
                 .authorizeHttpRequests(request ->
-                        request
+                        request.requestMatchers("/","topic/*").permitAll()
                                 .anyRequest().authenticated()
                 ).formLogin(formLogin ->
@@ -41,5 +41,7 @@
                                 .defaultSuccessUrl("/")
                                 .successHandler(successHandler)
-                        );
+                        )
+                .logout(logout ->
+                        logout.logoutSuccessUrl("/"));
 
         return http.build();
Index: src/main/java/com/db/finki/www/build_board/controller/UserProfileController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/UserProfileController.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
+++ src/main/java/com/db/finki/www/build_board/controller/UserProfileController.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -0,0 +1,46 @@
+package com.db.finki.www.build_board.controller;
+
+import com.db.finki.www.build_board.entity.user_types.BBUser;
+import com.db.finki.www.build_board.service.BBUserDetailsService;
+import com.db.finki.www.build_board.service.threads.impl.FileUploadService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import java.io.IOException;
+
+@Controller
+@RequestMapping("{username}")
+public class UserProfileController {
+    private final BBUserDetailsService userService;
+    private final FileUploadService fileUploadService;
+
+    public UserProfileController(BBUserDetailsService userService, FileUploadService fileUploadService) {
+        this.userService = userService;
+        this.fileUploadService = fileUploadService;
+    }
+
+
+    @GetMapping("/profile")
+    public String getProfilePage(@PathVariable String username, Model model) {
+        BBUser u = (BBUser) userService.loadUserByUsername(username);
+
+        model.addAttribute("user", u);
+        return "profile";
+    }
+    @PostMapping("/upload-avatar")
+    public String uploadAvatar(Model model, @PathVariable String username, @RequestParam MultipartFile userImage, RedirectAttributes redirectAttributes) {
+        BBUser u = (BBUser) userService.loadUserByUsername(username);
+        try{
+            fileUploadService.uploadAvatar(userImage,u.getId());
+            redirectAttributes.addFlashAttribute("message", "Avatar uploaded successfully");
+        } catch (IOException e) {
+            redirectAttributes.addFlashAttribute("message", "Cant upload avatar");
+            System.out.println(e.getMessage());
+        }
+
+        return "redirect:/" + username + "/profile";
+    }
+}
Index: src/main/java/com/db/finki/www/build_board/entity/user_types/BBUser.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/user_types/BBUser.java	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/java/com/db/finki/www/build_board/entity/user_types/BBUser.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -2,4 +2,6 @@
 
 import com.db.finki.www.build_board.entity.threads.BBThread;
+import com.db.finki.www.build_board.service.threads.impl.FileUploadService;
+import jakarta.annotation.PostConstruct;
 import jakarta.persistence.*;
 import lombok.Data;
@@ -10,5 +12,8 @@
 import org.springframework.security.core.userdetails.UserDetails;
 
+import java.io.File;
 import java.io.Serializable;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.time.LocalDateTime;
 import java.util.Collection;
@@ -45,4 +50,7 @@
     }
 
+     @Transient
+    private String avatarUrl;
+
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
@@ -50,4 +58,8 @@
     }
 
+    public String getAvatarUrl() {
+        Path path = Path.of(FileUploadService.USER_AVATAR_DIR + File.separator + "avatar-" + id);
+        return Files.exists(path) ? File.separator + "avatars" + File.separator + "avatar-"+id : File.separator + "avatars" + File.separator + "default-avatar.jpg";
+    }
 
 }
Index: src/main/java/com/db/finki/www/build_board/service/AuthenticationSuccessHandlerImpl.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/AuthenticationSuccessHandlerImpl.java	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/java/com/db/finki/www/build_board/service/AuthenticationSuccessHandlerImpl.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -2,4 +2,5 @@
 
 import com.db.finki.www.build_board.entity.user_types.BBUser;
+import com.db.finki.www.build_board.service.threads.impl.FileUploadService;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServletRequest;
@@ -8,6 +9,9 @@
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+import org.springframework.security.web.savedrequest.DefaultSavedRequest;
+import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
 
 import java.io.IOException;
+import java.util.Objects;
 
 public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHandler {
@@ -18,6 +22,17 @@
         session.setAttribute("user", user);
         session.setMaxInactiveInterval(1800);
-        response.sendRedirect("/");
+
+        String redirectUrl = getSavedRequestUrl(request);
+
+        System.out.println(redirectUrl + "REDIR");
+
+        response.sendRedirect(Objects.requireNonNullElse(redirectUrl, "/"));
+
     }
 
+    private String getSavedRequestUrl(HttpServletRequest request) {
+        HttpSessionRequestCache requestCache = new HttpSessionRequestCache();
+        DefaultSavedRequest savedRequest = (DefaultSavedRequest) requestCache.getRequest(request, null);
+        return (savedRequest != null) ? savedRequest.getRedirectUrl() : null;
+    }
 }
Index: c/main/java/com/db/finki/www/build_board/service/UserService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/UserService.java	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package com.db.finki.www.build_board.service;
-
-import com.db.finki.www.build_board.entity.user_types.BBUser;
-
-public interface UserService {
-    BBUser verifyCredentials(String username, String password);
-}
Index: src/main/java/com/db/finki/www/build_board/service/threads/impl/FileUploadService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/threads/impl/FileUploadService.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
+++ src/main/java/com/db/finki/www/build_board/service/threads/impl/FileUploadService.java	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -0,0 +1,56 @@
+package com.db.finki.www.build_board.service.threads.impl;
+
+
+import org.apache.tomcat.util.http.fileupload.FileUploadException;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+@Service
+public class FileUploadService {
+
+    public static String USER_AVATAR_DIR = System.getProperty("user.dir") + File.separator + "/uploads/user-avatars";
+    public static long MAX_FILE_SIZE = 5 * 1024 * 1024;
+
+    public void uploadAvatar(MultipartFile file, long userId) throws IOException {
+        System.out.println(USER_AVATAR_DIR);
+
+        if(file.isEmpty()){
+            throw new FileUploadException("File is empty");
+        }
+
+        String contentType = file.getContentType();
+        if (!contentType.startsWith("image/")) {
+            throw new IOException("Only image files are allowed.");
+        }
+
+        if (file.getSize() > MAX_FILE_SIZE) {
+            throw new IOException("File size exceeds the limit.");
+        }
+
+        File directory = new File(USER_AVATAR_DIR);
+        if (!directory.exists()) {
+            directory.mkdirs();
+        }
+
+
+        String fileName = "avatar-" + userId;
+        File saveFile = new File(USER_AVATAR_DIR + File.separator + fileName);
+
+        if (saveFile.exists()) {
+            saveFile.delete();
+        }
+
+        file.transferTo(saveFile);
+    }
+
+    public String getAvatar(int id) {
+        Path path = Path.of(USER_AVATAR_DIR + File.separator + "avatar-" + id);
+        return Files.exists(path) ? File.separator + "avatars" + File.separator + "avatar-"+id : File.separator + "avatars" + File.separator + "default-avatar.jpg";
+    }
+}
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/resources/application.properties	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -9,2 +9,4 @@
 spring.jpa.hibernate.ddl-auto=validate
 spring.jpa.show-sql=true
+
+avatar.upload-dir=/uploads/user-avatars
Index: src/main/resources/db/migration/V1__init_ddl.sql
===================================================================
--- src/main/resources/db/migration/V1__init_ddl.sql	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/resources/db/migration/V1__init_ddl.sql	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -51,5 +51,4 @@
     description   VARCHAR(200),
     registered_at TIMESTAMP,
-    avatar_url TEXT,
     sex           VARCHAR(1)
 );
Index: src/main/resources/templates/home.html
===================================================================
--- src/main/resources/templates/home.html	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/resources/templates/home.html	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -35,13 +35,44 @@
     <div class="container">
         <a class="navbar-brand" href="/">BuildBoard</a>
-        <div th:if="${session.user != null}" class="d-flex align-items-center">
-            <span class="me-2" th:text="${session.user.getUsername()}">Username</span>
-            <a href="/logout" class="btn btn-outline-primary btn-sm">Log out</a>
-        </div>
-        <a href="/login" class="btn btn-primary btn-sm ms-auto" th:if="${session.user == null}">Log in</a>
-    </div>
-    <a href="/login">Log in</a>
-
+        <button class="navbar-toggler w-25" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
+            <span class="navbar-toggler-icon"></span>
+        </button>
+        <div class="collapse navbar-collapse" id="navbarNav">
+            <ul class="navbar-nav justify-content-center d-flex align-items-center w-100"> <!-- Use mx-auto for centering the nav items -->
+                <li class="nav-item">
+                    <a class="nav-link" href="/" th:href="@{/}">Home</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link" href="/about" th:href="@{/about}">About</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link" href="/contact" th:href="@{/contact}">Contact</a>
+                </li>
+                <li th:if="${session.user != null}" class="nav-item">
+                    <a class="nav-link" th:href="@{'/' + ${session.user.getUsername()} + '/profile'}">Profile</a>
+                </li>
+            </ul>
+            <ul class="navbar-nav justify-content-end d-flex align-items-center w-25">
+                <li class="nav-item d-flex align-items-center" th:if="${session.user != null}">
+                    <span class="nav-link mb-0" th:text="${session.user.getUsername()}">Username</span>
+                </li>
+                <li class="nav-item d-flex align-items-center" th:if="${session.user != null}">
+                    <img th:src="${session.user.getAvatarUrl()}" alt="Profile Picture" id="profileImage" class="rounded-circle border border-1 border-info" style="width: 50px; height: 50px; object-fit: cover; vertical-align: middle;">
+                </li>
+                <li class="nav-item d-flex align-items-center ms-5" th:if="${session.user != null}">
+                    <a href="/logout" class="btn btn-outline-primary btn-sm ms-2">Log out</a>
+                </li>
+                <!-- Display login button if user is not logged in -->
+                <li class="nav-item d-flex align-items-center" th:if="${session.user == null}">
+                    <a href="/login" class="btn btn-primary btn-sm ms-2">Log in</a>
+                </li>
+            </ul>
+        </div>
+    </div>
 </nav>
+
+
+
+
 
 <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
Index: src/main/resources/templates/profile.html
===================================================================
--- src/main/resources/templates/profile.html	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
+++ src/main/resources/templates/profile.html	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Profile</title>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
+</head>
+<body class="bg-light">
+<div class="container mt-5">
+    <!-- User Profile Card -->
+    <div class="card shadow">
+        <div class="card-header bg-primary text-white">
+            <h4 class="mb-0">User Profile</h4>
+        </div>
+        <div class="card-body">
+            <div class="row">
+                <!-- Profile Picture -->
+                <div class="col-md-4 text-center">
+                    <img th:src="${session.user.getAvatarUrl()}" alt="Profile Picture" id="profileImage" class="rounded-circle border border-1 border-info mb-3" style="width: 150px; height: 150px; object-fit: cover;">
+                    <form th:action="'/' + ${session.user.getUsername()} + '/upload-avatar'" method="post" enctype="multipart/form-data" class="mt-3">
+                        <input type="file" id="userImage" name="userImage" accept="image/*" class="form-control mb-2">
+                        <button type="submit" class="btn btn-success btn-sm w-100">Upload Picture</button>
+                    </form>
+                </div>
+
+
+                <!-- User Details -->
+                <div class="col-md-8">
+                    <h5 class="card-title">Personal Details</h5>
+                    <ul class="list-group list-group-flush">
+                        <li th:text="${session.user.getUsername()}" class="list-group-item"><strong>Username:</strong></li>
+                        <li class="list-group-item"><strong>Name:</strong></li>
+                        <li class="list-group-item"><strong>Email:</strong></li>
+                    </ul>
+                    <a href="/edit-profile" class="btn btn-primary btn-sm mt-3">Edit Profile</a>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
+</body>
+</html>
Index: src/main/resources/templates/show-topic.html
===================================================================
--- src/main/resources/templates/show-topic.html	(revision 1229a95c22c906a8cb74275fd39abab83d133d4a)
+++ src/main/resources/templates/show-topic.html	(revision 90fd48831415da1eb1555ba08979909f43a4f2bb)
@@ -81,5 +81,8 @@
          th:style="'margin-left: ' + (${reply.depth + 1} * 5) + '%'">
         <div class="card-header bg-light d-flex justify-content-between align-items-center">
-            <span th:text="${reply.getUser().getUsername()}">Reply Author</span>
+            <div>
+                <img th:src="${reply.getUser().getAvatarUrl()}" alt="Profile Picture" id="profileImage" class="rounded-circle border border-1 border-info me-3" style="width: 50px; height: 50px; object-fit: cover; vertical-align: middle;">
+                <span th:text="${reply.getUser().getUsername()}">Reply Author</span>
+            </div>
             <div th:if="${session.user.getId() != null && session.user.getId() == reply.getUser().getId()}">
                 <button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#editReplyModal"
