diff --git a/bloglist_frontend/src/components/LoginForm.js b/bloglist_frontend/src/components/LoginForm.js
new file mode 100644
index 0000000000000000000000000000000000000000..812a186fc758f95e5165434edfb5dc418271f77e
--- /dev/null
+++ b/bloglist_frontend/src/components/LoginForm.js
@@ -0,0 +1,47 @@
+import ErrorNotification from './ErrorNotification'
+import PropTypes from 'prop-types'
+
+const LoginForm = ({
+    handleLogin,
+    handleUsernameChange,
+    handlePasswordChange,
+    username,
+    password,
+    errorMessage,
+}) => {
+
+  LoginForm.propTypes = {
+    handleLogin: PropTypes.func.isRequired,
+    handleUsernameChange: PropTypes.func.isRequired,
+    handlePasswordChange: PropTypes.func.isRequired,
+    username: PropTypes.string.isRequired,
+    password: PropTypes.string.isRequired,
+  }
+
+  return (
+      <div>
+        <h2>log in to application</h2>
+        <ErrorNotification message={errorMessage} />
+        <form onSubmit={handleLogin}>
+          <div>
+            username
+            <input
+              type="text"
+              value={username}
+              onChange={handleUsernameChange}
+            />
+          </div>
+          <div>
+            password
+            <input
+              type="password"
+              value={password}
+              onChange={handlePasswordChange}
+            />
+          </div>
+            <button type="submit">login</button>
+          </form>      
+      </div>
+    )
+}
+export default LoginForm
\ No newline at end of file