diff --git a/staff/rafael-infante/unsocial .1/.gitkeep b/staff/rafael-infante/unsocial.1/.gitkeep
similarity index 100%
rename from staff/rafael-infante/unsocial .1/.gitkeep
rename to staff/rafael-infante/unsocial.1/.gitkeep
diff --git a/staff/rafael-infante/unsocial .1/images/boy.png b/staff/rafael-infante/unsocial.1/images/boy.png
similarity index 100%
rename from staff/rafael-infante/unsocial .1/images/boy.png
rename to staff/rafael-infante/unsocial.1/images/boy.png
diff --git a/staff/rafael-infante/unsocial .1/images/girl.png b/staff/rafael-infante/unsocial.1/images/girl.png
similarity index 100%
rename from staff/rafael-infante/unsocial .1/images/girl.png
rename to staff/rafael-infante/unsocial.1/images/girl.png
diff --git a/staff/rafael-infante/unsocial .1/images/users-avatar.png b/staff/rafael-infante/unsocial.1/images/users-avatar.png
similarity index 100%
rename from staff/rafael-infante/unsocial .1/images/users-avatar.png
rename to staff/rafael-infante/unsocial.1/images/users-avatar.png
diff --git a/staff/rafael-infante/unsocial .1/images/users-avatar2.png b/staff/rafael-infante/unsocial.1/images/users-avatar2.png
similarity index 100%
rename from staff/rafael-infante/unsocial .1/images/users-avatar2.png
rename to staff/rafael-infante/unsocial.1/images/users-avatar2.png
diff --git a/staff/rafael-infante/unsocial .1/index.1.html b/staff/rafael-infante/unsocial.1/index.1.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.1.html
rename to staff/rafael-infante/unsocial.1/index.1.html
diff --git a/staff/rafael-infante/unsocial .1/index.2.html b/staff/rafael-infante/unsocial.1/index.2.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.2.html
rename to staff/rafael-infante/unsocial.1/index.2.html
diff --git a/staff/rafael-infante/unsocial .1/index.3.html b/staff/rafael-infante/unsocial.1/index.3.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.3.html
rename to staff/rafael-infante/unsocial.1/index.3.html
diff --git a/staff/rafael-infante/unsocial .1/index.4.html b/staff/rafael-infante/unsocial.1/index.4.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.4.html
rename to staff/rafael-infante/unsocial.1/index.4.html
diff --git a/staff/rafael-infante/unsocial .1/index.5.html b/staff/rafael-infante/unsocial.1/index.5.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.5.html
rename to staff/rafael-infante/unsocial.1/index.5.html
diff --git a/staff/rafael-infante/unsocial .1/index.6.html b/staff/rafael-infante/unsocial.1/index.6.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.6.html
rename to staff/rafael-infante/unsocial.1/index.6.html
diff --git a/staff/rafael-infante/unsocial .1/index.html b/staff/rafael-infante/unsocial.1/index.html
similarity index 100%
rename from staff/rafael-infante/unsocial .1/index.html
rename to staff/rafael-infante/unsocial.1/index.html
diff --git a/staff/rafael-infante/unsocial.2/.gitkeep b/staff/rafael-infante/unsocial.2/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/staff/rafael-infante/unsocial.2/data.js b/staff/rafael-infante/unsocial.2/data.js
new file mode 100644
index 00000000..f98e7df4
--- /dev/null
+++ b/staff/rafael-infante/unsocial.2/data.js
@@ -0,0 +1,4 @@
+var users = [
+ { name: 'Peter Pan', email: 'peter@pan.com', username: 'peterpan', password: '123123123' },
+ { name: 'Wendy Darling', email: 'wendy@darling.com', username: 'wendydarling', password: '123123123' }
+]
\ No newline at end of file
diff --git a/staff/rafael-infante/unsocial.2/images/boy.png b/staff/rafael-infante/unsocial.2/images/boy.png
new file mode 100644
index 00000000..fc4e8b35
Binary files /dev/null and b/staff/rafael-infante/unsocial.2/images/boy.png differ
diff --git a/staff/rafael-infante/unsocial.2/images/girl.png b/staff/rafael-infante/unsocial.2/images/girl.png
new file mode 100644
index 00000000..27f367db
Binary files /dev/null and b/staff/rafael-infante/unsocial.2/images/girl.png differ
diff --git a/staff/rafael-infante/unsocial.2/images/users-avatar.png b/staff/rafael-infante/unsocial.2/images/users-avatar.png
new file mode 100644
index 00000000..7ac2ff60
Binary files /dev/null and b/staff/rafael-infante/unsocial.2/images/users-avatar.png differ
diff --git a/staff/rafael-infante/unsocial.2/images/users-avatar2.png b/staff/rafael-infante/unsocial.2/images/users-avatar2.png
new file mode 100644
index 00000000..ccee2bf7
Binary files /dev/null and b/staff/rafael-infante/unsocial.2/images/users-avatar2.png differ
diff --git a/staff/rafael-infante/unsocial.2/index.html b/staff/rafael-infante/unsocial.2/index.html
new file mode 100644
index 00000000..5a0c6398
--- /dev/null
+++ b/staff/rafael-infante/unsocial.2/index.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ Unsocial
+
+
+
+
+
+
+
+
+ unSocial
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/staff/rafael-infante/unsocial.2/logic.js b/staff/rafael-infante/unsocial.2/logic.js
new file mode 100644
index 00000000..772def94
--- /dev/null
+++ b/staff/rafael-infante/unsocial.2/logic.js
@@ -0,0 +1,42 @@
+function registerUser(name, email, username, password, confirmPassword) {
+ if (name.length < 2)
+ throw new Error('Invalid name')
+
+ if (!/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test(email))
+ throw new Error('Invalid email')
+
+ var registeredUser = users.find(function (user) {
+ return user.email === email || user.username === username
+ })
+ if (registeredUser)
+ throw new Error('This user is already registered')
+
+ if (username.length < 4 || username.length > 12)
+ throw new Error('invalid user name')
+
+ if (password.length < 8)
+ throw new Error('invalid password')
+
+ if (password !== confirmPassword)
+ throw new Error('passwords do not match')
+ var user = { name: name, email: email, username: username, password: password }
+
+ users.push(user)
+}
+
+function authenticateUser(loginUsername, loginPassword) {
+ if (loginUsername.length < 4 || loginUsername.length > 12)
+ throw new Error('invalid username')
+
+ if (loginPassword < 8)
+ throw new Error('invalid password')
+
+ var user = users.find(function (user) {
+ return user.username === loginUsername && user.password === loginPassword
+ })
+
+ if (user === undefined)
+ throw new Error('wrong credentials')
+
+ return user
+}
\ No newline at end of file
diff --git a/staff/rafael-infante/unsocial.2/main.js b/staff/rafael-infante/unsocial.2/main.js
new file mode 100644
index 00000000..a1e5152d
--- /dev/null
+++ b/staff/rafael-infante/unsocial.2/main.js
@@ -0,0 +1,237 @@
+var loggedUser = null
+// Login section
+var loginSection = document.createElement('section')
+var loginParagraph = document.createElement('p')
+var loginTitle = document.createElement('h2')
+var loginText = document.createElement('h4')
+var loginForm = document.createElement('form')
+var loginUsernameLabel = document.createElement('label')
+var loginUsernameInput = document.createElement('input')
+var loginPasswordLabel = document.createElement('label')
+var loginPasswordInputContainer = document.createElement('div')
+var loginPasswordIcon = document.createElement('i')
+var loginPasswordInput = document.createElement('input')
+var loginButton = document.createElement('button')
+var loginBottomText = document.createElement('p')
+
+loginParagraph.innerText = 'Welcome !'
+loginTitle.innerText = 'Sign in to unSocial'
+loginText.innerText = 'Write username and password to access'
+loginSection.appendChild(loginParagraph)
+loginSection.appendChild(loginTitle)
+loginSection.appendChild(loginText)
+loginSection.classList.add('section-container')
+loginSection.appendChild(loginForm)
+loginForm.classList.add('form-container')
+loginForm.appendChild(loginUsernameLabel)
+loginForm.appendChild(loginUsernameInput)
+loginUsernameLabel.htmlFor = 'login-user'
+loginUsernameLabel.innerText = 'User name'
+loginUsernameInput.id = 'login-user'
+loginUsernameInput.placeholder = 'Enter your user name'
+loginUsernameInput.required = true
+loginForm.appendChild(loginPasswordLabel)
+loginForm.appendChild(loginPasswordInputContainer)
+loginPasswordInputContainer.classList.add('password-container')
+loginPasswordInputContainer.appendChild(loginPasswordInput)
+loginPasswordLabel.htmlFor = 'login-password'
+loginPasswordLabel.innerText = 'Password'
+loginPasswordLabel.id = 'login-password'
+loginPasswordInput.type = 'password'
+loginPasswordInput.id = 'password'
+loginPasswordInput.placeholder = 'Enter your Password'
+loginPasswordInput.required = true
+loginPasswordInputContainer.appendChild(loginPasswordIcon)
+loginPasswordIcon.classList.add('far')
+loginPasswordIcon.classList.add('fa-eye')
+loginPasswordIcon.id = 'icon'
+loginForm.appendChild(loginButton)
+loginButton.id = 'btn-login'
+loginButton.type = 'submit'
+loginButton.innerText = 'Login'
+loginSection.appendChild(loginBottomText)
+loginBottomText.id = 'bottom-text'
+loginBottomText.innerHTML = `Don't have an account? Register`
+
+var body = document.querySelector('body')
+body.appendChild(loginSection)
+
+var icon = document.querySelector('#icon')
+var input = document.querySelector('#password')
+var isVisible = false
+
+icon.addEventListener('click', function (event) {
+ icon.classList.toggle('fa-eye-slash')
+ if (!isVisible) {
+ input.type = 'text'
+ isVisible = true
+ } else {
+ input.type = 'password'
+ isVisible = false
+ }
+})
+
+var registerAnchor = document.getElementById('registerAnchor')
+// Send user to register section when clicking on register anchor
+registerAnchor.addEventListener('click', function (event) {
+ event.preventDefault()
+ loginSection.remove()
+ // Register Section
+ var registerSection = document.createElement('section')
+ var registerTitle = document.createElement('h2')
+ var registerForm = document.createElement('form')
+ var registerNameLabel = document.createElement('label')
+ var registerNameInput = document.createElement('input')
+ var registerEmailLabel = document.createElement('label')
+ var registerEmailInput = document.createElement('input')
+ var registerUsernameLabel = document.createElement('label')
+ var registerUsernameInput = document.createElement('input')
+ var registerPasswordLabel = document.createElement('label')
+ var registerPasswordInput = document.createElement('input')
+ var registerConfirmPasswordLabel = document.createElement('label')
+ var registerConfirmPasswordInput = document.createElement('input')
+ var registerButton = document.createElement('button')
+
+
+ registerSection.classList.add('section-container')
+ body.appendChild(registerSection)
+ registerTitle.id = 'register-title'
+ registerTitle.innerText = 'Register to unSocial'
+ registerSection.appendChild(registerTitle)
+ registerForm.classList.add('form-container')
+ registerSection.appendChild(registerForm)
+ registerNameLabel.htmlFor = 'name'
+ registerNameLabel.innerText = 'Name'
+ registerEmailLabel.htmlFor = 'email'
+ registerEmailLabel.innerText = 'E-mail'
+ registerUsernameLabel.htmlFor = 'username'
+ registerUsernameLabel.innerText = 'User name'
+ registerPasswordLabel.htmlFor = 'password'
+ registerPasswordLabel.innerText = 'Password'
+ registerConfirmPasswordLabel.htmlFor = 'confirm-password'
+ registerConfirmPasswordLabel.innerText = 'Confirm Password'
+
+ registerNameInput.type = 'text'
+ registerNameInput.id = 'name'
+ registerNameInput.placeholder = 'Enter your name'
+ registerNameInput.required = true
+
+ registerEmailInput.type = 'email'
+ registerEmailInput.id = 'email'
+ registerEmailInput.placeholder = 'Enter your E-mail'
+ registerEmailInput.required = true
+
+ registerUsernameInput.type = 'text'
+ registerUsernameInput.id = 'username'
+ registerUsernameInput.placeholder = 'Enter your user name'
+ registerUsernameInput.required = true
+
+ registerPasswordInput.type = 'password'
+ registerPasswordInput.id = 'password'
+ registerPasswordInput.placeholder = 'Enter your password'
+ registerPasswordInput.required = true
+
+ registerConfirmPasswordInput.type = 'password'
+ registerConfirmPasswordInput.id = 'confirm-password'
+ registerConfirmPasswordInput.placeholder = 'Confirm your password'
+ registerConfirmPasswordInput.required = true
+
+ registerForm.appendChild(registerNameLabel)
+ registerForm.appendChild(registerNameInput)
+ registerForm.appendChild(registerEmailLabel)
+ registerForm.appendChild(registerEmailInput)
+ registerForm.appendChild(registerUsernameLabel)
+ registerForm.appendChild(registerUsernameInput)
+ registerForm.appendChild(registerPasswordLabel)
+ registerForm.appendChild(registerPasswordInput)
+ registerForm.appendChild(registerConfirmPasswordLabel)
+ registerForm.appendChild(registerConfirmPasswordInput)
+
+ registerButton.id = 'btn-register'
+ registerButton.type = 'submit'
+ registerButton.innerText = 'Register'
+ registerForm.appendChild(registerButton)
+
+ var registerAnchorText = document.createElement('p')
+ registerAnchorText.innerText = 'Already have an account? '
+ registerSection.appendChild(registerAnchorText)
+ var registerLoginLink = document.createElement('a')
+ registerLoginLink.id = 'loginAnchor'
+ registerLoginLink.innerText = 'Login'
+ registerLoginLink.href = ''
+ registerAnchorText.appendChild(registerLoginLink)
+ // Send user to login section when clicking on login anchor
+ registerLoginLink.addEventListener('click', function (event) {
+ event.preventDefault();
+ registerSection.remove()
+ body.appendChild(loginSection)
+ })
+ // Save data of new user when clicking on register button
+ registerForm.addEventListener('submit', function (event) {
+ event.preventDefault()
+ var name = registerNameInput.value
+ var email = registerEmailInput.value
+ var username = registerUsernameInput.value
+ var password = registerPasswordInput.value
+ var confirmPassword = registerConfirmPasswordInput.value
+
+ try {
+ registerUser(name, email, username, password, confirmPassword)
+ registerForm.reset()
+ registerSection.remove()
+ body.appendChild(loginSection)
+ }
+ catch (error) {
+ alert(error.message)
+ console.error(error)
+ }
+
+ })
+})
+// Compare data entered by the user with our users list
+loginForm.addEventListener('submit', function (event) {
+ event.preventDefault()
+ var loginUsername = loginUsernameInput.value
+ var loginPassword = loginPasswordInput.value
+
+ try {
+ loggedUser = authenticateUser(loginUsername, loginPassword)
+ loginForm.reset()
+ loginSection.remove()
+ // Home section
+ var homeSection = document.createElement('section')
+ var homeTitle = document.createElement('h2')
+ var homeText = document.createElement('h3')
+ var image = document.createElement('img')
+ var logoutButton = document.createElement('button')
+
+ body.appendChild(homeSection)
+ homeSection.appendChild(homeTitle)
+ homeSection.appendChild(homeText)
+ homeSection.appendChild(image)
+ homeSection.appendChild(logoutButton)
+ homeSection.id = 'home'
+ homeSection.classList.add('section-container')
+ homeTitle.innerText = 'Home'
+ homeText.innerText = 'Hello, ' + loggedUser.name + '!'
+ image.style.height = '300px'
+ image.src = '/staff/rafael-infante/unsocial/images/boy.png'
+ logoutButton.id = 'btn-logout'
+ logoutButton.innerText = 'Logout'
+ // Functionality of logout button
+ logoutButton.addEventListener('click', function (event) {
+ var condition = prompt('Are you sure? (y/n)')
+ if (condition === 'y') {
+ event.preventDefault()
+ loggedUser = null
+ homeSection.remove()
+ body.appendChild(loginSection)
+ }
+ })
+ }
+ catch (error) {
+ loginPasswordInput.value = ''
+ alert(error.message)
+ console.error(error)
+ }
+})
\ No newline at end of file
diff --git a/staff/rafael-infante/unsocial.2/style.css b/staff/rafael-infante/unsocial.2/style.css
new file mode 100644
index 00000000..5359d6fb
--- /dev/null
+++ b/staff/rafael-infante/unsocial.2/style.css
@@ -0,0 +1,127 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap');
+
+:root {
+ --font: 'Poppins';
+ font-family: var(--font);
+ background-color: #e4b834;
+}
+
+.logo-container {
+ display: flex;
+ text-decoration: none;
+ color: black;
+ align-items: center;
+ margin: 0;
+ padding-left: 15px;
+}
+
+.logo {
+ max-height: 45px;
+ margin-right: 5px;
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin: 0 15px 15px 15px;
+}
+
+.section-container {
+ background-color: white;
+ padding: 0 20px 20px 20px;
+ margin: 10px;
+ width: 85%;
+ max-width: 500px;
+ min-height: 500px;
+ border-radius: 10px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.form-container {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+}
+
+label {
+ padding-bottom: 6px;
+ font-size: 14px;
+}
+
+input {
+ margin-bottom: 10px;
+ padding: 10px;
+ border-radius: 5px;
+ border: 1px solid gray;
+}
+
+button {
+ color: white;
+ background-color: black;
+ margin-top: 25px;
+ padding: 15px;
+ border-radius: 15px;
+ cursor: pointer;
+ font-weight: bolder;
+ border: none;
+}
+
+button:hover {
+ color: black;
+ background-color: #e7cc79;
+ border: none;
+}
+
+#btn-register {
+ margin: 0;
+}
+
+#bottom-text,
+p {
+ font-size: 13px;
+ color: grey;
+ margin-top: 15px;
+ margin-bottom: 0;
+}
+
+a {
+ text-decoration: none;
+ font-weight: bold;
+ color: black;
+ cursor: pointer;
+}
+
+a:hover {
+ color: #dda600;
+}
+
+h4 {
+ margin: 20px;
+}
+
+.password-container {
+ position: relative;
+ display: inline-block;
+}
+
+.password-container input {
+ width: 95%;
+}
+
+.password-container i {
+ position: absolute;
+ top: 40%;
+ right: 18px;
+ transform: translateY(-50%);
+ cursor: pointer;
+}
+
+@media (max-width: 350px) {
+ .password-container input {
+ width: 92%;
+ }
+}
\ No newline at end of file