diff --git a/circle.yml b/circle.yml
index 51020211c..875af71cc 100644
--- a/circle.yml
+++ b/circle.yml
@@ -12,7 +12,7 @@ machine:
dependencies:
override:
- - yarn
+ - yarn install --pure-lockfile
cache_directories:
- ~/.cache/yarn
diff --git a/frontend/components/Layout/Layout.js b/frontend/components/Layout/Layout.js
index af08b23a1..ae63413a3 100644
--- a/frontend/components/Layout/Layout.js
+++ b/frontend/components/Layout/Layout.js
@@ -13,6 +13,7 @@ import Avatar from 'components/Avatar';
import { LoadingIndicatorBar } from 'components/LoadingIndicator';
import Scrollable from 'components/Scrollable';
import Icon from 'components/Icon';
+import Toasts from 'components/Toasts';
import CollectionMenu from 'menus/CollectionMenu';
import AccountMenu from 'menus/AccountMenu';
@@ -153,6 +154,7 @@ type Props = {
+ {errors.data.map((error, index) => (
+
+ );
+ }
+}
+
+const List = styled.ol`
+ position: fixed;
+ left: ${layout.hpadding};
+ bottom: ${layout.vpadding};
+ list-style: none;
+ margin: 0;
+ padding: 0;
+`;
+
+export default inject('errors')(Toasts);
diff --git a/frontend/components/Toasts/components/Toast.js b/frontend/components/Toasts/components/Toast.js
new file mode 100644
index 000000000..d4a96f5f4
--- /dev/null
+++ b/frontend/components/Toasts/components/Toast.js
@@ -0,0 +1,71 @@
+// @flow
+import React, { Component } from 'react';
+import styled from 'styled-components';
+import { darken } from 'polished';
+import { color } from 'styles/constants';
+import { fadeAndScaleIn } from 'styles/animations';
+import Icon from 'components/Icon';
+
+type Props = {
+ onRequestClose: () => void,
+ closeAfterMs: number,
+ message: string,
+ type: 'warning' | 'error' | 'info',
+};
+
+class Toast extends Component {
+ timeout: number;
+ props: Props;
+
+ static defaultProps = {
+ closeAfterMs: 3000,
+ type: 'warning',
+ };
+
+ componentDidMount() {
+ this.timeout = setTimeout(
+ this.props.onRequestClose,
+ this.props.closeAfterMs
+ );
+ }
+
+ componentWillUnmount() {
+ clearTimeout(this.timeout);
+ }
+
+ render() {
+ const { type, onRequestClose, message } = this.props;
+
+ return (
+