diff --git a/.gitignore b/.gitignore
index d30f40ef4422ff27041df9dba83e4bd26849dc48..84806a24c5350454585cf6aaac51435f8e44ece8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,5 @@
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
+
+/public/images
diff --git a/package-lock.json b/package-lock.json
index 83e05ecba575807a392a98369b0a2fd44d70da34..0bd99eeca7262b328f871dac57218d0a9218542a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -327,6 +327,15 @@
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
       "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
     },
+    "axios": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz",
+      "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=",
+      "requires": {
+        "follow-redirects": "1.4.1",
+        "is-buffer": "1.1.6"
+      }
+    },
     "axobject-query": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz",
@@ -977,6 +986,28 @@
         "babel-types": "6.26.0"
       }
     },
+    "babel-polyfill": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
+      "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "core-js": "2.5.3",
+        "regenerator-runtime": "0.10.5"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.5.3",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+          "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
+        },
+        "regenerator-runtime": {
+          "version": "0.10.5",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+          "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+        }
+      }
+    },
     "babel-preset-env": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
@@ -1475,6 +1506,11 @@
         }
       }
     },
+    "can-use-dom": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz",
+      "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo="
+    },
     "caniuse-api": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
@@ -1603,6 +1639,11 @@
         "chalk": "1.1.3"
       }
     },
+    "classnames": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz",
+      "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0="
+    },
     "clean-css": {
       "version": "4.1.9",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
@@ -1915,6 +1956,16 @@
         "sha.js": "2.4.10"
       }
     },
+    "create-react-class": {
+      "version": "15.6.3",
+      "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
+      "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
+      "requires": {
+        "fbjs": "0.8.16",
+        "loose-envify": "1.3.1",
+        "object-assign": "4.1.1"
+      }
+    },
     "cross-spawn": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
@@ -2542,6 +2593,11 @@
         "tapable": "0.2.8"
       }
     },
+    "enquire.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz",
+      "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ="
+    },
     "entities": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
@@ -3418,6 +3474,24 @@
       "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
       "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
     },
+    "follow-redirects": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz",
+      "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==",
+      "requires": {
+        "debug": "3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -5601,6 +5675,11 @@
         "pretty-format": "20.0.3"
       }
     },
+    "jquery": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
+      "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
+    },
     "js-base64": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.2.tgz",
@@ -5698,6 +5777,14 @@
       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
     },
+    "json2mq": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
+      "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=",
+      "requires": {
+        "string-convert": "0.2.1"
+      }
+    },
     "json3": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
@@ -6425,6 +6512,69 @@
         "mimic-fn": "1.1.0"
       }
     },
+    "opencollective": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
+      "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
+      "requires": {
+        "babel-polyfill": "6.23.0",
+        "chalk": "1.1.3",
+        "inquirer": "3.0.6",
+        "minimist": "1.2.0",
+        "node-fetch": "1.6.3",
+        "opn": "4.0.2"
+      },
+      "dependencies": {
+        "ansi-escapes": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+          "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
+        },
+        "inquirer": {
+          "version": "3.0.6",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
+          "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
+          "requires": {
+            "ansi-escapes": "1.4.0",
+            "chalk": "1.1.3",
+            "cli-cursor": "2.1.0",
+            "cli-width": "2.2.0",
+            "external-editor": "2.1.0",
+            "figures": "2.0.0",
+            "lodash": "4.17.4",
+            "mute-stream": "0.0.7",
+            "run-async": "2.3.0",
+            "rx": "4.1.0",
+            "string-width": "2.1.1",
+            "strip-ansi": "3.0.1",
+            "through": "2.3.8"
+          }
+        },
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+        },
+        "node-fetch": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
+          "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
+          "requires": {
+            "encoding": "0.1.12",
+            "is-stream": "1.1.0"
+          }
+        },
+        "opn": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+          "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+          "requires": {
+            "object-assign": "4.1.1",
+            "pinkie-promise": "2.0.1"
+          }
+        }
+      }
+    },
     "opn": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz",
@@ -8396,6 +8546,20 @@
         }
       }
     },
+    "react-slick": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.17.1.tgz",
+      "integrity": "sha512-ffrbR8bSefalLCsaynPouS11cp+AO99aUxQiUYTKSJIY7fkqqSfYq/2bJMW3D1p6ejQdpzf9sQHIbgG9xbzNhg==",
+      "requires": {
+        "can-use-dom": "0.1.0",
+        "classnames": "2.2.5",
+        "create-react-class": "15.6.3",
+        "enquire.js": "2.1.6",
+        "json2mq": "0.2.0",
+        "object-assign": "4.1.1",
+        "opencollective": "1.0.3"
+      }
+    },
     "read-pkg": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -8813,6 +8977,11 @@
         "is-promise": "2.1.0"
       }
     },
+    "rx": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+      "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
+    },
     "rx-lite": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
@@ -8894,6 +9063,26 @@
         "node-forge": "0.6.33"
       }
     },
+    "semantic-ui-css": {
+      "version": "2.2.12",
+      "resolved": "https://registry.npmjs.org/semantic-ui-css/-/semantic-ui-css-2.2.12.tgz",
+      "integrity": "sha512-RrA3k6hya+kEMDmVLT38SBTDQD8FgdnFi16eMPuQ1N1xUOoBxKzr+HZASb7Zo3xlMvkYqEWvPIp58Wjl6Zcsfg==",
+      "requires": {
+        "jquery": "3.3.1"
+      }
+    },
+    "semantic-ui-react": {
+      "version": "0.77.2",
+      "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-0.77.2.tgz",
+      "integrity": "sha512-VwxY6oGLrBO2xoJiAW/vn40GL4WGZYWxtbrHIKYE1xChTOFlDxyIULMdnuAHOTbrbOYbLQ0X7LpdvEEYmieiJw==",
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "classnames": "2.2.5",
+        "fbjs": "0.8.16",
+        "lodash": "4.17.4",
+        "prop-types": "15.6.0"
+      }
+    },
     "semver": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
@@ -9214,6 +9403,11 @@
       "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
       "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
     },
+    "string-convert": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz",
+      "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c="
+    },
     "string-length": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
diff --git a/package.json b/package.json
index a2ade58588c4430138ca9c806363d56745bddb88..b058ad52d0439fac1ea5b67a30e3f1c0cdb43bd2 100644
--- a/package.json
+++ b/package.json
@@ -1,17 +1,22 @@
 {
   "name": "kszkepzes-frontend",
   "version": "0.1.0",
+  "proxy": "http://127.0.0.1:8000/",
   "private": true,
   "dependencies": {
+    "axios": "^0.17.1",
     "prop-types": "^15.6.0",
     "react": "^16.2.0",
     "react-dom": "^16.2.0",
     "react-redux": "^5.0.6",
     "react-router-dom": "^4.2.2",
     "react-scripts": "1.1.0",
+    "react-slick": "^0.17.1",
     "redux": "^3.7.2",
     "redux-logger": "^3.0.6",
-    "redux-thunk": "^2.2.0"
+    "redux-thunk": "^2.2.0",
+    "semantic-ui-css": "^2.2.12",
+    "semantic-ui-react": "^0.77.2"
   },
   "scripts": {
     "start": "react-scripts start",
diff --git a/public/index.html b/public/index.html
index 7bee027101ebc858da5cdcf909733043fcd64f86..49f2db511474971fe5558bdec1d5b6a565b7ccde 100644
--- a/public/index.html
+++ b/public/index.html
@@ -3,6 +3,8 @@
   <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <link rel="stylesheet" type="text/css" charset="UTF-8" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css" />
+    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css" />
     <meta name="theme-color" content="#000000">
     <!--
       manifest.json provides metadata used when your web app is added to the
diff --git a/src/actions/auth.js b/src/actions/auth.js
new file mode 100644
index 0000000000000000000000000000000000000000..30b176a967fa847546eed68669c80cb0ef88ce2b
--- /dev/null
+++ b/src/actions/auth.js
@@ -0,0 +1,68 @@
+// TODO: Separate actions
+
+import ax from 'axios';
+import { GET_USERDATA, PROFILE_CHANGE, GROUP_CHANGE, LOGOUT, GET_NEWS } from './types';
+
+const axios = ax.create({
+  xsrfCookieName: 'csrftoken',
+  xsrfHeaderName: 'X-CSRFToken',
+});
+
+export const getUserData = () => (
+  async (dispatch) => {
+    const user = await axios.get('/api/v1/profiles/me');
+    const {
+      id, join_date: joinDate, nick, motivation, signed, groups,
+    } = user.data;
+    dispatch({
+      type: GET_USERDATA,
+      payload: {
+        id, joinDate, nick, motivation, signed, groups,
+      },
+    });
+  }
+);
+
+export const getNews = () => (
+  async (dispatch) => {
+    const news = await axios.get('/api/v1/news');
+    dispatch({
+      type: GET_NEWS,
+      payload: news,
+    });
+  }
+);
+
+export const textChange = ({ target: { name, value } }) => (
+  (dispatch) => {
+    dispatch({ type: PROFILE_CHANGE, payload: value, target: name });
+  }
+);
+
+export const groupChange = groups => (
+  dispatch => (dispatch({ type: GROUP_CHANGE, payload: groups }))
+);
+
+export const submitRegistration = ({
+  nick, groups, signed, motivation, id,
+}) => (
+  async (dispatch) => {
+    const response = await axios.patch(`/api/v1/profiles/${id}/`, {
+      nick, groups, signed, motivation,
+    });
+    if (response.data.id === id) {
+      alert('Sikeres mentĂŠs!');
+    } else {
+      alert('MentĂŠs nem sikerĂźlt!');
+    }
+  }
+);
+
+export const logout = () => (
+  async (dispatch) => {
+    const response = await axios.get('/api/v1/logout/');
+    if (response) {
+      dispatch({ action: LOGOUT });
+    }
+  }
+);
diff --git a/src/actions/index.js b/src/actions/index.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..269586ee8b8ae24b9a02f84ee4a663139f079a2d 100644
--- a/src/actions/index.js
+++ b/src/actions/index.js
@@ -0,0 +1 @@
+export * from './auth';
diff --git a/src/actions/types.js b/src/actions/types.js
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f6891993f91473e63639fbcf6456ea863cdec3be 100644
--- a/src/actions/types.js
+++ b/src/actions/types.js
@@ -0,0 +1,7 @@
+export const GET_USERDATA = 'get_userdata';
+export const GET_NEWS = 'get_news';
+
+export const PROFILE_CHANGE = 'profile_change';
+export const GROUP_CHANGE = 'group_change';
+
+export const LOGOUT = 'logout';
diff --git a/src/components/App.js b/src/components/App.js
index 6c4296fde897a948d8a3aeb15d6900000ed65c7b..40766cef9e4dc5e369cd91108df671be9908dbed 100644
--- a/src/components/App.js
+++ b/src/components/App.js
@@ -1,11 +1,13 @@
 import React from 'react';
 import Header from './Header';
 import Main from './Main';
+import Footer from './Footer';
 
 const App = () => (
   <div>
     <Header />
     <Main />
+    <Footer />
   </div>
 );
 
diff --git a/src/components/Footer.js b/src/components/Footer.js
new file mode 100644
index 0000000000000000000000000000000000000000..7613f4cda02e7f352e4422da557c06f9820f4ac8
--- /dev/null
+++ b/src/components/Footer.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import { Container, Segment } from 'semantic-ui-react';
+
+const Footer = () => (
+  <Segment inverted vertical textAlign='center'>
+    <Container>
+      <p textalign='center'>Created by DevTeam &copy; 2017-2018.</p>
+    </Container>
+  </Segment>
+);
+
+export default Footer;
diff --git a/src/components/Header.js b/src/components/Header.js
index 0ac6f1dc77e21e90a9f749187917e55c09e393c4..ebdd23e9d6c281f611a13ee8ad48b6326e7a570f 100644
--- a/src/components/Header.js
+++ b/src/components/Header.js
@@ -1,16 +1,111 @@
-import React from 'react';
-import { Link } from 'react-router-dom';
-
-const Header = () => (
-  <header>
-    <nav>
-      <ul>
-        <li><Link to='/'>Home</Link></li>
-        <li><Link to='/roster'>Roster</Link></li>
-        <li><Link to='/schedule'>Schedule</Link></li>
-      </ul>
-    </nav>
-  </header>
+import React, { Component } from 'react';
+import { NavLink, Link } from 'react-router-dom';
+import {
+  Menu,
+  Container,
+  Button,
+  Segment,
+  Visibility,
+  Image,
+} from 'semantic-ui-react';
+import { connect } from 'react-redux';
+import { getUserData, logout } from '../actions';
+import KSZKlogo from './images/kszk_logo.svg';
+
+const FixedMenu = ({ user }) => (
+  <Menu fixed='top' size='large' pointing>
+    <Container>
+      <Menu.Item as={NavLink} to='/home'>Főoldal</Menu.Item>
+      <Menu.Item as={NavLink} to='/news'>HĂ­rek</Menu.Item>
+      <Menu.Item as={NavLink} to='/circles'>KĂśreink</Menu.Item>
+      <Menu.Item as={NavLink} to='/trainers'>Képzők</Menu.Item>
+      <Menu.Item as={NavLink} to='/schedule'>Ütemterv</Menu.Item>
+
+      <Menu.Menu position='right'>
+        <Menu.Item className='item'>
+          {
+            user.id ?
+              <Button.Group>
+                <Button primary as={Link} to='/profile'>Profilom</Button>
+                <Button onClick={() => this.props.logout()} icon='sign out' />
+              </Button.Group>
+            :
+              <Button href='/api/v1/login/authsch/'>BejelentkezĂŠs</Button>
+          }
+        </Menu.Item>
+      </Menu.Menu>
+    </Container>
+  </Menu>
 );
 
-export default Header;
+class Header extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      visible: false,
+    };
+  }
+  componentWillMount() {
+    this.props.getUserData();
+  }
+
+  hideFixedMenu() {
+    this.setState({ visible: false });
+  }
+
+  showFixedMenu() {
+    this.setState({ visible: true });
+  }
+
+  render() {
+    const { visible } = this.state;
+
+    return (
+      <div>
+        {visible ? <FixedMenu user={this.props.user} /> : null}
+        <Visibility
+          onBottomPassed={() => this.showFixedMenu()}
+          onBottomVisible={() => this.hideFixedMenu()}
+          once={false}
+        >
+          <Segment inverted textAlign='center' vertical>
+            <Container>
+              <Menu inverted secondary size='large'>
+                <Menu.Item as={NavLink} to='/home'>
+                  <Image
+                    size='mini'
+                    src={KSZKlogo}
+                    style={{ marginRight: '1.5em' }}
+                  />
+                  Főoldal
+                </Menu.Item>
+                <Menu.Item as={NavLink} to='/news'>HĂ­rek</Menu.Item>
+                <Menu.Item as={NavLink} to='/circles'>KĂśreink</Menu.Item>
+                <Menu.Item as={NavLink} to='/trainers'>Képzők</Menu.Item>
+                <Menu.Item as={NavLink} to='/schedule'>Ütemterv</Menu.Item>
+
+                <Menu.Item position='right'>
+                  {
+                    this.props.user.id ?
+                      <Button.Group>
+                        <Button inverted as={Link} to='/profile'>Profil</Button>
+                        <Button onClick={() => this.props.logout()} icon='sign out' />
+                      </Button.Group>
+                    :
+                      <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button>
+                  }
+                </Menu.Item>
+              </Menu>
+            </Container>
+          </Segment>
+        </Visibility>
+      </div>
+    );
+  }
+}
+
+const mapStateToProps = ({ user }) => ({
+  user,
+});
+
+export default connect(mapStateToProps, { getUserData, logout })(Header);
diff --git a/src/components/Main.js b/src/components/Main.js
index c265aecc9a0533913219651d41323745fbe92c58..cd91904eb824332ee0e9305c8f581540b1c9241a 100644
--- a/src/components/Main.js
+++ b/src/components/Main.js
@@ -1,19 +1,27 @@
 import React from 'react';
-import { Switch, Route } from 'react-router-dom';
+import { Switch, Route, Redirect, withRouter } from 'react-router-dom';
+
 import Home from './pages/Home';
-import Roster from './pages/Roster';
+import Trainers from './pages/Trainers';
 import Schedule from './pages/Schedule';
 import NotFound from './pages/NotFound';
+import Profile from './pages/Profile';
+import Statistics from './pages/Statistics';
+import Circles from './pages/Circles';
+import News from './pages/News';
 
 const Main = () => (
-  <main>
-    <Switch>
-      <Route exact path='/' component={Home} />
-      <Route path='/roster' component={Roster} />
-      <Route path='/schedule' component={Schedule} />
-      <Route component={NotFound} />
-    </Switch>
-  </main>
+  <Switch>
+    <Redirect exact from='/' to='/home' />
+    <Route exact path='/home' component={Home} />
+    <Route path='/news' component={News} />
+    <Route path='/trainers' component={Trainers} />
+    <Route path='/schedule' component={Schedule} />
+    <Route path='/profile' component={withRouter(Profile)} />
+    <Route path='/statistics' component={Statistics} />
+    <Route path='/circles' component={Circles} />
+    <Route component={NotFound} />
+  </Switch>
 );
 
 export default Main;
diff --git a/src/components/images/kszk_big_logo.png b/src/components/images/kszk_big_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..78a20883898115fdca8d4d1ad8b299de46ed882c
Binary files /dev/null and b/src/components/images/kszk_big_logo.png differ
diff --git a/src/components/images/kszk_logo.svg b/src/components/images/kszk_logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1b1beb9ba5d7a5641cdff880cdad329a41948347
--- /dev/null
+++ b/src/components/images/kszk_logo.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="464.000000pt" height="450.000000pt" viewBox="0 0 464.000000 450.000000"
+ preserveAspectRatio="xMidYMid meet">
+
+<g transform="translate(0.000000,450.000000) scale(0.100000,-0.100000)"
+fill="#FFFFFF" stroke="none">
+<path d="M2375 4473 c-880 -75 -1579 -448 -1987 -1058 -71 -107 -184 -335
+-228 -460 -47 -134 -86 -293 -111 -455 -20 -123 -23 -184 -24 -395 0 -265 8
+-349 51 -545 114 -511 396 -899 854 -1172 260 -155 575 -260 960 -321 182 -29
+682 -31 885 -4 334 45 587 126 839 268 152 86 416 250 416 259 0 13 -179 230
+-190 230 -5 0 -40 -20 -77 -44 -298 -192 -696 -338 -1076 -395 -392 -59 -654
+-49 -1003 39 -365 93 -671 257 -899 485 -251 251 -389 545 -441 938 -22 166
+-15 483 15 650 121 685 564 1193 1262 1451 297 109 574 160 874 158 273 -1
+491 -37 745 -124 430 -147 775 -432 915 -755 106 -244 131 -522 76 -843 -48
+-280 -152 -499 -320 -674 -67 -69 -201 -176 -221 -176 -9 0 -83 185 -105 263
+-9 32 -14 64 -12 71 3 8 82 82 176 165 186 166 301 297 301 344 0 23 -7 31
+-35 43 -39 16 -102 18 -137 5 -13 -5 -111 -77 -218 -159 -107 -83 -196 -150
+-197 -148 -7 6 71 299 113 429 26 78 91 253 145 388 55 136 99 254 99 263 0
+44 -148 74 -221 43 -35 -14 -38 -20 -88 -163 -83 -235 -472 -1401 -530 -1590
+-52 -169 -52 -171 -36 -210 37 -93 146 -99 214 -12 30 38 96 178 134 285 l33
+92 69 -142 c110 -226 183 -284 342 -275 81 4 200 57 299 132 83 62 217 204
+282 299 124 180 227 445 269 692 23 137 26 498 5 615 -84 470 -302 835 -662
+1110 -285 217 -667 359 -1074 399 -100 10 -385 12 -481 4z"/>
+<path d="M1166 3282 l-38 -17 -95 -290 c-99 -305 -343 -1098 -412 -1345 -64
+-225 -70 -299 -30 -336 70 -63 180 49 275 284 l37 90 37 -56 c69 -106 175
+-196 274 -235 72 -28 176 -27 240 2 l49 21 26 -23 c88 -81 196 -129 292 -130
+54 -1 73 4 113 27 131 77 162 274 81 512 -48 139 -65 222 -65 315 0 90 15 139
+95 299 51 103 56 120 52 164 -7 81 -66 116 -194 116 -54 0 -67 -4 -93 -27 -27
+-25 -36 -50 -85 -238 -77 -298 -214 -652 -274 -708 -14 -14 -53 -43 -85 -66
+-78 -54 -118 -55 -168 -5 -59 59 -118 192 -118 267 0 7 65 70 144 140 234 207
+315 301 302 352 -7 29 -36 36 -97 25 -82 -16 -136 -49 -314 -195 -63 -53 -115
+-92 -115 -88 0 20 55 212 97 338 66 200 124 354 209 556 41 97 74 188 74 202
+0 55 -133 86 -214 49z m594 -1598 c11 -49 20 -109 20 -133 0 -43 0 -43 -22
+-27 -13 8 -42 28 -65 43 -23 16 -42 31 -43 34 0 12 81 181 86 177 2 -3 13 -45
+24 -94z"/>
+<path d="M3015 2534 c-16 -2 -77 -9 -135 -15 -151 -16 -399 -72 -444 -101 -96
+-62 -77 -194 30 -214 25 -5 86 0 173 15 74 12 136 20 138 18 2 -3 -93 -93
+-211 -201 -253 -232 -388 -372 -436 -452 -42 -71 -48 -147 -14 -204 46 -79
+117 -99 288 -81 249 27 429 77 492 136 29 28 34 39 34 78 0 38 -5 49 -30 70
+-42 36 -125 51 -244 44 l-99 -6 64 56 c35 31 148 140 250 242 203 203 355 386
+365 437 13 69 -40 156 -104 174 -36 10 -57 10 -117 4z"/>
+</g>
+</svg>
diff --git a/src/components/pages/Circles.js b/src/components/pages/Circles.js
new file mode 100644
index 0000000000000000000000000000000000000000..96daca5f6e6af4975b68c9ec696a9ad2de3471a2
--- /dev/null
+++ b/src/components/pages/Circles.js
@@ -0,0 +1,26 @@
+import React, { Component } from 'react';
+import { Container, Header, Segment } from 'semantic-ui-react';
+
+export default class Circles extends Component {
+  render() {
+    return (
+      <div>
+        <Segment inverted textAlign='center' vertical>
+          <Container>
+            <Header
+              as='h1'
+              content='KĂśrĂśk - Hamarosan'
+              inverted
+              style={{
+                fontSize: '3em',
+                fontWeight: 'normal',
+                marginBottom: 0,
+                marginTop: '0.5em',
+              }}
+            />
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
diff --git a/src/components/pages/Home.css b/src/components/pages/Home.css
new file mode 100644
index 0000000000000000000000000000000000000000..05a7b5d8795907394e63418e9a72a1f0d92ef126
--- /dev/null
+++ b/src/components/pages/Home.css
@@ -0,0 +1,12 @@
+.car-image-kszk {
+  position: relative;
+}
+
+.car-text-kszk {
+  position: absolute;
+  width: 100%;
+  top: 0px;
+  -webkit-text-fill-color: white;
+  -webkit-text-stroke-color: #888888;
+  -webkit-text-stroke-width: 0.75px;
+}
diff --git a/src/components/pages/Home.js b/src/components/pages/Home.js
index be5d6327b57b1e2a21f87654a756b22bc9254f89..02f265b0eef3ad08543f47daa08d17f946c8e844 100644
--- a/src/components/pages/Home.js
+++ b/src/components/pages/Home.js
@@ -1,9 +1,196 @@
-import React from 'react';
+import React, { Component } from 'react';
+import {
+  Button,
+  Container,
+  Header,
+  Icon,
+  Segment,
+  Image,
+  Divider,
+} from 'semantic-ui-react';
+import { connect } from 'react-redux';
+import Slider from 'react-slick';
+import { Link } from 'react-router-dom';
+import './Home.css';
+import KSZKbiglogo from '../images/kszk_big_logo.png';
 
-const Home = () => (
-  <div>
-    <h1>Welcome to the Tornadoes Website!</h1>
-  </div>
-);
+const settings = {
+  dots: false,
+  autoplay: true,
+  arrows: false,
+  infinite: true,
+  speed: 2000,
+  autoplaySpeed: 4000,
+  slidesToShow: 1,
+  slidesToScroll: 1,
+  centerMode: true,
+};
 
-export default Home;
+const range = (count) => {
+  const newArray = [];
+  for (let i = 1; i < count; i += 1) {
+    newArray.push(i);
+  }
+
+  return newArray;
+};
+
+class Home extends Component {
+  render() {
+    return (
+      <div>
+        <div className='car-image-kszk'>
+          <Slider {...settings}>
+            {
+              range(23).map(image => (
+                <div key={image}>
+                  <img src={`images/${image}.JPG`} width='100%' alt='' />
+                </div>
+              ))
+            }
+          </Slider>
+          <div className='car-text-kszk'>
+            <Segment textAlign='center' vertical>
+              <Header
+                as='h1'
+                content='Üdvözlünk a'
+                inverted
+                style={{
+                  fontSize: '3em',
+                  fontWeight: 'normal',
+                  marginBottom: 0,
+                  marginTop: '0.5em',
+                }}
+              />
+              <Header
+                as='h1'
+                content='KollĂŠgiumi SzĂĄmĂ­tĂĄstechnikai KĂśr'
+                inverted
+                style={{
+                  fontSize: '4em',
+                  fontWeight: 'bold',
+                  marginBottom: '0.5em',
+                  marginTop: '0.5em',
+                }}
+              />
+              <Header
+                as='h1'
+                content='érdeklődőinek szánt weboldalán!'
+                inverted
+                style={{
+                  fontSize: '3em',
+                  fontWeight: 'normal',
+                  marginBottom: 0,
+                  marginTop: '0.5em',
+                }}
+              />
+              <Image
+                verticalAlign='middle'
+                size='small'
+                src={KSZKbiglogo}
+                style={{ marginTop: '4em' }}
+              />
+              <Header
+                as='h1'
+                content='Mindenkit szeretettel vĂĄrunk a KSZKĂŠpzĂŠs-re!'
+                inverted
+                style={{
+                  fontSize: '3em',
+                  fontWeight: 'normal',
+                  marginBottom: 0,
+                  marginTop: '1em',
+                }}
+              />
+              <Container>
+                {
+                  this.props.user.id ?
+                    <Button
+                      as={Link}
+                      to='/profile'
+                      primary
+                      size='huge'
+                      style={{
+                        fontSize: '2em',
+                        marginTop: '1em',
+                        marginBottom: '1em',
+                      }}
+                    >
+                      JelentkezĂŠs
+                      <Icon name='right arrow' />
+                    </Button>
+                      :
+                    <Button
+                      href='/api/v1/login/authsch/'
+                      primary
+                      size='huge'
+                      style={{
+                        fontSize: '2em',
+                        marginTop: '1em',
+                        marginBottom: '1em',
+                      }}
+                    >
+                      BejelentkezĂŠs
+                      <Icon name='right arrow' />
+                    </Button>
+                }
+              </Container>
+            </Segment>
+          </div>
+        </div>
+        <Segment style={{ padding: '8em 0em' }} vertical>
+          <Container text>
+            <Header as='h3' style={{ fontSize: '2em' }}>
+              Kik is vagyunk mi?
+            </Header>
+            <p style={{ fontSize: '1.33em' }}>
+              A Kollégiumi Számítástechnikai Kör az Egyetem legrégebben működő
+              és legnagyobb aktív, informatikával foglalkozó öntevékeny
+              csoportosulása, tavaly ünnepeltük 40. születésnapunkat. A patinás
+              név mögött vidám hangulatú, alkotó kedvű csapat rejlik, mely a Kar
+              jó szakmai képességű, számítástechnika iránt kiemelten érdeklődő
+              tagjaiból verbuválódott, és bővül évente új tehetségekkel, lelkes
+              informatikusokkal, villamosmérnökökkel.
+            </p>
+            <Button size='large' href='/circles'>
+              Ismerd meg a kĂśreinket! <Icon name='right arrow' />
+            </Button>
+            <Divider as='h4' className='header' style={{ margin: '3em 0em' }} />
+            <Header as='h3' style={{ fontSize: '2em' }}>
+              Lehetőségek
+            </Header>
+            <p style={{ fontSize: '1.33em' }}>
+              A KSZK a lehetőségek tárháza, a hely ahol Te – leendő mérnök –
+              minden területen kipróbálhatod, továbbképezheted magad. Nálunk
+              kibontakoztathatod kreativitásod, tapasztalatot, mérnöki
+              szemléletet szerezhetsz, miközben az ún. soft skill-jeidet is
+              fejlesztheted. Ha számodra a szakma hivatás, ha szeretsz új
+              dolgokat alkotni vagy csak jó társaságra vágysz, a legjobb helyre
+              kerültél. A reszort körei a szakma egy-egy meghatározó területével
+              foglalkoznak a fejlesztés és üzemeltetés területén.
+            </p>
+            <Divider as='h4' className='header' style={{ margin: '3em 0em' }} />
+            <Header as='h3' style={{ fontSize: '2em' }}>
+              Képzésünk
+            </Header>
+            <p style={{ fontSize: '1.33em' }}>
+              Kilenc alkalmas képzésünk végén Te is igazi KSZK-ssá válhatsz,
+              hiszen rengeteg szakmai tudást igyekszünk átadni nektek. A
+              képzésalkalmak rendkívül jó hangulatban telnek, és a szociális
+              irányultságú foglalkozások alatt egy nagyon jó csapat kovácsolódik
+              az érdeklődőkből. Az első képzés időpontja február 20. hétfő
+              19:30, ettől kezdve minden héten találkozunk ugyanabban az
+              időpontban. A képzés ideje alatt március 10-12 között rendezünk
+              tábort. Az alkalmakon és a táborban kötelező a részvétel.
+            </p>
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
+
+const mapStateToProps = ({ user }) => ({
+  user,
+});
+
+export default connect(mapStateToProps, {})(Home);
diff --git a/src/components/pages/News.js b/src/components/pages/News.js
new file mode 100644
index 0000000000000000000000000000000000000000..98ec6369dab3b8bc9d335b10a2fdcc60e82a08ae
--- /dev/null
+++ b/src/components/pages/News.js
@@ -0,0 +1,59 @@
+import React, { Component } from 'react';
+import { Container, Header, Segment, Divider } from 'semantic-ui-react';
+import { connect } from 'react-redux';
+
+import { getNews } from '../../actions';
+
+class News extends Component {
+
+  componentWillMount() {
+    this.props.getNews();
+  }
+
+  render_news() {
+    const news = this.props.news;
+    console.log(news);
+
+    return news.map( (item, index) => (
+      <div key={index}>
+        { index > 0 ? <Divider /> : ''}
+        <Header as='h3' style={{ fontSize: '2em' }}>{item.title}</Header>
+        <p style={{ fontSize: '1.33em' }}>{item.text}</p>
+      </div>
+    ));
+
+  }
+
+  render() {
+    return (
+      <div>
+        <Segment inverted textAlign='center' vertical>
+          <Container>
+            <Header
+              as='h1'
+              content='HĂ­rek'
+              inverted
+              style={{
+                fontSize: '3em',
+                fontWeight: 'normal',
+                marginBottom: 0,
+                marginTop: '0.5em',
+              }}
+            />
+          </Container>
+        </Segment>
+
+        <Segment style={{ padding: '8em 0em' }} vertical>
+          <Container text>
+            {this.render_news()}
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
+
+
+const mapStateToProps = ({ news }) => ({ news });
+
+export default connect(mapStateToProps, { getNews })(News);
diff --git a/src/components/pages/NotFound.js b/src/components/pages/NotFound.js
index 78aba0dc316410f609b8b1901666bb596e9a18ec..be13943bd948edba928aa779ecbedd542b0e20aa 100644
--- a/src/components/pages/NotFound.js
+++ b/src/components/pages/NotFound.js
@@ -1,9 +1,39 @@
-import React from 'react';
+import React, { Component } from 'react';
+import { Button, Container, Header, Icon, Segment } from 'semantic-ui-react';
 
-const NotFound = () => (
-  <div>
-    <p>404: Page not found</p>
-  </div>
-);
-
-export default NotFound;
+export default class NotFound extends Component {
+  render() {
+    return (
+      <div>
+        <Segment inverted textAlign='center' vertical>
+          <Container>
+            <Header
+              as='h1'
+              content='404 - A keresett oldal nem talĂĄlhatĂł!'
+              inverted
+              style={{
+                fontSize: '3em',
+                fontWeight: 'normal',
+                marginBottom: 0,
+                marginTop: '0.5em',
+              }}
+            />
+            <Button
+              href='/'
+              primary
+              size='huge'
+              style={{
+                fontSize: '2em',
+                marginTop: '1em',
+                marginBottom: '1em',
+              }}
+            >
+              Vissza a Főoldalra
+              <Icon name='right arrow' />
+            </Button>
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
diff --git a/src/components/pages/Profile.js b/src/components/pages/Profile.js
new file mode 100644
index 0000000000000000000000000000000000000000..17a77df316b2935c071e53b1b9177d97441a986e
--- /dev/null
+++ b/src/components/pages/Profile.js
@@ -0,0 +1,100 @@
+import React, { Component } from 'react';
+import { Container, Segment, Form, Dropdown, Divider, Header } from 'semantic-ui-react';
+import { connect } from 'react-redux';
+import { textChange, submitRegistration, groupChange } from '../../actions';
+
+const options = [
+  { key: 'DT', text: 'DevTeam', value: 'DT' },
+  { key: 'NET', text: 'NeTeam', value: 'NET' },
+  { key: 'ST', text: 'SecurITeam', value: 'ST' },
+  { key: 'SYS', text: 'SysAdmin', value: 'SYS' },
+  { key: 'HAT', text: 'HallgatĂłi TudĂĄsbĂĄzis', value: 'HAT' },
+];
+
+class Profile extends Component {
+  componentWillMount() {
+    if (!this.props.id) {
+      this.props.history.push('/home');
+    }
+  }
+
+  render() {
+    const {
+      nick, groups, motivation, signed, id,
+    } = this.props;
+    return (
+      <Container
+        style={{
+          marginBottom: '0.5em',
+          marginTop: '0.5em',
+        }}
+      >
+        <Divider horizontal>
+          <Header as='h2' content='Profil (JelentkezĂŠs)' />
+        </Divider>
+        <Segment textAlign='center'>
+          <Form>
+            <Divider horizontal>BecenĂŠv</Divider>
+            <Form.Input
+              fluid
+              name='nick'
+              onChange={e => this.props.textChange(e)}
+              placeholder='BecenĂŠv'
+              value={nick}
+            />
+
+            <Divider horizontal>MotivĂĄciĂłs levĂŠl</Divider>
+            <Form.TextArea
+              rows={10}
+              name='motivation'
+              onChange={e => this.props.textChange(e)}
+              placeholder='MiĂŠrt szeretnĂŠk jelentkezni...'
+              value={motivation}
+            />
+
+            <Divider horizontal>Érdekelt Körök</Divider>
+            <Dropdown
+              fluid
+              multiple
+              selection
+              placeholder='DevTeam, ...'
+              onChange={(_, v) => this.props.groupChange(v.value)}
+              options={options}
+              defaultValue={groups}
+            />
+            <br />
+            <Form.Checkbox
+              name='signed'
+              label='SzeretnĂŠk jelentkezni a KSZK-ba'
+              onChange={(_, v) =>
+                this.props.textChange({ target: { name: v.name, value: v.checked } })
+              }
+              checked={signed}
+            />
+            <Form.Button
+              onClick={() => this.props.submitRegistration({
+                nick, motivation, signed, groups, id,
+              })}
+            >
+              MentĂŠs
+            </Form.Button>
+          </Form>
+        </Segment>
+      </Container>
+    );
+  }
+}
+
+const mapStateToProps = ({
+  user: {
+    nick, groups, motivation, signed, id,
+  },
+}) => ({
+  nick,
+  groups,
+  motivation,
+  signed,
+  id,
+});
+
+export default connect(mapStateToProps, { textChange, submitRegistration, groupChange })(Profile);
diff --git a/src/components/pages/Roster.js b/src/components/pages/Roster.js
deleted file mode 100644
index 6a5793393f3266f292947b82bc6c844ddc503513..0000000000000000000000000000000000000000
--- a/src/components/pages/Roster.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import { Switch, Route } from 'react-router-dom';
-import FullRoster from './roster/FullRoster';
-import Player from './roster/Player';
-
-const Roster = () => (
-  <Switch>
-    <Route exact path='/roster' component={FullRoster} />
-    <Route path='/roster/:number' component={Player} />
-  </Switch>
-);
-
-
-export default Roster;
diff --git a/src/components/pages/Schedule.js b/src/components/pages/Schedule.js
index 4332ee0981d4ffd67a5c49abd9f5694c97a2c078..d6a6ac619ed242e3c78a0af5d41896f4c227df90 100644
--- a/src/components/pages/Schedule.js
+++ b/src/components/pages/Schedule.js
@@ -1,13 +1,26 @@
-import React from 'react';
+import React, { Component } from 'react';
+import { Container, Header, Segment } from 'semantic-ui-react';
 
-const Schedule = () => (
-  <div>
-    <ul>
-      <li>6/5 @ Evergreens</li>
-      <li>6/8 vs Kickers</li>
-      <li>6/14 @ United</li>
-    </ul>
-  </div>
-);
-
-export default Schedule;
+export default class Schedule extends Component {
+  render() {
+    return (
+      <div>
+        <Segment inverted textAlign='center' vertical>
+          <Container>
+            <Header
+              as='h1'
+              content='Ütemterv - Hamarosan'
+              inverted
+              style={{
+                fontSize: '3em',
+                fontWeight: 'normal',
+                marginBottom: 0,
+                marginTop: '0.5em',
+              }}
+            />
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
diff --git a/src/components/pages/Statistics.js b/src/components/pages/Statistics.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c2baaf2395b0ef0385e2489547586c34430228d
--- /dev/null
+++ b/src/components/pages/Statistics.js
@@ -0,0 +1,26 @@
+import React, { Component } from 'react';
+import { Container, Header, Segment } from 'semantic-ui-react';
+
+export default class Statistics extends Component {
+  render() {
+    return (
+      <div>
+        <Segment inverted textAlign='center' vertical>
+          <Container>
+            <Header
+              as='h1'
+              content='StatisztikĂĄk - Hamarosan'
+              inverted
+              style={{
+                fontSize: '3em',
+                fontWeight: 'normal',
+                marginBottom: 0,
+                marginTop: '0.5em',
+              }}
+            />
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
diff --git a/src/components/pages/Trainers.js b/src/components/pages/Trainers.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef2ec5c21febd6ad6c8748125fe8ce04d3b6c3b1
--- /dev/null
+++ b/src/components/pages/Trainers.js
@@ -0,0 +1,26 @@
+import React, { Component } from 'react';
+import { Container, Header, Segment } from 'semantic-ui-react';
+
+export default class Trainers extends Component {
+  render() {
+    return (
+      <div>
+        <Segment inverted textAlign='center' vertical>
+          <Container>
+            <Header
+              as='h1'
+              content='Képzők - Hamarosan'
+              inverted
+              style={{
+                fontSize: '3em',
+                fontWeight: 'normal',
+                marginBottom: 0,
+                marginTop: '0.5em',
+              }}
+            />
+          </Container>
+        </Segment>
+      </div>
+    );
+  }
+}
diff --git a/src/components/pages/roster/FullRoster.js b/src/components/pages/roster/FullRoster.js
deleted file mode 100644
index e30a39b91fa682740eef85cdd2ec454b740ddbbe..0000000000000000000000000000000000000000
--- a/src/components/pages/roster/FullRoster.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import React from 'react';
-import { Link } from 'react-router-dom';
-
-const FullRoster = () => (
-  <div>
-    <ul>
-      <Link to={'/roster/0'}>0</Link>
-    </ul>
-  </div>
-);
-
-export default FullRoster;
diff --git a/src/components/pages/roster/Player.js b/src/components/pages/roster/Player.js
deleted file mode 100644
index 55d49b7e556bddf23da79e9efc7b346c92faad2b..0000000000000000000000000000000000000000
--- a/src/components/pages/roster/Player.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-import { Link } from 'react-router-dom';
-
-const Player = () => (
-  <div>
-    Sorry
-    <Link to='/roster'>Back</Link>
-  </div>
-);
-
-export default Player;
diff --git a/src/index.css b/src/index.css
deleted file mode 100644
index b4cc7250b98cb3f1a2dd5bec134296c6942344d9..0000000000000000000000000000000000000000
--- a/src/index.css
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  margin: 0;
-  padding: 0;
-  font-family: sans-serif;
-}
diff --git a/src/index.js b/src/index.js
index 5c90af50cd317252ccbdced3f1a37f4e1e597396..350009f7b3099c017d45d5e4a5356234736a188f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -2,9 +2,9 @@ import React from 'react';
 import { render } from 'react-dom';
 import { Provider } from 'react-redux';
 import { BrowserRouter as Router } from 'react-router-dom';
+import 'semantic-ui-css/semantic.min.css';
 
 import configureStore from './configureStore';
-import './index.css';
 import App from './components/App';
 import registerServiceWorker from './registerServiceWorker';
 
diff --git a/src/reducers/NewsReducer.js b/src/reducers/NewsReducer.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1f1497ded94643758880ed039b202ea417d0d64
--- /dev/null
+++ b/src/reducers/NewsReducer.js
@@ -0,0 +1,12 @@
+import { GET_NEWS } from '../actions/types';
+
+const INITIAL_STATE = [];
+
+export default (state = INITIAL_STATE, action) => {
+  switch (action.type) {
+    case GET_NEWS:
+      return [ ...state, ...action.payload.data ];
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/TodoReducer.js b/src/reducers/TodoReducer.js
deleted file mode 100644
index ec9ded5870943256b9de3a908c7ec9bcd9fde700..0000000000000000000000000000000000000000
--- a/src/reducers/TodoReducer.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import {
-  ADD_TODO,
-} from '../actions/types';
-
-const INITIAL_STATE = {
-  todos: [{ data: 'hello' }],
-};
-
-export default (state = INITIAL_STATE, action) => {
-  switch (action.type) {
-    case ADD_TODO:
-      return { todos: [...state.todos, { data: action.payload }] };
-    default:
-      return state;
-  }
-};
diff --git a/src/reducers/UserReducer.js b/src/reducers/UserReducer.js
new file mode 100644
index 0000000000000000000000000000000000000000..607f6dca0c0b9c4bfc67cdd7bf5d4b25c0e3ef0e
--- /dev/null
+++ b/src/reducers/UserReducer.js
@@ -0,0 +1,24 @@
+import {
+  GET_USERDATA,
+  PROFILE_CHANGE,
+  GROUP_CHANGE,
+  LOGOUT,
+} from '../actions/types';
+
+const INITIAL_STATE = {
+};
+
+export default (state = INITIAL_STATE, action) => {
+  switch (action.type) {
+    case GET_USERDATA:
+      return { ...state, ...action.payload };
+    case PROFILE_CHANGE:
+      return { ...state, [action.target]: action.payload };
+    case GROUP_CHANGE:
+      return { ...state, groups: action.payload };
+    case LOGOUT:
+      return INITIAL_STATE;
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/index.js b/src/reducers/index.js
index 030bd73a735f6d1674b1547089bc51d9ba0b55fa..8fa74b2a23a02498d8b8bc2761cb63e34c4d9e8c 100644
--- a/src/reducers/index.js
+++ b/src/reducers/index.js
@@ -1,8 +1,10 @@
 import { combineReducers } from 'redux';
-import TodoReducer from './TodoReducer';
+import UserReducer from './UserReducer';
+import NewsReducer from './NewsReducer';
 
 const rootReducer = combineReducers({
-  todos: TodoReducer,
+  user: UserReducer,
+  news: NewsReducer,
 });
 
 export default rootReducer;
diff --git a/src/routes.js b/src/routes.js
new file mode 100644
index 0000000000000000000000000000000000000000..b44e78ee7a2b82f87e445a26490b59fb8fcacfaf
--- /dev/null
+++ b/src/routes.js
@@ -0,0 +1,35 @@
+import { withRouter } from 'react-router-dom';
+
+export const publicRoutes = [
+  {
+    path: '/login',
+    component: Login,
+  },
+  {
+    path: '/register',
+    component: Register,
+  },
+  {
+    path: '/home',
+  },
+  {
+    path: '/news',
+  },
+  {
+    path: '/',
+  },
+  {
+    component: NotFound,
+  },
+];
+
+export const privateRoutes = [
+  {
+    path: '/home',
+    component: withRouter(Home),
+  },
+  {
+    path: '/store/details',
+    component: withRouter(Detail),
+  },
+]