Repository: osmlab/maproulette3
Pull request #634 (2019-02-12 03:17:29)

Add points ticker to top nav


Patch:
diff --git a/src/components/AdminPane/Manage/ManageChallenges/EditChallenge/EditChallenge.js b/src/components/AdminPane/Manage/ManageChallenges/EditChallenge/EditChallenge.js
index daa4c20b..aef8a675 100644
--- a/src/components/AdminPane/Manage/ManageChallenges/EditChallenge/EditChallenge.js
+++ b/src/components/AdminPane/Manage/ManageChallenges/EditChallenge/EditChallenge.js
@@ -107,7 +107,7 @@ const challengeSteps = [
  */
 export class EditChallenge extends Component {
   state = {
-    activeStep: 3,
+    activeStep: 0,
     formData: {},
     formContext: {},
     isSaving: false,
diff --git a/src/components/HOCs/WithCurrentTask/WithCurrentTask.js b/src/components/HOCs/WithCurrentTask/WithCurrentTask.js
index 62e2b81b..18a8aa0e 100644
--- a/src/components/HOCs/WithCurrentTask/WithCurrentTask.js
+++ b/src/components/HOCs/WithCurrentTask/WithCurrentTask.js
@@ -16,6 +16,7 @@ import { taskDenormalizationSchema,
          completeTask } from '../../../services/Task/Task'
 import { fetchChallenge, fetchParentProject }
        from '../../../services/Challenge/Challenge'
+import { fetchUser } from '../../../services/User/User'
 import { TaskLoadMethod }
        from '../../../services/Task/TaskLoadMethod/TaskLoadMethod'
 import { fetchOSMUser, fetchOSMData } from '../../../services/OSM/OSM'
@@ -160,7 +161,7 @@ export const mapDispatchToProps = (dispatch, ownProps) => {
     /**
      * Invoke to mark as a task as complete with the given status
      */
-    completeTask: (taskId, challengeId, taskStatus, comment, taskLoadBy) => {
+    completeTask: (taskId, challengeId, taskStatus, comment, taskLoadBy, userId) => {
       return dispatch(
         completeTask(taskId, challengeId, taskStatus)
       ).then(() => {
@@ -175,6 +176,9 @@ export const mapDispatchToProps = (dispatch, ownProps) => {
           dispatch(addTaskComment(taskId, comment, taskStatus))
         }
 
+        // Update the user in the background to get their latest score
+        setTimeout(() => dispatch(fetchUser(userId)), 100)
+
         // Updating the challenge actions will allow us to show more accurate
         // completion progress, but this can be done in the background
         setTimeout(() => dispatch(fetchChallengeActions(challengeId)), 500)
diff --git a/src/components/Navbar/Navbar.js b/src/components/Navbar/Navbar.js
index 3b1e3a5e..b56bc234 100644
--- a/src/components/Navbar/Navbar.js
+++ b/src/components/Navbar/Navbar.js
@@ -6,6 +6,7 @@ import _get from 'lodash/get'
 import { Link, NavLink } from 'react-router-dom'
 import { FormattedMessage } from 'react-intl'
 import SignInButton from '../SignInButton/SignInButton'
+import PointsTicker from '../PointsTicker/PointsTicker'
 import SvgSymbol from '../SvgSymbol/SvgSymbol'
 import Dropdown from '../Dropdown/Dropdown'
 import messages from './Messages'
@@ -69,6 +70,7 @@ export default class Navbar extends Component {
         <MediaQuery minWidth={screens.lg}>
           <LoggedInUser {...this.props}>
             <div className="mr-flex mr-items-center">
+              <PointsTicker user={this.props.user} className="mr-mr-8" />
               <Dropdown
                 className="mr-dropdown--right"
                 button={<ProfileButton {...this.props} />}
@@ -218,6 +220,8 @@ const MobileNav = props => (
       <Link to='/user/profile' onClick={props.closeMobileMenu}>
         <ProfileImage {...props} />
       </Link>
+
+      <PointsTicker user={props.user} className="mr-my-4" />
     </LoggedInUser>
 
     <LoggedOutUser {...props}>
diff --git a/src/components/PointsTicker/PointsTicker.js b/src/components/PointsTicker/PointsTicker.js
index 4269babd..30dcee3a 100644
--- a/src/components/PointsTicker/PointsTicker.js
+++ b/src/components/PointsTicker/PointsTicker.js
@@ -3,7 +3,6 @@ import PropTypes from 'prop-types'
 import { FormattedMessage } from 'react-intl'
 import classNames from 'classnames'
 import _map from 'lodash/map'
-import _get from 'lodash/get'
 import messages from './Messages'
 
 class PointsTicker extends Component {
diff --git a/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/ActiveTaskControls.js b/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/ActiveTaskControls.js
index 66c02331..f37628ee 100644
--- a/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/ActiveTaskControls.js
+++ b/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/ActiveTaskControls.js
@@ -47,7 +47,8 @@ export class ActiveTaskControls extends Component {
   complete = taskStatus => {
     this.setState({taskBeingCompleted: this.props.task.id})
     this.props.completeTask(this.props.task.id, this.props.task.parent.id,
-                            taskStatus, this.state.comment, this.props.taskLoadBy)
+                            taskStatus, this.state.comment, this.props.taskLoadBy,
+                            this.props.user.id)
   }
 
   /** Move to the next task without modifying the task status */
diff --git a/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.js b/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.js
index 3fe8bf6a..08876097 100644
--- a/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.js
+++ b/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.js
@@ -4,7 +4,6 @@ import { FormattedMessage } from 'react-intl'
 import classNames from 'classnames'
 import SvgSymbol from '../../../../SvgSymbol/SvgSymbol'
 import messages from './Messages'
-import './TaskNextControl.scss'
 
 /**
  * TaskNextControl displays a control for loading a new task without altering
@@ -16,32 +15,15 @@ import './TaskNextControl.scss'
  */
 export default class TaskNextControl extends Component {
   render() {
-    if (this.props.isMinimized) {
-      return (
-        <button className={classNames("button icon-only next-control",
-                                      this.props.className)}
-                onClick={() => this.props.nextTask(this.props.task.parent.id,
-                                                    this.props.task.id)}>
-          <span className="control-icon"
-                title={this.props.intl.formatMessage(messages.nextTooltip)}>
-            <SvgSymbol viewBox='0 0 20 20' sym="forward-icon" />
-          </span>
-        </button>
-      )
-    }
-    else {
-      return (
-        <div className="has-centered-children">
-          <button className={classNames("button is-green is-outlined next-control",
-                                        this.props.className)}
-                  onClick={() => this.props.nextTask(this.props.task.parent.id, this.props.task.id)}
-                  title={this.props.intl.formatMessage(messages.nextTooltip)}>
-            <FormattedMessage {...messages.nextLabel} />
-            <SvgSymbol viewBox='0 0 20 20' sym="forward-icon" />
-          </button>
-        </div>
-      )
-    }
+    return (
+      <button
+        className="mr-button mr-button--white mr-w-full"
+        onClick={() => this.props.nextTask(this.props.task.parent.id, this.props.task.id)}
+        title={this.props.intl.formatMessage(messages.nextTooltip)}
+      >
+        <FormattedMessage {...messages.nextLabel} />
+      </button>
+    )
   }
 }
 
@@ -50,10 +32,4 @@ TaskNextControl.propTypes = {
   task: PropTypes.object.isRequired,
   /** Invoked if the user desires to load a new task */
   nextTask: PropTypes.func.isRequired,
-  /** Set to true to render in a minimized form */
-  isMinimized: PropTypes.bool,
-}
-
-TaskNextControl.defaultProps = {
-  isMinimized: false,
 }
diff --git a/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.scss b/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.scss
deleted file mode 100644
index a6ff8659..00000000
--- a/src/components/TaskPane/ActiveTaskDetails/ActiveTaskControls/TaskNextControl/TaskNextControl.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-@import '../../../../../variables.scss';
-
-.active-task-details .next-control {
-  margin-top: 5px;
-  margin-bottom: 10px;
-
-  svg {
-    height: 18px;
-    width: auto;
-    vertical-align: middle;
-    margin-left: 10px;
-  }
-
-  &.icon-only {
-    margin-top: 0;
-
-    svg {
-      margin-left: 0;
-    }
-  }
-}
diff --git a/src/components/TaskPane/TaskPane.js b/src/components/TaskPane/TaskPane.js
index 8f3fddc3..459aca7c 100644
--- a/src/components/TaskPane/TaskPane.js
+++ b/src/components/TaskPane/TaskPane.js
@@ -69,9 +69,9 @@ export class TaskPane extends Component {
    * WithCurrentTask, but we intercept the call so that we can manage our
    * transition animation as the task prepares to complete.
    */
-  completeTask = (taskId, challengeId, taskStatus, comment, taskLoadBy) => {
+  completeTask = (taskId, challengeId, taskStatus, comment, taskLoadBy, userId) => {
     this.setState({completingTask: taskId})
-    this.props.completeTask(taskId, challengeId, taskStatus, comment, taskLoadBy)
+    this.props.completeTask(taskId, challengeId, taskStatus, comment, taskLoadBy, userId)
   }
 
   clearCompletingTask = () => {
diff --git a/src/lang/en-US.json b/src/lang/en-US.json
index cf01b22b..e3711b83 100644
--- a/src/lang/en-US.json
+++ b/src/lang/en-US.json
@@ -719,7 +719,7 @@
   "Challenge.sort.name": "Name",
   "Challenge.sort.created": "Newest",
   "Challenge.sort.popularity": "Popular",
-  "Challenge.sort.default": "Smart",
+  "Challenge.sort.default": "Default",
   "Task.loadByMethod.random": "Random",
   "Task.loadByMethod.proximity": "Proximity",
   "Task.priority.high": "High",
diff --git a/src/services/Search/Messages.js b/src/services/Search/Messages.js
index ae37d4c3..32f5c9b2 100644
--- a/src/services/Search/Messages.js
+++ b/src/services/Search/Messages.js
@@ -18,6 +18,6 @@ export default defineMessages({
   },
   default: {
     id: "Challenge.sort.default",
-    defaultMessage: "Smart",
+    defaultMessage: "Default",
   },
 })


Test patch:
diff --git a/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByDifficulty.test.js.snap b/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByDifficulty.test.js.snap
index 66cf31ff..bbceb948 100644
--- a/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByDifficulty.test.js.snap
+++ b/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByDifficulty.test.js.snap
@@ -131,6 +131,9 @@ ShallowWrapper {
         updateFilter={[Function]}
       />,
       "className": "mr-dropdown--flush xl:mr-border-l xl:mr-border-white-10 mr-p-6 mr-pl-0 xl:mr-pl-6",
+      "close": [Function],
+      "isVisible": false,
+      "toggleVisible": [Function],
     },
     "ref": null,
     "rendered": Object {
@@ -186,6 +189,9 @@ ShallowWrapper {
           updateFilter={[Function]}
         />,
         "className": "mr-dropdown--flush xl:mr-border-l xl:mr-border-white-10 mr-p-6 mr-pl-0 xl:mr-pl-6",
+        "close": [Function],
+        "isVisible": false,
+        "toggleVisible": [Function],
       },
       "ref": null,
       "rendered": Object {
diff --git a/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByKeyword.test.js.snap b/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByKeyword.test.js.snap
index 6cac16f0..c7c26b9d 100644
--- a/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByKeyword.test.js.snap
+++ b/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByKeyword.test.js.snap
@@ -157,52 +157,38 @@ ShallowWrapper {
         className="mr-list-dropdown mr-list-dropdown--ruled"
       >
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
@@ -219,6 +205,9 @@ ShallowWrapper {
         </li>
       </ol>,
       "className": "mr-dropdown--flush xl:mr-border-l xl:mr-border-white-10 mr-p-6 mr-pl-0 xl:mr-pl-6",
+      "close": [Function],
+      "isVisible": false,
+      "toggleVisible": [Function],
     },
     "ref": null,
     "rendered": Object {
@@ -228,52 +217,38 @@ ShallowWrapper {
       "props": Object {
         "children": Array [
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
@@ -298,26 +273,22 @@ ShallowWrapper {
           "key": "any",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -326,26 +297,22 @@ ShallowWrapper {
           "key": "navigation",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -354,26 +321,22 @@ ShallowWrapper {
           "key": "water",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -382,26 +345,22 @@ ShallowWrapper {
           "key": "pointsOfInterest",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -410,26 +369,22 @@ ShallowWrapper {
           "key": "buildings",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -438,26 +393,22 @@ ShallowWrapper {
           "key": "landUse",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -466,26 +417,22 @@ ShallowWrapper {
           "key": "transit",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -548,52 +495,38 @@ ShallowWrapper {
           className="mr-list-dropdown mr-list-dropdown--ruled"
         >
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
@@ -610,6 +543,9 @@ ShallowWrapper {
           </li>
         </ol>,
         "className": "mr-dropdown--flush xl:mr-border-l xl:mr-border-white-10 mr-p-6 mr-pl-0 xl:mr-pl-6",
+        "close": [Function],
+        "isVisible": false,
+        "toggleVisible": [Function],
       },
       "ref": null,
       "rendered": Object {
@@ -619,52 +555,38 @@ ShallowWrapper {
         "props": Object {
           "children": Array [
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
@@ -689,26 +611,22 @@ ShallowWrapper {
             "key": "any",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -717,26 +635,22 @@ ShallowWrapper {
             "key": "navigation",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -745,26 +659,22 @@ ShallowWrapper {
             "key": "water",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -773,26 +683,22 @@ ShallowWrapper {
             "key": "pointsOfInterest",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -801,26 +707,22 @@ ShallowWrapper {
             "key": "buildings",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -829,26 +731,22 @@ ShallowWrapper {
             "key": "landUse",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -857,26 +755,22 @@ ShallowWrapper {
             "key": "transit",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
diff --git a/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByLocation.test.js.snap b/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByLocation.test.js.snap
index 652a4246..c523ecc4 100644
--- a/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByLocation.test.js.snap
+++ b/src/components/ChallengePane/ChallengeFilterSubnav/__snapshots__/FilterByLocation.test.js.snap
@@ -124,35 +124,30 @@ ShallowWrapper {
         className="mr-list-dropdown mr-list-dropdown--ruled"
       >
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
         <li>
-          <Link
+          <a
             onClick={[Function]}
-            replace={false}
-            to={Object {}}
           />
         </li>
       </ol>,
       "className": "mr-dropdown--flush xl:mr-border-l xl:mr-border-white-10 mr-p-6 mr-pl-0 xl:mr-pl-6",
+      "close": [Function],
+      "isVisible": false,
+      "toggleVisible": [Function],
     },
     "ref": null,
     "rendered": Object {
@@ -162,31 +157,23 @@ ShallowWrapper {
       "props": Object {
         "children": Array [
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>,
         ],
@@ -199,26 +186,22 @@ ShallowWrapper {
           "key": "any",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -227,26 +210,22 @@ ShallowWrapper {
           "key": "withinMapBounds",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -255,26 +234,22 @@ ShallowWrapper {
           "key": "intersectingMapBounds",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -283,26 +258,22 @@ ShallowWrapper {
           "key": "nearMe",
           "nodeType": "host",
           "props": Object {
-            "children": <Link
+            "children": <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />,
           },
           "ref": null,
           "rendered": Object {
             "instance": null,
             "key": undefined,
-            "nodeType": "class",
+            "nodeType": "host",
             "props": Object {
               "children": undefined,
               "onClick": [Function],
-              "replace": false,
-              "to": Object {},
             },
             "ref": null,
             "rendered": null,
-            "type": [Function],
+            "type": "a",
           },
           "type": "li",
         },
@@ -330,35 +301,30 @@ ShallowWrapper {
           className="mr-list-dropdown mr-list-dropdown--ruled"
         >
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
           <li>
-            <Link
+            <a
               onClick={[Function]}
-              replace={false}
-              to={Object {}}
             />
           </li>
         </ol>,
         "className": "mr-dropdown--flush xl:mr-border-l xl:mr-border-white-10 mr-p-6 mr-pl-0 xl:mr-pl-6",
+        "close": [Function],
+        "isVisible": false,
+        "toggleVisible": [Function],
       },
       "ref": null,
       "rendered": Object {
@@ -368,31 +334,23 @@ ShallowWrapper {
         "props": Object {
           "children": Array [
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
             <li>
-              <Link
+              <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />
             </li>,
           ],
@@ -405,26 +363,22 @@ ShallowWrapper {
             "key": "any",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -433,26 +387,22 @@ ShallowWrapper {
             "key": "withinMapBounds",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -461,26 +411,22 @@ ShallowWrapper {
             "key": "intersectingMapBounds",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
@@ -489,26 +435,22 @@ ShallowWrapper {
             "key": "nearMe",
             "nodeType": "host",
             "props": Object {
-              "children": <Link
+              "children": <a
                 onClick={[Function]}
-                replace={false}
-                to={Object {}}
               />,
             },
             "ref": null,
             "rendered": Object {
               "instance": null,
               "key": undefined,
-              "nodeType": "class",
+              "nodeType": "host",
               "props": Object {
                 "children": undefined,
                 "onClick": [Function],
-                "replace": false,
-                "to": Object {},
               },
               "ref": null,
               "rendered": null,
-              "type": [Function],
+              "type": "a",
             },
             "type": "li",
           },
diff --git a/src/components/Navbar/__snapshots__/Navbar.test.js.snap b/src/components/Navbar/__snapshots__/Navbar.test.js.snap
index 533a8eae..e47c629b 100644
--- a/src/components/Navbar/__snapshots__/Navbar.test.js.snap
+++ b/src/components/Navbar/__snapshots__/Navbar.test.js.snap
@@ -102,6 +102,18 @@ ShallowWrapper {
             <div
               className="mr-flex mr-items-center"
             >
+              <PointsTicker
+                className="mr-mr-8"
+                user={
+                  Object {
+                    "id": 357,
+                    "isLoggedIn": false,
+                    "osmProfile": Object {
+                      "avatarURL": "http://example.com/profilepic.jpg",
+                    },
+                  }
+                }
+              />
               <Clickout
                 button={
                   <ProfileButton
@@ -518,6 +530,18 @@ ShallowWrapper {
               <div
                 className="mr-flex mr-items-center"
               >
+                <PointsTicker
+                  className="mr-mr-8"
+                  user={
+                    Object {
+                      "id": 357,
+                      "isLoggedIn": false,
+                      "osmProfile": Object {
+                        "avatarURL": "http://example.com/profilepic.jpg",
+                      },
+                    }
+                  }
+                />
                 <Clickout
                   button={
                     <ProfileButton
@@ -638,6 +662,18 @@ ShallowWrapper {
               "children": <div
                 className="mr-flex mr-items-center"
               >
+                <PointsTicker
+                  className="mr-mr-8"
+                  user={
+                    Object {
+                      "id": 357,
+                      "isLoggedIn": false,
+                      "osmProfile": Object {
+                        "avatarURL": "http://example.com/profilepic.jpg",
+                      },
+                    }
+                  }
+                />
                 <Clickout
                   button={
                     <ProfileButton
@@ -726,90 +762,9 @@ ShallowWrapper {
               "key": undefined,
               "nodeType": "host",
               "props": Object {
-                "children": <Clickout
-                  button={
-                    <ProfileButton
-                      location={
-                        Object {
-                          "pathname": "/some/path",
-                        }
-                      }
-                      user={
-                        Object {
-                          "id": 357,
-                          "isLoggedIn": false,
-                          "osmProfile": Object {
-                            "avatarURL": "http://example.com/profilepic.jpg",
-                          },
-                        }
-                      }
-                    />
-                  }
-                  className="mr-dropdown--right"
-                  close={[Function]}
-                  isVisible={false}
-                  toggleVisible={[Function]}
-                >
-                  <ol
-                    className="mr-list-dropdown"
-                  >
-                    <li>
-                      <NavLink
-                        activeClassName="active"
-                        ariaCurrent="true"
-                        onClick={[Function]}
-                        to="/admin/projects"
-                      >
-                        <FormattedMessage
-                          defaultMessage="Create & Manage"
-                          id="Navbar.links.admin"
-                          values={Object {}}
-                        />
-                      </NavLink>
-                    </li>
-                    <li>
-                      <NavLink
-                        activeClassName="active"
-                        ariaCurrent="true"
-                        onClick={[Function]}
-                        to="/user/profile"
-                      >
-                        <FormattedMessage
-                          defaultMessage="User Profile"
-                          id="Navbar.links.userProfile"
-                          values={Object {}}
-                        />
-                      </NavLink>
-                    </li>
-                    <li>
-                      <NavLink
-                        activeClassName="active"
-                        ariaCurrent="true"
-                        to={Object {}}
-                      >
-                        <FormattedMessage
-                          defaultMessage="Sign out"
-                          id="Navbar.links.signout"
-                          values={Object {}}
-                        />
-                      </NavLink>
-                    </li>
-                  </ol>
-                </Clickout>,
-                "className": "mr-flex mr-items-center",
-              },
-              "ref": null,
-              "rendered": Object {
-                "instance": null,
-                "key": undefined,
-                "nodeType": "class",
-                "props": Object {
-                  "button": <ProfileButton
-                    location={
-                      Object {
-                        "pathname": "/some/path",
-                      }
-                    }
+                "children": Array [
+                  <PointsTicker
+                    className="mr-mr-8"
                     user={
                       Object {
                         "id": 357,
@@ -820,63 +775,33 @@ ShallowWrapper {
                       }
                     }
                   />,
-                  "children": <ol
-                    className="mr-list-dropdown"
+                  <Clickout
+                    button={
+                      <ProfileButton
+                        location={
+                          Object {
+                            "pathname": "/some/path",
+                          }
+                        }
+                        user={
+                          Object {
+                            "id": 357,
+                            "isLoggedIn": false,
+                            "osmProfile": Object {
+                              "avatarURL": "http://example.com/profilepic.jpg",
+                            },
+                          }
+                        }
+                      />
+                    }
+                    className="mr-dropdown--right"
+                    close={[Function]}
+                    isVisible={false}
+                    toggleVisible={[Function]}
                   >
-                    <li>
-                      <NavLink
-                        activeClassName="active"
-                        ariaCurrent="true"
-                        onClick={[Function]}
-                        to="/admin/projects"
-                      >
-                        <FormattedMessage
-                          defaultMessage="Create & Manage"
-                          id="Navbar.links.admin"
-                          values={Object {}}
-                        />
-                      </NavLink>
-                    </li>
-                    <li>
-                      <NavLink
-                        activeClassName="active"
-                        ariaCurrent="true"
-                        onClick={[Function]}
-                        to="/user/profile"
-                      >
-                        <FormattedMessage
-                          defaultMessage="User Profile"
-                          id="Navbar.links.userProfile"
-                          values={Object {}}
-                        />
-                      </NavLink>
-                    </li>
-                    <li>
-                      <NavLink
-                        activeClassName="active"
-                        ariaCurrent="true"
-                        to={Object {}}
-                      >
-                        <FormattedMessage
-                          defaultMessage="Sign out"
-                          id="Navbar.links.signout"
-                          values={Object {}}
-                        />
-                      </NavLink>
-                    </li>
-                  </ol>,
-                  "className": "mr-dropdown--right",
-                  "close": [Function],
-                  "isVisible": false,
-                  "toggleVisible": [Function],
-                },
-                "ref": null,
-                "rendered": Object {
-                  "instance": null,
-                  "key": undefined,
-                  "nodeType": "host",
-                  "props": Object {
-                    "children": Array [
+                    <ol
+                      className="mr-list-dropdown"
+                    >
                       <li>
                         <NavLink
                           activeClassName="active"
@@ -890,7 +815,7 @@ ShallowWrapper {
                             values={Object {}}
                           />
                         </NavLink>
-                      </li>,
+                      </li>
                       <li>
                         <NavLink
                           activeClassName="active"
@@ -904,7 +829,7 @@ ShallowWrapper {
                             values={Object {}}
                           />
                         </NavLink>
-                      </li>,
+                      </li>
                       <li>
                         <NavLink
                           activeClassName="active"
@@ -917,18 +842,58 @@ ShallowWrapper {
                             values={Object {}}
                           />
                         </NavLink>
-                      </li>,
-                    ],
-                    "className": "mr-list-dropdown",
+                      </li>
+                    </ol>
+                  </Clickout>,
+                ],
+                "className": "mr-flex mr-items-center",
+              },
+              "ref": null,
+              "rendered": Array [
+                Object {
+                  "instance": null,
+                  "key": undefined,
+                  "nodeType": "class",
+                  "props": Object {
+                    "className": "mr-mr-8",
+                    "user": Object {
+                      "id": 357,
+                      "isLoggedIn": false,
+                      "osmProfile": Object {
+                        "avatarURL": "http://example.com/profilepic.jpg",
+                      },
+                    },
                   },
                   "ref": null,
-                  "rendered": Array [
-                    Object {
-                      "instance": null,
-                      "key": undefined,
-                      "nodeType": "host",
-                      "props": Object {
-                        "children": <NavLink
+                  "rendered": null,
+                  "type": [Function],
+                },
+                Object {
+                  "instance": null,
+                  "key": undefined,
+                  "nodeType": "class",
+                  "props": Object {
+                    "button": <ProfileButton
+                      location={
+                        Object {
+                          "pathname": "/some/path",
+                        }
+                      }
+                      user={
+                        Object {
+                          "id": 357,
+                          "isLoggedIn": false,
+                          "osmProfile": Object {
+                            "avatarURL": "http://example.com/profilepic.jpg",
+                          },
+                        }
+                      }
+                    />,
+                    "children": <ol
+                      className="mr-list-dropdown"
+                    >
+                      <li>
+                        <NavLink
                           activeClassName="active"
                           ariaCurrent="true"
                           onClick={[Function]}
@@ -939,150 +904,255 @@ ShallowWrapper {
                             id="Navbar.links.admin"
                             values={Object {}}
                           />
-                        </NavLink>,
-                      },
-                      "ref": null,
-                      "rendered": Object {
-                        "instance": null,
-                        "key": undefined,
-                        "nodeType": "function",
-                        "props": Object {
-                          "activeClassName": "active",
-                          "ariaCurrent": "true",
-                          "children": <FormattedMessage
-                            defaultMessage="Create & Manage"
-                            id="Navbar.links.admin"
+                        </NavLink>
+                      </li>
+                      <li>
+                        <NavLink
+                          activeClassName="active"
+                          ariaCurrent="true"
+                          onClick={[Function]}
+                          to="/user/profile"
+                        >
+                          <FormattedMessage
+                            defaultMessage="User Profile"
+                            id="Navbar.links.userProfile"
                             values={Object {}}
-                          />,
-                          "onClick": [Function],
-                          "to": "/admin/projects",
+                          />
+                        </NavLink>
+                      </li>
+                      <li>
+                        <NavLink
+                          activeClassName="active"
+                          ariaCurrent="true"
+                          to={Object {}}
+                        >
+                          <FormattedMessage
+                            defaultMessage="Sign out"
+                            id="Navbar.links.signout"
+                            values={Object {}}
+                          />
+                        </NavLink>
+                      </li>
+                    </ol>,
+                    "className": "mr-dropdown--right",
+                    "close": [Function],
+                    "isVisible": false,
+                    "toggleVisible": [Function],
+                  },
+                  "ref": null,
+                  "rendered": Object {
+                    "instance": null,
+                    "key": undefined,
+                    "nodeType": "host",
+                    "props": Object {
+                      "children": Array [
+                        <li>
+                          <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            onClick={[Function]}
+                            to="/admin/projects"
+                          >
+                            <FormattedMessage
+                              defaultMessage="Create & Manage"
+                              id="Navbar.links.admin"
+                              values={Object {}}
+                            />
+                          </NavLink>
+                        </li>,
+                        <li>
+                          <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            onClick={[Function]}
+                            to="/user/profile"
+                          >
+                            <FormattedMessage
+                              defaultMessage="User Profile"
+                              id="Navbar.links.userProfile"
+                              values={Object {}}
+                            />
+                          </NavLink>
+                        </li>,
+                        <li>
+                          <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            to={Object {}}
+                          >
+                            <FormattedMessage
+                              defaultMessage="Sign out"
+                              id="Navbar.links.signout"
+                              values={Object {}}
+                            />
+                          </NavLink>
+                        </li>,
+                      ],
+                      "className": "mr-list-dropdown",
+                    },
+                    "ref": null,
+                    "rendered": Array [
+                      Object {
+                        "instance": null,
+                        "key": undefined,
+                        "nodeType": "host",
+                        "props": Object {
+                          "children": <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            onClick={[Function]}
+                            to="/admin/projects"
+                          >
+                            <FormattedMessage
+                              defaultMessage="Create & Manage"
+                              id="Navbar.links.admin"
+                              values={Object {}}
+                            />
+                          </NavLink>,
                         },
                         "ref": null,
                         "rendered": Object {
                           "instance": null,
                           "key": undefined,
-                          "nodeType": "class",
+                          "nodeType": "function",
                           "props": Object {
-                            "defaultMessage": "Create & Manage",
-                            "id": "Navbar.links.admin",
-                            "values": Object {},
+                            "activeClassName": "active",
+                            "ariaCurrent": "true",
+                            "children": <FormattedMessage
+                              defaultMessage="Create & Manage"
+                              id="Navbar.links.admin"
+                              values={Object {}}
+                            />,
+                            "onClick": [Function],
+                            "to": "/admin/projects",
                           },
                           "ref": null,
-                          "rendered": null,
+                          "rendered": Object {
+                            "instance": null,
+                            "key": undefined,
+                            "nodeType": "class",
+                            "props": Object {
+                              "defaultMessage": "Create & Manage",
+                              "id": "Navbar.links.admin",
+                              "values": Object {},
+                            },
+                            "ref": null,
+                            "rendered": null,
+                            "type": [Function],
+                          },
                           "type": [Function],
                         },
-                        "type": [Function],
-                      },
-                      "type": "li",
-                    },
-                    Object {
-                      "instance": null,
-                      "key": undefined,
-                      "nodeType": "host",
-                      "props": Object {
-                        "children": <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          onClick={[Function]}
-                          to="/user/profile"
-                        >
-                          <FormattedMessage
-                            defaultMessage="User Profile"
-                            id="Navbar.links.userProfile"
-                            values={Object {}}
-                          />
-                        </NavLink>,
+                        "type": "li",
                       },
-                      "ref": null,
-                      "rendered": Object {
+                      Object {
                         "instance": null,
                         "key": undefined,
-                        "nodeType": "function",
+                        "nodeType": "host",
                         "props": Object {
-                          "activeClassName": "active",
-                          "ariaCurrent": "true",
-                          "children": <FormattedMessage
-                            defaultMessage="User Profile"
-                            id="Navbar.links.userProfile"
-                            values={Object {}}
-                          />,
-                          "onClick": [Function],
-                          "to": "/user/profile",
+                          "children": <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            onClick={[Function]}
+                            to="/user/profile"
+                          >
+                            <FormattedMessage
+                              defaultMessage="User Profile"
+                              id="Navbar.links.userProfile"
+                              values={Object {}}
+                            />
+                          </NavLink>,
                         },
                         "ref": null,
                         "rendered": Object {
                           "instance": null,
                           "key": undefined,
-                          "nodeType": "class",
+                          "nodeType": "function",
                           "props": Object {
-                            "defaultMessage": "User Profile",
-                            "id": "Navbar.links.userProfile",
-                            "values": Object {},
+                            "activeClassName": "active",
+                            "ariaCurrent": "true",
+                            "children": <FormattedMessage
+                              defaultMessage="User Profile"
+                              id="Navbar.links.userProfile"
+                              values={Object {}}
+                            />,
+                            "onClick": [Function],
+                            "to": "/user/profile",
                           },
                           "ref": null,
-                          "rendered": null,
+                          "rendered": Object {
+                            "instance": null,
+                            "key": undefined,
+                            "nodeType": "class",
+                            "props": Object {
+                              "defaultMessage": "User Profile",
+                              "id": "Navbar.links.userProfile",
+                              "values": Object {},
+                            },
+                            "ref": null,
+                            "rendered": null,
+                            "type": [Function],
+                          },
                           "type": [Function],
                         },
-                        "type": [Function],
-                      },
-                      "type": "li",
-                    },
-                    Object {
-                      "instance": null,
-                      "key": undefined,
-                      "nodeType": "host",
-                      "props": Object {
-                        "children": <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          to={Object {}}
-                        >
-                          <FormattedMessage
-                            defaultMessage="Sign out"
-                            id="Navbar.links.signout"
-                            values={Object {}}
-                          />
-                        </NavLink>,
+                        "type": "li",
                       },
-                      "ref": null,
-                      "rendered": Object {
+                      Object {
                         "instance": null,
                         "key": undefined,
-                        "nodeType": "function",
+                        "nodeType": "host",
                         "props": Object {
-                          "activeClassName": "active",
-                          "ariaCurrent": "true",
-                          "children": <FormattedMessage
-                            defaultMessage="Sign out"
-                            id="Navbar.links.signout"
-                            values={Object {}}
-                          />,
-                          "onClick": undefined,
-                          "to": Object {},
+                          "children": <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            to={Object {}}
+                          >
+                            <FormattedMessage
+                              defaultMessage="Sign out"
+                              id="Navbar.links.signout"
+                              values={Object {}}
+                            />
+                          </NavLink>,
                         },
                         "ref": null,
                         "rendered": Object {
                           "instance": null,
                           "key": undefined,
-                          "nodeType": "class",
+                          "nodeType": "function",
                           "props": Object {
-                            "defaultMessage": "Sign out",
-                            "id": "Navbar.links.signout",
-                            "values": Object {},
+                            "activeClassName": "active",
+                            "ariaCurrent": "true",
+                            "children": <FormattedMessage
+                              defaultMessage="Sign out"
+                              id="Navbar.links.signout"
+                              values={Object {}}
+                            />,
+                            "onClick": undefined,
+                            "to": Object {},
                           },
                           "ref": null,
-                          "rendered": null,
+                          "rendered": Object {
+                            "instance": null,
+                            "key": undefined,
+                            "nodeType": "class",
+                            "props": Object {
+                              "defaultMessage": "Sign out",
+                              "id": "Navbar.links.signout",
+                              "values": Object {},
+                            },
+                            "ref": null,
+                            "rendered": null,
+                            "type": [Function],
+                          },
                           "type": [Function],
                         },
-                        "type": [Function],
+                        "type": "li",
                       },
-                      "type": "li",
-                    },
-                  ],
-                  "type": "ol",
+                    ],
+                    "type": "ol",
+                  },
+                  "type": [Function],
                 },
-                "type": [Function],
-              },
+              ],
               "type": "div",
             },
             "type": [Function],
@@ -1428,6 +1498,18 @@ ShallowWrapper {
               <div
                 className="mr-flex mr-items-center"
               >
+                <PointsTicker
+                  className="mr-mr-8"
+                  user={
+                    Object {
+                      "id": 357,
+                      "isLoggedIn": false,
+                      "osmProfile": Object {
+                        "avatarURL": "http://example.com/profilepic.jpg",
+                      },
+                    }
+                  }
+                />
                 <Clickout
                   button={
                     <ProfileButton
@@ -1844,6 +1926,18 @@ ShallowWrapper {
                 <div
                   className="mr-flex mr-items-center"
                 >
+                  <PointsTicker
+                    className="mr-mr-8"
+                    user={
+                      Object {
+                        "id": 357,
+                        "isLoggedIn": false,
+                        "osmProfile": Object {
+                          "avatarURL": "http://example.com/profilepic.jpg",
+                        },
+                      }
+                    }
+                  />
                   <Clickout
                     button={
                       <ProfileButton
@@ -1964,95 +2058,19 @@ ShallowWrapper {
                 "children": <div
                   className="mr-flex mr-items-center"
                 >
-                  <Clickout
-                    button={
-                      <ProfileButton
-                        location={
-                          Object {
-                            "pathname": "/some/path",
-                          }
-                        }
-                        user={
-                          Object {
-                            "id": 357,
-                            "isLoggedIn": false,
-                            "osmProfile": Object {
-                              "avatarURL": "http://example.com/profilepic.jpg",
-                            },
-                          }
-                        }
-                      />
+                  <PointsTicker
+                    className="mr-mr-8"
+                    user={
+                      Object {
+                        "id": 357,
+                        "isLoggedIn": false,
+                        "osmProfile": Object {
+                          "avatarURL": "http://example.com/profilepic.jpg",
+                        },
+                      }
                     }
-                    className="mr-dropdown--right"
-                    close={[Function]}
-                    isVisible={false}
-                    toggleVisible={[Function]}
-                  >
-                    <ol
-                      className="mr-list-dropdown"
-                    >
-                      <li>
-                        <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          onClick={[Function]}
-                          to="/admin/projects"
-                        >
-                          <FormattedMessage
-                            defaultMessage="Create & Manage"
-                            id="Navbar.links.admin"
-                            values={Object {}}
-                          />
-                        </NavLink>
-                      </li>
-                      <li>
-                        <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          onClick={[Function]}
-                          to="/user/profile"
-                        >
-                          <FormattedMessage
-                            defaultMessage="User Profile"
-                            id="Navbar.links.userProfile"
-                            values={Object {}}
-                          />
-                        </NavLink>
-                      </li>
-                      <li>
-                        <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          to={Object {}}
-                        >
-                          <FormattedMessage
-                            defaultMessage="Sign out"
-                            id="Navbar.links.signout"
-                            values={Object {}}
-                          />
-                        </NavLink>
-                      </li>
-                    </ol>
-                  </Clickout>
-                </div>,
-                "location": Object {
-                  "pathname": "/some/path",
-                },
-                "user": Object {
-                  "id": 357,
-                  "isLoggedIn": false,
-                  "osmProfile": Object {
-                    "avatarURL": "http://example.com/profilepic.jpg",
-                  },
-                },
-              },
-              "ref": null,
-              "rendered": Object {
-                "instance": null,
-                "key": undefined,
-                "nodeType": "host",
-                "props": Object {
-                  "children": <Clickout
+                  />
+                  <Clickout
                     button={
                       <ProfileButton
                         location={
@@ -2067,86 +2085,16 @@ ShallowWrapper {
                             "osmProfile": Object {
                               "avatarURL": "http://example.com/profilepic.jpg",
                             },
-                          }
-                        }
-                      />
-                    }
-                    className="mr-dropdown--right"
-                    close={[Function]}
-                    isVisible={false}
-                    toggleVisible={[Function]}
-                  >
-                    <ol
-                      className="mr-list-dropdown"
-                    >
-                      <li>
-                        <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          onClick={[Function]}
-                          to="/admin/projects"
-                        >
-                          <FormattedMessage
-                            defaultMessage="Create & Manage"
-                            id="Navbar.links.admin"
-                            values={Object {}}
-                          />
-                        </NavLink>
-                      </li>
-                      <li>
-                        <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          onClick={[Function]}
-                          to="/user/profile"
-                        >
-                          <FormattedMessage
-                            defaultMessage="User Profile"
-                            id="Navbar.links.userProfile"
-                            values={Object {}}
-                          />
-                        </NavLink>
-                      </li>
-                      <li>
-                        <NavLink
-                          activeClassName="active"
-                          ariaCurrent="true"
-                          to={Object {}}
-                        >
-                          <FormattedMessage
-                            defaultMessage="Sign out"
-                            id="Navbar.links.signout"
-                            values={Object {}}
-                          />
-                        </NavLink>
-                      </li>
-                    </ol>
-                  </Clickout>,
-                  "className": "mr-flex mr-items-center",
-                },
-                "ref": null,
-                "rendered": Object {
-                  "instance": null,
-                  "key": undefined,
-                  "nodeType": "class",
-                  "props": Object {
-                    "button": <ProfileButton
-                      location={
-                        Object {
-                          "pathname": "/some/path",
-                        }
-                      }
-                      user={
-                        Object {
-                          "id": 357,
-                          "isLoggedIn": false,
-                          "osmProfile": Object {
-                            "avatarURL": "http://example.com/profilepic.jpg",
-                          },
-                        }
-                      }
-                    />,
-                    "children": <ol
+                          }
+                        }
+                      />
+                    }
+                    className="mr-dropdown--right"
+                    close={[Function]}
+                    isVisible={false}
+                    toggleVisible={[Function]}
+                  >
+                    <ol
                       className="mr-list-dropdown"
                     >
                       <li>
@@ -2190,19 +2138,66 @@ ShallowWrapper {
                           />
                         </NavLink>
                       </li>
-                    </ol>,
-                    "className": "mr-dropdown--right",
-                    "close": [Function],
-                    "isVisible": false,
-                    "toggleVisible": [Function],
+                    </ol>
+                  </Clickout>
+                </div>,
+                "location": Object {
+                  "pathname": "/some/path",
+                },
+                "user": Object {
+                  "id": 357,
+                  "isLoggedIn": false,
+                  "osmProfile": Object {
+                    "avatarURL": "http://example.com/profilepic.jpg",
                   },
-                  "ref": null,
-                  "rendered": Object {
-                    "instance": null,
-                    "key": undefined,
-                    "nodeType": "host",
-                    "props": Object {
-                      "children": Array [
+                },
+              },
+              "ref": null,
+              "rendered": Object {
+                "instance": null,
+                "key": undefined,
+                "nodeType": "host",
+                "props": Object {
+                  "children": Array [
+                    <PointsTicker
+                      className="mr-mr-8"
+                      user={
+                        Object {
+                          "id": 357,
+                          "isLoggedIn": false,
+                          "osmProfile": Object {
+                            "avatarURL": "http://example.com/profilepic.jpg",
+                          },
+                        }
+                      }
+                    />,
+                    <Clickout
+                      button={
+                        <ProfileButton
+                          location={
+                            Object {
+                              "pathname": "/some/path",
+                            }
+                          }
+                          user={
+                            Object {
+                              "id": 357,
+                              "isLoggedIn": false,
+                              "osmProfile": Object {
+                                "avatarURL": "http://example.com/profilepic.jpg",
+                              },
+                            }
+                          }
+                        />
+                      }
+                      className="mr-dropdown--right"
+                      close={[Function]}
+                      isVisible={false}
+                      toggleVisible={[Function]}
+                    >
+                      <ol
+                        className="mr-list-dropdown"
+                      >
                         <li>
                           <NavLink
                             activeClassName="active"
@@ -2216,7 +2211,7 @@ ShallowWrapper {
                               values={Object {}}
                             />
                           </NavLink>
-                        </li>,
+                        </li>
                         <li>
                           <NavLink
                             activeClassName="active"
@@ -2230,7 +2225,7 @@ ShallowWrapper {
                               values={Object {}}
                             />
                           </NavLink>
-                        </li>,
+                        </li>
                         <li>
                           <NavLink
                             activeClassName="active"
@@ -2243,18 +2238,58 @@ ShallowWrapper {
                               values={Object {}}
                             />
                           </NavLink>
-                        </li>,
-                      ],
-                      "className": "mr-list-dropdown",
+                        </li>
+                      </ol>
+                    </Clickout>,
+                  ],
+                  "className": "mr-flex mr-items-center",
+                },
+                "ref": null,
+                "rendered": Array [
+                  Object {
+                    "instance": null,
+                    "key": undefined,
+                    "nodeType": "class",
+                    "props": Object {
+                      "className": "mr-mr-8",
+                      "user": Object {
+                        "id": 357,
+                        "isLoggedIn": false,
+                        "osmProfile": Object {
+                          "avatarURL": "http://example.com/profilepic.jpg",
+                        },
+                      },
                     },
                     "ref": null,
-                    "rendered": Array [
-                      Object {
-                        "instance": null,
-                        "key": undefined,
-                        "nodeType": "host",
-                        "props": Object {
-                          "children": <NavLink
+                    "rendered": null,
+                    "type": [Function],
+                  },
+                  Object {
+                    "instance": null,
+                    "key": undefined,
+                    "nodeType": "class",
+                    "props": Object {
+                      "button": <ProfileButton
+                        location={
+                          Object {
+                            "pathname": "/some/path",
+                          }
+                        }
+                        user={
+                          Object {
+                            "id": 357,
+                            "isLoggedIn": false,
+                            "osmProfile": Object {
+                              "avatarURL": "http://example.com/profilepic.jpg",
+                            },
+                          }
+                        }
+                      />,
+                      "children": <ol
+                        className="mr-list-dropdown"
+                      >
+                        <li>
+                          <NavLink
                             activeClassName="active"
                             ariaCurrent="true"
                             onClick={[Function]}
@@ -2265,150 +2300,255 @@ ShallowWrapper {
                               id="Navbar.links.admin"
                               values={Object {}}
                             />
-                          </NavLink>,
-                        },
-                        "ref": null,
-                        "rendered": Object {
+                          </NavLink>
+                        </li>
+                        <li>
+                          <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            onClick={[Function]}
+                            to="/user/profile"
+                          >
+                            <FormattedMessage
+                              defaultMessage="User Profile"
+                              id="Navbar.links.userProfile"
+                              values={Object {}}
+                            />
+                          </NavLink>
+                        </li>
+                        <li>
+                          <NavLink
+                            activeClassName="active"
+                            ariaCurrent="true"
+                            to={Object {}}
+                          >
+                            <FormattedMessage
+                              defaultMessage="Sign out"
+                              id="Navbar.links.signout"
+                              values={Object {}}
+                            />
+                          </NavLink>
+                        </li>
+                      </ol>,
+                      "className": "mr-dropdown--right",
+                      "close": [Function],
+                      "isVisible": false,
+                      "toggleVisible": [Function],
+                    },
+                    "ref": null,
+                    "rendered": Object {
+                      "instance": null,
+                      "key": undefined,
+                      "nodeType": "host",
+                      "props": Object {
+                        "children": Array [
+                          <li>
+                            <NavLink
+                              activeClassName="active"
+                              ariaCurrent="true"
+                              onClick={[Function]}
+                              to="/admin/projects"
+                            >
+                              <FormattedMessage
+                                defaultMessage="Create & Manage"
+                                id="Navbar.links.admin"
+                                values={Object {}}
+                              />
+                            </NavLink>
+                          </li>,
+                          <li>
+                            <NavLink
+                              activeClassName="active"
+                              ariaCurrent="true"
+                              onClick={[Function]}
+                              to="/user/profile"
+                            >
+                              <FormattedMessage
+                                defaultMessage="User Profile"
+                                id="Navbar.links.userProfile"
+                                values={Object {}}
+                              />
+                            </NavLink>
+                          </li>,
+                          <li>
+                            <NavLink
+                              activeClassName="active"
+                              ariaCurrent="true"
+                              to={Object {}}
+                            >
+                              <FormattedMessage
+                                defaultMessage="Sign out"
+                                id="Navbar.links.signout"
+                                values={Object {}}
+                              />
+                            </NavLink>
+                          </li>,
+                        ],
+                        "className": "mr-list-dropdown",
+                      },
+                      "ref": null,
+                      "rendered": Array [
+                        Object {
                           "instance": null,
                           "key": undefined,
-                          "nodeType": "function",
+                          "nodeType": "host",
                           "props": Object {
-                            "activeClassName": "active",
-                            "ariaCurrent": "true",
-                            "children": <FormattedMessage
-                              defaultMessage="Create & Manage"
-                              id="Navbar.links.admin"
-                              values={Object {}}
-                            />,
-                            "onClick": [Function],
-                            "to": "/admin/projects",
+                            "children": <NavLink
+                              activeClassName="active"
+                              ariaCurrent="true"
+                              onClick={[Function]}
+                              to="/admin/projects"
+                            >
+                              <FormattedMessage
+                                defaultMessage="Create & Manage"
+                                id="Navbar.links.admin"
+                                values={Object {}}
+                              />
+                            </NavLink>,
                           },
                           "ref": null,
                           "rendered": Object {
                             "instance": null,
                             "key": undefined,
-                            "nodeType": "class",
+                            "nodeType": "function",
                             "props": Object {
-                              "defaultMessage": "Create & Manage",
-                              "id": "Navbar.links.admin",
-                              "values": Object {},
+                              "activeClassName": "active",
+                              "ariaCurrent": "true",
+                              "children": <FormattedMessage
+                                defaultMessage="Create & Manage"
+                                id="Navbar.links.admin"
+                                values={Object {}}
+                              />,
+                              "onClick": [Function],
+                              "to": "/admin/projects",
                             },
                             "ref": null,
-                            "rendered": null,
+                            "rendered": Object {
+                              "instance": null,
+                              "key": undefined,
+                              "nodeType": "class",
+                              "props": Object {
+                                "defaultMessage": "Create & Manage",
+                                "id": "Navbar.links.admin",
+                                "values": Object {},
+                              },
+                              "ref": null,
+                              "rendered": null,
+                              "type": [Function],
+                            },
                             "type": [Function],
                           },
-                          "type": [Function],
-                        },
-                        "type": "li",
-                      },
-                      Object {
-                        "instance": null,
-                        "key": undefined,
-                        "nodeType": "host",
-                        "props": Object {
-                          "children": <NavLink
-                            activeClassName="active"
-                            ariaCurrent="true"
-                            onClick={[Function]}
-                            to="/user/profile"
-                          >
-                            <FormattedMessage
-                              defaultMessage="User Profile"
-                              id="Navbar.links.userProfile"
-                              values={Object {}}
-                            />
-                          </NavLink>,
+                          "type": "li",
                         },
-                        "ref": null,
-                        "rendered": Object {
+                        Object {
                           "instance": null,
                           "key": undefined,
-                          "nodeType": "function",
+                          "nodeType": "host",
                           "props": Object {
-                            "activeClassName": "active",
-                            "ariaCurrent": "true",
-                            "children": <FormattedMessage
-                              defaultMessage="User Profile"
-                              id="Navbar.links.userProfile"
-                              values={Object {}}
-                            />,
-                            "onClick": [Function],
-                            "to": "/user/profile",
+                            "children": <NavLink
+                              activeClassName="active"
+                              ariaCurrent="true"
+                              onClick={[Function]}
+                              to="/user/profile"
+                            >
+                              <FormattedMessage
+                                defaultMessage="User Profile"
+                                id="Navbar.links.userProfile"
+                                values={Object {}}
+                              />
+                            </NavLink>,
                           },
                           "ref": null,
                           "rendered": Object {
                             "instance": null,
                             "key": undefined,
-                            "nodeType": "class",
+                            "nodeType": "function",
                             "props": Object {
-                              "defaultMessage": "User Profile",
-                              "id": "Navbar.links.userProfile",
-                              "values": Object {},
+                              "activeClassName": "active",
+                              "ariaCurrent": "true",
+                              "children": <FormattedMessage
+                                defaultMessage="User Profile"
+                                id="Navbar.links.userProfile"
+                                values={Object {}}
+                              />,
+                              "onClick": [Function],
+                              "to": "/user/profile",
                             },
                             "ref": null,
-                            "rendered": null,
+                            "rendered": Object {
+                              "instance": null,
+                              "key": undefined,
+                              "nodeType": "class",
+                              "props": Object {
+                                "defaultMessage": "User Profile",
+                                "id": "Navbar.links.userProfile",
+                                "values": Object {},
+                              },
+                              "ref": null,
+                              "rendered": null,
+                              "type": [Function],
+                            },
                             "type": [Function],
                           },
-                          "type": [Function],
-                        },
-                        "type": "li",
-                      },
-                      Object {
-                        "instance": null,
-                        "key": undefined,
-                        "nodeType": "host",
-                        "props": Object {
-                          "children": <NavLink
-                            activeClassName="active"
-                            ariaCurrent="true"
-                            to={Object {}}
-                          >
-                            <FormattedMessage
-                              defaultMessage="Sign out"
-                              id="Navbar.links.signout"
-                              values={Object {}}
-                            />
-                          </NavLink>,
+                          "type": "li",
                         },
-                        "ref": null,
-                        "rendered": Object {
+                        Object {
                           "instance": null,
                           "key": undefined,
-                          "nodeType": "function",
+                          "nodeType": "host",
                           "props": Object {
-                            "activeClassName": "active",
-                            "ariaCurrent": "true",
-                            "children": <FormattedMessage
-                              defaultMessage="Sign out"
-                              id="Navbar.links.signout"
-                              values={Object {}}
-                            />,
-                            "onClick": undefined,
-                            "to": Object {},
+                            "children": <NavLink
+                              activeClassName="active"
+                              ariaCurrent="true"
+                              to={Object {}}
+                            >
+                              <FormattedMessage
+                                defaultMessage="Sign out"
+                                id="Navbar.links.signout"
+                                values={Object {}}
+                              />
+                            </NavLink>,
                           },
                           "ref": null,
                           "rendered": Object {
                             "instance": null,
                             "key": undefined,
-                            "nodeType": "class",
+                            "nodeType": "function",
                             "props": Object {
-                              "defaultMessage": "Sign out",
-                              "id": "Navbar.links.signout",
-                              "values": Object {},
+                              "activeClassName": "active",
+                              "ariaCurrent": "true",
+                              "children": <FormattedMessage
+                                defaultMessage="Sign out"
+                                id="Navbar.links.signout"
+                                values={Object {}}
+                              />,
+                              "onClick": undefined,
+                              "to": Object {},
                             },
                             "ref": null,
-                            "rendered": null,
+                            "rendered": Object {
+                              "instance": null,
+                              "key": undefined,
+                              "nodeType": "class",
+                              "props": Object {
+                                "defaultMessage": "Sign out",
+                                "id": "Navbar.links.signout",
+                                "values": Object {},
+                              },
+                              "ref": null,
+                              "rendered": null,
+                              "type": [Function],
+                            },
                             "type": [Function],
                           },
-                          "type": [Function],
+                          "type": "li",
                         },
-                        "type": "li",
-                      },
-                    ],
-                    "type": "ol",
+                      ],
+                      "type": "ol",
+                    },
+                    "type": [Function],
                   },
-                  "type": [Function],
-                },
+                ],
                 "type": "div",
               },
               "type": [Function],