diff --git a/.gitignore b/.gitignore
index 0648667bdb50f03dbf8151eff52f71c863b4bcf7..897c8ff354517c6ec4b4ace0ba5f5699210d2c8e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -95,43 +95,11 @@ local.properties
 *.ipr
 
 # User-specific stuff
-.idea/*
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/**/usage.statistics.xml
-.idea/**/dictionaries
-.idea/**/shelf
-
-# Generated files
-.idea/**/contentModel.xml
-
-# Sensitive or high-churn files
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-.idea/**/dbnavigator.xml
-
-# Gradle
-.idea/**/gradle.xml
-.idea/**/libraries
-
-# Gradle and Maven with auto-import
-# When using Gradle or Maven with auto-import, you should exclude module files,
-# since they will be recreated, and may cause churn.  Uncomment if using
-# auto-import.
-# .idea/modules.xml
-# .idea/*.iml
-# .idea/modules
+.idea
 
 # CMake
 cmake-build-*/
 
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-
 # File-based project format
 *.iws
 
@@ -144,21 +112,12 @@ out/
 # JIRA plugin
 atlassian-ide-plugin.xml
 
-# Cursive Clojure plugin
-.idea/replstate.xml
-
 # Crashlytics plugin (for Android Studio and IntelliJ)
 com_crashlytics_export_strings.xml
 crashlytics.properties
 crashlytics-build.properties
 fabric.properties
 
-# Editor-based Rest Client
-.idea/httpRequests
-
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
-
 ### Intellij Patch ###
 # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
 
@@ -167,9 +126,6 @@ fabric.properties
 # .idea/misc.xml
 # *.ipr
 
-# Sonarlint plugin
-.idea/sonarlint
-
 ### Kotlin ###
 # Compiled class file
 *.class
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b5511df7904d649e1cf5dfc50a6bd2c50ad4e3bc..7df3480415c742159af12bd1c3e36c778000c472 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -30,8 +30,6 @@ cache:
   key: "$CI_COMMIT_REF_NAME"
   paths:
     - ".gradle"
-    - "frontend/.gradle/"
-    - "frontend/node_modules/"
 
 # PRE-BUILD
 
@@ -62,20 +60,6 @@ build-loader-docker-image:
 # TESTS
 
 
-lint:
-  stage: test
-  tags:
-    - openstack
-  script: "./gradlew lint"
-  cache:
-    key: "$CI_COMMIT_REF_NAME"
-    policy: pull
-    paths:
-      - ".gradle"
-      - "frontend/.gradle/"
-      - "frontend/node_modules/"
-
-
 test-and-sonarqube:
   stage: test
   tags:
@@ -104,20 +88,19 @@ test-and-sonarqube:
     policy: pull-push
     paths:
       - ".gradle"
-      - "frontend/.gradle/"
-      - "frontend/node_modules/"
       - .sonar/cache
   script:
-    - ./gradlew :frontend:assemble --parallel
-    - ./gradlew :backend:test jacocoTestReport --parallel
-    - find /tmp/node/*/bin -name node -exec ln -s {} /tmp/node/node \;
-    - export PATH="/tmp/node/:$PATH"
-    - ./gradlew -s sonarqube -x test
+    - ./gradlew test jacocoTestReport --parallel
+    # disable sonarqube because it apparently needs node, but I don't know why, and it can't find it anymore now that
+    # there is no frontend project anymore, and it takes sooooo much time to complete anyway for results that nobody
+    # will ever look
+    # - find /tmp/node/*/bin -name node -exec ln -s {} /tmp/node/node \;
+    # - export PATH="/tmp/node/:$PATH"
+    # - ./gradlew -s sonarqube -x test
   artifacts:
     reports:
       junit:
         - ./backend/build/test-results/test/TEST-*.xml
-        # - ./frontend/karma-junit-tests-report/TEST*.xml
   only:
     refs:
       - merge_requests
@@ -144,8 +127,6 @@ build:
     policy: pull
     paths:
       - ".gradle"
-      - "frontend/.gradle/"
-      - "frontend/node_modules/"
   artifacts:
     paths:
       - "$JAR_PATH"
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index ca99a00edbda7ccc394869431fec04f9a5ac33a6..0000000000000000000000000000000000000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <annotationProcessing>
-      <profile name="Gradle Imported" enabled="true">
-        <outputRelativeToContentRoot value="true" />
-        <processorPath useClasspath="false">
-          <entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-configuration-processor/2.1.2.RELEASE/db9671c321defb942a6700fae8a7700a137a25e/spring-boot-configuration-processor-2.1.2.RELEASE.jar" />
-        </processorPath>
-        <module name="faidare.backend.main" />
-      </profile>
-    </annotationProcessing>
-    <bytecodeTargetLevel target="1.8" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 15a15b218a29e09c9190992732698d646e4d659a..0000000000000000000000000000000000000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
-</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index ff8249e49968d1849269b0d8a2fe49a31c72a63f..0000000000000000000000000000000000000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="FrameworkDetectionExcludesConfiguration">
-    <file type="web" url="file://$PROJECT_DIR$" />
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 3b2a562bc3214c46382cc1761196d85196a94d66..0000000000000000000000000000000000000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/faidare.iml" filepath="$PROJECT_DIR$/.idea/modules/faidare.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/backend/faidare.backend.iml" filepath="$PROJECT_DIR$/.idea/modules/backend/faidare.backend.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/backend/faidare.backend.main.iml" filepath="$PROJECT_DIR$/.idea/modules/backend/faidare.backend.main.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/backend/faidare.backend.test.iml" filepath="$PROJECT_DIR$/.idea/modules/backend/faidare.backend.test.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/frontend/faidare.frontend.iml" filepath="$PROJECT_DIR$/.idea/modules/frontend/faidare.frontend.iml" />
-      <module fileurl="file://$PROJECT_DIR$/backend/src/main/main.iml" filepath="$PROJECT_DIR$/backend/src/main/main.iml" />
-      <module fileurl="file://$PROJECT_DIR$/backend/src/test/test.iml" filepath="$PROJECT_DIR$/backend/src/test/test.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7f4cb416c083d265558da75d457237d671..0000000000000000000000000000000000000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts
index 9ff140544f08a54151ddf9ca56e164de76e37a35..586fc9530562dd6ea7b2a6fd5fb935d842dc36d7 100644
--- a/backend/build.gradle.kts
+++ b/backend/build.gradle.kts
@@ -57,12 +57,8 @@ tasks {
 
     val bootJar by getting(BootJar::class) {
         archiveName = "${rootProject.name}.jar"
-        dependsOn(":frontend:assemble")
         dependsOn(buildInfo)
 
-        into("BOOT-INF/classes/static") {
-            from("${project(":frontend").projectDir}/dist/frontend")
-        }
         into("BOOT-INF/classes/META-INF") {
             from(buildInfo.destinationDir)
         }
@@ -98,6 +94,7 @@ dependencies {
     implementation("org.springframework.boot:spring-boot-starter-actuator")
     implementation("org.springframework.boot:spring-boot-starter-security")
     implementation("org.springframework.cloud:spring-cloud-starter-config")
+    implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
 
     // Elasticsearch
     implementation("org.elasticsearch:elasticsearch:6.6.2")
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/filter/AngularRouteFilter.java b/backend/src/main/java/fr/inra/urgi/faidare/filter/AngularRouteFilter.java
deleted file mode 100644
index 81978e5f3bfaca602e70eff0f109477d55e1466a..0000000000000000000000000000000000000000
--- a/backend/src/main/java/fr/inra/urgi/faidare/filter/AngularRouteFilter.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package fr.inra.urgi.faidare.filter;
-
-import com.google.common.base.Charsets;
-import com.google.common.io.ByteSource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.*;
-import javax.servlet.annotation.WebFilter;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-
-/**
- * Filter that intercepts all request to potential Angular routes
- * (ex: /studies/ID) to send back the Angular `index.html` file with a correct
- * base href set to the spring server context path.
- *
- * Potential angular routes are devised by process of elimination:
- * - They should be GET requests
- * - They should not end with common static file suffixes {@link AngularRouteFilter#STATIC_SUFFIXES}
- * - They should not start with API prefixes {@link AngularRouteFilter#API_PREFIXES}
- *
- * <p>
- * Adapted from data-discovery
- *
- * @author gcornut
- */
-@Component
-@WebFilter("/*")
-public class AngularRouteFilter implements Filter {
-
-    private static final String[] API_PREFIXES = {
-        "/brapi/v1", "/faidare/v1", "/actuator", "/v2/api-docs", "/swagger-resources"
-    };
-
-    private static final String[] STATIC_SUFFIXES = {
-        ".html", ".js", ".css", ".ico", ".png", ".jpg", ".gif", ".eot", ".svg",
-        ".woff2", ".ttf", ".woff", ".md"
-    };
-
-    @Value("${server.servlet.context-path}")
-    private String serverContextPath;
-
-    private final ResourceLoader resourceLoader;
-
-    @Autowired
-    public AngularRouteFilter(ResourceLoader resourceLoader) {
-        this.resourceLoader = resourceLoader;
-    }
-
-    @Override
-    public void doFilter(
-        ServletRequest req,
-        ServletResponse response,
-        FilterChain chain
-    ) throws IOException, ServletException {
-        HttpServletRequest request = (HttpServletRequest) req;
-
-        if (isAngularRoute(request)) {
-            // Angular route
-            InputStream inputStream = resourceLoader.getResource("classpath:static/index.html").getInputStream();
-
-            ByteSource byteSource = new ByteSource() {
-                @Override
-                public InputStream openStream() {
-                    return inputStream;
-                }
-            };
-
-            String content = byteSource.asCharSource(Charsets.UTF_8).read();
-            String replacedContent = content.replace(
-                "<base href=\"./\">",
-                "<base href=\"" + serverContextPath + "/\">"
-            );
-            response.getWriter().write(replacedContent);
-            return;
-        }
-
-        // Otherwise nothing to do
-        chain.doFilter(request, response);
-    }
-
-    private boolean isAngularRoute(HttpServletRequest request) {
-        if (!request.getMethod().equals("GET")) {
-            return false;
-        }
-
-        String fullUri = request.getRequestURI();
-        String contextPath = request.getContextPath();
-        String uri = fullUri.substring(contextPath.length());
-
-        return !isApiOrStaticResource(uri);
-    }
-
-    private boolean isApiOrStaticResource(String relativePath) {
-        // Starts with API prefix
-        return Arrays.stream(API_PREFIXES).anyMatch(relativePath::startsWith)
-            // or has static file suffix
-            || Arrays.stream(STATIC_SUFFIXES).anyMatch(relativePath::endsWith);
-    }
-
-    @Override
-    public void init(FilterConfig filterConfig) {
-        // nothing to do
-    }
-
-    @Override
-    public void destroy() {
-        // nothing to do
-    }
-}
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/web/HomeController.java b/backend/src/main/java/fr/inra/urgi/faidare/web/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6734b6aa97a2ae445af4eb61be86a07883b2a58a
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/web/HomeController.java
@@ -0,0 +1,19 @@
+package fr.inra.urgi.faidare.web;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * Controller for the home page, which doesn't display much
+ * @author JB Nizet
+ */
+@Controller
+@RequestMapping("")
+public class HomeController {
+    @GetMapping
+    public ModelAndView home() {
+        return new ModelAndView("index");
+    }
+}
diff --git a/backend/src/main/main.iml b/backend/src/main/main.iml
deleted file mode 100644
index 50f3d6bc79c58fa92df31bb59ab229d1e7c0c12e..0000000000000000000000000000000000000000
--- a/backend/src/main/main.iml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Gradle: io.swagger:swagger-annotations:1.5.21" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework:spring-beans:5.1.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework:spring-web:5.1.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: io.springfox:springfox-core:2.9.2" level="project" />
-    <orderEntry type="library" name="Gradle: io.springfox:springfox-spring-web:2.9.2" level="project" />
-    <orderEntry type="library" name="Gradle: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Gradle: com.google.guava:guava:27.0.1-jre" level="project" />
-    <orderEntry type="library" name="Gradle: commons-collections:commons-collections:3.2.2" level="project" />
-    <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore:4.4.10" level="project" />
-    <orderEntry type="library" name="Gradle: org.elasticsearch.client:elasticsearch-rest-client:6.4.3" level="project" />
-    <orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore-nio:4.4.10" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework.boot:spring-boot-autoconfigure:2.1.2.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework:spring-context:5.1.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework.boot:spring-boot:2.1.2.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework.security:spring-security-config:5.1.3.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: io.springfox:springfox-spi:2.9.2" level="project" />
-    <orderEntry type="library" name="Gradle: io.springfox:springfox-swagger2:2.9.2" level="project" />
-    <orderEntry type="library" name="Gradle: org.elasticsearch:elasticsearch:6.5.4" level="project" />
-    <orderEntry type="library" name="Gradle: org.slf4j:slf4j-api:1.7.25" level="project" />
-    <orderEntry type="library" name="Gradle: org.elasticsearch.client:elasticsearch-rest-high-level-client:6.5.4" level="project" />
-    <orderEntry type="library" name="Gradle: org.elasticsearch:elasticsearch-core:6.5.4" level="project" />
-    <orderEntry type="library" name="Gradle: org.springframework:spring-core:5.1.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Gradle: org.apache.tomcat.embed:tomcat-embed-core:9.0.14" level="project" />
-    <orderEntry type="library" name="Gradle: com.opencsv:opencsv:4.4" level="project" />
-    <orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.8.1" level="project" />
-    <orderEntry type="library" name="Gradle: org.apache.lucene:lucene-join:7.5.0" level="project" />
-    <orderEntry type="library" name="Gradle: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/backend/src/main/resources/static/assets/images/favicon.ico b/backend/src/main/resources/static/assets/images/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..7fc066f132eb58eeaf30b6259da59f5ed92aca8e
Binary files /dev/null and b/backend/src/main/resources/static/assets/images/favicon.ico differ
diff --git a/backend/src/main/resources/templates/index.html b/backend/src/main/resources/templates/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..ae925eac250a91f73267233e495ae2ef8b6cd008
--- /dev/null
+++ b/backend/src/main/resources/templates/index.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+
+<html
+  xmlns:th="http://www.thymeleaf.org"
+  xmlns:biom="http://www.thymeleaf.org"
+  th:replace="~{layout/main :: layout(title=~{::title}, content=~{::main})}"
+>
+<head>
+  <title>Faidare</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+
+<body>
+<main>
+  <h1>Welcome to Faidare</h1>
+</main>
+</body>
+</html>
diff --git a/backend/src/main/resources/templates/layout/main.html b/backend/src/main/resources/templates/layout/main.html
new file mode 100644
index 0000000000000000000000000000000000000000..a8f2c38c478a4a687cbea839b58dc338759db5fd
--- /dev/null
+++ b/backend/src/main/resources/templates/layout/main.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="fr" th:fragment="layout (title, content)" xmlns:th="http://www.thymeleaf.org">
+  <head>
+    <title th:replace="${title}">Layout Title</title>
+
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta content="width=device-width, initial-scale=1" name="viewport" />
+
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
+
+    <link rel="shortcut icon" th:href="@{/static/assets/images/favicon.ico}" type="image/x-icon" />
+  </head>
+
+  <body>
+    <div class="container">
+      <header>
+        Common header
+      </header>
+
+      <div th:replace="${content}">
+        <p>Layout content</p>
+      </div>
+
+      <footer>
+        common footer
+      </footer>
+    </div>
+  </body>
+</html>
diff --git a/backend/src/test/java/fr/inra/urgi/faidare/filter/AngularRouteFilterTest.java b/backend/src/test/java/fr/inra/urgi/faidare/filter/AngularRouteFilterTest.java
deleted file mode 100644
index b71e9e39509201d931b6e469ff747524f7a4ddd4..0000000000000000000000000000000000000000
--- a/backend/src/test/java/fr/inra/urgi/faidare/filter/AngularRouteFilterTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package fr.inra.urgi.faidare.filter;
-
-import fr.inra.urgi.faidare.Application;
-import fr.inra.urgi.faidare.config.SecurityConfig;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ValueSource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.context.annotation.Import;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-import org.springframework.test.util.ReflectionTestUtils;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-import org.springframework.web.context.WebApplicationContext;
-
-import java.io.ByteArrayInputStream;
-
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl;
-
-/**
- * Unit tests for {@link AngularRouteFilter}
- *
- * @author gcornut
- */
-@ExtendWith(SpringExtension.class)
-@Import(SecurityConfig.class)
-@SpringBootTest(classes = Application.class)
-class AngularRouteFilterTest {
-
-    @Autowired
-    private WebApplicationContext context;
-
-    @MockBean
-    private ResourceLoader resourceLoader;
-
-    private MockMvc mockMvc;
-
-    private AngularRouteFilter filter;
-
-    @BeforeEach
-    void setUp() {
-        filter = new AngularRouteFilter(resourceLoader);
-        mockMvc = MockMvcBuilders.webAppContextSetup(context)
-            .addFilter(filter, "/*")
-            .build();
-    }
-
-    @ParameterizedTest
-    @ValueSource(strings = {
-        // Static files
-        "/index.html",
-        "/script.js",
-        "/style.css",
-        "/image.gif",
-        "/icon.ico",
-        "/image.png",
-        "/image.jpg",
-        "/font.woff",
-        "/font.ttf",
-        // APIs
-        "/brapi/v1/studies",
-        "/faidare/v1/datadiscovery/suggest",
-        "/actuator/info",
-    })
-    void shouldNotForward(String url) throws Exception {
-        mockMvc.perform(get(url)).andExpect(forwardedUrl(null));
-    }
-
-    @ParameterizedTest
-    @ValueSource(strings = {
-        "/home",
-        "/studies/foo",
-        "/germplasm/bar",
-    })
-    void shouldForward(String url) throws Exception {
-        String indexBefore = "<html>\n" +
-            "  <base href=\"./\">\n" +
-            "</html>";
-        String indexAfter = "<html>\n" +
-            "  <base href=\"/gnpis-test/faidare/\">\n" +
-            "</html>";
-
-        ReflectionTestUtils.setField(filter, "serverContextPath", "/gnpis-test/faidare");
-
-        Resource mockResource = mock(Resource.class);
-        when(mockResource.getInputStream())
-            .thenReturn(new ByteArrayInputStream(indexBefore.getBytes()));
-        when(resourceLoader.getResource(anyString()))
-            .thenReturn(mockResource);
-
-        mockMvc.perform(get(url))
-            .andExpect(content().string(indexAfter));
-    }
-
-}
diff --git a/backend/src/test/test.iml b/backend/src/test/test.iml
deleted file mode 100644
index 6e30bb1c6134aa08b8bcfb9660df0484e83585c6..0000000000000000000000000000000000000000
--- a/backend/src/test/test.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="true" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="main" />
-  </component>
-</module>
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 4bd5a482217fc2c6b3921cafc0bdb602ebd96641..59e6a72bd92bbec780fb4ebc0fe825204fd505bf 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,2 +1,2 @@
 rootProject.name = "faidare"
-include("backend", "frontend")
+include("backend")