diff --git a/.dockerignore b/.dockerignore
index 99519023a0fa413408742bebf3018a7586b89354..6d2bb29b3efb3a9149bdaf3f220b2a816e98a7d0 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -19,3 +19,5 @@ derby.log
 extras
 jams
 jams-server/src/main/resources/webapp
+
+package-lock.json
diff --git a/README.md b/README.md
index 1e46942ef88dcc1a3cbf3ff68e09b10bfd11df04..34dc145d683af3483eeb484fa505b76bee400b0f 100644
--- a/README.md
+++ b/README.md
@@ -146,3 +146,11 @@ Don't forget to launch jams locally at least once before proceeding.
 The files in the `filters` folder are prefixed "A", "B", "C" and "D" so that the
 order of execution of the filters are right (jakarta registers filters in
 alphabetical order).
+
+## Notes about jams-server
+- /api/admin is the route for all admins actions, it gives read and write permissions to all users' data
+- /api/auth is the route for **authenticated** users, it lets you read all
+users' data and edit your own profile. This route has nothing to do with authentication
+- /api/login is the route to authenticate users
+- /api/install is the routes used to setup jams initially, once the initial setup
+is done its endpoints tells the client that the server is already installed
diff --git a/extras/scripts/pre-commit b/extras/scripts/pre-commit
index 26fe0fc6c04da771e408ba9694fdd4ec5d9f6750..d0d6572d368aee9c2c374d34a632a1a8119106ec 100755
--- a/extras/scripts/pre-commit
+++ b/extras/scripts/pre-commit
@@ -1,6 +1,7 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
 
 cd jams-react-client
 npm run format
+cd ..
 
-google-java-format -i -a **/*.java
+google-java-format -i -a --skip-reflowing-long-strings --skip-javadoc-formatting **/*.java
diff --git a/extras/scripts/setup_jams.sh b/extras/scripts/setup_jams.sh
index 8295d3db2448eda5ba9c40f2bb8ca1a4b68fff89..c868ed3121815b4119b682389e1b21a98e005705 100755
--- a/extras/scripts/setup_jams.sh
+++ b/extras/scripts/setup_jams.sh
@@ -69,7 +69,7 @@ install_auth() {
 install_settings() {
     post '/api/install/settings' \
         '{
-            "serverDomain":"http://localhost:3000",
+            "serverDomain":"http://localhost:8080",
             "crlLifetime":300000,
             "deviceLifetime":31556952000,
             "userLifetime":31556952000,
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java b/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java
index e77a376137ca826018e31667764d35ad8d95c42f..213cdc802725c7145b467b54c542eed5a9ed5890 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java
@@ -23,7 +23,6 @@
 
 package net.jami.jams.common.objects.contacts;
 
-
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/devices/Device.java b/jams-common/src/main/java/net/jami/jams/common/objects/devices/Device.java
index fa5e33d02f98da15ee890ce1f593f2f52f75a1a0..59043496864e65269981d9b27f7c4198a2b31c10 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/devices/Device.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/devices/Device.java
@@ -22,7 +22,6 @@
  */
 package net.jami.jams.common.objects.devices;
 
-
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
diff --git a/jams-react-client/src/views/Groups/Groups.tsx b/jams-react-client/src/views/Groups/Groups.tsx
index 2213d7fc75b0c9f13fdda1be5041f4ad30117c85..73e5124e6b03cc1aa5ee32dc35d995a831e30b28 100644
--- a/jams-react-client/src/views/Groups/Groups.tsx
+++ b/jams-react-client/src/views/Groups/Groups.tsx
@@ -158,9 +158,6 @@ export default function Groups() {
                 auth.authenticated = false;
                 history.push("/");
               }
-              if (error.response.status === 404) {
-                group["groupMembersLength"] = 0;
-              }
             });
         });
         setGroups(allGroups);
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
index 4b93cae20f1ba324d3305d784541295b4bcaeb7a..50378dd7882ae20fccaae04e7fc8e45640dddf46 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
@@ -27,7 +27,6 @@ import static net.jami.jams.server.Server.dataStore;
 import static net.jami.jams.server.Server.userAuthenticationModule;
 
 import com.google.gson.Gson;
-import com.google.gson.JsonObject;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupsServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupsServlet.java
index 3ed4faa339532b6871105443eae1b37504c786df..1b8d5a8bb7b1345bd006ef10928f046fef4d1d44 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupsServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupsServlet.java
@@ -31,14 +31,8 @@ public class GroupsServlet extends HttpServlet {
     @JsonContent
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
-
         List<Group> groups = dataStore.getGroupDao().getAll();
-
-        if (!groups.isEmpty()) {
-            resp.getOutputStream().write(gson.toJson(groups).getBytes());
-            resp.setStatus(200);
-        } else {
-            resp.setStatus(404);
-        }
+        resp.getOutputStream().write(gson.toJson(groups).getBytes());
+        resp.setStatus(200);
     }
 }
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java
index ef891e6d0dfd5e1cafa994b1d3b1bfef59ac622e..53ed76d6d73b6de3c5b274a2c02244f81c87b7ed 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/UserGroupServlet.java
@@ -44,23 +44,16 @@ public class UserGroupServlet extends HttpServlet {
     @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN})
     @JsonContent
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-
         String groupId = req.getPathInfo().replace("/", "");
-
         List<UserGroupMapping> result = dataStore.getUserGroupMappingsDao().getByGroupId(groupId);
-
-        if (result.isEmpty()) resp.sendError(404, "No users found for this group!");
-        else {
-            resp.getOutputStream().write(gson.toJson(result).getBytes());
-            resp.setStatus(200);
-        }
+        resp.getOutputStream().write(gson.toJson(result).getBytes());
+        resp.setStatus(200);
     }
 
     @Override
     @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN})
     @JsonContent
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-
         String groupId = req.getPathInfo().replace("/", "");
 
         JsonObject obj = gson.fromJson(req.getReader(), JsonObject.class);
@@ -70,7 +63,7 @@ public class UserGroupServlet extends HttpServlet {
                 dataStore.getUserGroupMappingsDao().getByGroupIdAndUsername(groupId, username);
 
         if (existingMapping.isPresent()) {
-            resp.sendError(409, "The user already part of the group!");
+            resp.sendError(HttpServletResponse.SC_CONFLICT, "The user already part of the group!");
             return;
         }
 
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserGroupsServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserGroupsServlet.java
index 1c0120320b27299047f802035e26ba97da7ea2cf..eb4766ef5cc7793970e723159afdc075a1399c99 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserGroupsServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UserGroupsServlet.java
@@ -42,15 +42,9 @@ public class UserGroupsServlet extends HttpServlet {
     @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN})
     @JsonContent
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-
         String username = req.getPathInfo().replace("/", "");
-
         List<UserGroupMapping> result = dataStore.getUserGroupMappingsDao().getByUsername(username);
-
-        if (result.isEmpty()) resp.sendError(404, "No groups found for this user!");
-        else {
-            resp.getOutputStream().write(gson.toJson(result).getBytes());
-            resp.setStatus(200);
-        }
+        resp.getOutputStream().write(gson.toJson(result).getBytes());
+        resp.setStatus(200);
     }
 }