Index: src/main/java/com/db/finki/www/build_board/controller/ExceptionHandler.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/ExceptionHandler.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/controller/ExceptionHandler.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -3,5 +3,4 @@
 import org.springframework.security.access.AccessDeniedException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
-import org.springframework.web.client.HttpServerErrorException;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.resource.NoResourceFoundException;
@@ -34,9 +33,9 @@
 
 
-    @org.springframework.web.bind.annotation.ExceptionHandler(value = {Exception.class })
-    public ModelAndView handleNotFound(Exception exception) {
-        System.out.println(exception.getMessage());
-        exception.printStackTrace();
-        return mavBuilder(exception,"An error occurred.",-1);
-    }
+    // @org.springframework.web.bind.annotation.ExceptionHandler(value = {Exception.class })
+    // public ModelAndView handleNotFound(Exception exception) {
+    //     System.out.println(exception.getMessage());
+    //     exception.printStackTrace();
+    //     return mavBuilder(exception,"An error occurred.",-1);
+    // }
 }
Index: src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -21,4 +21,5 @@
     private final ProjectService projectService;
     private final TagService tagService;
+    private final String DUPLICATED_TITLE_MSG="could not execute statement [ERROR: duplicate key value violates unique constraint";
 
     public ProjectController(ProjectService projectService, TagServiceImpl topicService) {
@@ -28,11 +29,16 @@
 
     @GetMapping("/{title}")
-    public String getProjectPage(@PathVariable(name = "title") Project project, Model model, RedirectAttributes redirectAttributes) {
+    public String getProjectPage(@PathVariable(name = "title") Project project, Model model, RedirectAttributes redirectAttributes,
+    @RequestParam(required = false) String duplicateTitle) {
         model.addAttribute("project", project);
         model.addAttribute("tags", tagService.getAll());
         model.addAttribute("developers",projectService.getAllDevelopersForProject(project));
         String error = (String) redirectAttributes.getAttribute("error");
+        
         if(error != null){
             model.addAttribute("error", error);
+        }
+        if(duplicateTitle!=null){
+            model.addAttribute("errMsg","There already exists a project with the provided title" );
         }
         
@@ -43,5 +49,8 @@
 
     @GetMapping("/create")
-    public String getCreateProjectPage(Model model) {
+    public String getCreateProjectPage(Model model, @RequestParam(required = false) String duplicateTitle) {
+        if(duplicateTitle!=null){
+            model.addAttribute("errMsg", "There already exists a project with the provided title"); 
+        }
         model.addAttribute("project", new Project());
         model.addAttribute("isCreatingProject", tagService.getAll());
@@ -78,4 +87,5 @@
         return "project_pages/members";
     }
+
     @PreAuthorize("#project.getUser().equals(#user)")
     @PostMapping("/{pr-title}/members/{mem-id}/kick")
@@ -92,7 +102,17 @@
             @RequestParam(name = "repo_url") String repoUrl,
             @RequestParam @P("username") String username,
-            @RequestParam String description
+            @RequestParam String description,
+            RedirectAttributes attributes
     ){
-        return "redirect:/projects/" +  projectService.update(project, repoUrl, description, newTitle).getTitle();
+        String oldTitle = project.getTitle();
+        try{
+            return "redirect:/projects/" +  projectService.update(project, repoUrl, description, newTitle).getTitle();
+        }catch(org.springframework.dao.DataIntegrityViolationException e){
+            if(e.getMessage().contains(DUPLICATED_TITLE_MSG)){
+                attributes.addAttribute("duplicateTitle", "y");
+                return "redirect:/projects/" + oldTitle; 
+            }
+            throw e ; 
+        }
     }
 
@@ -102,8 +122,17 @@
             @RequestParam(required = false, name = "repo_url") String repoUrl,
             @RequestParam(required = false) String description,
-            @SessionAttribute BBUser user
+            @SessionAttribute BBUser user,
+            RedirectAttributes redirectAttributes
     ) {
-        projectService.create(title,repoUrl,description,user);
-        return "redirect:/";
+        try{
+            projectService.create(title,repoUrl,description,user);
+            return "redirect:/";
+        }catch(org.springframework.dao.DataIntegrityViolationException e){
+            if(e.getMessage().contains(DUPLICATED_TITLE_MSG)){
+                redirectAttributes.addAttribute("duplicateTitle", "y");
+                return "redirect:/projects/create"; 
+            }
+            throw e ; 
+        }
     }
 
@@ -114,7 +143,8 @@
             @RequestParam(name = "title") String topicsTitle,
             @RequestParam String description,
-            @RequestParam @P("username") String username
+            @RequestParam @P("username") String username,
+            @SessionAttribute("user") BBUser user 
     ){
-        projectService.createTopic(project, topicsTitle, description, username);
+        projectService.createTopic(project, topicsTitle, description, user);
         return "redirect:/projects/" + project.getTitle();
     }
Index: src/main/java/com/db/finki/www/build_board/controller/thread_controller/TagController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controller/TagController.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/TagController.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -35,8 +35,9 @@
             @RequestParam String tagName,
             @P("username") String username,
-            Model model
+            Model model,
+            @SessionAttribute("user") BBUser user 
     ) {
         Topic t = topicService.getById(id);
-        topicService.addTagToTopic(t, tagName);
+        topicService.addTagToTopic(t, tagName,user);
         model.addAttribute("topic", t);
         model.addAttribute("tags", tagService.getAllNotUsed(t));
Index: src/main/java/com/db/finki/www/build_board/controller/thread_controller/TopicController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controller/TopicController.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/TopicController.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -12,5 +12,5 @@
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
-
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 @Controller
@@ -21,4 +21,5 @@
     private final TagService tagService;
     private final DiscussionService discussionService;
+    private final String DUPLICATE_TITTLE = "There already exists a topic with title";
 
     public TopicController(TopicService topicService, TagService tagService, DiscussionService discussionService) {
@@ -29,11 +30,17 @@
 
     @GetMapping("/create")
-    public String getCreateTopicPage() {
+    public String getCreateTopicPage(Model model, @RequestParam(required = false) Boolean duplicateTittle) {
+        if (duplicateTittle != null)
+            model.addAttribute("errMsg", "There already exists a thread with the same title in that parent");
         return "create-topic";
     }
 
     @GetMapping("/{topic-name}")
-    public String showTopic(@PathVariable(name = "topic-name") String topicName, Model model) {
-        Topic t = topicService.getByTitle(topicName);
+    public String showTopic(@PathVariable(name = "topic-name") String topicId, Model model,
+            @RequestParam(required = false) Boolean duplicateTittle) {
+        if (duplicateTittle != null) {
+            model.addAttribute("errMsg", "There already exists a thread with the same title in that parent");
+        }
+        Topic t = topicService.getByTitle(topicId);
         model.addAttribute("topic", t);
         model.addAttribute("tags", tagService.getAllNotUsed(t));
@@ -43,13 +50,20 @@
 
     @PostMapping("/add")
-    public String createTopic(@RequestParam String title, @RequestParam String description, HttpSession session) {
-        BBUser user = (BBUser) session.getAttribute("user");
-        topicService.create(title, description, user);
-        return "redirect:/";
+    public String createTopic(@RequestParam String title, @RequestParam String description, HttpSession session,
+            RedirectAttributes reddAttributes) {
+        try {
+            title = title.strip();
+            BBUser user = (BBUser) session.getAttribute("user");
+            topicService.create(title, description, user);
+            return "redirect:/";
+        } catch (org.springframework.orm.jpa.JpaSystemException e) {
+            return handleDuplicatedTitle(e, reddAttributes, "/topics/create");
+        }
     }
 
     @PreAuthorize("@topicServiceImpl.getById(#id).getUser().getUsername().equals(#username)")
     @PostMapping("/{id}/delete")
-    public String deleteTopic(@PathVariable(name = "id") @P("id") long id, HttpSession session, @RequestParam @P("username") String username) {
+    public String deleteTopic(@PathVariable(name = "id") @P("id") long id, HttpSession session,
+            @RequestParam @P("username") String username) {
         topicService.deleteTopicById(id);
         return "redirect:/";
@@ -58,11 +72,27 @@
     @PreAuthorize("@topicServiceImpl.getById(#id).getUser().getUsername().equals(#username)")
     @PostMapping("/{id}/edit")
-    public String editTopic(@PathVariable @P("id") long id, @RequestParam String title, @RequestParam String content, Model model, @RequestParam @P("username")String username) {
-        Topic t = topicService.create(id, title, content);
-        model.addAttribute("topic", t);
-        model.addAttribute("tags", tagService.getAllNotUsed(t));
-        return "redirect:/topics/" + t.getTitle();
+    public String editTopic(@PathVariable @P("id") long id, @RequestParam String title, @RequestParam String content,
+            Model model, @RequestParam @P("username") String username, RedirectAttributes redirectAttributes) {
+        Topic t = topicService.getById(id);
+        String oldTitle = t.getTitle();
+        try {
+            title = title.strip();
+            topicService.edit(t, title, content);
+            model.addAttribute("topic", t);
+            model.addAttribute("tags", tagService.getAllNotUsed(t));
+            return "redirect:/topics/" + t.getTitle();
+        } catch (org.springframework.orm.jpa.JpaSystemException e) {
+            return handleDuplicatedTitle(e, redirectAttributes, "/topics/" + oldTitle);
+        }
     }
 
+    public String handleDuplicatedTitle(org.springframework.orm.jpa.JpaSystemException e,
+            RedirectAttributes attr, String redirectPath) {
+        if (e.getMessage().contains(DUPLICATE_TITTLE)) {
+            attr.addAttribute("duplicateTittle", true);
+            return "redirect:" + redirectPath;
+        }
+        throw e;
+    }
 
 }
Index: src/main/java/com/db/finki/www/build_board/entity/channel/Channel.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/channel/Channel.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/entity/channel/Channel.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -21,4 +21,5 @@
     @Id
     private String name;
+    
     @Id
     @ManyToOne
Index: src/main/java/com/db/finki/www/build_board/entity/request/ProjectRequests.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/request/ProjectRequests.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/entity/request/ProjectRequests.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -28,8 +28,3 @@
         setCreatedAt(LocalDateTime.now());
     }
-
-    public Feedback getFeedback() {
-        Feedback feedback = getFeedback(); 
-        return feedback == null ? null : feedback;
-    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/thread/BBThread.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/thread/BBThread.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/entity/thread/BBThread.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -43,5 +43,5 @@
     protected Set<BBUser> likes = new HashSet<>();
 
-    private LocalDateTime createdAt;
+    private LocalDateTime createdAt = LocalDateTime.now();
 
     public int getNumLikes(){
Index: src/main/java/com/db/finki/www/build_board/entity/thread/Project.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/thread/Project.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/entity/thread/Project.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -46,5 +46,7 @@
     @OneToMany(mappedBy = "project")
     private Set<ProjectRequests> requests = new HashSet<>();
+
     @OneToMany(mappedBy = "project")
+    @OrderBy("name")
     private Set<Channel> channels;
 
Index: src/main/java/com/db/finki/www/build_board/entity/thread/Topic.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/thread/Topic.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/entity/thread/Topic.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -27,4 +27,6 @@
 
     @Override
-    public String getTypeName() {return "topics";}
+    public String getTypeName() {
+        return "topics";
+    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/thread/discussion_thread/VDiscussion.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/thread/discussion_thread/VDiscussion.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/entity/thread/discussion_thread/VDiscussion.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -12,5 +12,4 @@
 import java.time.LocalDateTime;
 
-//TODO: napraj da izlegvat preku created_at
 @Entity
 @Immutable
Index: src/main/java/com/db/finki/www/build_board/repository/thread/TagRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/thread/TagRepository.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/repository/thread/TagRepository.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -10,3 +10,4 @@
 public interface TagRepository extends JpaRepository<Tag, String> {
     Optional<Tag> findByName(String name);
+    long deleteAllByName(String name); 
 }
Index: src/main/java/com/db/finki/www/build_board/repository/thread/TopicRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/thread/TopicRepository.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/repository/thread/TopicRepository.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -4,4 +4,7 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -11,4 +14,12 @@
     Topic findByTitle(String title);
     void deleteByTitle(String title);
-    Topic findById(long id);;
+    Topic findById(long id);
+
+    @Modifying
+    @Query(value="""
+            delete from thread where id=:id
+            """,
+            nativeQuery = true
+    )
+    void deleteById(@Param("id") Long id); 
 }
Index: src/main/java/com/db/finki/www/build_board/service/search/FilterMap.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/search/FilterMap.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/service/search/FilterMap.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -19,5 +19,5 @@
                 return (root, query, cb) -> null;
             } else {
-                return (root, query, cb) -> cb.like(cb.lower(root.get("title")), "%" + param.toLowerCase() + "%");
+                return (root, query, cb) -> cb.like(cb.lower(root.get("title")),  param.toLowerCase() + "%" );
             }
         });
Index: src/main/java/com/db/finki/www/build_board/service/thread/impl/ProjectService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/thread/impl/ProjectService.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/service/thread/impl/ProjectService.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -36,4 +36,5 @@
 
     public void create(String title, String repoUrl, String description, BBUser user) {
+        title=title.strip();
         projectRepository.save(
                 new Project(title, repoUrl, description, user)
@@ -45,9 +46,10 @@
     }
 
-    public void createTopic(Project project, String title, String description, String username) {
-        BBUser user = ((BBUser) userDetailsService.loadUserByUsername(username));
-        Topic topic = topicService.create(title, description, user);
-        topic.setParent(project);
+    public void createTopic(Project project, String title, String description, BBUser user) {
+        title=title.strip();
+        Topic topic = topicService.create(title, description, user, project);
+
         project.getTopics().add(topic);
+
         projectRepository.save(project);
     }
@@ -77,4 +79,5 @@
 
     public Project update(Project project, String repoUrl, String description, String newTitle) {
+        newTitle=newTitle.strip();
         project.setRepoUrl(repoUrl);
         project.setDescription(description);
Index: src/main/java/com/db/finki/www/build_board/service/thread/impl/TopicServiceImpl.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/thread/impl/TopicServiceImpl.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/service/thread/impl/TopicServiceImpl.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -2,4 +2,5 @@
 
 import com.db.finki.www.build_board.entity.user_type.BBUser;
+import com.db.finki.www.build_board.entity.thread.BBThread;
 import com.db.finki.www.build_board.entity.thread.Tag;
 import com.db.finki.www.build_board.entity.thread.Topic;
@@ -26,7 +27,20 @@
     public Topic create(String title, String description, BBUser user) {
         Topic topic = new Topic();
+        
         topic.setTitle(title);
         topic.setContent(description);
         topic.setUser(user);
+        
+        return topicRepository.save(topic);
+    }
+
+    public Topic create(String title, String description, BBUser user, BBThread parent){
+        Topic topic = new Topic();
+        
+        topic.setTitle(title);
+        topic.setContent(description);
+        topic.setUser(user);
+        topic.setParent(parent);
+
         return topicRepository.save(topic);
     }
@@ -59,5 +73,5 @@
     @Override
     @Transactional
-    public void addTagToTopic(Topic topic, String tagName) {
+    public void addTagToTopic(Topic topic, String tagName, BBUser user) {
         tagRepository.findByName(tagName).ifPresentOrElse(tag -> {
             topic.getTags().add(tag);
@@ -66,5 +80,5 @@
             tagRepository.save(tag);
         },() -> {
-            Tag tag = new Tag(tagName);
+            Tag tag = new Tag(tagName,user);
             tagRepository.save(tag);
             topic.getTags().add(tag);
@@ -75,6 +89,5 @@
 
     @Override
-    public Topic create(long id, String title, String description) {
-        Topic t = getById(id);
+    public Topic edit(Topic t, String title, String description) {
         t.setTitle(title);
         t.setContent(description);
@@ -86,5 +99,5 @@
     public Topic deleteTagFromTopic(long id, String tagName) {
         Topic t = getById(id);
-        boolean removed = t.getTags().remove(new Tag(tagName));
+        boolean removed = t.getTags().removeIf(tag -> tag.getName().equals(tagName));
         if(!removed) throw new IllegalArgumentException("Tag not found");
         return topicRepository.save(t);
Index: src/main/java/com/db/finki/www/build_board/service/thread/itf/TopicService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/thread/itf/TopicService.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/service/thread/itf/TopicService.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -2,4 +2,5 @@
 
 import com.db.finki.www.build_board.entity.user_type.BBUser;
+import com.db.finki.www.build_board.entity.thread.BBThread;
 import com.db.finki.www.build_board.entity.thread.Topic;
 
@@ -7,4 +8,5 @@
 public interface TopicService {
     Topic create(String title, String description, BBUser user);
+    Topic create(String title, String description, BBUser user, BBThread parent); 
     List<Topic> getAll();
     Topic getByTitle(String title);
@@ -12,6 +14,6 @@
     void deleteTopicByTitle(String title);
     Topic getById(Long id);
-    void addTagToTopic(Topic topic, String tagName);
-    Topic create(long id, String title, String description);
+    void addTagToTopic(Topic topic, String tagName, BBUser user);
+    Topic edit(Topic t, String title, String description);
     Topic deleteTagFromTopic(long id, String tagName);
 }
Index: src/main/java/com/db/finki/www/build_board/service/user/BBUserDetailsService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/user/BBUserDetailsService.java	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/java/com/db/finki/www/build_board/service/user/BBUserDetailsService.java	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -29,4 +29,9 @@
 
     public BBUser changeInfoForUserWithUsername(String oldUsername, String newUsername, String email, String name, String description, String password) {
+        oldUsername=oldUsername.strip();
+        newUsername=newUsername.strip();
+        email=email.strip();
+        password=password.strip();
+
         BBUser user = (BBUser) loadUserByUsername(oldUsername);
 
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/resources/application.properties	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -11,3 +11,6 @@
 
 avatar.upload-dir=/uploads/user-avatars
+
+logging.level.org.hibernate.SQL=DEBUG
+logging.level.org.hibernate.orm.jdbc.bind=TRACE
 logging.level.org.springframework.security=DEBUG
Index: src/main/resources/templates/create-topic.html
===================================================================
--- src/main/resources/templates/create-topic.html	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/resources/templates/create-topic.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -6,4 +6,15 @@
   <title>Add Topic</title>
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+  <style>
+    .error-bubble {
+        display: inline-block;
+        background-color: #dc3545; /* Bootstrap danger color */
+        color: white;
+        padding: 10px 15px;
+        border-radius: 20px;
+        font-weight: bold;
+        box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.2);
+    }
+</style>
 </head>
 <body>
@@ -30,4 +41,10 @@
     </div>
   </div>
+  <div class=" w-100 d-flex justify-content-center align-items-center mt-3">
+    <div th:if="${errMsg!=null}" class="error-bubble">
+      <h5 class="text-center">Error</h5>
+      <p th:text="${errMsg}" class="mb-0"></p>
+    </div>
+  </div>
 </main>
 
Index: src/main/resources/templates/fragments/discussion.html
===================================================================
--- src/main/resources/templates/fragments/discussion.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
+++ src/main/resources/templates/fragments/discussion.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -0,0 +1,39 @@
+<div th:fragment="discussion(reply)" class="card-header bg-light d-flex justify-content-between align-items-center"
+    th:id="${reply.getId() + '/' + reply.getUser().getUsername()}">
+    <div class="d-flex align-items-center w-100">
+        <img th:src="${reply.getAvatarUrl()}" alt="Profile Picture" id="profileImage"
+            class="rounded-circle border border-1 border-info me-3"
+            style="width: 3rem; height: 3rem; object-fit: cover; vertical-align: middle;">
+        <span th:text="${reply.getUser().getUsername()}">Reply Author</span>
+        <span class="ms-auto text-muted d-flex align-items-center">
+            <i class="bi bi-arrow-return-right me-2"></i>
+            <strong th:text="'Replying to:  ' + ${reply.getDiscussion().getParent().getUser().getUsername()}"></strong>
+        </span>
+
+    </div>
+    <div th:if="${session.user != null && session.user.getId() == reply.getUser().getId()}"
+        class="ms-5 d-flex align-items-center justify-content-between">
+
+        <div>
+            <button class="btn btn-warning btn-sm edit-reply-btn"
+                th:attr="data-reply-id=${reply.getDiscussion().getId()}">Edit
+            </button>
+
+        </div>
+
+        <div>
+            <form th:action="@{/topics/{topic-name}/discussions/{discussionId}/delete(topic-name=${topic.getTitle()
+           },discussionId=${reply.getId()})}" method="post">
+                <input type="hidden" name="threadId" th:value="${reply.getDiscussion().getId()}" class="w-0">
+                <button class="btn btn-danger btn-sm edit-delete-btn ms-2"
+                    th:attr="data-reply-id=${reply.getDiscussion().getId()}">Delete
+                </button>
+                <input th:if="${session.user!=null}" type="hidden" name="username"
+                    th:value="${session.user.username}" />
+            </form>
+        </div>
+    </div>
+    <div th:each="child:${reply.getChildren()}">
+        <div th:reaplce="/fragments/discussion :: discussion(child)"></div>
+    </div>
+</div>
Index: src/main/resources/templates/project_pages/project-create.html
===================================================================
--- src/main/resources/templates/project_pages/project-create.html	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/resources/templates/project_pages/project-create.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -6,8 +6,24 @@
     <title th:text="${isCreatingProject==null} ? 'Modify Project' : 'Add Project' ">Add project</title>
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+    <style>
+         .error-bubble {
+        display: inline-block;
+        background-color: #dc3545; /* Bootstrap danger color */
+        color: white;
+        padding: 10px 15px;
+        border-radius: 20px;
+        font-weight: bold;
+        box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.2);
+    }
+    </style>
 </head>
 <body>
 <div th:replace="/home_pages/home :: navigation"></div>
-
+<div class="w-100 d-flex justify-content-center align-items-center mt-3">
+    <div th:if="${errMsg!=null}" class="error-bubble">
+      <h5 class="text-center">Error</h5>
+      <p th:text="${errMsg}" class="mb-0"></p>
+    </div>
+  </div>
 <main class="container mt-5">
     <div class="card shadow-sm">
Index: src/main/resources/templates/project_pages/requests/show-user-requests.html
===================================================================
--- src/main/resources/templates/project_pages/requests/show-user-requests.html	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/resources/templates/project_pages/requests/show-user-requests.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -11,5 +11,5 @@
 </header>
 <section class="d-flex mt-3 flex-column w-100 align-items-center mt-5">
-    <form method="get" th:action="@{/{username}/requests(pr-title=${user.getUsername()})}"
+    <form method="get" th:action="@{/{username}/project-requests(username=${user.getUsername()})}"
           class="d-flex flex-row gap-2 align-items-center"
           style="width:fit-content">
Index: src/main/resources/templates/project_pages/show-project.html
===================================================================
--- src/main/resources/templates/project_pages/show-project.html	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/resources/templates/project_pages/show-project.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -6,7 +6,24 @@
     <title th:text="${project.getTitle()}"></title>
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+    <style>
+        .error-bubble {
+       display: inline-block;
+       background-color: #dc3545; /* Bootstrap danger color */
+       color: white;
+       padding: 10px 15px;
+       border-radius: 20px;
+       font-weight: bold;
+       box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.2);
+   }
+   </style>
 </head>
 <body>
 <div th:replace="/home_pages/home :: navigation"></div>
+<div class="w-100 d-flex justify-content-center align-items-center mt-3">
+    <div th:if="${errMsg!=null}" class="error-bubble">
+      <h5 class="text-center">Error</h5>
+      <p th:text="${errMsg}" class="mb-0"></p>
+    </div>
+  </div>
 
 <main th:with="isManager=${session.user != null ?  session.user.getId()==project.getUser().getId() : false }"
Index: src/main/resources/templates/show-topic.html
===================================================================
--- src/main/resources/templates/show-topic.html	(revision 65be7385124393e3dc7c1c69d05a3828009c1323)
+++ src/main/resources/templates/show-topic.html	(revision 2a91cb08080125091e2339b8c4e8ef480b4bc5dc)
@@ -20,11 +20,23 @@
             line-height: 1.2;
         }
+        .error-bubble {
+        display: inline-block;
+        background-color: #dc3545; /* Bootstrap danger color */
+        color: white;
+        padding: 10px 15px;
+        border-radius: 20px;
+        font-weight: bold;
+        box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.2);
+    }
     </style>
-
-
 </head>
 <body>
 <div th:replace="/home_pages/home :: navigation"></div>
-
+<div class="mt-3 w-100 d-flex justify-content-center align-items-center">
+    <div th:if="${errMsg!=null}" class="error-bubble">
+        <h5 class="text-center">Error</h5>
+        <p th:text="${errMsg}" class="mb-0"></p>
+    </div>
+</div>
 <main class="container mt-5">
     <!-- Topic Title and Description -->
