diff --git a/client.js b/client.js
new file mode 100644
index 0000000000000000000000000000000000000000..39bdf17b7a020dae48bdb3b815b85fe8e53848b5
--- /dev/null
+++ b/client.js
@@ -0,0 +1,420 @@
+window.onload = function () {
+  let userIsgnedIn = checkUserSignedIn();
+
+  if (userIsgnedIn) {
+    signinSuccess();
+  } else {
+    signinFailure();
+  }
+  // setProfile();
+};
+
+function addEventListenerForWelcomePage() {
+  // adding event for signing and signup
+  const form1 = document.getElementById("form1");
+  form1.addEventListener("submit", signInFromSubmit);
+
+  const form2 = document.getElementById("form2");
+  form2.addEventListener("submit", signUpFromSubmit);
+}
+
+function setBody(myhtml) {
+  document.body.innerHTML = myhtml;
+}
+
+function checkUserSignedIn() {
+  let token = window.localStorage.getItem("twidderToken");
+
+  if (!token) {
+    return false;
+  } else {
+    return true;
+    // signinSuccess();
+  }
+}
+
+// function to sign in the user
+function signInFromSubmit(event) {
+  event.preventDefault();
+  let password = document.getElementById("signinPassword");
+  let signinsubmitError =
+    document.getElementsByClassName("signinsubmitError")[0];
+  signinsubmitError.innerHTML = "";
+
+  if (password.value.length <= 8) {
+    signinsubmitError.innerHTML =
+      "Password should be at least 8 characters long";
+    return;
+  }
+
+  let res = serverstub.signIn(
+    document.getElementById("signinEmail").value,
+    password.value
+  );
+
+  if (res.success == false) {
+    signinsubmitError.innerHTML = res.message;
+    return;
+  }
+
+  if (res.success == true) {
+    signinSuccess(res.data);
+    setProfile();
+  }
+}
+
+function signUpFromSubmit(event) {
+  event.preventDefault();
+  let signupsubmitError =
+    document.getElementsByClassName("signupsubmitError")[0];
+  signupsubmitError.innerHTML = "";
+
+  let password = document.getElementById("signupPassword");
+  let repPassword = document.getElementById("signupPasswordRepeat");
+  if (password.value.length <= 8) {
+    signupsubmitError.innerHTML =
+      "Password should be at least 8 characters long";
+    return;
+  }
+
+  if (password.value !== repPassword.value) {
+    signupsubmitError.innerHTML =
+      "Password and repeat password should be same.";
+    return;
+  }
+
+  dataObject = {};
+
+  dataObject.email = document.getElementById("signupEmail").value;
+  dataObject.password = password.value;
+  dataObject.firstname = document.getElementById("signupFirstName").value;
+  dataObject.familyname = document.getElementById("signupFamilyName").value;
+  dataObject.gender = document.getElementById("signupGender").value;
+  dataObject.city = document.getElementById("signupCity").value;
+  dataObject.country = document.getElementById("signupCountry").value;
+
+  let res = serverstub.signUp(dataObject);
+
+  if (res.success == false) {
+    signupsubmitError.innerHTML = res.message;
+  }
+
+  if (res.success == true) {
+    document.getElementsByClassName("signupsubmitSuccess")[0].innerHTML =
+      res.message;
+  }
+}
+
+// function to set token and set displays of div
+function signinSuccess(token) {
+  if (token) {
+    window.localStorage.setItem("twidderToken", token);
+  }
+  let homeScriptHtml = document.getElementById("homeScript").innerHTML;
+  setBody(homeScriptHtml);
+  addEventListenerForHomeTabs();
+}
+
+function signinFailure() {
+  let welcomeScriptHtml = document.getElementById("welcomeScript").innerHTML;
+  setBody(welcomeScriptHtml);
+  addEventListenerForWelcomePage();
+}
+
+function addEventListenerForHomeTabs() {
+  let tabAnchors = document.getElementsByClassName("tabButton");
+
+  let tabAnchorsEvent = function () {
+    let attribute = this.getAttribute("data-detail");
+
+    // unmarking old tab details
+    let currActiveTabAnchor = document.querySelectorAll(".tabButton.active");
+    currActiveTabAnchor[0].classList.remove("active");
+
+    // marking new tab details
+    this.classList.add("active");
+
+    // hiding old tab details
+    let currActiveTab = document.querySelectorAll(".tabsDetails.active");
+    currActiveTab[0].classList.remove("active");
+
+    // displaying new tab details
+    let clickedTab = document.getElementById(attribute);
+    clickedTab.classList.add("active");
+  };
+
+  for (let i = 0; i < tabAnchors.length; i++) {
+    tabAnchors[i].addEventListener("click", tabAnchorsEvent, false);
+  }
+}
+
+function changePassword() {
+  let errorDiv = document.getElementsByClassName("changePasswordNewError")[0];
+  let successDiv = document.getElementsByClassName(
+    "changePasswordNewSuccess"
+  )[0];
+
+  // removing previous error values
+  errorDiv.innerHTML = "";
+  successDiv.innerHTML = "";
+
+  let oldPassword = document.getElementById("changePasswordOldPassword").value;
+  let newPassword = document.getElementById("changePasswordNewPassword").value;
+  let repPassword = document.getElementById(
+    "changePasswordNewPasswordRepeat"
+  ).value;
+
+  if (oldPassword.length <= 8) {
+    errorDiv.innerHTML = "Old password should be at least 8 characters long";
+    return;
+  }
+
+  if (newPassword.length <= 8) {
+    errorDiv.innerHTML = "New password should be at least 8 characters long";
+    return;
+  }
+
+  if (newPassword !== repPassword) {
+    errorDiv.innerHTML = "Password and repeat password should be same.";
+    return;
+  }
+
+  if (newPassword === oldPassword) {
+    errorDiv.innerHTML = "old password and new password should not be same.";
+    return;
+  }
+
+  let token = window.localStorage.getItem("twidderToken");
+  let res = serverstub.changePassword(token, oldPassword, newPassword);
+
+  if (res.success == false) {
+    errorDiv.innerHTML = res.message;
+    return;
+  }
+
+  if (res.success == true) {
+    successDiv.innerHTML = res.message;
+    return;
+  }
+}
+
+function logoutUser() {
+  let res = serverstub.signOut(window.localStorage.getItem("twidderToken"));
+  window.localStorage.removeItem("twidderToken");
+
+  if (res.success == false) {
+    document.getElementsByClassName("changePasswordNewError")[0].innerHTML =
+      res.message;
+    return;
+  }
+
+  if (res.success == true) {
+    signinFailure();
+  }
+}
+
+function setProfile() {
+  let token = window.localStorage.getItem("twidderToken");
+  if (token) {
+    data = serverstub.getUserDataByToken(token);
+    // if data is retrieved successfully
+    if (data.success == true) {
+      let ul = getUserDetailsList(data.data, "tabHomeUserInfoList");
+      document.getElementById("tabHomeUserInfo").append(ul);
+      loadPostMessage();
+    }
+  } else {
+    console.log("setProfile no token");
+  }
+}
+
+function postMessageToWall() {
+  let postedMessage = document.getElementById("userPostFormTextarea");
+  let postedMessageErr = document.getElementsByClassName(
+    "userPostFormTextareaError"
+  )[0];
+  let postedMessageSuccess = document.getElementsByClassName(
+    "userPostFormTextareaSuccess"
+  )[0];
+
+  postedMessageErr.innerHTML = "";
+  postedMessageSuccess.innerHTML = "";
+
+  if (postedMessage.value.length == 0) {
+    postedMessageErr.innerHTML =
+      "Empty post message, please enter a valid post message.";
+    return;
+  }
+
+  let token = window.localStorage.getItem("twidderToken");
+
+  let res = serverstub.postMessage(token, postedMessage.value);
+
+  if (res.success == true) {
+    postedMessageSuccess.innerHTML = res.message;
+
+    loadPostMessage();
+    postedMessage.value = "";
+    return;
+  }
+  if (res.success == false) {
+    postedMessageErr.innerHTML = res.message;
+    return;
+  }
+}
+
+function postMessageToUserWall() {
+  // getting all the required data
+  let token = window.localStorage.getItem("twidderToken");
+  let postedMessage = document.getElementById("userPostFormBrosweTextarea");
+  let postedMessageRecipient = document.getElementById("browseUserEmail");
+  let postedMessageErr = document.getElementsByClassName(
+    "userPostFormBrosweTextareaError"
+  )[0];
+  let postedMessageSuccess = document.getElementsByClassName(
+    "userPostFormBrosweTextareaSuccess"
+  )[0];
+
+  // clearing inner html of success and error messages
+  postedMessageErr.innerHTML = "";
+  postedMessageSuccess.innerHTML = "";
+
+  // validating inputs
+  if (postedMessageRecipient.value.length == 0) {
+    postedMessageErr.innerHTML = "Please add reciepient email.";
+    return;
+  }
+
+  if (postedMessage.value.length == 0) {
+    postedMessageErr.innerHTML =
+      "Empty post message, please enter a valid post message.";
+    return;
+  }
+
+  // posting message to user wall
+  res = serverstub.postMessage(
+    token,
+    postedMessage.value,
+    postedMessageRecipient.value
+  );
+
+  if (res.success == true) {
+    postedMessageSuccess.innerHTML = res.message;
+
+    // load Browse User posts
+
+    res2 = serverstub.getUserMessagesByEmail(
+      token,
+      postedMessageRecipient.value
+    );
+
+    if (res2.success == true) {
+      let ul = getUserPostList(res2.data, "browseUserDetailsPosts");
+      let userPostsParent =
+        document.getElementsByClassName("browseUserPosts")[0];
+      userPostsParent.innerHTML = "";
+      userPostsParent.append(ul);
+    } else if (res2.success == false) {
+      postedMessageErr.innerHTML = res.message;
+      return;
+    }
+
+    postedMessage.value = "";
+    return;
+  }
+  if (res.success == false) {
+    postedMessageErr.innerHTML = res.message;
+    return;
+  }
+}
+
+function loadPostMessage(email) {
+  let res = {};
+  let token = window.localStorage.getItem("twidderToken");
+
+  if (email) {
+    res = serverstub.getUserMessagesByEmail(token, email);
+  } else {
+    res = serverstub.getUserMessagesByToken(token);
+  }
+
+  if (res.success == false) {
+    document.getElementsByClassName("userPostFormTextareaError")[0].innerHTML =
+      res.message;
+    return;
+  }
+
+  if (res.success == true) {
+    let postedMessageDiv =
+      document.getElementsByClassName("postedMessageList")[0];
+    postedMessageDiv.innerHTML = "";
+
+    let ul = getUserPostList(res.data, "userPostsList");
+    postedMessageDiv.append(ul);
+    return;
+  }
+}
+
+function browseUser() {
+  // getting basic values
+  let email = document.getElementById("browseUserEmail").value;
+  let token = window.localStorage.getItem("twidderToken");
+  let browseUserDetails =
+    document.getElementsByClassName("browseUserDetails")[0];
+  let browseUserPosts = document.getElementsByClassName("browseUserPosts")[0];
+
+  let browseUserFormError = document.getElementsByClassName(
+    "browseUserFormError"
+  )[0];
+  browseUserFormError.innerHTML = "";
+
+  let res = serverstub.getUserDataByEmail(token, email);
+
+  if (res.success == false) {
+    browseUserFormError.innerHTML = res.message;
+    return;
+  }
+
+  if (res.success == true) {
+    browseUserDetails.innerHTML = "";
+    let ul = getUserDetailsList(res.data, "browseUserDetailsInfo");
+    browseUserDetails.append(ul);
+  }
+
+  res = serverstub.getUserMessagesByEmail(token, email);
+
+  if (res.success == false) {
+    browseUserFormError.innerHTML = res.message;
+    return;
+  }
+
+  if (res.success == true) {
+    browseUserPosts.innerHTML = "";
+    let ul = getUserPostList(res.data, "browseUserDetailsPosts");
+    browseUserPosts.append(ul);
+  }
+}
+
+function getUserDetailsList(userData, ulId) {
+  let ul = document.createElement("ul");
+  ul.setAttribute("id", ulId);
+
+  for (const [key, value] of Object.entries(userData)) {
+    let li = document.createElement("li");
+    li.innerHTML = `<b> ${key}</b>: ${value} `;
+    ul.appendChild(li);
+  }
+  return ul;
+}
+
+function getUserPostList(data, ulId) {
+  let ul = document.createElement("ul");
+  ul.setAttribute("id", ulId);
+
+  for (let i = 0; i < data.length; i++) {
+    let li = document.createElement("li");
+    li.innerHTML = `<b> ${data[i].writer}</b>: ${data[i].content} `;
+    ul.append(li);
+  }
+  return ul;
+}