From d1ddee25e55da400727893457a896a1d3f89b90d Mon Sep 17 00:00:00 2001
From: Terry Mac-Tay <n5608@student.jamk.fi>
Date: Thu, 16 Jan 2020 11:13:19 +0000
Subject: [PATCH] Update repo

---
 .gitlab-ci.yml                             |  57 +++++++
 Dockerfile                                 |  25 +++
 README.md                                  |  74 ++++++++-
 package.json                               |  31 ++++
 project-logo.png                           | Bin 0 -> 72206 bytes
 public/favicon.ico                         | Bin 0 -> 24838 bytes
 public/index.html                          |  34 ++++
 src/agent.js                               |  96 +++++++++++
 src/components/App.js                      |  86 ++++++++++
 src/components/Article/ArticleActions.js   |  41 +++++
 src/components/Article/ArticleMeta.js      |  27 ++++
 src/components/Article/Comment.js          |  35 ++++
 src/components/Article/CommentContainer.js |  40 +++++
 src/components/Article/CommentInput.js     |  58 +++++++
 src/components/Article/CommentList.js      |  22 +++
 src/components/Article/DeleteButton.js     |  27 ++++
 src/components/Article/index.js            |  97 +++++++++++
 src/components/ArticleList.js              |  38 +++++
 src/components/ArticlePreview.js           |  79 +++++++++
 src/components/Editor.js                   | 178 +++++++++++++++++++++
 src/components/Header.js                   |  91 +++++++++++
 src/components/Home/Banner.js              |  19 +++
 src/components/Home/MainView.js            |  96 +++++++++++
 src/components/Home/Tags.js                |  36 +++++
 src/components/Home/index.js               |  73 +++++++++
 src/components/ListErrors.js               |  26 +++
 src/components/ListPagination.js           |  58 +++++++
 src/components/Login.js                    |  97 +++++++++++
 src/components/Profile.js                  | 170 ++++++++++++++++++++
 src/components/ProfileFavorites.js         |  53 ++++++
 src/components/Register.js                 | 113 +++++++++++++
 src/components/Settings.js                 | 171 ++++++++++++++++++++
 src/constants/actionTypes.js               |  36 +++++
 src/index.js                               |  20 +++
 src/middleware.js                          |  68 ++++++++
 src/reducer.js                             |  22 +++
 src/reducers/article.js                    |  35 ++++
 src/reducers/articleList.js                |  86 ++++++++++
 src/reducers/auth.js                       |  34 ++++
 src/reducers/common.js                     |  70 ++++++++
 src/reducers/editor.js                     |  54 +++++++
 src/reducers/home.js                       |  15 ++
 src/reducers/profile.js                    |  24 +++
 src/reducers/settings.js                   |  25 +++
 src/store.js                               |  25 +++
 45 files changed, 2561 insertions(+), 1 deletion(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 Dockerfile
 create mode 100644 package.json
 create mode 100644 project-logo.png
 create mode 100644 public/favicon.ico
 create mode 100644 public/index.html
 create mode 100644 src/agent.js
 create mode 100644 src/components/App.js
 create mode 100644 src/components/Article/ArticleActions.js
 create mode 100644 src/components/Article/ArticleMeta.js
 create mode 100644 src/components/Article/Comment.js
 create mode 100644 src/components/Article/CommentContainer.js
 create mode 100644 src/components/Article/CommentInput.js
 create mode 100644 src/components/Article/CommentList.js
 create mode 100644 src/components/Article/DeleteButton.js
 create mode 100644 src/components/Article/index.js
 create mode 100644 src/components/ArticleList.js
 create mode 100644 src/components/ArticlePreview.js
 create mode 100644 src/components/Editor.js
 create mode 100644 src/components/Header.js
 create mode 100644 src/components/Home/Banner.js
 create mode 100644 src/components/Home/MainView.js
 create mode 100644 src/components/Home/Tags.js
 create mode 100644 src/components/Home/index.js
 create mode 100644 src/components/ListErrors.js
 create mode 100644 src/components/ListPagination.js
 create mode 100644 src/components/Login.js
 create mode 100644 src/components/Profile.js
 create mode 100644 src/components/ProfileFavorites.js
 create mode 100644 src/components/Register.js
 create mode 100644 src/components/Settings.js
 create mode 100644 src/constants/actionTypes.js
 create mode 100644 src/index.js
 create mode 100644 src/middleware.js
 create mode 100644 src/reducer.js
 create mode 100644 src/reducers/article.js
 create mode 100644 src/reducers/articleList.js
 create mode 100644 src/reducers/auth.js
 create mode 100644 src/reducers/common.js
 create mode 100644 src/reducers/editor.js
 create mode 100644 src/reducers/home.js
 create mode 100644 src/reducers/profile.js
 create mode 100644 src/reducers/settings.js
 create mode 100644 src/store.js

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..9fdea98
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,57 @@
+stages:
+  - test
+  - build_app
+  - scan
+  - deploy_app_testing
+
+
+variables:
+ IMAGE_NAME: ${CI_REGISTRY_IMAGE}/app:latest
+
+build_app:
+  stage: build_app
+  image: docker:stable
+  variables:
+    DOCKER_DRIVER: overlay2
+  services:
+    - docker:dind
+  before_script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+  script:
+    - docker build --cache-from $CI_REGISTRY/wimma-lab-2019/mysticons/cayac/demofrontend/app:latest --tag $CI_REGISTRY/wimma-lab-201$
+    - docker push $CI_REGISTRY/wimma-lab-2019/mysticons/cayac/demofrontend/app:latest
+  only:
+    - Development
+
+
+container_scan_service:
+  stage: scan
+  variables:
+    ANCHORE_CLI_URL: "http://anchore-engine:8228/v1"
+    GIT_STRATEGY: none
+  image: docker.io/anchore/inline-scan:v0.3.3
+  services:
+  - name: docker.io/anchore/inline-scan:v0.3.3
+    alias: anchore-engine
+    command: ["start"]
+  - name: anchore/engine-db-preload:v0.3.3
+    alias: anchore-db
+
+
+script:
+- anchore-cli system wait
+- anchore-cli registry add "$CI_REGISTRY" gitlab-ci-token "$CI_JOB_TOKEN" --skip-validate 
+- anchore_ci_tools.py -a -r --timeout 500 --image $IMAGE_NAME
+    
+artifacts:
+  name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}
+  paths:
+  - anchore-reports/*
+only:
+  - Development
+
+
+    
+    
+    
+
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..cbd5be4
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,25 @@
+FROM node:12.2.0-alpine
+
+# Create app directory
+WORKDIR /usr/src/app
+
+# Install app dependencies
+# A wildcard is used to ensure both package.json AND package-lock.json are copied
+# where available (npm@5+)
+COPY package*.json ./
+
+RUN npm install
+RUN npm install --silent
+# If you are building your code for production
+# RUN npm ci --only=production
+
+# Bundle app source
+COPY . .
+
+# default values
+ENV REACT_APP_API_ROOT=http://localhost:8080/api
+# expose to 4100 port
+
+EXPOSE 4100
+CMD [ "npm", "start" ]
+
diff --git a/README.md b/README.md
index ede1c60..776ea0a 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,74 @@
-# source-demo-front
+# ![React + Redux Example App](project-logo.png)
 
+[![RealWorld Frontend](https://img.shields.io/badge/realworld-frontend-%23783578.svg)](http://realworld.io)
+
+> ### React + Redux codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the [RealWorld](https://github.com/gothinkster/realworld-example-apps) spec and API.
+
+<a href="https://stackblitz.com/edit/react-redux-realworld" target="_blank"><img width="187" src="https://github.com/gothinkster/realworld/blob/master/media/edit_on_blitz.png?raw=true" /></a>&nbsp;&nbsp;<a href="https://thinkster.io/tutorials/build-a-real-world-react-redux-application" target="_blank"><img width="384" src="https://raw.githubusercontent.com/gothinkster/realworld/master/media/learn-btn-hr.png" /></a>
+
+### [Demo](https://react-redux.realworld.io)&nbsp;&nbsp;&nbsp;&nbsp;[RealWorld](https://github.com/gothinkster/realworld)
+
+Originally created for this [GH issue](https://github.com/reactjs/redux/issues/1353). The codebase is now feature complete; please submit bug fixes via pull requests & feedback via issues.
+
+We also have notes in [**our wiki**](https://github.com/gothinkster/react-redux-realworld-example-app/wiki) about how the various patterns used in this codebase and how they work (thanks [@thejmazz](https://github.com/thejmazz)!)
+
+
+## Getting started
+
+You can view a live demo over at https://react-redux.realworld.io/
+
+To get the frontend running locally:
+
+- Clone this repo
+- `npm install` to install all req'd dependencies
+- `npm start` to start the local server (this project uses create-react-app)
+
+Local web server will use port 4100 instead of standard React's port 3000 to prevent conflicts with some backends like Node or Rails. You can configure port in scripts section of `package.json`: we use [cross-env](https://github.com/kentcdodds/cross-env) to set environment variable PORT for React scripts, this is Windows-compatible way of setting environment variables.
+ 
+Alternatively, you can add `.env` file in the root folder of project to set environment variables (use PORT to change webserver's port). This file will be ignored by git, so it is suitable for API keys and other sensitive stuff. Refer to [dotenv](https://github.com/motdotla/dotenv) and [React](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#adding-development-environment-variables-in-env) documentation for more details. Also, please remove setting variable via script section of `package.json` - `dotenv` never override variables if they are already set.  
+
+### Making requests to the backend API
+
+For convenience, we have a live API server running at https://conduit.productionready.io/api for the application to make requests against. You can view [the API spec here](https://github.com/GoThinkster/productionready/blob/master/api) which contains all routes & responses for the server.
+
+The source code for the backend server (available for Node, Rails and Django) can be found in the [main RealWorld repo](https://github.com/gothinkster/realworld).
+
+If you want to change the API URL to a local server, simply edit `src/agent.js` and change `API_ROOT` to the local server's URL (i.e. `http://localhost:3000/api`)
+
+
+## Functionality overview
+
+The example application is a social blogging site (i.e. a Medium.com clone) called "Conduit". It uses a custom API for all requests, including authentication. You can view a live demo over at https://redux.productionready.io/
+
+**General functionality:**
+
+- Authenticate users via JWT (login/signup pages + logout button on settings page)
+- CRU* users (sign up & settings page - no deleting required)
+- CRUD Articles
+- CR*D Comments on articles (no updating required)
+- GET and display paginated lists of articles
+- Favorite articles
+- Follow other users
+
+**The general page breakdown looks like this:**
+
+- Home page (URL: /#/ )
+    - List of tags
+    - List of articles pulled from either Feed, Global, or by Tag
+    - Pagination for list of articles
+- Sign in/Sign up pages (URL: /#/login, /#/register )
+    - Use JWT (store the token in localStorage)
+- Settings page (URL: /#/settings )
+- Editor page to create/edit articles (URL: /#/editor, /#/editor/article-slug-here )
+- Article page (URL: /#/article/article-slug-here )
+    - Delete article button (only shown to article's author)
+    - Render markdown from server client side
+    - Comments section at bottom of page
+    - Delete comment button (only shown to comment's author)
+- Profile page (URL: /#/@username, /#/@username/favorites )
+    - Show basic user info
+    - List of articles populated from author's created articles or author's favorited articles
+
+<br />
+
+[![Brought to you by Thinkster](https://raw.githubusercontent.com/gothinkster/realworld/master/media/end.png)](https://thinkster.io)
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..9680bc6
--- /dev/null
+++ b/package.json
@@ -0,0 +1,31 @@
+{
+  "name": "react-redux-realworld-example-app",
+  "version": "0.1.0",
+  "private": true,
+  "devDependencies": {
+    "cross-env": "^5.1.4",
+    "react-scripts": "1.1.1"
+  },
+  "dependencies": {
+    "history": "^4.6.3",
+    "marked": "^0.3.6",
+    "prop-types": "^15.5.10",
+    "react": "^16.3.0",
+    "react-dom": "^16.3.0",
+    "react-redux": "^5.0.7",
+    "react-router": "^4.1.2",
+    "react-router-dom": "^4.1.2",
+    "react-router-redux": "^5.0.0-alpha.6",
+    "redux": "^3.6.0",
+    "redux-devtools-extension": "^2.13.2",
+    "redux-logger": "^3.0.1",
+    "superagent": "^3.8.2",
+    "superagent-promise": "^1.1.0"
+  },
+  "scripts": {
+    "start": "cross-env PORT=4100 react-scripts start",
+    "build": "react-scripts build",
+    "test": "cross-env PORT=4100 react-scripts test --env=jsdom",
+    "eject": "react-scripts eject"
+  }
+}
diff --git a/project-logo.png b/project-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..901b3b61b38fe94e2ded8be5632eb358be039cbc
GIT binary patch
literal 72206
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%0D`*f6zxQYsVyEWj=
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

literal 0
HcmV?d00001

diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..5c125de5d897c1ff5692a656485b3216123dcd89
GIT binary patch
literal 24838
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
F{{x|jBbfjI

literal 0
HcmV?d00001

diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..7253c80
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
+    <link rel="stylesheet" href="//demo.productionready.io/main.css">
+    <link href="//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet" type="text/css">
+    <link href="//fonts.googleapis.com/css?family=Titillium+Web:700|Source+Serif+Pro:400,700|Merriweather+Sans:400,700|Source+Sans+Pro:400,300,600,700,300italic,400italic,600italic,700italic" rel="stylesheet" type="text/css">
+    <!--
+      Notice the use of %PUBLIC_URL% in the tag above.
+      It will be replaced with the URL of the `public` folder during the build.
+      Only files inside the `public` folder can be referenced from the HTML.
+
+      Unlike "/favicon.ico" or "favico.ico", "%PUBLIC_URL%/favicon.ico" will
+      work correctly both with client-side routing and a non-root public URL.
+      Learn how to configure a non-root public URL by running `npm run build`.
+    -->
+    <title>Conduit</title>
+  </head>
+  <body>
+    <div id="root"></div>
+    <!--
+      This HTML file is a template.
+      If you open it directly in the browser, you will see an empty page.
+
+      You can add webfonts, meta tags, or analytics to this file.
+      The build step will place the bundled scripts into the <body> tag.
+
+      To begin the development, run `npm start`.
+      To create a production bundle, use `npm run build`.
+    -->
+  </body>
+</html>
diff --git a/src/agent.js b/src/agent.js
new file mode 100644
index 0000000..adfbd72
--- /dev/null
+++ b/src/agent.js
@@ -0,0 +1,96 @@
+import superagentPromise from 'superagent-promise';
+import _superagent from 'superagent';
+
+const superagent = superagentPromise(_superagent, global.Promise);
+
+const API_ROOT = 'https://conduit.productionready.io/api';
+
+const encode = encodeURIComponent;
+const responseBody = res => res.body;
+
+let token = null;
+const tokenPlugin = req => {
+  if (token) {
+    req.set('authorization', `Token ${token}`);
+  }
+}
+
+const requests = {
+  del: url =>
+    superagent.del(`${API_ROOT}${url}`).use(tokenPlugin).then(responseBody),
+  get: url =>
+    superagent.get(`${API_ROOT}${url}`).use(tokenPlugin).then(responseBody),
+  put: (url, body) =>
+    superagent.put(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody),
+  post: (url, body) =>
+    superagent.post(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody)
+};
+
+const Auth = {
+  current: () =>
+    requests.get('/user'),
+  login: (email, password) =>
+    requests.post('/users/login', { user: { email, password } }),
+  register: (username, email, password) =>
+    requests.post('/users', { user: { username, email, password } }),
+  save: user =>
+    requests.put('/user', { user })
+};
+
+const Tags = {
+  getAll: () => requests.get('/tags')
+};
+
+const limit = (count, p) => `limit=${count}&offset=${p ? p * count : 0}`;
+const omitSlug = article => Object.assign({}, article, { slug: undefined })
+const Articles = {
+  all: page =>
+    requests.get(`/articles?${limit(10, page)}`),
+  byAuthor: (author, page) =>
+    requests.get(`/articles?author=${encode(author)}&${limit(5, page)}`),
+  byTag: (tag, page) =>
+    requests.get(`/articles?tag=${encode(tag)}&${limit(10, page)}`),
+  del: slug =>
+    requests.del(`/articles/${slug}`),
+  favorite: slug =>
+    requests.post(`/articles/${slug}/favorite`),
+  favoritedBy: (author, page) =>
+    requests.get(`/articles?favorited=${encode(author)}&${limit(5, page)}`),
+  feed: () =>
+    requests.get('/articles/feed?limit=10&offset=0'),
+  get: slug =>
+    requests.get(`/articles/${slug}`),
+  unfavorite: slug =>
+    requests.del(`/articles/${slug}/favorite`),
+  update: article =>
+    requests.put(`/articles/${article.slug}`, { article: omitSlug(article) }),
+  create: article =>
+    requests.post('/articles', { article })
+};
+
+const Comments = {
+  create: (slug, comment) =>
+    requests.post(`/articles/${slug}/comments`, { comment }),
+  delete: (slug, commentId) =>
+    requests.del(`/articles/${slug}/comments/${commentId}`),
+  forArticle: slug =>
+    requests.get(`/articles/${slug}/comments`)
+};
+
+const Profile = {
+  follow: username =>
+    requests.post(`/profiles/${username}/follow`),
+  get: username =>
+    requests.get(`/profiles/${username}`),
+  unfollow: username =>
+    requests.del(`/profiles/${username}/follow`)
+};
+
+export default {
+  Articles,
+  Auth,
+  Comments,
+  Profile,
+  Tags,
+  setToken: _token => { token = _token; }
+};
diff --git a/src/components/App.js b/src/components/App.js
new file mode 100644
index 0000000..980ea72
--- /dev/null
+++ b/src/components/App.js
@@ -0,0 +1,86 @@
+import agent from '../agent';
+import Header from './Header';
+import React from 'react';
+import { connect } from 'react-redux';
+import { APP_LOAD, REDIRECT } from '../constants/actionTypes';
+import { Route, Switch } from 'react-router-dom';
+import Article from '../components/Article';
+import Editor from '../components/Editor';
+import Home from '../components/Home';
+import Login from '../components/Login';
+import Profile from '../components/Profile';
+import ProfileFavorites from '../components/ProfileFavorites';
+import Register from '../components/Register';
+import Settings from '../components/Settings';
+import { store } from '../store';
+import { push } from 'react-router-redux';
+
+const mapStateToProps = state => {
+  return {
+    appLoaded: state.common.appLoaded,
+    appName: state.common.appName,
+    currentUser: state.common.currentUser,
+    redirectTo: state.common.redirectTo
+  }};
+
+const mapDispatchToProps = dispatch => ({
+  onLoad: (payload, token) =>
+    dispatch({ type: APP_LOAD, payload, token, skipTracking: true }),
+  onRedirect: () =>
+    dispatch({ type: REDIRECT })
+});
+
+class App extends React.Component {
+  componentWillReceiveProps(nextProps) {
+    if (nextProps.redirectTo) {
+      // this.context.router.replace(nextProps.redirectTo);
+      store.dispatch(push(nextProps.redirectTo));
+      this.props.onRedirect();
+    }
+  }
+
+  componentWillMount() {
+    const token = window.localStorage.getItem('jwt');
+    if (token) {
+      agent.setToken(token);
+    }
+
+    this.props.onLoad(token ? agent.Auth.current() : null, token);
+  }
+
+  render() {
+    if (this.props.appLoaded) {
+      return (
+        <div>
+          <Header
+            appName={this.props.appName}
+            currentUser={this.props.currentUser} />
+            <Switch>
+            <Route exact path="/" component={Home}/>
+            <Route path="/login" component={Login} />
+            <Route path="/register" component={Register} />
+            <Route path="/editor/:slug" component={Editor} />
+            <Route path="/editor" component={Editor} />
+            <Route path="/article/:id" component={Article} />
+            <Route path="/settings" component={Settings} />
+            <Route path="/@:username/favorites" component={ProfileFavorites} />
+            <Route path="/@:username" component={Profile} />
+            </Switch>
+        </div>
+      );
+    }
+    return (
+      <div>
+        <Header
+          appName={this.props.appName}
+          currentUser={this.props.currentUser} />
+      </div>
+    );
+  }
+}
+
+// App.contextTypes = {
+//   router: PropTypes.object.isRequired
+// };
+
+export default connect(mapStateToProps, mapDispatchToProps)(App);
diff --git a/src/components/Article/ArticleActions.js b/src/components/Article/ArticleActions.js
new file mode 100644
index 0000000..032e77d
--- /dev/null
+++ b/src/components/Article/ArticleActions.js
@@ -0,0 +1,41 @@
+import { Link } from 'react-router-dom';
+import React from 'react';
+import agent from '../../agent';
+import { connect } from 'react-redux';
+import { DELETE_ARTICLE } from '../../constants/actionTypes';
+
+const mapDispatchToProps = dispatch => ({
+  onClickDelete: payload =>
+    dispatch({ type: DELETE_ARTICLE, payload })
+});
+
+const ArticleActions = props => {
+  const article = props.article;
+  const del = () => {
+    props.onClickDelete(agent.Articles.del(article.slug))
+  };
+  if (props.canModify) {
+    return (
+      <span>
+
+        <Link
+          to={`/editor/${article.slug}`}
+          className="btn btn-outline-secondary btn-sm">
+          <i className="ion-edit"></i> Edit Article
+        </Link>
+
+        <button className="btn btn-outline-danger btn-sm" onClick={del}>
+          <i className="ion-trash-a"></i> Delete Article
+        </button>
+
+      </span>
+    );
+  }
+
+  return (
+    <span>
+    </span>
+  );
+};
+
+export default connect(() => ({}), mapDispatchToProps)(ArticleActions);
diff --git a/src/components/Article/ArticleMeta.js b/src/components/Article/ArticleMeta.js
new file mode 100644
index 0000000..a30b35a
--- /dev/null
+++ b/src/components/Article/ArticleMeta.js
@@ -0,0 +1,27 @@
+import ArticleActions from './ArticleActions';
+import { Link } from 'react-router-dom';
+import React from 'react';
+
+const ArticleMeta = props => {
+  const article = props.article;
+  return (
+    <div className="article-meta">
+      <Link to={`/@${article.author.username}`}>
+        <img src={article.author.image} alt={article.author.username} />
+      </Link>
+
+      <div className="info">
+        <Link to={`/@${article.author.username}`} className="author">
+          {article.author.username}
+        </Link>
+        <span className="date">
+          {new Date(article.createdAt).toDateString()}
+        </span>
+      </div>
+
+      <ArticleActions canModify={props.canModify} article={article} />
+    </div>
+  );
+};
+
+export default ArticleMeta;
diff --git a/src/components/Article/Comment.js b/src/components/Article/Comment.js
new file mode 100644
index 0000000..adb34a7
--- /dev/null
+++ b/src/components/Article/Comment.js
@@ -0,0 +1,35 @@
+import DeleteButton from './DeleteButton';
+import { Link } from 'react-router-dom';
+import React from 'react';
+
+const Comment = props => {
+  const comment = props.comment;
+  const show = props.currentUser &&
+    props.currentUser.username === comment.author.username;
+  return (
+    <div className="card">
+      <div className="card-block">
+        <p className="card-text">{comment.body}</p>
+      </div>
+      <div className="card-footer">
+        <Link
+          to={`/@${comment.author.username}`}
+          className="comment-author">
+          <img src={comment.author.image} className="comment-author-img" alt={comment.author.username} />
+        </Link>
+        &nbsp;
+        <Link
+          to={`/@${comment.author.username}`}
+          className="comment-author">
+          {comment.author.username}
+        </Link>
+        <span className="date-posted">
+          {new Date(comment.createdAt).toDateString()}
+        </span>
+        <DeleteButton show={show} slug={props.slug} commentId={comment.id} />
+      </div>
+    </div>
+  );
+};
+
+export default Comment;
diff --git a/src/components/Article/CommentContainer.js b/src/components/Article/CommentContainer.js
new file mode 100644
index 0000000..625194e
--- /dev/null
+++ b/src/components/Article/CommentContainer.js
@@ -0,0 +1,40 @@
+import CommentInput from './CommentInput';
+import CommentList from './CommentList';
+import { Link } from 'react-router-dom';
+import React from 'react';
+
+const CommentContainer = props => {
+  if (props.currentUser) {
+    return (
+      <div className="col-xs-12 col-md-8 offset-md-2">
+        <div>
+          <list-errors errors={props.errors}></list-errors>
+          <CommentInput slug={props.slug} currentUser={props.currentUser} />
+        </div>
+
+        <CommentList
+          comments={props.comments}
+          slug={props.slug}
+          currentUser={props.currentUser} />
+      </div>
+    );
+  } else {
+    return (
+      <div className="col-xs-12 col-md-8 offset-md-2">
+        <p>
+          <Link to="/login">Sign in</Link>
+          &nbsp;or&nbsp;
+          <Link to="/register">sign up</Link>
+          &nbsp;to add comments on this article.
+        </p>
+
+        <CommentList
+          comments={props.comments}
+          slug={props.slug}
+          currentUser={props.currentUser} />
+      </div>
+    );
+  }
+};
+
+export default CommentContainer;
diff --git a/src/components/Article/CommentInput.js b/src/components/Article/CommentInput.js
new file mode 100644
index 0000000..3007ab9
--- /dev/null
+++ b/src/components/Article/CommentInput.js
@@ -0,0 +1,58 @@
+import React from 'react';
+import agent from '../../agent';
+import { connect } from 'react-redux';
+import { ADD_COMMENT } from '../../constants/actionTypes';
+
+const mapDispatchToProps = dispatch => ({
+  onSubmit: payload =>
+    dispatch({ type: ADD_COMMENT, payload })
+});
+
+class CommentInput extends React.Component {
+  constructor() {
+    super();
+    this.state = {
+      body: ''
+    };
+
+    this.setBody = ev => {
+      this.setState({ body: ev.target.value });
+    };
+
+    this.createComment = ev => {
+      ev.preventDefault();
+      const payload = agent.Comments.create(this.props.slug,
+        { body: this.state.body });
+      this.setState({ body: '' });
+      this.props.onSubmit(payload);
+    };
+  }
+
+  render() {
+    return (
+      <form className="card comment-form" onSubmit={this.createComment}>
+        <div className="card-block">
+          <textarea className="form-control"
+            placeholder="Write a comment..."
+            value={this.state.body}
+            onChange={this.setBody}
+            rows="3">
+          </textarea>
+        </div>
+        <div className="card-footer">
+          <img
+            src={this.props.currentUser.image}
+            className="comment-author-img"
+            alt={this.props.currentUser.username} />
+          <button
+            className="btn btn-sm btn-primary"
+            type="submit">
+            Post Comment
+          </button>
+        </div>
+      </form>
+    );
+  }
+}
+
+export default connect(() => ({}), mapDispatchToProps)(CommentInput);
diff --git a/src/components/Article/CommentList.js b/src/components/Article/CommentList.js
new file mode 100644
index 0000000..b62889d
--- /dev/null
+++ b/src/components/Article/CommentList.js
@@ -0,0 +1,22 @@
+import Comment from './Comment';
+import React from 'react';
+
+const CommentList = props => {
+  return (
+    <div>
+      {
+        props.comments.map(comment => {
+          return (
+            <Comment
+              comment={comment}
+              currentUser={props.currentUser}
+              slug={props.slug}
+              key={comment.id} />
+          );
+        })
+      }
+    </div>
+  );
+};
+
+export default CommentList;
diff --git a/src/components/Article/DeleteButton.js b/src/components/Article/DeleteButton.js
new file mode 100644
index 0000000..b07d657
--- /dev/null
+++ b/src/components/Article/DeleteButton.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import agent from '../../agent';
+import { connect } from 'react-redux';
+import { DELETE_COMMENT } from '../../constants/actionTypes';
+
+const mapDispatchToProps = dispatch => ({
+  onClick: (payload, commentId) =>
+    dispatch({ type: DELETE_COMMENT, payload, commentId })
+});
+
+const DeleteButton = props => {
+  const del = () => {
+    const payload = agent.Comments.delete(props.slug, props.commentId);
+    props.onClick(payload, props.commentId);
+  };
+
+  if (props.show) {
+    return (
+      <span className="mod-options">
+        <i className="ion-trash-a" onClick={del}></i>
+      </span>
+    );
+  }
+  return null;
+};
+
+export default connect(() => ({}), mapDispatchToProps)(DeleteButton);
diff --git a/src/components/Article/index.js b/src/components/Article/index.js
new file mode 100644
index 0000000..6be8975
--- /dev/null
+++ b/src/components/Article/index.js
@@ -0,0 +1,97 @@
+import ArticleMeta from './ArticleMeta';
+import CommentContainer from './CommentContainer';
+import React from 'react';
+import agent from '../../agent';
+import { connect } from 'react-redux';
+import marked from 'marked';
+import { ARTICLE_PAGE_LOADED, ARTICLE_PAGE_UNLOADED } from '../../constants/actionTypes';
+
+const mapStateToProps = state => ({
+  ...state.article,
+  currentUser: state.common.currentUser
+});
+
+const mapDispatchToProps = dispatch => ({
+  onLoad: payload =>
+    dispatch({ type: ARTICLE_PAGE_LOADED, payload }),
+  onUnload: () =>
+    dispatch({ type: ARTICLE_PAGE_UNLOADED })
+});
+
+class Article extends React.Component {
+  componentWillMount() {
+    this.props.onLoad(Promise.all([
+      agent.Articles.get(this.props.match.params.id),
+      agent.Comments.forArticle(this.props.match.params.id)
+    ]));
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  render() {
+    if (!this.props.article) {
+      return null;
+    }
+
+    const markup = { __html: marked(this.props.article.body, { sanitize: true }) };
+    const canModify = this.props.currentUser &&
+      this.props.currentUser.username === this.props.article.author.username;
+    return (
+      <div className="article-page">
+
+        <div className="banner">
+          <div className="container">
+
+            <h1>{this.props.article.title}</h1>
+            <ArticleMeta
+              article={this.props.article}
+              canModify={canModify} />
+
+          </div>
+        </div>
+
+        <div className="container page">
+
+          <div className="row article-content">
+            <div className="col-xs-12">
+
+              <div dangerouslySetInnerHTML={markup}></div>
+
+              <ul className="tag-list">
+                {
+                  this.props.article.tagList.map(tag => {
+                    return (
+                      <li
+                        className="tag-default tag-pill tag-outline"
+                        key={tag}>
+                        {tag}
+                      </li>
+                    );
+                  })
+                }
+              </ul>
+
+            </div>
+          </div>
+
+          <hr />
+
+          <div className="article-actions">
+          </div>
+
+          <div className="row">
+            <CommentContainer
+              comments={this.props.comments || []}
+              errors={this.props.commentErrors}
+              slug={this.props.match.params.id}
+              currentUser={this.props.currentUser} />
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Article);
diff --git a/src/components/ArticleList.js b/src/components/ArticleList.js
new file mode 100644
index 0000000..1c17836
--- /dev/null
+++ b/src/components/ArticleList.js
@@ -0,0 +1,38 @@
+import ArticlePreview from './ArticlePreview';
+import ListPagination from './ListPagination';
+import React from 'react';
+
+const ArticleList = props => {
+  if (!props.articles) {
+    return (
+      <div className="article-preview">Loading...</div>
+    );
+  }
+
+  if (props.articles.length === 0) {
+    return (
+      <div className="article-preview">
+        No articles are here... yet.
+      </div>
+    );
+  }
+
+  return (
+    <div>
+      {
+        props.articles.map(article => {
+          return (
+            <ArticlePreview article={article} key={article.slug} />
+          );
+        })
+      }
+
+      <ListPagination
+        pager={props.pager}
+        articlesCount={props.articlesCount}
+        currentPage={props.currentPage} />
+    </div>
+  );
+};
+
+export default ArticleList;
diff --git a/src/components/ArticlePreview.js b/src/components/ArticlePreview.js
new file mode 100644
index 0000000..ae9151a
--- /dev/null
+++ b/src/components/ArticlePreview.js
@@ -0,0 +1,79 @@
+import React from 'react';
+import { Link } from 'react-router-dom';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import { ARTICLE_FAVORITED, ARTICLE_UNFAVORITED } from '../constants/actionTypes';
+
+const FAVORITED_CLASS = 'btn btn-sm btn-primary';
+const NOT_FAVORITED_CLASS = 'btn btn-sm btn-outline-primary';
+
+const mapDispatchToProps = dispatch => ({
+  favorite: slug => dispatch({
+    type: ARTICLE_FAVORITED,
+    payload: agent.Articles.favorite(slug)
+  }),
+  unfavorite: slug => dispatch({
+    type: ARTICLE_UNFAVORITED,
+    payload: agent.Articles.unfavorite(slug)
+  })
+});
+
+const ArticlePreview = props => {
+  const article = props.article;
+  const favoriteButtonClass = article.favorited ?
+    FAVORITED_CLASS :
+    NOT_FAVORITED_CLASS;
+
+  const handleClick = ev => {
+    ev.preventDefault();
+    if (article.favorited) {
+      props.unfavorite(article.slug);
+    } else {
+      props.favorite(article.slug);
+    }
+  };
+
+  return (
+    <div className="article-preview">
+      <div className="article-meta">
+        <Link to={`/@${article.author.username}`}>
+          <img src={article.author.image} alt={article.author.username} />
+        </Link>
+
+        <div className="info">
+          <Link className="author" to={`/@${article.author.username}`}>
+            {article.author.username}
+          </Link>
+          <span className="date">
+            {new Date(article.createdAt).toDateString()}
+          </span>
+        </div>
+
+        <div className="pull-xs-right">
+          <button className={favoriteButtonClass} onClick={handleClick}>
+            <i className="ion-heart"></i> {article.favoritesCount}
+          </button>
+        </div>
+      </div>
+
+      <Link to={`/article/${article.slug}`} className="preview-link">
+        <h1>{article.title}</h1>
+        <p>{article.description}</p>
+        <span>Read more...</span>
+        <ul className="tag-list">
+          {
+            article.tagList.map(tag => {
+              return (
+                <li className="tag-default tag-pill tag-outline" key={tag}>
+                  {tag}
+                </li>
+              )
+            })
+          }
+        </ul>
+      </Link>
+    </div>
+  );
+}
+
+export default connect(() => ({}), mapDispatchToProps)(ArticlePreview);
diff --git a/src/components/Editor.js b/src/components/Editor.js
new file mode 100644
index 0000000..751e33b
--- /dev/null
+++ b/src/components/Editor.js
@@ -0,0 +1,178 @@
+import ListErrors from './ListErrors';
+import React from 'react';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import {
+  ADD_TAG,
+  EDITOR_PAGE_LOADED,
+  REMOVE_TAG,
+  ARTICLE_SUBMITTED,
+  EDITOR_PAGE_UNLOADED,
+  UPDATE_FIELD_EDITOR
+} from '../constants/actionTypes';
+
+const mapStateToProps = state => ({
+  ...state.editor
+});
+
+const mapDispatchToProps = dispatch => ({
+  onAddTag: () =>
+    dispatch({ type: ADD_TAG }),
+  onLoad: payload =>
+    dispatch({ type: EDITOR_PAGE_LOADED, payload }),
+  onRemoveTag: tag =>
+    dispatch({ type: REMOVE_TAG, tag }),
+  onSubmit: payload =>
+    dispatch({ type: ARTICLE_SUBMITTED, payload }),
+  onUnload: payload =>
+    dispatch({ type: EDITOR_PAGE_UNLOADED }),
+  onUpdateField: (key, value) =>
+    dispatch({ type: UPDATE_FIELD_EDITOR, key, value })
+});
+
+class Editor extends React.Component {
+  constructor() {
+    super();
+
+    const updateFieldEvent =
+      key => ev => this.props.onUpdateField(key, ev.target.value);
+    this.changeTitle = updateFieldEvent('title');
+    this.changeDescription = updateFieldEvent('description');
+    this.changeBody = updateFieldEvent('body');
+    this.changeTagInput = updateFieldEvent('tagInput');
+
+    this.watchForEnter = ev => {
+      if (ev.keyCode === 13) {
+        ev.preventDefault();
+        this.props.onAddTag();
+      }
+    };
+
+    this.removeTagHandler = tag => () => {
+      this.props.onRemoveTag(tag);
+    };
+
+    this.submitForm = ev => {
+      ev.preventDefault();
+      const article = {
+        title: this.props.title,
+        description: this.props.description,
+        body: this.props.body,
+        tagList: this.props.tagList
+      };
+
+      const slug = { slug: this.props.articleSlug };
+      const promise = this.props.articleSlug ?
+        agent.Articles.update(Object.assign(article, slug)) :
+        agent.Articles.create(article);
+
+      this.props.onSubmit(promise);
+    };
+  }
+
+  componentWillReceiveProps(nextProps) {
+    if (this.props.match.params.slug !== nextProps.match.params.slug) {
+      if (nextProps.match.params.slug) {
+        this.props.onUnload();
+        return this.props.onLoad(agent.Articles.get(this.props.match.params.slug));
+      }
+      this.props.onLoad(null);
+    }
+  }
+
+  componentWillMount() {
+    if (this.props.match.params.slug) {
+      return this.props.onLoad(agent.Articles.get(this.props.match.params.slug));
+    }
+    this.props.onLoad(null);
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  render() {
+    return (
+      <div className="editor-page">
+        <div className="container page">
+          <div className="row">
+            <div className="col-md-10 offset-md-1 col-xs-12">
+
+              <ListErrors errors={this.props.errors}></ListErrors>
+
+              <form>
+                <fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control form-control-lg"
+                      type="text"
+                      placeholder="Article Title"
+                      value={this.props.title}
+                      onChange={this.changeTitle} />
+                  </fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control"
+                      type="text"
+                      placeholder="What's this article about?"
+                      value={this.props.description}
+                      onChange={this.changeDescription} />
+                  </fieldset>
+
+                  <fieldset className="form-group">
+                    <textarea
+                      className="form-control"
+                      rows="8"
+                      placeholder="Write your article (in markdown)"
+                      value={this.props.body}
+                      onChange={this.changeBody}>
+                    </textarea>
+                  </fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control"
+                      type="text"
+                      placeholder="Enter tags"
+                      value={this.props.tagInput}
+                      onChange={this.changeTagInput}
+                      onKeyUp={this.watchForEnter} />
+
+                    <div className="tag-list">
+                      {
+                        (this.props.tagList || []).map(tag => {
+                          return (
+                            <span className="tag-default tag-pill" key={tag}>
+                              <i  className="ion-close-round"
+                                  onClick={this.removeTagHandler(tag)}>
+                              </i>
+                              {tag}
+                            </span>
+                          );
+                        })
+                      }
+                    </div>
+                  </fieldset>
+
+                  <button
+                    className="btn btn-lg pull-xs-right btn-primary"
+                    type="button"
+                    disabled={this.props.inProgress}
+                    onClick={this.submitForm}>
+                    Publish Article
+                  </button>
+
+                </fieldset>
+              </form>
+
+            </div>
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Editor);
diff --git a/src/components/Header.js b/src/components/Header.js
new file mode 100644
index 0000000..63641b8
--- /dev/null
+++ b/src/components/Header.js
@@ -0,0 +1,91 @@
+import React from 'react';
+import { Link } from 'react-router-dom';
+
+const LoggedOutView = props => {
+  if (!props.currentUser) {
+    return (
+      <ul className="nav navbar-nav pull-xs-right">
+
+        <li className="nav-item">
+          <Link to="/" className="nav-link">
+            Home
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link to="/login" className="nav-link">
+            Sign in
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link to="/register" className="nav-link">
+            Sign up
+          </Link>
+        </li>
+
+      </ul>
+    );
+  }
+  return null;
+};
+
+const LoggedInView = props => {
+  if (props.currentUser) {
+    return (
+      <ul className="nav navbar-nav pull-xs-right">
+
+        <li className="nav-item">
+          <Link to="/" className="nav-link">
+            Home
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link to="/editor" className="nav-link">
+            <i className="ion-compose"></i>&nbsp;New Post
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link to="/settings" className="nav-link">
+            <i className="ion-gear-a"></i>&nbsp;Settings
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link
+            to={`/@${props.currentUser.username}`}
+            className="nav-link">
+            <img src={props.currentUser.image} className="user-pic" alt={props.currentUser.username} />
+            {props.currentUser.username}
+          </Link>
+        </li>
+
+      </ul>
+    );
+  }
+
+  return null;
+};
+
+class Header extends React.Component {
+  render() {
+    return (
+      <nav className="navbar navbar-light">
+        <div className="container">
+
+          <Link to="/" className="navbar-brand">
+            {this.props.appName.toLowerCase()}
+          </Link>
+
+          <LoggedOutView currentUser={this.props.currentUser} />
+
+          <LoggedInView currentUser={this.props.currentUser} />
+        </div>
+      </nav>
+    );
+  }
+}
+
+export default Header;
diff --git a/src/components/Home/Banner.js b/src/components/Home/Banner.js
new file mode 100644
index 0000000..dfb5690
--- /dev/null
+++ b/src/components/Home/Banner.js
@@ -0,0 +1,19 @@
+import React from 'react';
+
+const Banner = ({ appName, token }) => {
+  if (token) {
+    return null;
+  }
+  return (
+    <div className="banner">
+      <div className="container">
+        <h1 className="logo-font">
+          {appName.toLowerCase()}
+        </h1>
+        <p>A place to share your knowledge.</p>
+      </div>
+    </div>
+  );
+};
+
+export default Banner;
diff --git a/src/components/Home/MainView.js b/src/components/Home/MainView.js
new file mode 100644
index 0000000..bd581f2
--- /dev/null
+++ b/src/components/Home/MainView.js
@@ -0,0 +1,96 @@
+import ArticleList from '../ArticleList';
+import React from 'react';
+import agent from '../../agent';
+import { connect } from 'react-redux';
+import { CHANGE_TAB } from '../../constants/actionTypes';
+
+const YourFeedTab = props => {
+  if (props.token) {
+    const clickHandler = ev => {
+      ev.preventDefault();
+      props.onTabClick('feed', agent.Articles.feed, agent.Articles.feed());
+    }
+
+    return (
+      <li className="nav-item">
+        <a  href=""
+            className={ props.tab === 'feed' ? 'nav-link active' : 'nav-link' }
+            onClick={clickHandler}>
+          Your Feed
+        </a>
+      </li>
+    );
+  }
+  return null;
+};
+
+const GlobalFeedTab = props => {
+  const clickHandler = ev => {
+    ev.preventDefault();
+    props.onTabClick('all', agent.Articles.all, agent.Articles.all());
+  };
+  return (
+    <li className="nav-item">
+      <a
+        href=""
+        className={ props.tab === 'all' ? 'nav-link active' : 'nav-link' }
+        onClick={clickHandler}>
+        Global Feed
+      </a>
+    </li>
+  );
+};
+
+const TagFilterTab = props => {
+  if (!props.tag) {
+    return null;
+  }
+
+  return (
+    <li className="nav-item">
+      <a href="" className="nav-link active">
+        <i className="ion-pound"></i> {props.tag}
+      </a>
+    </li>
+  );
+};
+
+const mapStateToProps = state => ({
+  ...state.articleList,
+  tags: state.home.tags,
+  token: state.common.token
+});
+
+const mapDispatchToProps = dispatch => ({
+  onTabClick: (tab, pager, payload) => dispatch({ type: CHANGE_TAB, tab, pager, payload })
+});
+
+const MainView = props => {
+  return (
+    <div className="col-md-9">
+      <div className="feed-toggle">
+        <ul className="nav nav-pills outline-active">
+
+          <YourFeedTab
+            token={props.token}
+            tab={props.tab}
+            onTabClick={props.onTabClick} />
+
+          <GlobalFeedTab tab={props.tab} onTabClick={props.onTabClick} />
+
+          <TagFilterTab tag={props.tag} />
+
+        </ul>
+      </div>
+
+      <ArticleList
+        pager={props.pager}
+        articles={props.articles}
+        loading={props.loading}
+        articlesCount={props.articlesCount}
+        currentPage={props.currentPage} />
+    </div>
+  );
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(MainView);
diff --git a/src/components/Home/Tags.js b/src/components/Home/Tags.js
new file mode 100644
index 0000000..fb498ae
--- /dev/null
+++ b/src/components/Home/Tags.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import agent from '../../agent';
+
+const Tags = props => {
+  const tags = props.tags;
+  if (tags) {
+    return (
+      <div className="tag-list">
+        {
+          tags.map(tag => {
+            const handleClick = ev => {
+              ev.preventDefault();
+              props.onClickTag(tag, page => agent.Articles.byTag(tag, page), agent.Articles.byTag(tag));
+            };
+
+            return (
+              <a
+                href=""
+                className="tag-default tag-pill"
+                key={tag}
+                onClick={handleClick}>
+                {tag}
+              </a>
+            );
+          })
+        }
+      </div>
+    );
+  } else {
+    return (
+      <div>Loading Tags...</div>
+    );
+  }
+};
+
+export default Tags;
diff --git a/src/components/Home/index.js b/src/components/Home/index.js
new file mode 100644
index 0000000..1eb0496
--- /dev/null
+++ b/src/components/Home/index.js
@@ -0,0 +1,73 @@
+import Banner from './Banner';
+import MainView from './MainView';
+import React from 'react';
+import Tags from './Tags';
+import agent from '../../agent';
+import { connect } from 'react-redux';
+import {
+  HOME_PAGE_LOADED,
+  HOME_PAGE_UNLOADED,
+  APPLY_TAG_FILTER
+} from '../../constants/actionTypes';
+
+const Promise = global.Promise;
+
+const mapStateToProps = state => ({
+  ...state.home,
+  appName: state.common.appName,
+  token: state.common.token
+});
+
+const mapDispatchToProps = dispatch => ({
+  onClickTag: (tag, pager, payload) =>
+    dispatch({ type: APPLY_TAG_FILTER, tag, pager, payload }),
+  onLoad: (tab, pager, payload) =>
+    dispatch({ type: HOME_PAGE_LOADED, tab, pager, payload }),
+  onUnload: () =>
+    dispatch({  type: HOME_PAGE_UNLOADED })
+});
+
+class Home extends React.Component {
+  componentWillMount() {
+    const tab = this.props.token ? 'feed' : 'all';
+    const articlesPromise = this.props.token ?
+      agent.Articles.feed :
+      agent.Articles.all;
+
+    this.props.onLoad(tab, articlesPromise, Promise.all([agent.Tags.getAll(), articlesPromise()]));
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  render() {
+    return (
+      <div className="home-page">
+
+        <Banner token={this.props.token} appName={this.props.appName} />
+
+        <div className="container page">
+          <div className="row">
+            <MainView />
+
+            <div className="col-md-3">
+              <div className="sidebar">
+
+                <p>Popular Tags</p>
+
+                <Tags
+                  tags={this.props.tags}
+                  onClickTag={this.props.onClickTag} />
+
+              </div>
+            </div>
+          </div>
+        </div>
+
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Home);
diff --git a/src/components/ListErrors.js b/src/components/ListErrors.js
new file mode 100644
index 0000000..3b40022
--- /dev/null
+++ b/src/components/ListErrors.js
@@ -0,0 +1,26 @@
+import React from 'react';
+
+class ListErrors extends React.Component {
+  render() {
+    const errors = this.props.errors;
+    if (errors) {
+      return (
+        <ul className="error-messages">
+          {
+            Object.keys(errors).map(key => {
+              return (
+                <li key={key}>
+                  {key} {errors[key]}
+                </li>
+              );
+            })
+          }
+        </ul>
+      );
+    } else {
+      return null;
+    }
+  }
+}
+
+export default ListErrors;
diff --git a/src/components/ListPagination.js b/src/components/ListPagination.js
new file mode 100644
index 0000000..ba38a6e
--- /dev/null
+++ b/src/components/ListPagination.js
@@ -0,0 +1,58 @@
+import React from 'react';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import { SET_PAGE } from '../constants/actionTypes';
+
+const mapDispatchToProps = dispatch => ({
+  onSetPage: (page, payload) =>
+    dispatch({ type: SET_PAGE, page, payload })
+});
+
+const ListPagination = props => {
+  if (props.articlesCount <= 10) {
+    return null;
+  }
+
+  const range = [];
+  for (let i = 0; i < Math.ceil(props.articlesCount / 10); ++i) {
+    range.push(i);
+  }
+
+  const setPage = page => {
+    if(props.pager) {
+      props.onSetPage(page, props.pager(page));
+    }else {
+      props.onSetPage(page, agent.Articles.all(page))
+    }
+  };
+
+  return (
+    <nav>
+      <ul className="pagination">
+
+        {
+          range.map(v => {
+            const isCurrent = v === props.currentPage;
+            const onClick = ev => {
+              ev.preventDefault();
+              setPage(v);
+            };
+            return (
+              <li
+                className={ isCurrent ? 'page-item active' : 'page-item' }
+                onClick={onClick}
+                key={v.toString()}>
+
+                <a className="page-link" href="">{v + 1}</a>
+
+              </li>
+            );
+          })
+        }
+
+      </ul>
+    </nav>
+  );
+};
+
+export default connect(() => ({}), mapDispatchToProps)(ListPagination);
diff --git a/src/components/Login.js b/src/components/Login.js
new file mode 100644
index 0000000..c63a0fa
--- /dev/null
+++ b/src/components/Login.js
@@ -0,0 +1,97 @@
+import { Link } from 'react-router-dom';
+import ListErrors from './ListErrors';
+import React from 'react';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import {
+  UPDATE_FIELD_AUTH,
+  LOGIN,
+  LOGIN_PAGE_UNLOADED
+} from '../constants/actionTypes';
+
+const mapStateToProps = state => ({ ...state.auth });
+
+const mapDispatchToProps = dispatch => ({
+  onChangeEmail: value =>
+    dispatch({ type: UPDATE_FIELD_AUTH, key: 'email', value }),
+  onChangePassword: value =>
+    dispatch({ type: UPDATE_FIELD_AUTH, key: 'password', value }),
+  onSubmit: (email, password) =>
+    dispatch({ type: LOGIN, payload: agent.Auth.login(email, password) }),
+  onUnload: () =>
+    dispatch({ type: LOGIN_PAGE_UNLOADED })
+});
+
+class Login extends React.Component {
+  constructor() {
+    super();
+    this.changeEmail = ev => this.props.onChangeEmail(ev.target.value);
+    this.changePassword = ev => this.props.onChangePassword(ev.target.value);
+    this.submitForm = (email, password) => ev => {
+      ev.preventDefault();
+      this.props.onSubmit(email, password);
+    };
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  render() {
+    const email = this.props.email;
+    const password = this.props.password;
+    return (
+      <div className="auth-page">
+        <div className="container page">
+          <div className="row">
+
+            <div className="col-md-6 offset-md-3 col-xs-12">
+              <h1 className="text-xs-center">Sign In</h1>
+              <p className="text-xs-center">
+                <Link to="/register">
+                  Need an account?
+                </Link>
+              </p>
+
+              <ListErrors errors={this.props.errors} />
+
+              <form onSubmit={this.submitForm(email, password)}>
+                <fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control form-control-lg"
+                      type="email"
+                      placeholder="Email"
+                      value={email}
+                      onChange={this.changeEmail} />
+                  </fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control form-control-lg"
+                      type="password"
+                      placeholder="Password"
+                      value={password}
+                      onChange={this.changePassword} />
+                  </fieldset>
+
+                  <button
+                    className="btn btn-lg btn-primary pull-xs-right"
+                    type="submit"
+                    disabled={this.props.inProgress}>
+                    Sign in
+                  </button>
+
+                </fieldset>
+              </form>
+            </div>
+
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Login);
diff --git a/src/components/Profile.js b/src/components/Profile.js
new file mode 100644
index 0000000..a3a5e6d
--- /dev/null
+++ b/src/components/Profile.js
@@ -0,0 +1,170 @@
+import ArticleList from './ArticleList';
+import React from 'react';
+import { Link } from 'react-router-dom';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import {
+  FOLLOW_USER,
+  UNFOLLOW_USER,
+  PROFILE_PAGE_LOADED,
+  PROFILE_PAGE_UNLOADED
+} from '../constants/actionTypes';
+
+const EditProfileSettings = props => {
+  if (props.isUser) {
+    return (
+      <Link
+        to="/settings"
+        className="btn btn-sm btn-outline-secondary action-btn">
+        <i className="ion-gear-a"></i> Edit Profile Settings
+      </Link>
+    );
+  }
+  return null;
+};
+
+const FollowUserButton = props => {
+  if (props.isUser) {
+    return null;
+  }
+
+  let classes = 'btn btn-sm action-btn';
+  if (props.user.following) {
+    classes += ' btn-secondary';
+  } else {
+    classes += ' btn-outline-secondary';
+  }
+
+  const handleClick = ev => {
+    ev.preventDefault();
+    if (props.user.following) {
+      props.unfollow(props.user.username)
+    } else {
+      props.follow(props.user.username)
+    }
+  };
+
+  return (
+    <button
+      className={classes}
+      onClick={handleClick}>
+      <i className="ion-plus-round"></i>
+      &nbsp;
+      {props.user.following ? 'Unfollow' : 'Follow'} {props.user.username}
+    </button>
+  );
+};
+
+const mapStateToProps = state => ({
+  ...state.articleList,
+  currentUser: state.common.currentUser,
+  profile: state.profile
+});
+
+const mapDispatchToProps = dispatch => ({
+  onFollow: username => dispatch({
+    type: FOLLOW_USER,
+    payload: agent.Profile.follow(username)
+  }),
+  onLoad: payload => dispatch({ type: PROFILE_PAGE_LOADED, payload }),
+  onUnfollow: username => dispatch({
+    type: UNFOLLOW_USER,
+    payload: agent.Profile.unfollow(username)
+  }),
+  onUnload: () => dispatch({ type: PROFILE_PAGE_UNLOADED })
+});
+
+class Profile extends React.Component {
+  componentWillMount() {
+    this.props.onLoad(Promise.all([
+      agent.Profile.get(this.props.match.params.username),
+      agent.Articles.byAuthor(this.props.match.params.username)
+    ]));
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  renderTabs() {
+    return (
+      <ul className="nav nav-pills outline-active">
+        <li className="nav-item">
+          <Link
+            className="nav-link active"
+            to={`/@${this.props.profile.username}`}>
+            My Articles
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link
+            className="nav-link"
+            to={`/@${this.props.profile.username}/favorites`}>
+            Favorited Articles
+          </Link>
+        </li>
+      </ul>
+    );
+  }
+
+  render() {
+    const profile = this.props.profile;
+    if (!profile) {
+      return null;
+    }
+
+    const isUser = this.props.currentUser &&
+      this.props.profile.username === this.props.currentUser.username;
+
+    return (
+      <div className="profile-page">
+
+        <div className="user-info">
+          <div className="container">
+            <div className="row">
+              <div className="col-xs-12 col-md-10 offset-md-1">
+
+                <img src={profile.image} className="user-img" alt={profile.username} />
+                <h4>{profile.username}</h4>
+                <p>{profile.bio}</p>
+
+                <EditProfileSettings isUser={isUser} />
+                <FollowUserButton
+                  isUser={isUser}
+                  user={profile}
+                  follow={this.props.onFollow}
+                  unfollow={this.props.onUnfollow}
+                  />
+
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div className="container">
+          <div className="row">
+
+            <div className="col-xs-12 col-md-10 offset-md-1">
+
+              <div className="articles-toggle">
+                {this.renderTabs()}
+              </div>
+
+              <ArticleList
+                pager={this.props.pager}
+                articles={this.props.articles}
+                articlesCount={this.props.articlesCount}
+                state={this.props.currentPage} />
+            </div>
+
+          </div>
+        </div>
+
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Profile);
+export { Profile, mapStateToProps };
diff --git a/src/components/ProfileFavorites.js b/src/components/ProfileFavorites.js
new file mode 100644
index 0000000..43ddbbe
--- /dev/null
+++ b/src/components/ProfileFavorites.js
@@ -0,0 +1,53 @@
+import { Profile, mapStateToProps } from './Profile';
+import React from 'react';
+import { Link } from 'react-router-dom';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import {
+  PROFILE_PAGE_LOADED,
+  PROFILE_PAGE_UNLOADED
+} from '../constants/actionTypes';
+
+const mapDispatchToProps = dispatch => ({
+  onLoad: (pager, payload) =>
+    dispatch({ type: PROFILE_PAGE_LOADED, pager, payload }),
+  onUnload: () =>
+    dispatch({ type: PROFILE_PAGE_UNLOADED })
+});
+
+class ProfileFavorites extends Profile {
+  componentWillMount() {
+    this.props.onLoad(page => agent.Articles.favoritedBy(this.props.match.params.username, page), Promise.all([
+      agent.Profile.get(this.props.match.params.username),
+      agent.Articles.favoritedBy(this.props.match.params.username)
+    ]));
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  renderTabs() {
+    return (
+      <ul className="nav nav-pills outline-active">
+        <li className="nav-item">
+          <Link
+            className="nav-link"
+            to={`/@${this.props.profile.username}`}>
+            My Articles
+          </Link>
+        </li>
+
+        <li className="nav-item">
+          <Link
+            className="nav-link active"
+            to={`/@${this.props.profile.username}/favorites`}>
+            Favorited Articles
+          </Link>
+        </li>
+      </ul>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(ProfileFavorites);
diff --git a/src/components/Register.js b/src/components/Register.js
new file mode 100644
index 0000000..ff81749
--- /dev/null
+++ b/src/components/Register.js
@@ -0,0 +1,113 @@
+import { Link } from 'react-router-dom';
+import ListErrors from './ListErrors';
+import React from 'react';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import {
+  UPDATE_FIELD_AUTH,
+  REGISTER,
+  REGISTER_PAGE_UNLOADED
+} from '../constants/actionTypes';
+
+const mapStateToProps = state => ({ ...state.auth });
+
+const mapDispatchToProps = dispatch => ({
+  onChangeEmail: value =>
+    dispatch({ type: UPDATE_FIELD_AUTH, key: 'email', value }),
+  onChangePassword: value =>
+    dispatch({ type: UPDATE_FIELD_AUTH, key: 'password', value }),
+  onChangeUsername: value =>
+    dispatch({ type: UPDATE_FIELD_AUTH, key: 'username', value }),
+  onSubmit: (username, email, password) => {
+    const payload = agent.Auth.register(username, email, password);
+    dispatch({ type: REGISTER, payload })
+  },
+  onUnload: () =>
+    dispatch({ type: REGISTER_PAGE_UNLOADED })
+});
+
+class Register extends React.Component {
+  constructor() {
+    super();
+    this.changeEmail = ev => this.props.onChangeEmail(ev.target.value);
+    this.changePassword = ev => this.props.onChangePassword(ev.target.value);
+    this.changeUsername = ev => this.props.onChangeUsername(ev.target.value);
+    this.submitForm = (username, email, password) => ev => {
+      ev.preventDefault();
+      this.props.onSubmit(username, email, password);
+    }
+  }
+
+  componentWillUnmount() {
+    this.props.onUnload();
+  }
+
+  render() {
+    const email = this.props.email;
+    const password = this.props.password;
+    const username = this.props.username;
+
+    return (
+      <div className="auth-page">
+        <div className="container page">
+          <div className="row">
+
+            <div className="col-md-6 offset-md-3 col-xs-12">
+              <h1 className="text-xs-center">Sign Up</h1>
+              <p className="text-xs-center">
+                <Link to="/login">
+                  Have an account?
+                </Link>
+              </p>
+
+              <ListErrors errors={this.props.errors} />
+
+              <form onSubmit={this.submitForm(username, email, password)}>
+                <fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control form-control-lg"
+                      type="text"
+                      placeholder="Username"
+                      value={this.props.username}
+                      onChange={this.changeUsername} />
+                  </fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control form-control-lg"
+                      type="email"
+                      placeholder="Email"
+                      value={this.props.email}
+                      onChange={this.changeEmail} />
+                  </fieldset>
+
+                  <fieldset className="form-group">
+                    <input
+                      className="form-control form-control-lg"
+                      type="password"
+                      placeholder="Password"
+                      value={this.props.password}
+                      onChange={this.changePassword} />
+                  </fieldset>
+
+                  <button
+                    className="btn btn-lg btn-primary pull-xs-right"
+                    type="submit"
+                    disabled={this.props.inProgress}>
+                    Sign up
+                  </button>
+
+                </fieldset>
+              </form>
+            </div>
+
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Register);
diff --git a/src/components/Settings.js b/src/components/Settings.js
new file mode 100644
index 0000000..265b17a
--- /dev/null
+++ b/src/components/Settings.js
@@ -0,0 +1,171 @@
+import ListErrors from './ListErrors';
+import React from 'react';
+import agent from '../agent';
+import { connect } from 'react-redux';
+import {
+  SETTINGS_SAVED,
+  SETTINGS_PAGE_UNLOADED,
+  LOGOUT
+} from '../constants/actionTypes';
+
+class SettingsForm extends React.Component {
+  constructor() {
+    super();
+
+    this.state = {
+      image: '',
+      username: '',
+      bio: '',
+      email: '',
+      password: ''
+    };
+
+    this.updateState = field => ev => {
+      const state = this.state;
+      const newState = Object.assign({}, state, { [field]: ev.target.value });
+      this.setState(newState);
+    };
+
+    this.submitForm = ev => {
+      ev.preventDefault();
+
+      const user = Object.assign({}, this.state);
+      if (!user.password) {
+        delete user.password;
+      }
+
+      this.props.onSubmitForm(user);
+    };
+  }
+
+  componentWillMount() {
+    if (this.props.currentUser) {
+      Object.assign(this.state, {
+        image: this.props.currentUser.image || '',
+        username: this.props.currentUser.username,
+        bio: this.props.currentUser.bio,
+        email: this.props.currentUser.email
+      });
+    }
+  }
+
+  componentWillReceiveProps(nextProps) {
+    if (nextProps.currentUser) {
+      this.setState(Object.assign({}, this.state, {
+        image: nextProps.currentUser.image || '',
+        username: nextProps.currentUser.username,
+        bio: nextProps.currentUser.bio,
+        email: nextProps.currentUser.email
+      }));
+    }
+  }
+
+  render() {
+    return (
+      <form onSubmit={this.submitForm}>
+        <fieldset>
+
+          <fieldset className="form-group">
+            <input
+              className="form-control"
+              type="text"
+              placeholder="URL of profile picture"
+              value={this.state.image}
+              onChange={this.updateState('image')} />
+          </fieldset>
+
+          <fieldset className="form-group">
+            <input
+              className="form-control form-control-lg"
+              type="text"
+              placeholder="Username"
+              value={this.state.username}
+              onChange={this.updateState('username')} />
+          </fieldset>
+
+          <fieldset className="form-group">
+            <textarea
+              className="form-control form-control-lg"
+              rows="8"
+              placeholder="Short bio about you"
+              value={this.state.bio}
+              onChange={this.updateState('bio')}>
+            </textarea>
+          </fieldset>
+
+          <fieldset className="form-group">
+            <input
+              className="form-control form-control-lg"
+              type="email"
+              placeholder="Email"
+              value={this.state.email}
+              onChange={this.updateState('email')} />
+          </fieldset>
+
+          <fieldset className="form-group">
+            <input
+              className="form-control form-control-lg"
+              type="password"
+              placeholder="New Password"
+              value={this.state.password}
+              onChange={this.updateState('password')} />
+          </fieldset>
+
+          <button
+            className="btn btn-lg btn-primary pull-xs-right"
+            type="submit"
+            disabled={this.state.inProgress}>
+            Update Settings
+          </button>
+
+        </fieldset>
+      </form>
+    );
+  }
+}
+
+const mapStateToProps = state => ({
+  ...state.settings,
+  currentUser: state.common.currentUser
+});
+
+const mapDispatchToProps = dispatch => ({
+  onClickLogout: () => dispatch({ type: LOGOUT }),
+  onSubmitForm: user =>
+    dispatch({ type: SETTINGS_SAVED, payload: agent.Auth.save(user) }),
+  onUnload: () => dispatch({ type: SETTINGS_PAGE_UNLOADED })
+});
+
+class Settings extends React.Component {
+  render() {
+    return (
+      <div className="settings-page">
+        <div className="container page">
+          <div className="row">
+            <div className="col-md-6 offset-md-3 col-xs-12">
+
+              <h1 className="text-xs-center">Your Settings</h1>
+
+              <ListErrors errors={this.props.errors}></ListErrors>
+
+              <SettingsForm
+                currentUser={this.props.currentUser}
+                onSubmitForm={this.props.onSubmitForm} />
+
+              <hr />
+
+              <button
+                className="btn btn-outline-danger"
+                onClick={this.props.onClickLogout}>
+                Or click here to logout.
+              </button>
+
+            </div>
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Settings);
diff --git a/src/constants/actionTypes.js b/src/constants/actionTypes.js
new file mode 100644
index 0000000..8683c60
--- /dev/null
+++ b/src/constants/actionTypes.js
@@ -0,0 +1,36 @@
+export const APP_LOAD = 'APP_LOAD';
+export const REDIRECT = 'REDIRECT';
+export const ARTICLE_SUBMITTED = 'ARTICLE_SUBMITTED';
+export const SETTINGS_SAVED = 'SETTINGS_SAVED';
+export const DELETE_ARTICLE = 'DELETE_ARTICLE';
+export const SETTINGS_PAGE_UNLOADED = 'SETTINGS_PAGE_UNLOADED';
+export const HOME_PAGE_LOADED = 'HOME_PAGE_LOADED';
+export const HOME_PAGE_UNLOADED = 'HOME_PAGE_UNLOADED';
+export const ARTICLE_PAGE_LOADED = 'ARTICLE_PAGE_LOADED';
+export const ARTICLE_PAGE_UNLOADED = 'ARTICLE_PAGE_UNLOADED';
+export const ADD_COMMENT = 'ADD_COMMENT';
+export const DELETE_COMMENT = 'DELETE_COMMENT';
+export const ARTICLE_FAVORITED = 'ARTICLE_FAVORITED';
+export const ARTICLE_UNFAVORITED = 'ARTICLE_UNFAVORITED';
+export const SET_PAGE = 'SET_PAGE';
+export const APPLY_TAG_FILTER = 'APPLY_TAG_FILTER';
+export const CHANGE_TAB = 'CHANGE_TAB';
+export const PROFILE_PAGE_LOADED = 'PROFILE_PAGE_LOADED';
+export const PROFILE_PAGE_UNLOADED = 'PROFILE_PAGE_UNLOADED';
+export const LOGIN = 'LOGIN';
+export const LOGOUT = 'LOGOUT';
+export const REGISTER = 'REGISTER';
+export const LOGIN_PAGE_UNLOADED = 'LOGIN_PAGE_UNLOADED';
+export const REGISTER_PAGE_UNLOADED = 'REGISTER_PAGE_UNLOADED';
+export const ASYNC_START = 'ASYNC_START';
+export const ASYNC_END = 'ASYNC_END';
+export const EDITOR_PAGE_LOADED = 'EDITOR_PAGE_LOADED';
+export const EDITOR_PAGE_UNLOADED = 'EDITOR_PAGE_UNLOADED';
+export const ADD_TAG = 'ADD_TAG';
+export const REMOVE_TAG = 'REMOVE_TAG';
+export const UPDATE_FIELD_AUTH = 'UPDATE_FIELD_AUTH';
+export const UPDATE_FIELD_EDITOR = 'UPDATE_FIELD_EDITOR';
+export const FOLLOW_USER = 'FOLLOW_USER';
+export const UNFOLLOW_USER = 'UNFOLLOW_USER';
+export const PROFILE_FAVORITES_PAGE_UNLOADED = 'PROFILE_FAVORITES_PAGE_UNLOADED';
+export const PROFILE_FAVORITES_PAGE_LOADED = 'PROFILE_FAVORITES_PAGE_LOADED';
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..3d20aa2
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,20 @@
+import ReactDOM from 'react-dom';
+import { Provider } from 'react-redux';
+import React from 'react';
+import { store, history} from './store';
+
+import { Route, Switch } from 'react-router-dom';
+import { ConnectedRouter } from 'react-router-redux';
+
+import App from './components/App';
+
+ReactDOM.render((
+  <Provider store={store}>
+    <ConnectedRouter history={history}>
+      <Switch>
+        <Route path="/" component={App} />
+      </Switch>
+    </ConnectedRouter>
+  </Provider>
+
+), document.getElementById('root'));
diff --git a/src/middleware.js b/src/middleware.js
new file mode 100644
index 0000000..9e24a96
--- /dev/null
+++ b/src/middleware.js
@@ -0,0 +1,68 @@
+import agent from './agent';
+import {
+  ASYNC_START,
+  ASYNC_END,
+  LOGIN,
+  LOGOUT,
+  REGISTER
+} from './constants/actionTypes';
+
+const promiseMiddleware = store => next => action => {
+  if (isPromise(action.payload)) {
+    store.dispatch({ type: ASYNC_START, subtype: action.type });
+
+    const currentView = store.getState().viewChangeCounter;
+    const skipTracking = action.skipTracking;
+
+    action.payload.then(
+      res => {
+        const currentState = store.getState()
+        if (!skipTracking && currentState.viewChangeCounter !== currentView) {
+          return
+        }
+        console.log('RESULT', res);
+        action.payload = res;
+        store.dispatch({ type: ASYNC_END, promise: action.payload });
+        store.dispatch(action);
+      },
+      error => {
+        const currentState = store.getState()
+        if (!skipTracking && currentState.viewChangeCounter !== currentView) {
+          return
+        }
+        console.log('ERROR', error);
+        action.error = true;
+        action.payload = error.response.body;
+        if (!action.skipTracking) {
+          store.dispatch({ type: ASYNC_END, promise: action.payload });
+        }
+        store.dispatch(action);
+      }
+    );
+
+    return;
+  }
+
+  next(action);
+};
+
+const localStorageMiddleware = store => next => action => {
+  if (action.type === REGISTER || action.type === LOGIN) {
+    if (!action.error) {
+      window.localStorage.setItem('jwt', action.payload.user.token);
+      agent.setToken(action.payload.user.token);
+    }
+  } else if (action.type === LOGOUT) {
+    window.localStorage.setItem('jwt', '');
+    agent.setToken(null);
+  }
+
+  next(action);
+};
+
+function isPromise(v) {
+  return v && typeof v.then === 'function';
+}
+
+
+export { promiseMiddleware, localStorageMiddleware }
diff --git a/src/reducer.js b/src/reducer.js
new file mode 100644
index 0000000..5005911
--- /dev/null
+++ b/src/reducer.js
@@ -0,0 +1,22 @@
+import article from './reducers/article';
+import articleList from './reducers/articleList';
+import auth from './reducers/auth';
+import { combineReducers } from 'redux';
+import common from './reducers/common';
+import editor from './reducers/editor';
+import home from './reducers/home';
+import profile from './reducers/profile';
+import settings from './reducers/settings';
+import { routerReducer } from 'react-router-redux';
+
+export default combineReducers({
+  article,
+  articleList,
+  auth,
+  common,
+  editor,
+  home,
+  profile,
+  settings,
+  router: routerReducer
+});
diff --git a/src/reducers/article.js b/src/reducers/article.js
new file mode 100644
index 0000000..50ec7a9
--- /dev/null
+++ b/src/reducers/article.js
@@ -0,0 +1,35 @@
+import {
+  ARTICLE_PAGE_LOADED,
+  ARTICLE_PAGE_UNLOADED,
+  ADD_COMMENT,
+  DELETE_COMMENT
+} from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case ARTICLE_PAGE_LOADED:
+      return {
+        ...state,
+        article: action.payload[0].article,
+        comments: action.payload[1].comments
+      };
+    case ARTICLE_PAGE_UNLOADED:
+      return {};
+    case ADD_COMMENT:
+      return {
+        ...state,
+        commentErrors: action.error ? action.payload.errors : null,
+        comments: action.error ?
+          null :
+          (state.comments || []).concat([action.payload.comment])
+      };
+    case DELETE_COMMENT:
+      const commentId = action.commentId
+      return {
+        ...state,
+        comments: state.comments.filter(comment => comment.id !== commentId)
+      };
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/articleList.js b/src/reducers/articleList.js
new file mode 100644
index 0000000..1fe962d
--- /dev/null
+++ b/src/reducers/articleList.js
@@ -0,0 +1,86 @@
+import {
+  ARTICLE_FAVORITED,
+  ARTICLE_UNFAVORITED,
+  SET_PAGE,
+  APPLY_TAG_FILTER,
+  HOME_PAGE_LOADED,
+  HOME_PAGE_UNLOADED,
+  CHANGE_TAB,
+  PROFILE_PAGE_LOADED,
+  PROFILE_PAGE_UNLOADED,
+  PROFILE_FAVORITES_PAGE_LOADED,
+  PROFILE_FAVORITES_PAGE_UNLOADED
+} from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case ARTICLE_FAVORITED:
+    case ARTICLE_UNFAVORITED:
+      return {
+        ...state,
+        articles: state.articles.map(article => {
+          if (article.slug === action.payload.article.slug) {
+            return {
+              ...article,
+              favorited: action.payload.article.favorited,
+              favoritesCount: action.payload.article.favoritesCount
+            };
+          }
+          return article;
+        })
+      };
+    case SET_PAGE:
+      return {
+        ...state,
+        articles: action.payload.articles,
+        articlesCount: action.payload.articlesCount,
+        currentPage: action.page
+      };
+    case APPLY_TAG_FILTER:
+      return {
+        ...state,
+        pager: action.pager,
+        articles: action.payload.articles,
+        articlesCount: action.payload.articlesCount,
+        tab: null,
+        tag: action.tag,
+        currentPage: 0
+      };
+    case HOME_PAGE_LOADED:
+      return {
+        ...state,
+        pager: action.pager,
+        tags: action.payload[0].tags,
+        articles: action.payload[1].articles,
+        articlesCount: action.payload[1].articlesCount,
+        currentPage: 0,
+        tab: action.tab
+      };
+    case HOME_PAGE_UNLOADED:
+      return {};
+    case CHANGE_TAB:
+      return {
+        ...state,
+        pager: action.pager,
+        articles: action.payload.articles,
+        articlesCount: action.payload.articlesCount,
+        tab: action.tab,
+        currentPage: 0,
+        tag: null
+      };
+    case PROFILE_PAGE_LOADED:
+    case PROFILE_FAVORITES_PAGE_LOADED:
+      return {
+        ...state,
+        pager: action.pager,
+        articles: action.payload[1].articles,
+        articlesCount: action.payload[1].articlesCount,
+        currentPage: 0
+      };
+    case PROFILE_PAGE_UNLOADED:
+    case PROFILE_FAVORITES_PAGE_UNLOADED:
+      return {};
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/auth.js b/src/reducers/auth.js
new file mode 100644
index 0000000..6e83838
--- /dev/null
+++ b/src/reducers/auth.js
@@ -0,0 +1,34 @@
+import {
+  LOGIN,
+  REGISTER,
+  LOGIN_PAGE_UNLOADED,
+  REGISTER_PAGE_UNLOADED,
+  ASYNC_START,
+  UPDATE_FIELD_AUTH
+} from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case LOGIN:
+    case REGISTER:
+      return {
+        ...state,
+        inProgress: false,
+        errors: action.error ? action.payload.errors : null
+      };
+    case LOGIN_PAGE_UNLOADED:
+    case REGISTER_PAGE_UNLOADED:
+      return {};
+    case ASYNC_START:
+      if (action.subtype === LOGIN || action.subtype === REGISTER) {
+        return { ...state, inProgress: true };
+      }
+      break;
+    case UPDATE_FIELD_AUTH:
+      return { ...state, [action.key]: action.value };
+    default:
+      return state;
+  }
+
+  return state;
+};
diff --git a/src/reducers/common.js b/src/reducers/common.js
new file mode 100644
index 0000000..f95b2bb
--- /dev/null
+++ b/src/reducers/common.js
@@ -0,0 +1,70 @@
+import {
+  APP_LOAD,
+  REDIRECT,
+  LOGOUT,
+  ARTICLE_SUBMITTED,
+  SETTINGS_SAVED,
+  LOGIN,
+  REGISTER,
+  DELETE_ARTICLE,
+  ARTICLE_PAGE_UNLOADED,
+  EDITOR_PAGE_UNLOADED,
+  HOME_PAGE_UNLOADED,
+  PROFILE_PAGE_UNLOADED,
+  PROFILE_FAVORITES_PAGE_UNLOADED,
+  SETTINGS_PAGE_UNLOADED,
+  LOGIN_PAGE_UNLOADED,
+  REGISTER_PAGE_UNLOADED
+} from '../constants/actionTypes';
+
+const defaultState = {
+  appName: 'Conduit',
+  token: null,
+  viewChangeCounter: 0
+};
+
+export default (state = defaultState, action) => {
+  switch (action.type) {
+    case APP_LOAD:
+      return {
+        ...state,
+        token: action.token || null,
+        appLoaded: true,
+        currentUser: action.payload ? action.payload.user : null
+      };
+    case REDIRECT:
+      return { ...state, redirectTo: null };
+    case LOGOUT:
+      return { ...state, redirectTo: '/', token: null, currentUser: null };
+    case ARTICLE_SUBMITTED:
+      const redirectUrl = `/article/${action.payload.article.slug}`;
+      return { ...state, redirectTo: redirectUrl };
+    case SETTINGS_SAVED:
+      return {
+        ...state,
+        redirectTo: action.error ? null : '/',
+        currentUser: action.error ? null : action.payload.user
+      };
+    case LOGIN:
+    case REGISTER:
+      return {
+        ...state,
+        redirectTo: action.error ? null : '/',
+        token: action.error ? null : action.payload.user.token,
+        currentUser: action.error ? null : action.payload.user
+      };
+    case DELETE_ARTICLE:
+      return { ...state, redirectTo: '/' };
+    case ARTICLE_PAGE_UNLOADED:
+    case EDITOR_PAGE_UNLOADED:
+    case HOME_PAGE_UNLOADED:
+    case PROFILE_PAGE_UNLOADED:
+    case PROFILE_FAVORITES_PAGE_UNLOADED:
+    case SETTINGS_PAGE_UNLOADED:
+    case LOGIN_PAGE_UNLOADED:
+    case REGISTER_PAGE_UNLOADED:
+      return { ...state, viewChangeCounter: state.viewChangeCounter + 1 };
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/editor.js b/src/reducers/editor.js
new file mode 100644
index 0000000..fd45633
--- /dev/null
+++ b/src/reducers/editor.js
@@ -0,0 +1,54 @@
+import {
+  EDITOR_PAGE_LOADED,
+  EDITOR_PAGE_UNLOADED,
+  ARTICLE_SUBMITTED,
+  ASYNC_START,
+  ADD_TAG,
+  REMOVE_TAG,
+  UPDATE_FIELD_EDITOR
+} from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case EDITOR_PAGE_LOADED:
+      return {
+        ...state,
+        articleSlug: action.payload ? action.payload.article.slug : '',
+        title: action.payload ? action.payload.article.title : '',
+        description: action.payload ? action.payload.article.description : '',
+        body: action.payload ? action.payload.article.body : '',
+        tagInput: '',
+        tagList: action.payload ? action.payload.article.tagList : []
+      };
+    case EDITOR_PAGE_UNLOADED:
+      return {};
+    case ARTICLE_SUBMITTED:
+      return {
+        ...state,
+        inProgress: null,
+        errors: action.error ? action.payload.errors : null
+      };
+    case ASYNC_START:
+      if (action.subtype === ARTICLE_SUBMITTED) {
+        return { ...state, inProgress: true };
+      }
+      break;
+    case ADD_TAG:
+      return {
+        ...state,
+        tagList: state.tagList.concat([state.tagInput]),
+        tagInput: ''
+      };
+    case REMOVE_TAG:
+      return {
+        ...state,
+        tagList: state.tagList.filter(tag => tag !== action.tag)
+      };
+    case UPDATE_FIELD_EDITOR:
+      return { ...state, [action.key]: action.value };
+    default:
+      return state;
+  }
+
+  return state;
+};
diff --git a/src/reducers/home.js b/src/reducers/home.js
new file mode 100644
index 0000000..c1cd49a
--- /dev/null
+++ b/src/reducers/home.js
@@ -0,0 +1,15 @@
+import { HOME_PAGE_LOADED, HOME_PAGE_UNLOADED } from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case HOME_PAGE_LOADED:
+      return {
+        ...state,
+        tags: action.payload[0].tags
+      };
+    case HOME_PAGE_UNLOADED:
+      return {};
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/profile.js b/src/reducers/profile.js
new file mode 100644
index 0000000..5e67a79
--- /dev/null
+++ b/src/reducers/profile.js
@@ -0,0 +1,24 @@
+import {
+  PROFILE_PAGE_LOADED,
+  PROFILE_PAGE_UNLOADED,
+  FOLLOW_USER,
+  UNFOLLOW_USER
+} from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case PROFILE_PAGE_LOADED:
+      return {
+        ...action.payload[0].profile
+      };
+    case PROFILE_PAGE_UNLOADED:
+      return {};
+    case FOLLOW_USER:
+    case UNFOLLOW_USER:
+      return {
+        ...action.payload.profile
+      };
+    default:
+      return state;
+  }
+};
diff --git a/src/reducers/settings.js b/src/reducers/settings.js
new file mode 100644
index 0000000..8e3751e
--- /dev/null
+++ b/src/reducers/settings.js
@@ -0,0 +1,25 @@
+import {
+  SETTINGS_SAVED,
+  SETTINGS_PAGE_UNLOADED,
+  ASYNC_START
+} from '../constants/actionTypes';
+
+export default (state = {}, action) => {
+  switch (action.type) {
+    case SETTINGS_SAVED:
+      return {
+        ...state,
+        inProgress: false,
+        errors: action.error ? action.payload.errors : null
+      };
+    case SETTINGS_PAGE_UNLOADED:
+      return {};
+    case ASYNC_START:
+      return {
+        ...state,
+        inProgress: true
+      };
+    default:
+      return state;
+  }
+};
diff --git a/src/store.js b/src/store.js
new file mode 100644
index 0000000..185d866
--- /dev/null
+++ b/src/store.js
@@ -0,0 +1,25 @@
+import { applyMiddleware, createStore } from 'redux';
+import { createLogger } from 'redux-logger'
+import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly';
+import { promiseMiddleware, localStorageMiddleware } from './middleware';
+import reducer from './reducer';
+
+import { routerMiddleware } from 'react-router-redux'
+import createHistory from 'history/createBrowserHistory';
+
+export const history = createHistory();
+
+// Build the middleware for intercepting and dispatching navigation actions
+const myRouterMiddleware = routerMiddleware(history);
+
+const getMiddleware = () => {
+  if (process.env.NODE_ENV === 'production') {
+    return applyMiddleware(myRouterMiddleware, promiseMiddleware, localStorageMiddleware);
+  } else {
+    // Enable additional logging in non-production environments.
+    return applyMiddleware(myRouterMiddleware, promiseMiddleware, localStorageMiddleware, createLogger())
+  }
+};
+
+export const store = createStore(
+  reducer, composeWithDevTools(getMiddleware()));
-- 
GitLab