Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.config;
 
+import mk.ukim.finki.it.reservengo.config.filter.InviteFilter;
 import mk.ukim.finki.it.reservengo.config.filter.JWTAuthenticationFilter;
 import mk.ukim.finki.it.reservengo.config.filter.UserActivityFilter;
@@ -28,9 +29,11 @@
     private final AuthenticationProvider authenticationProvider;
     private final UserActivityFilter userActivityFilter;
+    private final InviteFilter inviteFilter;
 
-    public WebSecurityConfig(JWTAuthenticationFilter jwtAuthFilter, AuthenticationProvider authenticationProvider, UserActivityFilter userActivityFilter) {
+    public WebSecurityConfig(JWTAuthenticationFilter jwtAuthFilter, AuthenticationProvider authenticationProvider, UserActivityFilter userActivityFilter, InviteFilter inviteFilter) {
         this.jwtAuthFilter = jwtAuthFilter;
         this.authenticationProvider = authenticationProvider;
         this.userActivityFilter = userActivityFilter;
+        this.inviteFilter = inviteFilter;
     }
 
@@ -63,5 +66,6 @@
                 .authenticationProvider(authenticationProvider)
                 .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
-                .addFilterAfter(userActivityFilter, JWTAuthenticationFilter.class);
+                .addFilterAfter(userActivityFilter, JWTAuthenticationFilter.class)
+                .addFilterBefore(inviteFilter, JWTAuthenticationFilter.class);
 
         return http.build();
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/InviteFilter.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/InviteFilter.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/InviteFilter.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -0,0 +1,56 @@
+package mk.ukim.finki.it.reservengo.config.filter;
+
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.NonNull;
+import mk.ukim.finki.it.reservengo.constants.JWTConstants;
+import mk.ukim.finki.it.reservengo.service.intf.JWTService;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import java.io.IOException;
+
+@Component
+public class InviteFilter extends OncePerRequestFilter {
+    private final JWTService jwtService;
+
+    public InviteFilter(JWTService jwtService) {
+        this.jwtService = jwtService;
+    }
+
+    @Override
+    protected void doFilterInternal(@NonNull HttpServletRequest request,
+                                    @NonNull HttpServletResponse response,
+                                    @NonNull FilterChain filterChain) throws ServletException, IOException {
+        String token = request.getHeader(JWTConstants.INVITE_TOKEN_HEADER);
+        String path = request.getRequestURI();
+
+        if (path.contains("/register/local-manager") || path.contains("/register/local-worker") || path.contains("/register/invite/check")) {
+            if (token == null || token.isEmpty()) {
+                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+                return;
+            }
+
+            if (jwtService.isTokenExpired(token)) {
+                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+                return;
+            }
+
+            String role = jwtService.extractAllClaims(token).get("role", String.class);
+
+            if (path.contains("/local-manager") && !role.equals("ROLE_LOCAL_MANAGER")) {
+                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+                return;
+            }
+
+            if (path.contains("/local-worker") && !role.equals("ROLE_LOCAL_WORKER")) {
+                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+                return;
+            }
+        }
+
+        filterChain.doFilter(request, response);
+    }
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/JWTAuthenticationFilter.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/JWTAuthenticationFilter.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/JWTAuthenticationFilter.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -33,5 +33,5 @@
                                     @NonNull HttpServletResponse response,
                                     @NonNull FilterChain filterChain) throws ServletException, IOException {
-        final String authHeader = request.getHeader(JWTConstants.HEADER);
+        final String authHeader = request.getHeader(JWTConstants.BEARER_TOKEN_HEADER);
         final String jwt;
         final String userEmail;
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/constants/JWTConstants.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/constants/JWTConstants.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/constants/JWTConstants.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -4,5 +4,6 @@
     public static final String SECRET_KEY = "7bce06d6331e532e8c4c85e6eaae4217711768fe1aa582b4549c2722a8ef0497";
     public static final Long EXPIRATION_TIME = 86400000L; // 1 day
-    public static final String HEADER = "Authorization";
+    public static final String BEARER_TOKEN_HEADER = "Authorization";
     public static final String TOKEN_PREFIX = "Bearer ";
+    public static final String INVITE_TOKEN_HEADER = "Invite-Token";
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -4,12 +4,12 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO;
 import mk.ukim.finki.it.reservengo.dto.userDTO.DisplayUserDTO;
+import mk.ukim.finki.it.reservengo.dto.userDTO.EditUserEmailDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 import mk.ukim.finki.it.reservengo.model.domain.LocalManager;
 import mk.ukim.finki.it.reservengo.model.enumerations.Position;
+import mk.ukim.finki.it.reservengo.model.enumerations.Role;
 import mk.ukim.finki.it.reservengo.model.exceptions.ManagerAlreadyAssignedException;
 import mk.ukim.finki.it.reservengo.model.exceptions.ManagerNotAssignedException;
-import mk.ukim.finki.it.reservengo.service.intf.AdminService;
-import mk.ukim.finki.it.reservengo.service.intf.LocalManagerService;
-import mk.ukim.finki.it.reservengo.service.intf.LocalService;
+import mk.ukim.finki.it.reservengo.service.intf.*;
 import org.springframework.stereotype.Service;
 
@@ -21,8 +21,12 @@
     private final LocalService localService;
     private final LocalManagerService localManagerService;
+    private final EmailService emailService;
+    private final JWTService jwtService;
 
-    public AdminServiceImpl(LocalService localService, LocalManagerService localManagerService) {
+    public AdminServiceImpl(LocalService localService, LocalManagerService localManagerService, EmailService emailService, JWTService jwtService) {
         this.localService = localService;
         this.localManagerService = localManagerService;
+        this.emailService = emailService;
+        this.jwtService = jwtService;
     }
 
@@ -75,3 +79,9 @@
         localManagerService.updateLocalAssignment(manager, null, null);
     }
+
+    @Override
+    public void inviteManager(EditUserEmailDTO emailDTO) {
+        String token = jwtService.generateInviteToken(emailDTO.newEmail(), Role.ROLE_LOCAL_MANAGER);
+        emailService.sendManagerInvitationEmail(emailDTO.newEmail(), token);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -50,5 +50,7 @@
 
     @Override
-    public JWTAuthenticationResponseDTO registerLocalWorker(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) {
+    public JWTAuthenticationResponseDTO registerLocalWorker(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO, String token) {
+        validateTokenEmail(token, jwtAuthenticationRequestDTO.email());
+
         LocalWorker localWorker = jwtAuthenticationRequestDTO.toLocalWorker(passwordEncoder.encode(jwtAuthenticationRequestDTO.password()));
 
@@ -60,5 +62,7 @@
 
     @Override
-    public JWTAuthenticationResponseDTO registerLocalManager(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) {
+    public JWTAuthenticationResponseDTO registerLocalManager(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO, String token) {
+        validateTokenEmail(token, jwtAuthenticationRequestDTO.email());
+
         LocalManager localManager = jwtAuthenticationRequestDTO.toLocalManager(passwordEncoder.encode(jwtAuthenticationRequestDTO.password()));
 
@@ -89,3 +93,10 @@
         }
     }
+
+    private void validateTokenEmail(String token, String email) {
+        String tokenEmail = jwtService.extractClaim(token, claims -> claims.get("email", String.class));
+        if (!tokenEmail.equals(email)) {
+            throw new IllegalArgumentException("Email must match the token's email");
+        }
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EmailServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EmailServiceImpl.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EmailServiceImpl.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -4,5 +4,7 @@
 import org.springframework.mail.SimpleMailMessage;
 import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.stereotype.Service;
 
+@Service
 public class EmailServiceImpl implements EmailService {
     private final JavaMailSender mailSender;
@@ -28,5 +30,5 @@
                         %s
                         
-                        This link will expire in 48 hours.""",
+                        This link will expire in 24 hours.""",
                 invitationUrl
         ));
@@ -51,5 +53,5 @@
                         %s
                         
-                        This link will expire in 48 hours.
+                        This link will expire in 24 hours.
                         """,
                 localName,
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/JWTServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/JWTServiceImpl.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/JWTServiceImpl.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -8,4 +8,5 @@
 import mk.ukim.finki.it.reservengo.constants.JWTConstants;
 import mk.ukim.finki.it.reservengo.model.domain.User;
+import mk.ukim.finki.it.reservengo.model.enumerations.Role;
 import mk.ukim.finki.it.reservengo.service.intf.JWTService;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -72,3 +73,14 @@
         return extractClaim(token, Claims::getExpiration);
     }
+
+    @Override
+    public String generateInviteToken(String email, Role role) {
+        return Jwts.builder()
+                .claim("email", email)
+                .claim("role", role)
+                .setIssuedAt(new Date())
+                .setExpiration(new Date(System.currentTimeMillis() + JWTConstants.EXPIRATION_TIME))
+                .signWith(getSignInKey(), SignatureAlgorithm.HS256)
+                .compact();
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -5,4 +5,5 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
+import mk.ukim.finki.it.reservengo.dto.userDTO.EditUserEmailDTO;
 import mk.ukim.finki.it.reservengo.dto.workerDTO.PositionDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Event;
@@ -11,4 +12,5 @@
 import mk.ukim.finki.it.reservengo.model.domain.LocalWorker;
 import mk.ukim.finki.it.reservengo.model.enumerations.Position;
+import mk.ukim.finki.it.reservengo.model.enumerations.Role;
 import mk.ukim.finki.it.reservengo.model.exceptions.*;
 import mk.ukim.finki.it.reservengo.repository.LocalManagerRepository;
@@ -29,6 +31,8 @@
     private final EventService eventService;
     private final LocalWorkerService workerService;
-
-    public LocalManagerServiceImpl(LocalService localService, LocalManagerRepository localManagerRepository, UserService userService, EventService eventService, LocalWorkerService workerService) {
+    private final JWTService jwtService;
+    private final EmailService emailService;
+
+    public LocalManagerServiceImpl(LocalService localService, LocalManagerRepository localManagerRepository, UserService userService, EventService eventService, LocalWorkerService workerService, JWTService jwtService, EmailService emailService) {
         this.localService = localService;
         this.localManagerRepository = localManagerRepository;
@@ -36,4 +40,6 @@
         this.eventService = eventService;
         this.workerService = workerService;
+        this.jwtService = jwtService;
+        this.emailService = emailService;
     }
 
@@ -198,3 +204,14 @@
         workerService.changePosition(worker, positionDTO.position());
     }
+
+    @Override
+    public void inviteWorker(Long managerId, EditUserEmailDTO emailDTO) {
+        LocalManager manager = localManagerRepository.findById(managerId).orElseThrow(() -> new LocalManagerIdNotFoundException(managerId));
+        if (manager.getLocal() == null) {
+            throw new ManagerNotAssignedException(managerId);
+        }
+
+        String token = jwtService.generateInviteToken(emailDTO.newEmail(), Role.ROLE_LOCAL_WORKER);
+        emailService.sendWorkerInvitationEmail(emailDTO.newEmail(), token, manager.getEmail(), manager.getLocal().getName());
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -4,4 +4,5 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO;
 import mk.ukim.finki.it.reservengo.dto.userDTO.DisplayUserDTO;
+import mk.ukim.finki.it.reservengo.dto.userDTO.EditUserEmailDTO;
 
 import java.util.List;
@@ -21,3 +22,5 @@
 
     void removeManagerFromLocal(Long managerId);
+
+    void inviteManager(EditUserEmailDTO emailDTO);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AuthService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AuthService.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AuthService.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -9,7 +9,7 @@
     JWTAuthenticationResponseDTO registerCustomer(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO);
 
-    JWTAuthenticationResponseDTO registerLocalWorker(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO);
+    JWTAuthenticationResponseDTO registerLocalWorker(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO, String token);
 
-    JWTAuthenticationResponseDTO registerLocalManager(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO);
+    JWTAuthenticationResponseDTO registerLocalManager(JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO, String token);
 
     JWTAuthenticationResponseDTO login(JWTLoginDTO jwtLoginDTO);
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/JWTService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/JWTService.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/JWTService.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -3,4 +3,5 @@
 import io.jsonwebtoken.Claims;
 import mk.ukim.finki.it.reservengo.model.domain.User;
+import mk.ukim.finki.it.reservengo.model.enumerations.Role;
 import org.springframework.security.core.userdetails.UserDetails;
 
@@ -25,3 +26,5 @@
 
     Date extractExpiration(String token);
+
+    String generateInviteToken(String email, Role role);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -5,4 +5,5 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
+import mk.ukim.finki.it.reservengo.dto.userDTO.EditUserEmailDTO;
 import mk.ukim.finki.it.reservengo.dto.workerDTO.PositionDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Event;
@@ -55,3 +56,5 @@
 
     void changePosition(Long managerId, Long workerId, PositionDTO positionDTO);
+
+    void inviteWorker(Long managerId, EditUserEmailDTO emailDTO);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -4,4 +4,5 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDTO;
 import mk.ukim.finki.it.reservengo.dto.userDTO.DisplayUserDTO;
+import mk.ukim.finki.it.reservengo.dto.userDTO.EditUserEmailDTO;
 import mk.ukim.finki.it.reservengo.service.intf.AdminService;
 import org.springframework.http.HttpStatus;
@@ -64,3 +65,9 @@
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+    @PostMapping("/invite-manager")
+    public ResponseEntity<Void> inviteManager(@RequestBody EditUserEmailDTO emailDTO) {
+        adminService.inviteManager(emailDTO);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AuthController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AuthController.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AuthController.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -25,11 +25,13 @@
 
     @PostMapping("/register/local-worker")
-    public ResponseEntity<JWTAuthenticationResponseDTO> registerLocalWorker(@RequestBody JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) {
-        return new ResponseEntity<>(authenticationService.registerLocalWorker(jwtAuthenticationRequestDTO), HttpStatus.CREATED);
+    public ResponseEntity<JWTAuthenticationResponseDTO> registerLocalWorker(@RequestBody JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO,
+                                                                            @RequestHeader(value = "Invite-Token") String token) {
+        return new ResponseEntity<>(authenticationService.registerLocalWorker(jwtAuthenticationRequestDTO, token), HttpStatus.CREATED);
     }
 
     @PostMapping("/register/local-manager")
-    public ResponseEntity<JWTAuthenticationResponseDTO> registerLocalManager(@RequestBody JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO) {
-        return new ResponseEntity<>(authenticationService.registerLocalManager(jwtAuthenticationRequestDTO), HttpStatus.CREATED);
+    public ResponseEntity<JWTAuthenticationResponseDTO> registerLocalManager(@RequestBody JWTAuthenticationRequestDTO jwtAuthenticationRequestDTO,
+                                                                             @RequestHeader(value = "Invite-Token") String token) {
+        return new ResponseEntity<>(authenticationService.registerLocalManager(jwtAuthenticationRequestDTO, token), HttpStatus.CREATED);
     }
 
@@ -44,3 +46,8 @@
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+    @GetMapping("/register/invite/check")
+    public ResponseEntity<Void> checkInvite() {
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -7,4 +7,5 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDetailsDTO;
+import mk.ukim.finki.it.reservengo.dto.userDTO.EditUserEmailDTO;
 import mk.ukim.finki.it.reservengo.dto.workerDTO.DisplayWorkerDTO;
 import mk.ukim.finki.it.reservengo.dto.workerDTO.PositionDTO;
@@ -117,3 +118,9 @@
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+    @PostMapping("/invite-worker")
+    public ResponseEntity<Void> inviteWorker(@AuthenticationPrincipal User user, @RequestBody EditUserEmailDTO emailDTO) {
+        localManagerService.inviteWorker(user.getId(), emailDTO);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
Index: ReserveNGo-backend/src/main/resources/application.properties
===================================================================
--- ReserveNGo-backend/src/main/resources/application.properties	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ ReserveNGo-backend/src/main/resources/application.properties	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -9,6 +9,6 @@
 spring.mail.host=${MAIL_HOST:smtp.gmail.com}
 spring.mail.port=587
-spring.mail.username=${MAIL_USERNAME:}
-spring.mail.password=${MAIL_PASSWORD:}
+spring.mail.username=${MAIL_USERNAME:reservengo2025@gmail.com}
+spring.mail.password=${MAIL_PASSWORD:nwix jxkk xzej yfmr}
 spring.mail.properties.mail.smtp.auth=true
 spring.mail.properties.mail.smtp.starttls.enable=true
Index: docker-compose.yml
===================================================================
--- docker-compose.yml	(revision 867c6efe60c2e5a6c61ac9a1a0a1792bfed259f6)
+++ docker-compose.yml	(revision 6df993513b3a1035922e8be54718dc8296479f54)
@@ -14,4 +14,7 @@
       DB_PASSWORD: ${DB_PASSWORD}
       SPRING_PROFILES_ACTIVE: prod
+      MAIL_HOST: ${MAIL_HOST}
+      MAIL_USERNAME: ${MAIL_USERNAME}
+      MAIL_PASSWORD: ${MAIL_PASSWORD}
 
   db:
