Index: src/main/java/com/example/salonbella/SalonbellaApplication.java
===================================================================
--- src/main/java/com/example/salonbella/SalonbellaApplication.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/SalonbellaApplication.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,14 @@
+package com.example.salonbella;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+@SpringBootApplication
+public class SalonbellaApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(SalonbellaApplication.class, args);
+    }
+
+}
Index: src/main/java/com/example/salonbella/controller/DefaultController.java
===================================================================
--- src/main/java/com/example/salonbella/controller/DefaultController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/controller/DefaultController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,13 @@
+package com.example.salonbella.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@Controller
+public class DefaultController {
+
+    @GetMapping("/index")
+    public String getDefaultPage() {
+        return "index";
+    }
+}
Index: src/main/java/com/example/salonbella/controller/login/LoginController.java
===================================================================
--- src/main/java/com/example/salonbella/controller/login/LoginController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/controller/login/LoginController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,35 @@
+package com.example.salonbella.controller.login;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+@Controller
+public class LoginController {
+
+
+    @GetMapping("/login")
+    public String getLoginPage(@RequestParam Map<String, String> allParams, Model model) {
+        for (String s : allParams.keySet()) {
+            if (s.equals("error")) {
+                model.addAttribute("message", "Invalid username/password");
+                return "login";
+            }
+        }
+        return "login";
+    }
+
+    @GetMapping("/userDashboard")
+    public String getUserPage() {
+        return "user-page";
+    }
+
+    @GetMapping("/adminDashboard")
+    public String getAdminPage() {
+        return "admin-page";
+    }
+}
Index: src/main/java/com/example/salonbella/controller/register/RegisterController.java
===================================================================
--- src/main/java/com/example/salonbella/controller/register/RegisterController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/controller/register/RegisterController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,41 @@
+package com.example.salonbella.controller.register;
+
+import com.example.salonbella.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("/register")
+public class RegisterController {
+
+    private final UserService userService;
+
+    @Autowired
+    public RegisterController(UserService userService) {
+        this.userService = userService;
+    }
+
+    @GetMapping
+    public String getRegisterPage() {
+        return "register";
+    }
+
+    @PostMapping
+    public String registerRequest(RegisterRequest registerRequest, Model model) {
+        if (userService.checkEmailExists(registerRequest.getEmail())) {
+            model.addAttribute("email", "Email already exists");
+            return "register";
+        }
+
+        if (userService.checkUsernameExists(registerRequest.getUsername())) {
+            model.addAttribute("username", "Username already exists");
+            return "register";
+        }
+        userService.registerNewUser(registerRequest);
+        return "redirect:/login";
+    }
+}
Index: src/main/java/com/example/salonbella/controller/register/RegisterRequest.java
===================================================================
--- src/main/java/com/example/salonbella/controller/register/RegisterRequest.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/controller/register/RegisterRequest.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,67 @@
+package com.example.salonbella.controller.register;
+
+public class RegisterRequest {
+    private String name;
+    private String surname;
+    private String number;
+    private String email;
+    private String username;
+    private String password;
+
+    public RegisterRequest(String name, String surname, String number, String email, String username, String password) {
+        this.name = name;
+        this.surname = surname;
+        this.number = number;
+        this.email = email;
+        this.username = username;
+        this.password = password;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setSurname(String surname) {
+        this.surname = surname;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getSurname() {
+        return surname;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+}
Index: src/main/java/com/example/salonbella/controller/token/TokenController.java
===================================================================
--- src/main/java/com/example/salonbella/controller/token/TokenController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/controller/token/TokenController.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,24 @@
+package com.example.salonbella.controller.token;
+
+import com.example.salonbella.service.mail.ConfirmationTokenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Controller
+public class TokenController {
+
+    private final ConfirmationTokenService confirmationTokenService;
+
+    @Autowired
+    public TokenController(ConfirmationTokenService confirmationTokenService) {
+        this.confirmationTokenService = confirmationTokenService;
+    }
+
+    @GetMapping("/confirm")
+    public String confirmToken(@RequestParam("token") String token) throws Exception {
+        confirmationTokenService.confirmToken(token);
+        return "redirect:/login";
+    }
+}
Index: src/main/java/com/example/salonbella/entity/ConfirmationTokenEntity.java
===================================================================
--- src/main/java/com/example/salonbella/entity/ConfirmationTokenEntity.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/entity/ConfirmationTokenEntity.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,86 @@
+package com.example.salonbella.entity;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+
+@Entity
+@Table(name = "confirmation_token")
+public class ConfirmationTokenEntity {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "token",nullable = false)
+    private String token;
+
+    @Column(name = "created",nullable = false)
+    private LocalDateTime createdAt;
+
+    @Column(name = "expires",nullable = false)
+    private LocalDateTime expiresAt;
+
+    private LocalDateTime confirmedAt;
+
+    @ManyToOne
+    @JoinColumn(name = "user_id",nullable = false)
+    private UserEntity user;
+
+    public ConfirmationTokenEntity() {
+    }
+
+    public ConfirmationTokenEntity(String token, LocalDateTime createdAt, LocalDateTime expiresAt, UserEntity user) {
+        this.token = token;
+        this.createdAt = createdAt;
+        this.expiresAt = expiresAt;
+        this.user = user;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public LocalDateTime getExpiresAt() {
+        return expiresAt;
+    }
+
+    public void setExpiresAt(LocalDateTime expiresAt) {
+        this.expiresAt = expiresAt;
+    }
+
+    public LocalDateTime getConfirmedAt() {
+        return confirmedAt;
+    }
+
+    public void setConfirmedAt(LocalDateTime confirmedAt) {
+        this.confirmedAt = confirmedAt;
+    }
+
+    public UserEntity getUser() {
+        return user;
+    }
+
+    public void setUser(UserEntity user) {
+        this.user = user;
+    }
+}
Index: src/main/java/com/example/salonbella/entity/UserEntity.java
===================================================================
--- src/main/java/com/example/salonbella/entity/UserEntity.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/entity/UserEntity.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,113 @@
+package com.example.salonbella.entity;
+
+import javax.persistence.*;
+import java.util.Set;
+
+@Entity
+@Table(name = "users")
+public class UserEntity {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "first_name", nullable = false, length = 30)
+    private String name;
+
+    @Column(name = "last_name", nullable = false, length = 30)
+    private String surname;
+
+    @Column(name = "phone_number",nullable = false, length = 30)
+    private String number;
+
+    @Column(name = "email", nullable = false, unique = true, length = 30)
+    private String email;
+
+    @Column(name = "username", nullable = false, unique = true, length = 30)
+    private String username;
+
+    @Column(name = "password", nullable = false, length = 100)
+    private String password;
+
+    @Column(name = "role", nullable = false, length = 10)
+    private String role = "USER";
+
+    @Column(name = "valid",nullable = false)
+    private boolean valid = false;
+
+
+
+    public UserEntity() {
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public boolean isValid() {
+        return valid;
+    }
+
+    public void setValid(boolean valid) {
+        this.valid = valid;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSurname() {
+        return surname;
+    }
+
+    public void setSurname(String surname) {
+        this.surname = surname;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+}
Index: src/main/java/com/example/salonbella/repository/ConfirmationTokenRepository.java
===================================================================
--- src/main/java/com/example/salonbella/repository/ConfirmationTokenRepository.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/repository/ConfirmationTokenRepository.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,14 @@
+package com.example.salonbella.repository;
+
+import com.example.salonbella.entity.ConfirmationTokenEntity;
+import com.example.salonbella.entity.UserEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface ConfirmationTokenRepository extends JpaRepository<ConfirmationTokenEntity, Long> {
+    Optional<ConfirmationTokenEntity> findByToken(String token);
+
+}
Index: src/main/java/com/example/salonbella/repository/UserRepository.java
===================================================================
--- src/main/java/com/example/salonbella/repository/UserRepository.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/repository/UserRepository.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,10 @@
+package com.example.salonbella.repository;
+
+import com.example.salonbella.entity.UserEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserRepository extends JpaRepository<UserEntity, Long> {
+    UserEntity findByUsername(String username);
+}
Index: src/main/java/com/example/salonbella/security/ApplicationSecurityConfig.java
===================================================================
--- src/main/java/com/example/salonbella/security/ApplicationSecurityConfig.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/security/ApplicationSecurityConfig.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,78 @@
+package com.example.salonbella.security;
+
+import com.example.salonbella.entity.UserEntity;
+import com.example.salonbella.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+
+import javax.annotation.Resource;
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+@EnableWebSecurity
+public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
+
+    @Resource
+    private UserService userService;
+
+    private AuthenticationSuccessHandler successHandler;
+
+    @Autowired
+    public ApplicationSecurityConfig(AuthenticationSuccessHandler successHandler) {
+        this.successHandler = successHandler;
+    }
+
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+
+
+        http
+                .csrf().disable()
+                .authorizeRequests()
+                .antMatchers("/", "/index", "/register","/confirm").permitAll()
+                .antMatchers("/adminDashboard","/admin-scheduled-reservations","/admin-get-scheduled-reservations","/admin-cancel-reservation","/admin-block-reservation","/admin-get-blocked-reservations","/admin-unblock-reservation","/admin-schedule reservation","/admin-add-product","/admin-get-orders","/admin-change-status","/admin-cancel-order","/admin-remove-product").hasRole(ApplicationUserRole.ADMIN.name())
+                .anyRequest()
+                .authenticated()
+                .and()
+                .formLogin()
+                .loginPage("/login")
+                .successHandler(successHandler)
+                .permitAll()
+                .and()
+                .logout()
+                .logoutUrl("/logout")
+                .logoutRequestMatcher(new AntPathRequestMatcher(("/logout"), "GET"))
+                .clearAuthentication(true)
+                .invalidateHttpSession(true)
+                .deleteCookies("JSESSIONID")
+                .logoutSuccessUrl("/login");
+    }
+
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder(10);
+    }
+
+    @Bean
+    public DaoAuthenticationProvider authenticationProvider() {
+        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
+        authProvider.setUserDetailsService(userService);
+        authProvider.setPasswordEncoder(passwordEncoder());
+        return authProvider;
+    }
+
+    @Override
+    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+        auth.authenticationProvider(authenticationProvider());
+    }
+}
Index: src/main/java/com/example/salonbella/security/ApplicationUserRole.java
===================================================================
--- src/main/java/com/example/salonbella/security/ApplicationUserRole.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/security/ApplicationUserRole.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,6 @@
+package com.example.salonbella.security;
+
+public enum ApplicationUserRole {
+    USER,
+    ADMIN
+}
Index: src/main/java/com/example/salonbella/security/CustomSuccessHandler.java
===================================================================
--- src/main/java/com/example/salonbella/security/CustomSuccessHandler.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/security/CustomSuccessHandler.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,27 @@
+package com.example.salonbella.security;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Set;
+
+@Configuration
+public class CustomSuccessHandler implements AuthenticationSuccessHandler {
+
+    @Override
+    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
+        Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
+
+        if (roles.contains("ROLE_ADMIN")) {
+            response.sendRedirect("/adminDashboard");
+        } else {
+            response.sendRedirect("/userDashboard");
+        }
+    }
+}
Index: src/main/java/com/example/salonbella/service/UserService.java
===================================================================
--- src/main/java/com/example/salonbella/service/UserService.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/service/UserService.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,89 @@
+package com.example.salonbella.service;
+
+import com.example.salonbella.controller.register.RegisterRequest;
+import com.example.salonbella.entity.ConfirmationTokenEntity;
+import com.example.salonbella.entity.UserEntity;
+import com.example.salonbella.repository.UserRepository;
+import com.example.salonbella.service.mail.ConfirmationTokenService;
+import com.example.salonbella.service.mail.EmailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.UUID;
+
+@Service
+public class UserService implements UserDetailsService {
+    private final UserRepository repository;
+    private final ConfirmationTokenService confirmationTokenService;
+    private final EmailService emailService;
+
+    @Autowired
+    public UserService(UserRepository repository, ConfirmationTokenService confirmationTokenService, EmailService emailService) {
+        this.repository = repository;
+        this.confirmationTokenService = confirmationTokenService;
+        this.emailService = emailService;
+    }
+
+    public void registerNewUser(RegisterRequest registerRequest) {
+        PasswordEncoder encoder = new BCryptPasswordEncoder(10);
+        UserEntity userEntity = new UserEntity();
+        userEntity.setName(registerRequest.getName());
+        userEntity.setSurname(registerRequest.getSurname());
+        userEntity.setNumber(registerRequest.getNumber());
+        userEntity.setEmail(registerRequest.getEmail());
+        userEntity.setUsername(registerRequest.getUsername());
+        userEntity.setPassword(encoder.encode(registerRequest.getPassword()));
+
+        String token = UUID.randomUUID().toString();
+        ConfirmationTokenEntity confirmationTokenEntity = new ConfirmationTokenEntity(
+                token,
+                LocalDateTime.now(),
+                LocalDateTime.now().plusMinutes(30),
+                userEntity
+        );
+        repository.save(userEntity);
+        confirmationTokenService.saveConfirmationToken(confirmationTokenEntity);
+        emailService.send(registerRequest.getEmail(), registerRequest.getName(), token);
+    }
+
+    public void registerAdmin(UserEntity userEntity) {
+        repository.save(userEntity);
+    }
+
+    public boolean checkUsernameExists(String username) {
+        List<UserEntity> userEntities = repository.findAll();
+        for (UserEntity u : userEntities) {
+            if (u.getUsername().equalsIgnoreCase(username)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean checkEmailExists(String email) {
+        List<UserEntity> userEntities = repository.findAll();
+        for (UserEntity u : userEntities) {
+            if (u.getEmail().equalsIgnoreCase(email)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+
+        final UserEntity user = repository.findByUsername(username);
+        if (user == null || !user.isValid())
+            throw new UsernameNotFoundException(username);
+        return User.withUsername(user.getUsername()).password(user.getPassword()).roles(user.getRole()).build();
+    }
+}
Index: src/main/java/com/example/salonbella/service/mail/ConfirmationTokenService.java
===================================================================
--- src/main/java/com/example/salonbella/service/mail/ConfirmationTokenService.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/service/mail/ConfirmationTokenService.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,47 @@
+package com.example.salonbella.service.mail;
+
+import com.example.salonbella.entity.ConfirmationTokenEntity;
+import com.example.salonbella.entity.UserEntity;
+import com.example.salonbella.repository.ConfirmationTokenRepository;
+import com.example.salonbella.repository.UserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.time.LocalDateTime;
+import java.util.Optional;
+
+@Service
+public class ConfirmationTokenService {
+    private final ConfirmationTokenRepository confirmationTokenRepository;
+    private final UserRepository userRepository;
+
+    @Autowired
+    public ConfirmationTokenService(ConfirmationTokenRepository confirmationTokenRepository, UserRepository userRepository) {
+        this.confirmationTokenRepository = confirmationTokenRepository;
+        this.userRepository = userRepository;
+    }
+
+
+    public void saveConfirmationToken(ConfirmationTokenEntity confirmationTokenEntity) {
+        confirmationTokenRepository.save(confirmationTokenEntity);
+    }
+
+    @Transactional
+    public void confirmToken(String token) throws Exception {
+        ConfirmationTokenEntity confirmationTokenEntity = confirmationTokenRepository.findByToken(token).orElseThrow(IllegalStateException::new);
+        if (confirmationTokenEntity.getConfirmedAt() != null) {
+            throw new Exception();
+        }
+        LocalDateTime expiresAt = confirmationTokenEntity.getExpiresAt();
+
+        if (expiresAt.isBefore(LocalDateTime.now())) {
+            throw new Exception();
+        }
+
+        Optional<UserEntity> userEntity = userRepository.findById(confirmationTokenEntity.getUser().getId());
+        userEntity.ifPresent(entity -> entity.setValid(true));
+        confirmationTokenRepository.delete(confirmationTokenEntity);
+
+    }
+}
Index: src/main/java/com/example/salonbella/service/mail/EmailService.java
===================================================================
--- src/main/java/com/example/salonbella/service/mail/EmailService.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/service/mail/EmailService.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,101 @@
+package com.example.salonbella.service.mail;
+
+
+import lombok.AllArgsConstructor;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.stereotype.Service;
+
+import javax.mail.internet.MimeMessage;
+
+@AllArgsConstructor
+@Service
+public class EmailService {
+
+    private JavaMailSender javaMailSender;
+
+    public void send(String to, String name, String token) {
+        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
+        try {
+
+            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, false,"utf-8");
+            helper.setText(buildEmail(name, "http://localhost:8080/confirm?token=" + token), true);
+            helper.setTo(to);
+            helper.setSubject("Confirm your account");
+            helper.setFrom("salonbella@gmail.com");
+            javaMailSender.send(mimeMessage);
+        } catch (Exception ignored) {
+
+        }
+    }
+
+
+    private String buildEmail(String name, String link) {
+        return "<div style=\"font-family:Helvetica,Arial,sans-serif;font-size:16px;margin:0;color:#0b0c0c\">\n" +
+                "\n" +
+                "<span style=\"display:none;font-size:1px;color:#fff;max-height:0\"></span>\n" +
+                "\n" +
+                "  <table role=\"presentation\" width=\"100%\" style=\"border-collapse:collapse;min-width:100%;width:100%!important\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n" +
+                "    <tbody><tr>\n" +
+                "      <td width=\"100%\" height=\"53\" bgcolor=\"#0b0c0c\">\n" +
+                "        \n" +
+                "        <table role=\"presentation\" width=\"100%\" style=\"border-collapse:collapse;max-width:580px\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"center\">\n" +
+                "          <tbody><tr>\n" +
+                "            <td width=\"70\" bgcolor=\"#0b0c0c\" valign=\"middle\">\n" +
+                "                <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse:collapse\">\n" +
+                "                  <tbody><tr>\n" +
+                "                    <td style=\"padding-left:10px\">\n" +
+                "                  \n" +
+                "                    </td>\n" +
+                "                    <td style=\"font-size:28px;line-height:1.315789474;Margin-top:4px;padding-left:10px\">\n" +
+                "                      <span style=\"font-family:Helvetica,Arial,sans-serif;font-weight:700;color:#ffffff;text-decoration:none;vertical-align:top;display:inline-block\">Confirm your email</span>\n" +
+                "                    </td>\n" +
+                "                  </tr>\n" +
+                "                </tbody></table>\n" +
+                "              </a>\n" +
+                "            </td>\n" +
+                "          </tr>\n" +
+                "        </tbody></table>\n" +
+                "        \n" +
+                "      </td>\n" +
+                "    </tr>\n" +
+                "  </tbody></table>\n" +
+                "  <table role=\"presentation\" class=\"m_-6186904992287805515content\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse:collapse;max-width:580px;width:100%!important\" width=\"100%\">\n" +
+                "    <tbody><tr>\n" +
+                "      <td width=\"10\" height=\"10\" valign=\"middle\"></td>\n" +
+                "      <td>\n" +
+                "        \n" +
+                "                <table role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse:collapse\">\n" +
+                "                  <tbody><tr>\n" +
+                "                    <td bgcolor=\"#1D70B8\" width=\"100%\" height=\"10\"></td>\n" +
+                "                  </tr>\n" +
+                "                </tbody></table>\n" +
+                "        \n" +
+                "      </td>\n" +
+                "      <td width=\"10\" valign=\"middle\" height=\"10\"></td>\n" +
+                "    </tr>\n" +
+                "  </tbody></table>\n" +
+                "\n" +
+                "\n" +
+                "\n" +
+                "  <table role=\"presentation\" class=\"m_-6186904992287805515content\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse:collapse;max-width:580px;width:100%!important\" width=\"100%\">\n" +
+                "    <tbody><tr>\n" +
+                "      <td height=\"30\"><br></td>\n" +
+                "    </tr>\n" +
+                "    <tr>\n" +
+                "      <td width=\"10\" valign=\"middle\"><br></td>\n" +
+                "      <td style=\"font-family:Helvetica,Arial,sans-serif;font-size:19px;line-height:1.315789474;max-width:560px\">\n" +
+                "        \n" +
+                "            <p style=\"Margin:0 0 20px 0;font-size:19px;line-height:25px;color:#0b0c0c\">Hi " + name + ",</p><p style=\"Margin:0 0 20px 0;font-size:19px;line-height:25px;color:#0b0c0c\"> Thank you for registering. Please click on the below link to activate your account: </p><blockquote style=\"Margin:0 0 20px 0;border-left:10px solid #b1b4b6;padding:15px 0 0.1px 15px;font-size:19px;line-height:25px\"><p style=\"Margin:0 0 20px 0;font-size:19px;line-height:25px;color:#0b0c0c\"> <a href=\"" + link + "\">Activate Now</a> </p></blockquote>\n Link will expire in 30 minutes. <p>See you soon</p>" +
+                "        \n" +
+                "      </td>\n" +
+                "      <td width=\"10\" valign=\"middle\"><br></td>\n" +
+                "    </tr>\n" +
+                "    <tr>\n" +
+                "      <td height=\"30\"><br></td>\n" +
+                "    </tr>\n" +
+                "  </tbody></table><div class=\"yj6qo\"></div><div class=\"adL\">\n" +
+                "\n" +
+                "</div></div>";
+    }
+}
Index: src/main/java/com/example/salonbella/startup/CommandLineAppStartupRunner.java
===================================================================
--- src/main/java/com/example/salonbella/startup/CommandLineAppStartupRunner.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/java/com/example/salonbella/startup/CommandLineAppStartupRunner.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,48 @@
+package com.example.salonbella.startup;
+
+import com.example.salonbella.entity.UserEntity;
+import com.example.salonbella.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CommandLineAppStartupRunner implements CommandLineRunner {
+
+    private final UserService userService;
+
+    @Autowired
+    public CommandLineAppStartupRunner(UserService userService) {
+        this.userService = userService;
+    }
+
+    @Override
+    public void run(String... args) throws Exception {
+        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(10);
+        UserEntity userEntity = new UserEntity();
+        userEntity.setName("Mladen");
+        userEntity.setSurname("Jovanovski");
+        userEntity.setEmail("mjovanovski04@gmail.com");
+        userEntity.setPassword(passwordEncoder.encode("admin"));
+        userEntity.setUsername("admin");
+        userEntity.setRole("ADMIN");
+        userEntity.setValid(true);
+        userEntity.setNumber("072312134");
+        userService.registerAdmin(userEntity);
+
+        UserEntity userEntity2 = new UserEntity();
+        userEntity2.setName("Mladen");
+        userEntity2.setSurname("Jovanovski");
+        userEntity2.setEmail("m@gmail.com");
+        userEntity2.setPassword(passwordEncoder.encode("maky"));
+        userEntity2.setUsername("maky");
+        userEntity2.setRole("USER");
+        userEntity2.setValid(true);
+        userEntity2.setNumber("072312134");
+        userService.registerAdmin(userEntity2);
+
+
+    }
+}
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/resources/application.properties	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,23 @@
+spring.datasource.url=jdbc:postgresql://localhost:5432/users
+spring.datasource.username=postgres
+spring.datasource.password=maky123
+spring.jpa.hibernate.ddl-auto=create-drop
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
+spring.jpa.properties.hibernate.format_sql=true
+
+spring.freemarker.template-loader-path=classpath:/templates
+spring.freemarker.suffix=.ftl
+
+spring.mail.host=localhost
+spring.mail.port=1025
+spring.mail.username=maky
+spring.mail.password=maky
+
+spring.mail.properties.mail.transport.protocol = smtp
+spring.mail.properties.mail.smtp.ssl.trust="*"
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.starttls.enable=true
+spring.mail.properties.mail.smtp.connectiontimeout=5000
+spring.mail.properties.mail.smtp.timeout=3000
+spring.mail.properties.mail.smtp.writetimeout=5000
Index: src/main/resources/templates/admin-page.ftl
===================================================================
--- src/main/resources/templates/admin-page.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/resources/templates/admin-page.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Admin Page</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <!-- Font Awesome -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
+            rel="stylesheet"
+    />
+    <!-- Google Fonts -->
+    <link
+            href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
+            rel="stylesheet"
+    />
+    <!-- MDB -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.css"
+            rel="stylesheet"
+    />
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
+    <a class="navbar-brand" href="#">Salon Bella</a>
+    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+        <span class="navbar-toggler-icon"></span>
+    </button>
+
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item ">
+                <a class="nav-link" href="/adminDashboard">Home <span class="sr-only">(current)</span></a>
+            </li>
+
+            <li class="nav-item dropdown">
+                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    Functions - Reservations
+                </a>
+                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+                    <a class="dropdown-item" href="/admin-scheduled-reservations">Scheduled Reservations</a>
+                    <a class="dropdown-item" href="/admin-schedule-reservation">Schedule reservation</a>
+                    <div class="dropdown-divider"></div>
+                    <a class="dropdown-item" href="/admin-get-blocked-reservations">Blocked reservations</a>
+                    <a class="dropdown-item" href="/admin-block-reservation">Block reservation</a>
+                </div>
+            </li>
+
+            <li class="nav-item dropdown">
+                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    Functions - Orders
+                </a>
+                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+                    <a class="dropdown-item" href="/admin-get-orders">Ordered Products</a>
+                    <a class="dropdown-item" href="/admin-add-product">Add product</a>
+                    <a class="dropdown-item" href="/admin-remove-product">Remove product</a>
+                </div>
+            </li>
+
+        </ul>
+        <form class="form-inline my-2 my-lg-0" method="get" action="/logout">
+            <button class="btn btn-outline-info my-2 my-sm-0" type="submit">Log out</button>
+        </form>
+    </div>
+</nav>
+<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+<script
+        type="text/javascript"
+        src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.js"
+></script>
+</body>
+</html>
Index: src/main/resources/templates/index.ftl
===================================================================
--- src/main/resources/templates/index.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/resources/templates/index.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Salon Bella</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.1.2/css/fontawesome.min.css" integrity="sha384-X8QTME3FCg1DLb58++lPvsjbQoCT9bp3MsUU3grbIny/3ZwUJkRNO8NPW6zqzuW9" crossorigin="anonymous">
+    <style>
+        * {
+            margin: 0;
+            padding: 0;
+            box-sizing: border-box;
+            font-family: "Abel", sans-serif;
+            font-size: 10px;
+            scroll-behavior: smooth;
+        }
+        .wrapper {
+            width: auto;
+            height: 100vh;
+            background-image: linear-gradient( rgba(10, 20, 30, 40.5), rgba(50, 0, 20, 0.5)), url("https://i.ibb.co/jk8FCT0/background.jpg");
+            background-position: center;
+            background-size: cover;
+            background-repeat: no-repeat;
+            backdrop-filter: opacity(80%);
+        }
+        .Container {
+            width: 100%;
+            height: 100%;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
+        .nav {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 80px;
+            border-bottom: 1px solid rgba(255, 255, 255, 0.521);
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: 0 50px;
+        }
+        .logo {
+            font-family: "Abel", sans-serif;
+            font-size: 2.5rem;
+            font-weight: 600;
+            letter-spacing: 0.7rem;
+            color: white;
+            margin: 4%;
+        }
+        .menu {
+            display: inline-block;
+            line-height: 80px;
+        }
+        .menu ul {
+            list-style: none;
+            /* display: flex;
+              flex-direction: row;
+              justify-content: center;
+              align-items: center; */
+        }
+        .menu ul li {
+            display: inline-block;
+        }
+        .menu ul li a {
+            text-decoration: none;
+            font-family: cursive;
+            font-size: 1.2rem;
+            font-weight: 600;
+            letter-spacing: 0.1rem;
+            color: white;
+            border: 1px solid transparent;
+            border-radius: 4px;
+            padding: 10px 15px;
+            margin: 0 5px;
+            transition: 0.5s ease;
+        }
+        .menu ul li a:hover {
+            border-color: white;
+        }
+        .menu ul li:nth-child(5) a {
+            color: #fff200;
+            border: 1px solid #fff200;
+        }
+        .menu ul li:nth-child(5) a:hover {
+            color: black;
+            background-color: #fff200;
+        }
+        .header {
+            text-align: center;
+
+        }
+        .header h1 {
+            font-family: cursive;
+            font-size: 4rem;
+            font-weight: 600;
+            letter-spacing: 0.2rem;
+            color: white;
+            padding: 45% 20px 8px;
+        }
+        .header p {
+            font-family: cursive;
+            font-size: 1.5rem;
+            font-weight: 600;
+            letter-spacing: 0.2rem;
+            color: white;
+            padding: 10px 15px;
+        }
+        button {
+            font-size: 1.5rem;
+            font-weight: 600;
+            letter-spacing: 0.15rem;
+            color: black;
+            background-color: #fff200;
+            padding: 20px 30px;
+            margin: 50px 5px 0;
+            border: none;
+            cursor: pointer;
+        }
+
+    </style>
+</head>
+<body>
+<div class="wrapper" >
+    <div class="Container">
+        <div class="nav">
+            <div class="logo">
+                B
+            </div>
+            <div class="menu">
+                <ul class="navMenu">
+                    <li><a href="/login">Login</a></li>
+                    <li><a href="/register">Register</a></li>
+                </ul>
+            </div>
+        </div>
+        <div class="header">
+            <h1>Beauty Salon Bella</h1>
+            <p>Kumanovo,North Macedonia</p>
+        </div>
+    </div>
+</div>
+</body>
+</html>
Index: src/main/resources/templates/login.ftl
===================================================================
--- src/main/resources/templates/login.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/resources/templates/login.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Login Page</title>
+    <!-- Font Awesome -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
+            rel="stylesheet"
+    />
+    <!-- Google Fonts -->
+    <link
+            href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
+            rel="stylesheet"
+    />
+    <!-- MDB -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.css"
+            rel="stylesheet"
+    />
+</head>
+<body>
+
+<!-- Section: Design Block -->
+<section class="text-center text-lg-start">
+    <style>
+        .cascading-right {
+            margin-right: -50px;
+        }
+
+        @media (max-width: 991.98px) {
+            .cascading-right {
+                margin-right: 0;
+            }
+        }
+    </style>
+
+    <!-- Jumbotron -->
+    <div class="container py-4">
+        <div class="row g-0 align-items-center">
+            <div class="col-lg-6 mb-5 mb-lg-0">
+                <div class="card cascading-right" style="
+            background: hsla(0, 0%, 100%, 0.55);
+            backdrop-filter: blur(30px);
+            ">
+                    <div class="card-body p-5 shadow-5 text-center">
+                        <h2 class="fw-bold mb-5">Login now</h2>
+                        <form method="post" action="/login">
+
+                            <div class="form-outline mb-4">
+                                <input type="text" id="form3Example3" class="form-control" name="username"/>
+                                <label class="form-label" for="form3Example3">Username</label>
+                            </div>
+
+                            <!-- Password input -->
+                            <div class="form-outline mb-4">
+                                <input type="password" id="form3Example4" class="form-control" name="password"/>
+                                <label class="form-label" for="form3Example4">Password</label>
+                            </div>
+
+                            <div class="form-check d-flex justify-content-center mb-4">
+                                <#if message??>
+                                    <p>${message}</p>
+                                </#if>
+                            </div>
+
+                            <!-- Submit button -->
+                            <button type="submit" class="btn btn-primary btn-block mb-4">
+                                Login
+                            </button>
+
+                        </form>
+                    </div>
+                </div>
+            </div>
+
+            <div class="col-lg-6 mb-5 mb-lg-10">
+                <img src="https://i.ibb.co/jk8FCT0/background.jpg" class="w-100 rounded-4 shadow-4"
+                     alt="" />
+            </div>
+        </div>
+    </div>
+    <!-- Jumbotron -->
+</section>
+<!-- Section: Design Block -->
+
+
+
+<!-- MDB -->
+<script
+        type="text/javascript"
+        src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.js"
+></script>
+</body>
+</html>
Index: src/main/resources/templates/register.ftl
===================================================================
--- src/main/resources/templates/register.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/resources/templates/register.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Register Page</title>
+    <!-- Font Awesome -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
+            rel="stylesheet"
+    />
+    <!-- Google Fonts -->
+    <link
+            href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
+            rel="stylesheet"
+    />
+    <!-- MDB -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.css"
+            rel="stylesheet"
+    />
+</head>
+<body>
+
+<!-- Section: Design Block -->
+<section class="text-center text-lg-start">
+    <style>
+        .cascading-right {
+            margin-right: -50px;
+        }
+
+        @media (max-width: 991.98px) {
+            .cascading-right {
+                margin-right: 0;
+            }
+        }
+    </style>
+
+    <!-- Jumbotron -->
+    <div class="container py-4">
+        <div class="row g-0 align-items-center">
+            <div class="col-lg-6 mb-5 mb-lg-0">
+                <div class="card cascading-right" style="
+            background: hsla(0, 0%, 100%, 0.55);
+            backdrop-filter: blur(30px);
+            ">
+                    <div class="card-body p-5 shadow-5 text-center">
+                        <h2 class="fw-bold mb-5">Sign up now</h2>
+                        <form method="post" action="/register">
+                            <!-- 2 column grid layout with text inputs for the first and last names -->
+                            <div class="row">
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <input type="text" id="form3Example1" class="form-control" name="name"/>
+                                        <label class="form-label" for="form3Example1">First name</label>
+                                    </div>
+                                </div>
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <input type="text" id="form3Example2" class="form-control" name="surname"/>
+                                        <label class="form-label" for="form3Example2">Last name</label>
+                                    </div>
+                                </div>
+                            </div>
+
+
+                            <!-- Email input -->
+                            <div class="form-outline mb-4">
+                                <input type="text" id="form3Example3" class="form-control" name="number"/>
+                                <label class="form-label" for="form3Example3">Phone Number</label>
+                            </div>
+
+                            <!-- Email input -->
+                            <div class="form-outline mb-4">
+                                <input type="email" id="form3Example3" class="form-control" name="email"/>
+                                <label class="form-label" for="form3Example3">Email address</label>
+                            </div>
+
+                            <div class="form-outline mb-4">
+                                <input type="text" id="form3Example3" class="form-control" name="username"/>
+                                <label class="form-label" for="form3Example3">Username</label>
+                            </div>
+
+                            <!-- Password input -->
+                            <div class="form-outline mb-4">
+                                <input type="password" id="form3Example4" class="form-control" name="password"/>
+                                <label class="form-label" for="form3Example4">Password</label>
+                            </div>
+
+                            <div class="form-check d-flex justify-content-center mb-4">
+                                <#if email??>
+                                    <p>${email}</p>
+                                </#if>
+                                <#if username??>
+                                    <p>${username}</p>
+                                </#if>
+                            </div>
+
+                            <!-- Submit button -->
+                            <button type="submit" class="btn btn-primary btn-block mb-4">
+                                Sign up
+                            </button>
+
+                        </form>
+                    </div>
+                </div>
+            </div>
+
+            <div class="col-lg-6 mb-5 mb-lg-13">
+                <img src="https://i.ibb.co/jk8FCT0/background.jpg" class="w-100 rounded-4 shadow-4"
+                     alt="" />
+            </div>
+        </div>
+    </div>
+    <!-- Jumbotron -->
+</section>
+<!-- Section: Design Block -->
+
+
+
+<!-- MDB -->
+<script
+        type="text/javascript"
+        src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.js"
+></script>
+
+</body>
+</html>
Index: src/main/resources/templates/user-page.ftl
===================================================================
--- src/main/resources/templates/user-page.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/main/resources/templates/user-page.ftl	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>User Page</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <!-- Font Awesome -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
+            rel="stylesheet"
+    />
+    <!-- Google Fonts -->
+    <link
+            href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
+            rel="stylesheet"
+    />
+    <!-- MDB -->
+    <link
+            href="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.css"
+            rel="stylesheet"
+    />
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+</head>
+<body>
+
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
+    <a class="navbar-brand" href="#">Salon Bella</a>
+    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+        <span class="navbar-toggler-icon"></span>
+    </button>
+
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item ">
+                <a class="nav-link" href="/userDashboard">Home <span class="sr-only">(current)</span></a>
+            </li>
+
+            <li class="nav-item dropdown">
+                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    Functions - Reservations
+                </a>
+                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+                    <a class="dropdown-item" href="/schedule-reservation">Schedule Reservations</a>
+                    <a class="dropdown-item" href="/my-reservations">My scheduled reservations</a>
+                </div>
+            </li>
+
+            <li class="nav-item dropdown">
+                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    Functions - Orders
+                </a>
+                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+                    <a class="dropdown-item" href="/order">Order Products</a>
+                    <a class="dropdown-item" href="/my-orders">Ordered Products</a>
+                </div>
+            </li>
+
+        </ul>
+        <form class="form-inline my-2 my-lg-0" method="get" action="/logout">
+            <button class="btn btn-outline-info my-2 my-sm-0" type="submit">Log out</button>
+        </form>
+    </div>
+</nav>
+
+<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+<script
+        type="text/javascript"
+        src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/5.0.0/mdb.min.js"
+></script>
+</body>
+</html>
Index: src/test/java/com/example/salonbella/SalonbellaApplicationTests.java
===================================================================
--- src/test/java/com/example/salonbella/SalonbellaApplicationTests.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
+++ src/test/java/com/example/salonbella/SalonbellaApplicationTests.java	(revision 74af3946a75d5e098b56a553852617e1cea48bee)
@@ -0,0 +1,13 @@
+package com.example.salonbella;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class SalonbellaApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}
