| - 
-               
+            
+               
                 
+                  
 
                     | Blank lines separate paragraphs.
diff --git a/pages/index.tsx b/pages/index.tsx
index dda2894..6c414e8 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -1,5 +1,5 @@
 import gql from 'graphql-tag';
-import * as React from 'react';
+import React, { useEffect } from 'react';
 import { useQuery } from '@apollo/client';
 
 import { NewsFeed, newsFeedNewsItemFragment } from '../src/components/news-feed';
@@ -8,6 +8,10 @@ import { MainLayout } from '../src/layouts/main-layout';
 import { FeedType } from '../src/data/models';
 import { POSTS_PER_PAGE } from '../src/config';
 
+
+import { BlankLayout } from '../src/layouts/blank-layout';
+import { logoutSuccessMessage } from './../src/data/validation/user';
+
 const query = gql`
   query topNewsItems($type: FeedType!, $first: Int!, $skip: Int!) {
     feed(type: $type, first: $first, skip: $skip) {
@@ -17,12 +21,15 @@ const query = gql`
   ${newsFeedNewsItemFragment}
 `;
 
+
+
 export interface ITopNewsFeedProps {
   options: {
     currentUrl: string;
     first: number;
     skip: number;
   };
+
 }
 
 export function IndexPage(props): JSX.Element {
@@ -35,10 +42,24 @@ export function IndexPage(props): JSX.Element {
 
   const { data } = useQuery(query, { variables: { first, skip, type: FeedType.TOP } });
 
+
+  useEffect(() => {
+    if (router.query.logout) {
+      logoutSuccessMessage();
+    }
+
+    window.history.replaceState(null, '', '/');
+  }, [router.query.logout, router.query.login]);
+
+  router.pathname = "/";
+
+
   return (
-    
-      
-    
+    
+      
+        
+      
+    
   );
 }
 
diff --git a/pages/login.tsx b/pages/login.tsx
index 50a8cae..1afbde5 100644
--- a/pages/login.tsx
+++ b/pages/login.tsx
@@ -10,7 +10,10 @@ import {
   UserLoginErrorCode,
 } from '../src/helpers/user-login-error-code';
 import { withDataAndRouter } from '../src/helpers/with-data';
-import { BlankLayout } from '../src/layouts/blank-layout';
+import { LoginLayout } from '../src/layouts/login-layout';
+
+import useSound from 'use-sound';
+import { useSoundContext } from '../src/context/state';
 
 export interface ILoginPageProps {
   router?: NextRouter;
@@ -28,7 +31,19 @@ function LoginPage(props: ILoginPageProps): JSX.Element {
   const [loginPassword, setLoginPassword] = useState('');
   const [registerId, setRegisterId] = useState('');
   const [registerPassword, setRegisterPassword] = useState('');
-  const [validationMessage, setValidationMessage] = useState('');
+  const [loginValidationMessage, setLoginValidationMessage] = useState('');
+  const [registerValidationMessage, setRegisterValidationMessage] = useState('');
+  //const alert = useAlert();
+
+  const { state } = useSoundContext();
+  const [playError] = useSound(
+    '/tap2.mp3',
+    { volume: 0.5 }
+  );
+  const [playClick] = useSound(
+    '/click.mp3',
+    { volume: 0.5 }
+  );
 
   const validateLogin = (e: React.FormEvent): void => {
     if (data?.me) {
@@ -37,9 +52,13 @@ function LoginPage(props: ILoginPageProps): JSX.Element {
     } else {
       try {
         validateNewUser({ id: loginId, password: loginPassword });
+        if (state) { playClick(); }
       } catch (err) {
         e.preventDefault();
-        setValidationMessage(err.message);
+        setLoginValidationMessage(err.message);
+        if (state) {
+          playError();
+        }
       }
     }
   };
@@ -51,106 +70,129 @@ function LoginPage(props: ILoginPageProps): JSX.Element {
     } else {
       try {
         validateNewUser({ id: registerId, password: registerPassword });
+        if (state) { playClick(); }
       } catch (err) {
         e.preventDefault();
-        setValidationMessage(err.message);
+        setRegisterValidationMessage(err.message);
+        if (state) { playError(); }
       }
     }
   };
 
   return (
-    
-      {message && {message}}
-      {validationMessage && {validationMessage}}
-      Login
- -
 -
 |  |