diff --git a/README.md b/README.md
index 53af6cf6c531a328fa4f5ff85e0c4bc46ad3c54a..5fae8e81c19fb79afaf82459b9aad305626770bb 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Articleprocessor GROBID version 1.0 
 
-- The main program runs at : *http://localhost:8080/api/grobid/upload*
+- The main program runs at : *http://localhost:8080/upload* or  *http://localhost:8080*
 - H2 database can be found on : *http://localhost:8080/h2-console/login.jsp?jsessionid=9af0ea4b83284ff0a4574769b0336943*
 - Password for the DBS can be found in : `resources/application.properties`
 - GROBID server available on address *http://158.196.98.65:8080/* at university network
diff --git a/data/demo.mv.db b/data/demo.mv.db
index cdc1df6ef55c635c76b86ef4d112f3c653d51549..53e4acaf43988a7bf54f4217885dc9ae2549665d 100644
Binary files a/data/demo.mv.db and b/data/demo.mv.db differ
diff --git a/data/demo.trace.db b/data/demo.trace.db
index de95b7428015061cb9a0889ca92dfcc37f4ad17b..bfff73f89d0b4a7472efd180b2cfc24560fbe703 100644
--- a/data/demo.trace.db
+++ b/data/demo.trace.db
@@ -676,3 +676,65 @@ Wrong user name or password [28000-232]
 	at org.h2.message.DbException.getJdbcSQLException(DbException.java:522)
 	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
 	... 50 more
+2025-04-25 19:03:53.157120+02:00 database: wrong user or password; user: "SA"
+org.h2.message.DbException: Nesprávne používateľské meno alebo heslo
+Wrong user name or password [28000-232]
+	at org.h2.message.DbException.get(DbException.java:223)
+	at org.h2.message.DbException.get(DbException.java:199)
+	at org.h2.message.DbException.get(DbException.java:188)
+	at org.h2.engine.Engine.openSession(Engine.java:154)
+	at org.h2.engine.Engine.openSession(Engine.java:222)
+	at org.h2.engine.Engine.createSession(Engine.java:201)
+	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:344)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
+	at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:291)
+	at org.h2.server.web.WebServer.getConnection(WebServer.java:811)
+	at org.h2.server.web.WebApp.login(WebApp.java:1038)
+	at org.h2.server.web.WebApp.process(WebApp.java:226)
+	at org.h2.server.web.WebApp.processRequest(WebApp.java:176)
+	at org.h2.server.web.JakartaWebServlet.doGet(JakartaWebServlet.java:129)
+	at org.h2.server.web.JakartaWebServlet.doPost(JakartaWebServlet.java:166)
+	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
+	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
+	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
+	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
+	at java.base/java.lang.Thread.run(Thread.java:1575)
+Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Nesprávne používateľské meno alebo heslo
+Wrong user name or password [28000-232]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:522)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
+	... 50 more
+2025-04-25 20:50:38.587546+02:00 jdbc[3]: exception
+org.h2.jdbc.JdbcSQLDataException: Hodnota je príliš dlhá pre stĺpec "TITLE CHARACTER VARYING(255)": "'He received the PhD degree from the National University of Singapore and his ad... (448)"
+Value too long for column "TITLE CHARACTER VARYING(255)": "'He received the PhD degree from the National University of Singapore and his ad... (448)"; SQL statement:
+insert into documents (abstract_text,category_id,content,doi,publication_year,publisher,status,target,title,id) values (?,?,?,?,?,?,?,?,?,default) [22001-232]
diff --git a/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java b/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java
index 548225f11197a1953683107783e5491efcfd4dd3..c3fd1d863ecd9d52b02797d22c9b171c97ae9588 100644
--- a/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java
+++ b/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java
@@ -2,15 +2,20 @@ package com.dre0059.articleprocessor.controller;
 
 import com.dre0059.articleprocessor.GrobidClient;
 import com.dre0059.articleprocessor.model.Dokument;
+import com.dre0059.articleprocessor.model.Tag;
+import com.dre0059.articleprocessor.repository.TagRepository;
 import com.dre0059.articleprocessor.service.CategoryService;
 import com.dre0059.articleprocessor.service.HeaderService;
 import com.dre0059.articleprocessor.service.ReferenceService;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -29,6 +34,7 @@ public class FileUploadController {
     private final ReferenceService referenceService;
     private final CategoryService categoryService;
 
+
     public FileUploadController(GrobidClient grobidClient, HeaderService headerService, ReferenceService referenceService, CategoryService categoryService) {
         this.grobidClient = grobidClient;
         this.headerService = headerService;
@@ -45,7 +51,11 @@ public class FileUploadController {
 
     @PostMapping("/api/upload")
     @ResponseBody
-    public ResponseEntity<?> handleFileUpload(@RequestParam("file") MultipartFile file, @RequestParam("categoryId") String categoryId) {
+    public ResponseEntity<?> handleFileUpload(
+            @RequestParam("file") MultipartFile file,
+            @RequestParam("categoryId") String categoryId,
+            @RequestParam("tags") List<String> tags) {
+
         if (file.isEmpty()) {
             return ResponseEntity.badRequest().body("No file uploaded!");
         }
@@ -68,7 +78,7 @@ public class FileUploadController {
             String references = grobidClient.processReferences(tmpFile);
             //System.out.println("GROBID Reference processed: " + references);
 
-            Dokument savedDocument = headerService.processHeader(header, categoryId, tmpFile);
+            Dokument savedDocument = headerService.processHeader(header, categoryId, tags, tmpFile);
             //System.out.println("Header saved to database.");
 
             referenceService.extractReferences(references);
diff --git a/src/main/java/com/dre0059/articleprocessor/controller/TagController.java b/src/main/java/com/dre0059/articleprocessor/controller/TagController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7893b9bee8409ab704951db1ca7be6d5a73ad2d
--- /dev/null
+++ b/src/main/java/com/dre0059/articleprocessor/controller/TagController.java
@@ -0,0 +1,31 @@
+package com.dre0059.articleprocessor.controller;
+
+import com.dre0059.articleprocessor.repository.TagRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/api")
+public class TagController {
+    //@Autowired
+    private final TagRepository tagRepository;
+
+   public TagController(TagRepository tagRepository) {
+       this.tagRepository = tagRepository;
+   }
+
+    @GetMapping("/tags")
+    public List<Map<String, String>> getTags(@RequestParam("term") String term) {
+        return tagRepository.findByTitleContainingIgnoreCase(term).stream()
+                .map(tag -> Map.of("id", tag.getTitle(), "text", tag.getTitle())) // pouĹľijeme title ako ID pre select2
+                .collect(Collectors.toList());
+
+    }
+}
diff --git a/src/main/java/com/dre0059/articleprocessor/dto/DocumentDto.java b/src/main/java/com/dre0059/articleprocessor/dto/DocumentDto.java
index 95d2875498e020efdc732fd52b475539b69c13d0..eba2f7da9b754970afb954b2c71f8d1da6011032 100644
--- a/src/main/java/com/dre0059/articleprocessor/dto/DocumentDto.java
+++ b/src/main/java/com/dre0059/articleprocessor/dto/DocumentDto.java
@@ -3,6 +3,9 @@ package com.dre0059.articleprocessor.dto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Getter
 @Setter
 public class DocumentDto {
@@ -15,5 +18,5 @@ public class DocumentDto {
   private String publisher;
   private String target;
 
-
+  private List<TagDto> tags;
 }
diff --git a/src/main/java/com/dre0059/articleprocessor/dto/TagDto.java b/src/main/java/com/dre0059/articleprocessor/dto/TagDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..06bd1b07b7ef84311abb1aaa9c4d2178685b62c4
--- /dev/null
+++ b/src/main/java/com/dre0059/articleprocessor/dto/TagDto.java
@@ -0,0 +1,11 @@
+package com.dre0059.articleprocessor.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class TagDto {
+    private Long id;
+    private String title;
+}
diff --git a/src/main/java/com/dre0059/articleprocessor/mapper/DocumentMapper.java b/src/main/java/com/dre0059/articleprocessor/mapper/DocumentMapper.java
index 8d9af72199e1221bf28a7b8d7dd11645f5538062..2823a862b169014073c98e0c804516baf8e4d7f1 100644
--- a/src/main/java/com/dre0059/articleprocessor/mapper/DocumentMapper.java
+++ b/src/main/java/com/dre0059/articleprocessor/mapper/DocumentMapper.java
@@ -8,7 +8,7 @@ import java.util.List;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 
-@Mapper(componentModel = "spring")
+@Mapper(componentModel = "spring", uses = {TagMapper.class})
 public interface DocumentMapper {
 
   //@Mapping(target = "publication_year", source = "year")
@@ -28,4 +28,6 @@ public interface DocumentMapper {
     }
   }
 
+
+
 }
diff --git a/src/main/java/com/dre0059/articleprocessor/mapper/TagMapper.java b/src/main/java/com/dre0059/articleprocessor/mapper/TagMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..824318d9536753eb8af47a19ece4657ab4d46487
--- /dev/null
+++ b/src/main/java/com/dre0059/articleprocessor/mapper/TagMapper.java
@@ -0,0 +1,18 @@
+package com.dre0059.articleprocessor.mapper;
+
+import com.dre0059.articleprocessor.dto.TagDto;
+import com.dre0059.articleprocessor.model.Tag;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper(componentModel = "spring")
+public interface TagMapper {
+    TagDto toTagDto(Tag tag);
+
+    Tag toTag(TagDto tagDto);
+
+    List<TagDto> toTagDtoList(List<Tag> tags);
+    List<Tag> toTagList(List<TagDto> tagDtos);
+
+}
diff --git a/src/main/java/com/dre0059/articleprocessor/model/Dokument.java b/src/main/java/com/dre0059/articleprocessor/model/Dokument.java
index 0969142429d23a7effdef4880ac1e1390cead349..4017d5c1b6b4a8b2c6990e39bce5c51cffe9d57f 100644
--- a/src/main/java/com/dre0059/articleprocessor/model/Dokument.java
+++ b/src/main/java/com/dre0059/articleprocessor/model/Dokument.java
@@ -63,10 +63,20 @@ public class Dokument {
             joinColumns = @JoinColumn(name = "ID_document"),
             inverseJoinColumns = @JoinColumn(name = "ID_author")
     )
-
     @Cascade(org.hibernate.annotations.CascadeType.ALL)
     private List<Author> authors = new ArrayList<>();
 
+    @ManyToMany
+    @JoinTable(
+            name = "document_tag",
+            joinColumns = @JoinColumn(name = "document_id"),
+            inverseJoinColumns = @JoinColumn(name = "tag_id")
+    )
+    @Cascade(org.hibernate.annotations.CascadeType.ALL)
+    private List<Tag> tags = new ArrayList<>();
+
+
+
     public Dokument() {}
 
     public Dokument(String title, Integer year, String doi,String publisher, String status) {
diff --git a/src/main/java/com/dre0059/articleprocessor/model/Tag.java b/src/main/java/com/dre0059/articleprocessor/model/Tag.java
index 0ae537790ae3bd1cc2c7b2c2ae83c25d2cc56f3e..aba082fa143b358a436f4f21d9cb530853b51c95 100644
--- a/src/main/java/com/dre0059/articleprocessor/model/Tag.java
+++ b/src/main/java/com/dre0059/articleprocessor/model/Tag.java
@@ -7,8 +7,10 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Entity
-@AllArgsConstructor
 @NoArgsConstructor
 @Getter
 @Setter
@@ -21,4 +23,10 @@ public class Tag {
     @Column(nullable = false, unique = true)
     private String title;
 
+    @ManyToMany(mappedBy = "tags")
+    private List<Dokument> documents = new ArrayList<>();
+
+    public Tag(String title) {
+        this.title = title;
+    }
 }
diff --git a/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java b/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java
index 84557ad5e69a9fe722093d3490d910eb819878a4..fb94ac6e3f7840c731f70154964d91e91d0e67fd 100644
--- a/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java
+++ b/src/main/java/com/dre0059/articleprocessor/repository/DocumentRepository.java
@@ -2,6 +2,7 @@ package com.dre0059.articleprocessor.repository;
 
 import com.dre0059.articleprocessor.model.*;
 
+import org.springframework.data.jpa.repository.EntityGraph;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -14,6 +15,9 @@ import java.util.Optional;
 @Repository
 public interface DocumentRepository extends JpaRepository<Dokument, Long> {
 
+    @EntityGraph(attributePaths = {"tags"})
+    Optional<Dokument> findWithTagsById(Long id);
+
     @Query(
             "SELECT COUNT(d) > 0 " +
             "FROM Dokument d " +
diff --git a/src/main/java/com/dre0059/articleprocessor/repository/TagRepository.java b/src/main/java/com/dre0059/articleprocessor/repository/TagRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..60134394ea3b0af29fce98829e6bd36e6bdfe050
--- /dev/null
+++ b/src/main/java/com/dre0059/articleprocessor/repository/TagRepository.java
@@ -0,0 +1,15 @@
+package com.dre0059.articleprocessor.repository;
+
+import com.dre0059.articleprocessor.model.Tag;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface TagRepository extends JpaRepository<Tag, Long> {
+    Optional<Tag> findByTitle(String title);
+
+    List<Tag> findByTitleContainingIgnoreCase(String term); // musĂ­ vracaĹĄ List<Tag>
+    Optional<Tag> findByTitleIgnoreCase(String title);
+
+}
diff --git a/src/main/java/com/dre0059/articleprocessor/service/DocumentService.java b/src/main/java/com/dre0059/articleprocessor/service/DocumentService.java
index fb9a2606c6f9e4dce1e3264847ad2c147a269c28..c5cb5c07981e0d3b22bfd2a224a7f4d99d255d00 100644
--- a/src/main/java/com/dre0059/articleprocessor/service/DocumentService.java
+++ b/src/main/java/com/dre0059/articleprocessor/service/DocumentService.java
@@ -32,7 +32,9 @@ public class DocumentService {
 
   @Transactional
   public DocumentDto getDocumentById(Long documentId) {
-    Dokument dokument = documentRepository.findById(documentId).orElse(null);
+    //Dokument dokument = documentRepository.findById(documentId).orElse(null);
+    Dokument dokument = documentRepository.findWithTagsById(documentId)
+            .orElseThrow(() -> new IllegalArgumentException("Dokument not found with id: " + documentId));
 
     // PouĹľitie mappera na konverziu dokumentu do DTO
     DocumentDto documentDto = documentMapper.toDocumentDto(dokument);
diff --git a/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java b/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java
index 828ac3e507b3d6104d4b35712c784d0536e3fb20..13ec99789d6ebb1f904368caadbc25fa673fd270 100644
--- a/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java
+++ b/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java
@@ -4,6 +4,7 @@ import com.dre0059.articleprocessor.dto.CategoryDto;
 import com.dre0059.articleprocessor.model.Author;
 import com.dre0059.articleprocessor.model.Category;
 import com.dre0059.articleprocessor.model.Dokument;
+import com.dre0059.articleprocessor.model.Tag;
 import com.dre0059.articleprocessor.repository.AuthorRepository;
 import com.dre0059.articleprocessor.repository.CategoryRepository;
 import com.dre0059.articleprocessor.repository.DocumentRepository;
@@ -16,6 +17,8 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
+import com.dre0059.articleprocessor.repository.TagRepository;
 import org.apache.commons.io.FileUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,8 +36,7 @@ public class HeaderService {
     private final AuthorRepository authorRepository;
     private final ReferenceService referenceService;
     private final CategoryRepository categoryRepository;
-
-    //public Dokument(String title, Integer year, String doi, String abstractText, Integer pages, String publisher) {
+    private final TagRepository tagRepository;
 
     private String title;
     private Integer year;
@@ -47,14 +49,19 @@ public class HeaderService {
     private String author;
 
     @Autowired
-    public HeaderService(DocumentRepository documentRepository, AuthorRepository authorRepository, ReferenceService referenceService, CategoryRepository categoryRepository) {
+    public HeaderService(DocumentRepository documentRepository,
+                         AuthorRepository authorRepository,
+                         ReferenceService referenceService,
+                         CategoryRepository categoryRepository,
+                         TagRepository tagRepository) {
         this.documentRepository = documentRepository;
         this.authorRepository = authorRepository;
         this.referenceService = referenceService;
         this.categoryRepository = categoryRepository;
+        this.tagRepository = tagRepository;
     }
 
-    public Dokument processHeader(String header, String categoryId, File pdfFile) {
+    public Dokument processHeader(String header, String categoryId, List<String> tags, File pdfFile) {
         this.title = this.parseHeaderFields(header, "title");
 
         if(!this.parseHeaderFields(header, "doi").equals("Not found")){
@@ -101,6 +108,24 @@ public class HeaderService {
         System.out.println("Category: " + category);
         dokument.setCategory(category);
 
+
+        List<Tag> tagEntities = new ArrayList<>();
+        for (String tagName : tags) {
+            String lowerCase = tagName.trim().toLowerCase(); // konverzia na lowercase
+
+            Optional<Tag> existingTag = tagRepository.findByTitleIgnoreCase(lowerCase);
+
+            Tag tag = existingTag.orElseGet(() -> {
+                Tag newTag = new Tag(lowerCase);
+                return tagRepository.save(newTag); // uložíme nový iba ak neexistuje
+            });
+
+            tagEntities.add(tag);
+        }
+        dokument.setTags(tagEntities);
+
+
+
         try {
             dokument.setContent(FileUtils.readFileToByteArray(pdfFile));
         } catch (IOException e) {
diff --git a/src/main/resources/static/assets/img/background.png b/src/main/resources/static/assets/img/background.png
deleted file mode 100644
index ba6a0290dd6308ef63b080ce4a8efa32f4270de5..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/background.png and /dev/null differ
diff --git a/src/main/resources/static/assets/img/bg-showcase-1.jpg b/src/main/resources/static/assets/img/bg-showcase-1.jpg
deleted file mode 100644
index 85985b93351ffe5c309b7b91bace7e836df80f5a..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/bg-showcase-1.jpg and /dev/null differ
diff --git a/src/main/resources/static/assets/img/bg-showcase-2.jpg b/src/main/resources/static/assets/img/bg-showcase-2.jpg
deleted file mode 100644
index 66a1c18c79156cafca97215d58015a46c5ea9093..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/bg-showcase-2.jpg and /dev/null differ
diff --git a/src/main/resources/static/assets/img/bg-showcase-3.jpg b/src/main/resources/static/assets/img/bg-showcase-3.jpg
deleted file mode 100644
index b429f32a0a769f2072fcec9495fe9cb2392e19f0..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/bg-showcase-3.jpg and /dev/null differ
diff --git a/src/main/resources/static/assets/img/bg_pdf.png b/src/main/resources/static/assets/img/bg_pdf.png
deleted file mode 100644
index c41708c36a1a16cfd554615ee458c8eb6630b9ea..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/bg_pdf.png and /dev/null differ
diff --git a/src/main/resources/static/assets/img/bg_pdf1.png b/src/main/resources/static/assets/img/bg_pdf1.png
deleted file mode 100644
index 34daa81ff3c7a9dc129476649fe14b77718d5e6a..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/bg_pdf1.png and /dev/null differ
diff --git a/src/main/resources/static/assets/img/testimonials-1.jpg b/src/main/resources/static/assets/img/testimonials-1.jpg
deleted file mode 100644
index 00127dfcd2b24221fee3a60d503b0f486f6e7ae4..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/testimonials-1.jpg and /dev/null differ
diff --git a/src/main/resources/static/assets/img/testimonials-2.jpg b/src/main/resources/static/assets/img/testimonials-2.jpg
deleted file mode 100644
index c180690d49238f55046295b83ea8046c2b53e6bc..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/testimonials-2.jpg and /dev/null differ
diff --git a/src/main/resources/static/assets/img/testimonials-3.jpg b/src/main/resources/static/assets/img/testimonials-3.jpg
deleted file mode 100644
index 5fea6d7b1e1b22d25ec77c1da371212f666ea6b1..0000000000000000000000000000000000000000
Binary files a/src/main/resources/static/assets/img/testimonials-3.jpg and /dev/null differ
diff --git a/src/main/resources/templates/upload-success.html b/src/main/resources/templates/upload-success.html
index 98923b0006c4a01b13836ff8ec0b7b70dbce399c..9beeb4f11e76946a30adfa550d0b9f057666fbd6 100644
--- a/src/main/resources/templates/upload-success.html
+++ b/src/main/resources/templates/upload-success.html
@@ -4,6 +4,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Upload Success</title>
+    <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
 </head>
 <body>
 <h1>Upload Successful</h1>
diff --git a/src/main/resources/templates/upload.html b/src/main/resources/templates/upload.html
index 8f3647c66e4fcf2089f88eba3e30647c36fb1d29..180dcc82df3537db8d7db0f03d8a292fd3ccb6a7 100644
--- a/src/main/resources/templates/upload.html
+++ b/src/main/resources/templates/upload.html
@@ -7,6 +7,7 @@
     <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
     <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" type="text/css" />
     <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css" />
+    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
 
     <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
 
@@ -71,10 +72,14 @@
                     <form action="/api/grobid/upload" method="post" id="uploadForm" enctype="multipart/form-data">
                         <label for="fileInput" class="form-label">Choose PDF file:</label>
                         <input class="form-control" type="file" id="fileInput" name="file" accept="application/pdf">
+
                         <label for="category" class="form-label mt-3">Select Category:</label>
                         <select class="form-select" id="category" name="category">
                             <option th:each="c: ${categories}" th:value="${c.getId()}" th:text="${c.getId() + ' ' + c.getName()}"></option>
                         </select>
+
+                        <label for="tags" class="form-label mt-3">Tags:</label>
+                        <select class="form-select" id="tags" name="tags" multiple="multiple" style="width: 100%"></select>
                     </form>
                 </div>
             </div>
@@ -97,7 +102,12 @@
     <h3>Response:</h3>
     <pre id="json-output" class="bg-light p-3 border rounded"></pre>
 </div>
+
+<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
+
+
 <script>
+    // Náhľad PDF súboru
     document.getElementById('fileInput').addEventListener('change', function(event) {
         const file = event.target.files[0];
         if (file && file.type === 'application/pdf') {
@@ -107,18 +117,56 @@
             preview.style.display = 'block';
 
             document.getElementById('upload-button-wrapper').style.display = 'block';
-            // Scroll hneď po výbere súboru
             preview.scrollIntoView({ behavior: 'smooth', block: 'start' });
         } else {
             alert('Please, choose a valid PDF file.');
         }
     });
 
+    // Inicializácia SELECT2 pre tagy
+    $(document).ready(function() {
+        $('#tags').select2({
+            placeholder: "Add or select tags",
+            tags: true,
+            tokenSeparators: [','],
+            ajax: {
+                url: '/api/tags',
+                dataType: 'json',
+                delay: 250,
+                data: function (params) {
+                    return {
+                        term: params.term.toLowerCase()  // 👈 pošli lowercase na server
+                    };
+                },
+                processResults: function (data) {
+                    return {
+                        results: data
+                    };
+                },
+                cache: true
+            },
+            createTag: function (params) {
+                let term = $.trim(params.term.toLowerCase()); // 👈 vytváraj lowercase tagy
+
+                if (term === '') {
+                    return null;
+                }
+
+                return {
+                    id: term,
+                    text: term,
+                    newTag: true
+                };
+            }
+        });
+
+    });
 
+    // Odoslanie formulára
     $('#uploadForm').submit(function(event) {
         event.preventDefault();
 
-        // animovane bodky
+        // animované bodky
         let dotCount = 0;
         const dotsElement = document.getElementById('dots');
         const dotInterval = setInterval(() => {
@@ -126,21 +174,23 @@
             dotsElement.textContent = ' .'.repeat(dotCount);
         }, 500);
 
-        // Zobraz správy o spracovaní
         document.getElementById('processing-message').style.display = 'block';
 
-
         const fileInput = $('#fileInput')[0].files[0];
         const category = $('#category').val();
+        const tags = $('#tags').val(); // Pole stringov z Select2
+
         if (!fileInput) {
             alert("Please select a PDF file first.");
             $('#processing-message').hide();
+            clearInterval(dotInterval);
             return;
         }
 
         const formData = new FormData();
         formData.append("file", fileInput);
         formData.append("categoryId", category);
+        formData.append("tags",tags); // Dôležité!
 
         $.ajax({
             url: "/api/upload",
@@ -150,10 +200,8 @@
             contentType: false,
             success: function(response) {
                 clearInterval(dotInterval);
-
                 $('#processing-message').hide();
 
-                console.log("Upload success:", response);
                 if (response.id) {
                     window.location.href = '/view/' + response.id;
                 } else {
@@ -162,16 +210,14 @@
             },
             error: function() {
                 clearInterval(dotInterval);
-
                 $('#processing-message').hide();
                 alert("Error processing PDF.");
             }
         });
     });
+</script>
 
 
-
-</script>
 <section class="features-icons bg-light text-center mt-5">
     <div class="container">
         <div class="row">
diff --git a/src/main/resources/templates/view-pdf.html b/src/main/resources/templates/view-pdf.html
index 09832b8a690e9700ccac5d2579a59f66921ab818..5ba8eab3f7943976b070525bc110453509cc599c 100644
--- a/src/main/resources/templates/view-pdf.html
+++ b/src/main/resources/templates/view-pdf.html
@@ -4,6 +4,7 @@
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>View single PDF</title>
+  <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
   <!-- Bootstrap CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
   <link rel="stylesheet" href="/styles.css">