diff --git a/packages/learn/src/auth/index.js b/packages/learn/src/auth/index.js
deleted file mode 100644
index f82eea395a..0000000000
--- a/packages/learn/src/auth/index.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// import auth0 from 'auth0-js';
-// import { navigateTo } from 'gatsby-link';
-
-// import { ajax$ } from '../templates/Challenges/utils/ajax-stream';
-
-// const AUTH0_DOMAIN = 'freecodecamp.auth0.com';
-// const AUTH0_CLIENT_ID = 'vF70CJZyPKbZR4y0avecXXLkfyMNnyKn';
-
-// export default class Auth {
-// constructor() {
-// this.login = this.login.bind(this);
-// this.logout = this.logout.bind(this);
-// this.handleAuthentication = this.handleAuthentication.bind(this);
-// this.isAuthenticated = this.isAuthenticated.bind(this);
-
-// this.sessionEmail = '';
-// }
-
-// auth0 = new auth0.WebAuth({
-// domain: AUTH0_DOMAIN,
-// clientID: AUTH0_CLIENT_ID,
-// redirectUri: 'http://localhost:8000/callback',
-// audience: `https://${AUTH0_DOMAIN}/api/v2/`,
-// responseType: 'token id_token',
-// scope: 'openid profile email'
-// });
-
-// login() {
-// this.auth0.authorize();
-// }
-
-// logout() {
-// localStorage.removeItem('access_token');
-// localStorage.removeItem('id_token');
-// localStorage.removeItem('expires_at');
-// localStorage.removeItem('user');
-// }
-
-// handleAuthentication() {
-// if (typeof window !== 'undefined') {
-// this.auth0.parseHash((err, authResult) => {
-// if (authResult && authResult.accessToken && authResult.idToken) {
-// this.setSession(authResult);
-// } else if (err) {
-// console.error(err);
-// }
-
-// // Return to the homepage after authentication.
-// navigateTo('/');
-// });
-// }
-// }
-
-// isAuthenticated() {
-// const expiresAt = JSON.parse(localStorage.getItem('expires_at'));
-// const isAuth = new Date().getTime() < expiresAt;
-
-// // isAuth && this.getFCCUser();
-// return isAuth;
-// }
-
-// setSession(authResult) {
-// const expiresAt = JSON.stringify(
-// authResult.expiresIn * 9000 + new Date().getTime()
-// );
-// localStorage.setItem('access_token', authResult.accessToken);
-// localStorage.setItem('id_token', authResult.idToken);
-// localStorage.setItem('expires_at', expiresAt);
-
-// this.auth0.client.userInfo(authResult.accessToken, (err, user) => {
-// if (err) {
-// console.error(err);
-// }
-// localStorage.setItem('user', JSON.stringify(user));
-// });
-// }
-
-// getFCCUser() {
-// const token = localStorage.getItem('access_token');
-// if (!token) {
-// console.warn('no token found');
-// }
-// const { email } = JSON.parse(localStorage.getItem('user'));
-// const headers = {
-// Authorization: `Bearer ${token}`
-// };
-// const body = { email };
-// ajax$({
-// url: '/api/auth/auth0/login',
-// headers,
-// body
-// }).subscribe(
-// resp => {
-// console.info('YES');
-// console.log(resp);
-// },
-// err => {
-// console.warn('NO?');
-// console.log(err.message);
-// },
-// () => {
-// console.log('done');
-// }
-// );
-// }
-
-// getUser() {
-// if (localStorage.getItem('user')) {
-// return JSON.parse(localStorage.getItem('user'));
-// }
-// return null;
-// }
-
-// getUserName() {
-// if (this.getUser()) {
-// return this.getUser().name;
-// }
-// return null;
-// }
-// }
diff --git a/packages/learn/src/components/Header/index.js b/packages/learn/src/components/Header/index.js
index 5692bc54ef..2fbf03d13e 100644
--- a/packages/learn/src/components/Header/index.js
+++ b/packages/learn/src/components/Header/index.js
@@ -21,13 +21,14 @@ function Header() {
>
+
+
+
);
}
diff --git a/packages/learn/src/pages/sign-in.js b/packages/learn/src/pages/sign-in.js
new file mode 100644
index 0000000000..725c33c57b
--- /dev/null
+++ b/packages/learn/src/pages/sign-in.js
@@ -0,0 +1,64 @@
+import React, { PureComponent } from 'react';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { bindActionCreators } from 'redux';
+
+import { signIn } from '../redux/app';
+
+const mapStateToProps = () => ({});
+
+const mapDispatchToProps = dispatch =>
+ bindActionCreators(
+ {
+ signIn
+ },
+ dispatch
+ );
+
+const propTypes = {
+ signIn: PropTypes.func.isRequired
+};
+
+class SignInPage extends PureComponent {
+ constructor(...props) {
+ super(...props);
+
+ this.state = {
+ userEmail: ''
+ };
+ }
+
+ handleEmailChange = e => {
+ e.persist();
+ return this.setState(state => ({ ...state, userEmail: e.target.value }));
+ };
+
+ handleSubmit = e => {
+ e.preventDefault();
+ const { userEmail } = this.state;
+ this.props.signIn(userEmail);
+ };
+
+ render() {
+ const { userEmail } = this.state;
+ console.log(window.location.origin);
+ return (
+