Index: docs/todo.txt
===================================================================
--- docs/todo.txt	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ docs/todo.txt	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -26,4 +26,9 @@
 - Izveden atribut status za developer (normal user, incative developer,active developer)
 - Paginacija
+- rename iminja na branch od _ vo -
+- SITE DESCRIPTIONS VO SQL DA SA TEXT ne varchar
+- erot menvenje !!!!
+
+---------------
 
 
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 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/config/WebSecurityConfig.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -8,4 +8,5 @@
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
 import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@@ -20,4 +21,5 @@
 @Configuration
 @EnableWebSecurity
+@EnableMethodSecurity
 public class WebSecurityConfig {
 
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 db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/java/com/db/finki/www/build_board/controller/ExceptionHandler.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,44 @@
+package com.db.finki.www.build_board.controller;
+
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.HttpServerErrorException;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.NoHandlerFoundException;
+import org.springframework.web.servlet.resource.NoResourceFoundException;
+
+@ControllerAdvice
+public class ExceptionHandler {
+
+    private ModelAndView mavBuilder(Exception exception,String message,int status) {
+        ModelAndView mav = new ModelAndView("/error_pages/error");
+        mav.addObject("exception",exception);
+        mav.addObject("message",message);
+        mav.addObject("status",status);
+        return mav;
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(value = { AccessDeniedException.class })
+    public ModelAndView handleForbidden(AccessDeniedException exception) {
+        return mavBuilder(exception,"You requested a resource that you do not have permission to access.",403);
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(value = {NoResourceFoundException.class })
+   public ModelAndView handleNotFound(NoResourceFoundException exception) {
+        return mavBuilder(exception,"You requested a resource that does not exist.\nCheck if you entered the url correctly.",404);
+    }
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(value = {HttpServerErrorException.InternalServerError.class })
+    public ModelAndView handleNotFound(HttpServerErrorException.InternalServerError exception) {
+        return mavBuilder(exception,"This is a server issue.\nNot your fault :).",500);
+    }
+
+
+    @org.springframework.web.bind.annotation.ExceptionHandler(value = {Exception.class })
+    public ModelAndView handleNotFound(Exception exception) {
+        return mavBuilder(exception,"Unknown exception",-1);
+    }
+
+
+}
Index: src/main/java/com/db/finki/www/build_board/controller/channels/ChannelController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/channels/ChannelController.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/java/com/db/finki/www/build_board/controller/channels/ChannelController.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,60 @@
+package com.db.finki.www.build_board.controller.channels;
+
+import com.db.finki.www.build_board.entity.channels.Channel;
+import com.db.finki.www.build_board.entity.threads.Project;
+import com.db.finki.www.build_board.entity.user_types.BBUser;
+import com.db.finki.www.build_board.service.channel.ChannelService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.parameters.P;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/project/{title}/channels")
+public class ChannelController {
+    private final ChannelService channelService;
+
+    public ChannelController(ChannelService channelService) {
+        this.channelService = channelService;
+    }
+
+    @GetMapping()
+    public String getChannels(@PathVariable("title") Project project,Model model) {
+        List<Channel> channels = channelService.getAllChannelsForProject(project);
+        model.addAttribute("channels", channels);
+        return "channels/list-channels";
+    }
+
+    @GetMapping("/{channelName}")
+    public String getChannel(@PathVariable String channelName, @PathVariable("title") Project project, Model model, RedirectAttributes redirectAttributes) {
+        Channel c = (Channel) redirectAttributes.getAttribute("channel");
+        if (c == null) {
+            c = channelService.getByNameAndProject(channelName, project);
+            model.addAttribute("channel", c);
+        } else {
+            model.addAttribute("channel", c);
+        }
+
+        return "channels/view-channel";
+    }
+    @PreAuthorize("@channelService.getByNameAndProject(#channelName,#project).getDeveloper().equals(#user)")
+    @PostMapping("/{channelName}/delete")
+    public String deleteChannel(@PathVariable @P("channelName") String channelName, @PathVariable("title") @P("project") Project project,
+                                @SessionAttribute @P("user") BBUser user, RedirectAttributes redirectAttributes) {
+        channelService.deleteChannel(channelName, project);
+        return "redirect:/project/"+project.getTitle()+"/channels";
+    }
+
+    @PreAuthorize("#project.getDevelopers().contains(#user)")
+    @PostMapping("/add")
+    public String add(@PathVariable("title") @P("project") Project project, String channelName, String description, @SessionAttribute @P("user") BBUser user, RedirectAttributes redirectAttributes) {
+        Channel channel = channelService.create(project, channelName, description, user);
+        redirectAttributes.addFlashAttribute("channel", channel);
+        return "redirect:/project/" + project.getTitle() + "/channels/" + channel.getName();
+    }
+
+}
Index: src/main/java/com/db/finki/www/build_board/controller/home_pages/UserProfileController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/home_pages/UserProfileController.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/controller/home_pages/UserProfileController.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -6,4 +6,5 @@
 import jakarta.servlet.http.HttpSession;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -36,11 +37,11 @@
     }
 
-    @PreAuthorize("requestedByUsername==username")
+    @PreAuthorize("#requestedByUsername==#username")
     @PostMapping("/upload-avatar")
     public String uploadAvatar(Model model,
-                               @PathVariable String username,
+                               @PathVariable @P("username") String username,
                                @RequestParam MultipartFile userImage,
                                RedirectAttributes redirectAttributes,
-                               @RequestParam(name = "cur_user_username") String requestedByUsername
+                               @RequestParam(name = "cur_user_username") @P("requestedByUsername") String requestedByUsername
     ) {
         BBUser u = (BBUser) userService.loadUserByUsername(username);
@@ -56,5 +57,5 @@
     }
 
-    @PreAuthorize("requestedByUsername==oldUsername")
+    @PreAuthorize("#requestedByUsername==#oldUsername")
     @PostMapping("/profile/change")
     public String changeInfo(
@@ -62,7 +63,7 @@
             @RequestParam String name,
             @RequestParam String description,
-            @PathVariable(name = "username") String oldUsername,
+            @PathVariable(name = "username") @P("oldUsername") String oldUsername,
             @RequestParam(name = "username") String newUsername,
-            @RequestParam(name = "cur_user_username") String requestedByUsername,
+            @RequestParam(name = "cur_user_username") @P("requestedByUsername") String requestedByUsername,
             @RequestParam String password,
             HttpSession session
Index: src/main/java/com/db/finki/www/build_board/controller/thread_controllers/ProjectController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controllers/ProjectController.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controllers/ProjectController.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -8,4 +8,5 @@
 import org.hibernate.Hibernate;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -69,11 +70,11 @@
     }
 
-    @PreAuthorize("project.getUser().username.equals(username)")
+    @PreAuthorize("#project.getUser().getUsername().equals(#username)")
     @PostMapping("/{title}/modify")
     public String modifyProject(
-            @PathVariable(name = "title") Project project,
+            @PathVariable(name = "title") @P("project") Project project,
             @RequestParam(name = "title") String newTitle,
             @RequestParam(name = "repo_url") String repoUrl,
-            @RequestParam String username,
+            @RequestParam @P("username") String username,
             @RequestParam String description
     ){
@@ -92,11 +93,11 @@
     }
 
-    @PreAuthorize("project.getUser().username.equals(username)")
+    @PreAuthorize("#project.getUser().getUsername().equals(#username)")
     @PostMapping("/topic/add")
     public String addTopic(
-            @RequestParam(name = "project_title") Project project,
+            @RequestParam(name = "project_title") @P("project") Project project,
             @RequestParam(name = "title") String topicsTitle,
             @RequestParam String description,
-            @RequestParam String username
+            @RequestParam @P("username") String username
     ){
         projectService.addToProjecNewTopic(project,topicsTitle,description,username);
@@ -104,9 +105,9 @@
     }
 
-    @PreAuthorize("project.getUser().username.equals(username)")
+    @PreAuthorize("#project.getUser().username.equals(#username)")
     @PostMapping("/delete/*")
     public String delete(
-            @RequestParam(name = "id") Project project,
-            @RequestParam String username
+            @RequestParam(name = "id") @P("project") Project project,
+            @RequestParam @P("username") String username
     ) {
         projectService.delete(project);
Index: src/main/java/com/db/finki/www/build_board/controller/thread_controllers/TagController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controllers/TagController.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controllers/TagController.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -8,4 +8,5 @@
 import jakarta.servlet.http.HttpSession;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -27,10 +28,10 @@
     }
 
-    @PreAuthorize("@topicServiceImpl.getById(id).user.username==username")
+    @PreAuthorize("@topicServiceImpl.getById(#id).getUser().getUsername().equals(#username)")
     @PostMapping("/topic/add-tag/{id}")
-    public String addTagToTopic(@PathVariable(name = "id") long id,
+    public String addTagToTopic(@PathVariable(name = "id") @P("id") long id,
                          @RequestParam String tagName,
                          HttpSession session,
-                         String username,
+                         @P("username") String username,
                          Model model) {
         Topic t = topicService.getById(id);
@@ -41,7 +42,7 @@
     }
 
-    @PreAuthorize("@topicServiceImpl.getById(topicId).user.username==username")
+    @PreAuthorize("@topicServiceImpl.getById(#topicId).getUser().getUsername()==#username")
     @PostMapping("/topic/delete-tag/{topicId}/{tagName}")
-    public String deleteTagTopic(@PathVariable long topicId, @PathVariable String tagName, Model model, @RequestParam String username) {
+    public String deleteTagTopic(@PathVariable @P("topicId") long topicId, @PathVariable String tagName, Model model, @RequestParam @P("username") String username) {
         Topic t = topicService.deleteTagFromTopic(topicId, tagName);
         model.addAttribute("topic", t);
@@ -50,10 +51,10 @@
     }
 
-    @PreAuthorize("project.getUser().username==username")
+    @PreAuthorize("#project.getUser().getUsername()==#username")
     @PostMapping("/project/{title}/add-tag")
     public String addTagToProject(
-            @PathVariable(name="title") Project project,
+            @PathVariable(name="title") @P("project") Project project,
             @RequestParam(name = "tagName") String tagName,
-            @RequestParam String username
+            @RequestParam @P("username") String username
     )
     {
@@ -62,10 +63,10 @@
     }
 
-    @PreAuthorize("project.getUser().getUsername().equals(username)")
+    @PreAuthorize("#project.getUser().getUsername().equals(#username)")
     @PostMapping("/project/delete-tag/{projectTitle}/{tagName}")
     public String deleteTagProject(
-            @PathVariable(name = "projectTitle") Project project,
+            @PathVariable(name = "projectTitle") @P("project") Project project,
             @PathVariable String tagName,
-            @RequestParam String username
+            @RequestParam @P("username") String username
     ){
         projectService.removeTagFromProject(project,tagName);
Index: src/main/java/com/db/finki/www/build_board/controller/thread_controllers/TopicController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controllers/TopicController.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controllers/TopicController.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -9,4 +9,5 @@
 import jakarta.servlet.http.HttpSession;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -51,14 +52,14 @@
     }
 
-    @PreAuthorize("@topicServiceImpl.getById(id).user.username==username")
+    @PreAuthorize("@topicServiceImpl.getById(#id).getUser().getUsername().equals(#username)")
     @PostMapping("/delete/{id}")
-    public String deleteTopic(@PathVariable(name = "id") long id, HttpSession session, @RequestParam String username) {
+    public String deleteTopic(@PathVariable(name = "id") @P("id") long id, HttpSession session, @RequestParam @P("username") String username) {
         topicService.deleteTopicById(id);
         return "redirect:/";
     }
 
-    @PreAuthorize("@topicServiceImpl.getById(id).user.username==username")
+    @PreAuthorize("@topicServiceImpl.getById(#id).getUser().getUsername().equals(#username)")
     @PostMapping("/edit/{id}")
-    public String editTopic(@PathVariable long id, @RequestParam String title, @RequestParam String content, Model model, @RequestParam String username) {
+    public String editTopic(@PathVariable @P("id") long id, @RequestParam String title, @RequestParam String content, Model model, @RequestParam @P("username")String username) {
         Topic t = topicService.save(id, title, content);
         model.addAttribute("topic", t);
Index: src/main/java/com/db/finki/www/build_board/entity/channels/Channel.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/channels/Channel.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/entity/channels/Channel.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -5,5 +5,7 @@
 import com.db.finki.www.build_board.entity.user_types.Developer;
 import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
@@ -13,4 +15,6 @@
 @Setter
 @IdClass(ChannelId.class)
+@AllArgsConstructor
+@NoArgsConstructor
 public class Channel {
 
Index: src/main/java/com/db/finki/www/build_board/entity/compositeId/ChannelId.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/compositeId/ChannelId.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/entity/compositeId/ChannelId.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -1,5 +1,7 @@
 package com.db.finki.www.build_board.entity.compositeId;
 
+import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -8,4 +10,6 @@
 @Getter
 @Service
+@AllArgsConstructor
+@NoArgsConstructor
 public class ChannelId {
     private int project;
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 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/entity/user_types/BBUser.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -72,5 +72,6 @@
     @Override
     public boolean equals(Object other){
-        if(!other.getClass().equals(this.getClass())){
+        System.out.println("VLEZE EQUALS");
+        if(!(other instanceof BBUser)){
             return false;
         }
Index: src/main/java/com/db/finki/www/build_board/entity/user_types/Developer.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/user_types/Developer.java	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/java/com/db/finki/www/build_board/entity/user_types/Developer.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -13,3 +13,4 @@
 @NoArgsConstructor
 public class Developer extends BBUser{
+
 }
Index: src/main/java/com/db/finki/www/build_board/repository/DeveloperRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/DeveloperRepository.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/java/com/db/finki/www/build_board/repository/DeveloperRepository.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,10 @@
+package com.db.finki.www.build_board.repository;
+
+import com.db.finki.www.build_board.entity.user_types.Developer;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DeveloperRepository extends JpaRepository<Developer, Integer> {
+    Developer findById(int id);
+}
Index: src/main/java/com/db/finki/www/build_board/repository/channel/ChannelRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/channel/ChannelRepository.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/java/com/db/finki/www/build_board/repository/channel/ChannelRepository.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,15 @@
+package com.db.finki.www.build_board.repository.channel;
+
+import com.db.finki.www.build_board.entity.channels.Channel;
+import com.db.finki.www.build_board.entity.compositeId.ChannelId;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ChannelRepository extends JpaRepository<Channel, ChannelId> {
+    List<Channel> findAllByProjectId(Integer projectId);
+    List<Channel> findAllByDeveloperId(Integer developerId);
+    Channel findByProjectTitleAndName(String title, String name);
+}
Index: src/main/java/com/db/finki/www/build_board/service/channel/ChannelService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/channel/ChannelService.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/java/com/db/finki/www/build_board/service/channel/ChannelService.java	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,42 @@
+package com.db.finki.www.build_board.service.channel;
+
+import com.db.finki.www.build_board.entity.channels.Channel;
+import com.db.finki.www.build_board.entity.compositeId.ChannelId;
+import com.db.finki.www.build_board.entity.threads.Project;
+import com.db.finki.www.build_board.entity.user_types.BBUser;
+import com.db.finki.www.build_board.entity.user_types.Developer;
+import com.db.finki.www.build_board.repository.DeveloperRepository;
+import com.db.finki.www.build_board.repository.channel.ChannelRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ChannelService {
+    private final ChannelRepository channelRepository;
+    private final DeveloperRepository developerRepository;
+
+    public ChannelService(ChannelRepository channelRepository, DeveloperRepository developerRepository) {
+        this.channelRepository = channelRepository;
+        this.developerRepository = developerRepository;
+    }
+
+    public List<Channel> getAllChannelsForProject(Project project) {
+        return channelRepository.findAllByProjectId(project.getId());
+    }
+
+    public Channel create(Project project, String channelName, String description, BBUser user){
+        Developer developer = developerRepository.findById(user.getId());
+        Channel channel = new Channel(channelName,project,description,developer);
+        return channelRepository.save(channel);
+    }
+    public Channel getByNameAndProject(String channelName, Project project){
+        return channelRepository.findByProjectTitleAndName(project.getTitle(), channelName);
+    }
+    public void deleteChannel(String channelName,Project project){
+        ChannelId cid = new ChannelId(project.getId(), channelName);
+        channelRepository.deleteById(cid);
+    }
+
+
+}
Index: src/main/resources/db/migration/V1__init_ddl.sql
===================================================================
--- src/main/resources/db/migration/V1__init_ddl.sql	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/resources/db/migration/V1__init_ddl.sql	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -174,4 +174,10 @@
         REFERENCES project_roles (name, project_id) ON DELETE CASCADE
 );
+
+
+create table submission(
+    id serial primary key
+);
+
 CREATE TYPE status AS ENUM ('ACCEPTED', 'DENIED', 'PENDING');
 CREATE TABLE project_request
@@ -181,10 +187,24 @@
     status      status                     NOT NULL,
     user_id     INT REFERENCES users (id)  ON DELETE CASCADE NOT NULL ,
-    project_id  INT REFERENCES thread (id) ON DELETE CASCADE NOT NULL
-);
+    project_id  INT REFERENCES thread (id) ON DELETE CASCADE NOT NULL,
+    created_at timestamp default now(),
+    submission_id int references submission(id)
+);
+
+-- todo trigger pred kreiranje project request ili report ke kreirat submission
+
+create table feedback (
+    description TEXT,
+    submission_type varchar(1),
+    created_by int references users(id),
+    created_at timestamp default now(),
+    submission_id int references submission(id)
+
+);
+
 CREATE TABLE report
 (
     id          SERIAL,
-    created_at  TIMESTAMP,
+    created_at  TIMESTAMP default now(),
     description VARCHAR(200) NOT NULL,
     status      status,
@@ -192,4 +212,5 @@
     for_user_id INT REFERENCES users (id) on delete cascade,
     by_user_id  INT REFERENCES users (id) on delete cascade,
+    submission_id int references submission(id),
     PRIMARY KEY (id, thread_id, for_user_id, by_user_id)
 );
Index: src/main/resources/db/migration/V2__add_test_data.sql
===================================================================
--- src/main/resources/db/migration/V2__add_test_data.sql	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/resources/db/migration/V2__add_test_data.sql	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -106,5 +106,5 @@
 INSERT INTO channel (name, description, project_id, developer_id)
 VALUES
-    ('General', 'General discussion channel', 5, 2),
+    ('General', 'General discussion channel', 5, 1),
     ('Updates', 'Project updates channel', 5, 3);
 
Index: src/main/resources/static/css/icon.css
===================================================================
--- src/main/resources/static/css/icon.css	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/resources/static/css/icon.css	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,18 @@
+.icon-small{
+    width: 3rem;
+    height: 3rem;
+    object-fit: cover;
+    vertical-align: middle;
+}
+.icon-medium{
+    width: 4rem;
+    height: 4rem;
+    object-fit: cover;
+    vertical-align: middle;
+}
+.icon-big{
+    width: 15rem;
+    height: 15rem;
+    object-fit: cover;
+    vertical-align: middle;
+}
Index: src/main/resources/templates/channels/list-channels.html
===================================================================
--- src/main/resources/templates/channels/list-channels.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/resources/templates/channels/list-channels.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>All Channels</title>
+</head>
+<body>
+<div >
+    <ul th:each="channel : ${channels}">
+        <li th:text="${channel.getName()}"></li>
+    </ul>
+</div>
+</body>
+</html>
Index: src/main/resources/templates/channels/view-channel.html
===================================================================
--- src/main/resources/templates/channels/view-channel.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/resources/templates/channels/view-channel.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Channel</title>
+</head>
+<body>
+<h1 th:text="${channel.getName()}"></h1>
+<form th:action="@{/project/{projectTitle}/channels/{channelName}/delete (projectTitle=${channel.getProject().getTitle()},channelName=${channel.getName()})}" method="post">
+    <button type="submit"> Delete</button>
+</form>
+
+</body>
+</html>
Index: src/main/resources/templates/error_pages/error.html
===================================================================
--- src/main/resources/templates/error_pages/error.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
+++ src/main/resources/templates/error_pages/error.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Error</title>
+    <link rel="stylesheet" href="/css/icon.css">
+    <!-- Bootstrap CSS -->
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+</head>
+<body class="bg-light d-flex flex-column align-items-center justify-content-center" style="min-height: 100vh;">
+<img src="/favicon.ico" alt="logo" class="icon-big rounded-circle border border-info my-5">
+<div class="w-75 card shadow-lg text-center p-4">
+    <div class="card-body">
+        <h1 class="display-4 text-danger">Error</h1>
+        <hr>
+        <p class="d-flex flex-column justify-content-center align-items-center">
+            <span class="text-danger fs-3" th:text="${status}"></span>
+            <span class="text-primary fs-5" th:text="${exception.getMessage()}"></span>
+        </p>
+        <hr>
+        <p th:text="${message}" class="text-muted">Description</p>
+        <a href="/" class="btn btn-primary mt-3">Back to Home</a>
+    </div>
+</div>
+
+<!-- Bootstrap JS -->
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
+</body>
+</html>
Index: src/main/resources/templates/home_pages/home.html
===================================================================
--- src/main/resources/templates/home_pages/home.html	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/resources/templates/home_pages/home.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -38,4 +38,8 @@
 <nav th:fragment="navigation" class="navbar navbar-expand-lg navbar-light bg-light shadow-sm">
     <div class="container">
+        <img src="/favicon.ico" alt="logo"
+             class="rounded-circle border border-secondary me-5"
+             style="width: 4rem; height: 4rem; object-fit: contain; vertical-align: center;"
+        >
         <a class="navbar-brand" href="/">BuildBoard</a>
         <button class="navbar-toggler w-25" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
Index: src/main/resources/templates/project_pages/show-project.html
===================================================================
--- src/main/resources/templates/project_pages/show-project.html	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/resources/templates/project_pages/show-project.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -108,4 +108,5 @@
                             <!--            <small th:text="${thread.getAuthor()}">Posted by Author</small>-->
                         </div>
+                        <button> Add Channel </button>
                     </div>
                 </div>
Index: src/main/resources/templates/show-topic.html
===================================================================
--- src/main/resources/templates/show-topic.html	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ src/main/resources/templates/show-topic.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -129,5 +129,5 @@
                 <img th:src="${reply.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;">
+                     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">
Index: target/classes/db/migration/V1__init_ddl.sql
===================================================================
--- target/classes/db/migration/V1__init_ddl.sql	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ target/classes/db/migration/V1__init_ddl.sql	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -174,4 +174,10 @@
         REFERENCES project_roles (name, project_id) ON DELETE CASCADE
 );
+
+
+create table submission(
+    id serial primary key
+);
+
 CREATE TYPE status AS ENUM ('ACCEPTED', 'DENIED', 'PENDING');
 CREATE TABLE project_request
@@ -181,10 +187,24 @@
     status      status                     NOT NULL,
     user_id     INT REFERENCES users (id)  ON DELETE CASCADE NOT NULL ,
-    project_id  INT REFERENCES thread (id) ON DELETE CASCADE NOT NULL
-);
+    project_id  INT REFERENCES thread (id) ON DELETE CASCADE NOT NULL,
+    created_at timestamp default now(),
+    submission_id int references submission(id)
+);
+
+-- todo trigger pred kreiranje project request ili report ke kreirat submission
+
+create table feedback (
+    description TEXT,
+    submission_type varchar(1),
+    created_by int references users(id),
+    created_at timestamp default now(),
+    submission_id int references submission(id)
+
+);
+
 CREATE TABLE report
 (
     id          SERIAL,
-    created_at  TIMESTAMP,
+    created_at  TIMESTAMP default now(),
     description VARCHAR(200) NOT NULL,
     status      status,
@@ -192,4 +212,5 @@
     for_user_id INT REFERENCES users (id) on delete cascade,
     by_user_id  INT REFERENCES users (id) on delete cascade,
+    submission_id int references submission(id),
     PRIMARY KEY (id, thread_id, for_user_id, by_user_id)
 );
Index: target/classes/db/migration/V2__add_test_data.sql
===================================================================
--- target/classes/db/migration/V2__add_test_data.sql	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ target/classes/db/migration/V2__add_test_data.sql	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -106,5 +106,5 @@
 INSERT INTO channel (name, description, project_id, developer_id)
 VALUES
-    ('General', 'General discussion channel', 5, 2),
+    ('General', 'General discussion channel', 5, 1),
     ('Updates', 'Project updates channel', 5, 3);
 
Index: target/classes/templates/home_pages/home.html
===================================================================
--- target/classes/templates/home_pages/home.html	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ target/classes/templates/home_pages/home.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -38,4 +38,8 @@
 <nav th:fragment="navigation" class="navbar navbar-expand-lg navbar-light bg-light shadow-sm">
     <div class="container">
+        <img src="/favicon.ico" alt="logo"
+             class="rounded-circle border border-secondary me-5"
+             style="width: 4rem; height: 4rem; object-fit: contain; vertical-align: center;"
+        >
         <a class="navbar-brand" href="/">BuildBoard</a>
         <button class="navbar-toggler w-25" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
Index: target/classes/templates/project_pages/show-project.html
===================================================================
--- target/classes/templates/project_pages/show-project.html	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ target/classes/templates/project_pages/show-project.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -108,4 +108,5 @@
                             <!--            <small th:text="${thread.getAuthor()}">Posted by Author</small>-->
                         </div>
+                        <button> Add Channel </button>
                     </div>
                 </div>
Index: target/classes/templates/show-topic.html
===================================================================
--- target/classes/templates/show-topic.html	(revision 11b8b1cf9ac55a7b9f5090981a1706c178bae03e)
+++ target/classes/templates/show-topic.html	(revision db0d3dfcad2dd612677f30fc616756d0b47702e8)
@@ -129,5 +129,5 @@
                 <img th:src="${reply.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;">
+                     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">
