diff --git a/packages/components-faraday/src/components/Dashboard/Dashboard.js b/packages/components-faraday/src/components/Dashboard/Dashboard.js
index 36429611cd5b86991344d200f8be338a695d97b9..29ba564fd069e3d25afe4247899b5f5917afd15f 100644
--- a/packages/components-faraday/src/components/Dashboard/Dashboard.js
+++ b/packages/components-faraday/src/components/Dashboard/Dashboard.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import { get } from 'lodash'
+import { get, isEmpty } from 'lodash'
 import { Button } from '@pubsweet/ui'
 import { connect } from 'react-redux'
 import { compose, withHandlers } from 'recompose'
@@ -21,6 +21,8 @@ const Dashboard = ({
   changeFilterValue,
   filterValues,
   filterItems,
+  abstractModal,
+  setModal,
   ...rest
 }) => (
   <div className={classes.root}>
@@ -41,6 +43,17 @@ const Dashboard = ({
       list={getItems()}
       listView={listView}
     />
+    {!isEmpty(abstractModal) && (
+      <div className={classes.modal}>
+        <div className={classes.modalContent}>
+          <div
+            className={classes.modalText}
+            dangerouslySetInnerHTML={{ __html: abstractModal }} // eslint-disable-line
+          />
+          <Button onClick={setModal()}>Close</Button>
+        </div>
+      </div>
+    )}
   </div>
 )
 
diff --git a/packages/components-faraday/src/components/Dashboard/Dashboard.local.scss b/packages/components-faraday/src/components/Dashboard/Dashboard.local.scss
index c4b717e217a6feb5460725abb24d2f7a8944ae02..5a2dc6819b679b6e45fd78737c23c00a77787a86 100644
--- a/packages/components-faraday/src/components/Dashboard/Dashboard.local.scss
+++ b/packages/components-faraday/src/components/Dashboard/Dashboard.local.scss
@@ -150,3 +150,36 @@
 .version {
   margin-left: 1em;
 }
+
+.modal {
+  align-items: center;
+  background: rgba(255, 255, 255, 0.95);
+  bottom: 0;
+  display: flex;
+  justify-content: center;
+  left: 0;
+  position: fixed;
+  right: 0;
+  top: 0;
+}
+
+.modalContent {
+  border: 1px solid var(--color-primary);
+  height: 50vw;
+  margin: 0 auto;
+  padding: 20px;
+  position: relative;
+  width: 50vw;
+
+  .modalText {
+    height: calc(100% - 60px);
+    overflow-y: scroll;
+    padding-right: 10px;
+  }
+
+  button {
+    bottom: 20px;
+    position: absolute;
+    right: 20px;
+  }
+}
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
index 792a4113b53f6a8f55d44b0683c7ecd9ed900079..970ce57a3c3aff705e9266b90e5a6d67b030b926 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
@@ -1,7 +1,9 @@
 import React from 'react'
+import PropTypes from 'prop-types'
 import { get, isEmpty } from 'lodash'
 import classnames from 'classnames'
 import { Button, Icon } from '@pubsweet/ui'
+import { compose, getContext } from 'recompose'
 
 import { parseVersion, getFilesURL, downloadAll } from './utils'
 import classes from './Dashboard.local.scss'
@@ -12,6 +14,7 @@ const DashboardCard = ({
   listView,
   project,
   version,
+  setModal,
 }) => {
   const { submitted, author, title, type, version: vers } = parseVersion(
     version,
@@ -19,6 +22,7 @@ const DashboardCard = ({
   const files = getFilesURL(get(version, 'files'))
   const status = get(project, 'status') || 'Draft'
   const hasFiles = !isEmpty(files)
+  const abstract = get(version, 'metadata.abstract')
 
   return (
     <div className={classes.card}>
@@ -68,7 +72,11 @@ const DashboardCard = ({
             </div>
             <div className={classes.column2}>
               <div>{author}</div>
-              <a>View</a>
+              {abstract && (
+                <a href="#" onClick={setModal(abstract)}>
+                  view
+                </a>
+              )}
             </div>
           </div>
           <div className={classes.column3}>
@@ -103,4 +111,8 @@ const DashboardCard = ({
   )
 }
 
-export default DashboardCard
+export default compose(
+  getContext({
+    setModal: PropTypes.func,
+  }),
+)(DashboardCard)
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardPage.js b/packages/components-faraday/src/components/Dashboard/DashboardPage.js
index 3006b18906dcafd01ee294884c7ca902e826218b..36a4a7adf345d5fcd95cdbeb708ecc843853c991 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardPage.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardPage.js
@@ -1,9 +1,10 @@
 import { get } from 'lodash'
+import PropTypes from 'prop-types'
 import { connect } from 'react-redux'
 import { actions } from 'pubsweet-client'
 import { ConnectPage } from 'xpub-connect'
 import { withRouter } from 'react-router-dom'
-import { compose, withState, withHandlers } from 'recompose'
+import { compose, withState, withHandlers, withContext } from 'recompose'
 import { newestFirst, selectCurrentUser } from 'xpub-selectors'
 import { createDraftSubmission } from 'pubsweet-component-wizard/src/redux/conversion'
 
@@ -18,8 +19,12 @@ export default compose(
     actions.getUsers(),
   ]),
   withState('listView', 'changeView', true),
+  withState('abstractModal', 'setAbstractModal', ''),
   withHandlers({
     changeViewMode: ({ changeView }) => () => changeView(listView => !listView),
+    setModal: ({ setAbstractModal }) => abstract => () => {
+      setAbstractModal(abstract)
+    },
   }),
   connect(
     state => {
@@ -88,4 +93,14 @@ export default compose(
       },
     },
   }),
+  withContext(
+    {
+      abstractModal: PropTypes.string,
+      setModal: PropTypes.func,
+    },
+    ({ abstractModal, setModal }) => ({
+      abstractModal,
+      setModal,
+    }),
+  ),
 )(Dashboard)