diff --git a/package.json b/package.json
index 349aa4a27be386078d7d2cb9cf6979816355ff0e..59125a31c180a96757d82c5ba6bd404e442de348 100644
--- a/package.json
+++ b/package.json
@@ -131,6 +131,7 @@
     "json2csv": "^5.0.6",
     "jsonwebtoken": "^8.5.1",
     "jwt-decode": "^3.1.2",
+    "material-ui": "^0.20.2",
     "mongodb": "^3.6.4",
     "mongoose": "^5.11.15",
     "net": "^1.0.2",
@@ -139,6 +140,7 @@
     "portastic": "^1.0.1",
     "react": "^17.0.1",
     "react-dom": "^17.0.1",
+    "react-iframe": "^1.8.0",
     "react-router-dom": "^5.2.0",
     "react-scripts": "4.0.2",
     "react-spinners-css": "^1.2.2",
diff --git a/src/backend/helpers/createJbrowse.js b/src/backend/helpers/createJbrowse.js
index d18c144ad4dd3596aa8bb288516e9a5f94a17ea1..fc1e6da12d5c83e6415c0c6c210b9606464be962 100644
--- a/src/backend/helpers/createJbrowse.js
+++ b/src/backend/helpers/createJbrowse.js
@@ -1,14 +1,9 @@
-const createJbrowse = (body) => {
+const createJbrowse = (jbPath) => {
     const fs = require("fs");
     const ncp = require("ncp").ncp;
     const path = require("path");
     const source = path.join(__dirname, "../../resources/jbrowse2");
-    const destination = path.join(
-        __dirname,
-        `../../resources/users/${body.name}/`
-    );
-    console.log(`creating Jbrowse For ${body.name}`);
-    ncp(source, destination, function (err) {
+    ncp(source, jbPath, function (err) {
         if (err) {
             return console.error(err);
         }
diff --git a/src/backend/models/Run.js b/src/backend/models/Run.js
index 9ad3b7e5ead2360cd88de47805609305c93ea822..9da81d9cced76722738412238b6b0794ddde0bf1 100644
--- a/src/backend/models/Run.js
+++ b/src/backend/models/Run.js
@@ -152,8 +152,8 @@ const RunSchema = new Schema({
             id: { type: String, required: false },
             sample: { type: String, required: false },
             lane: { type: String, required: false },
-            techrep: { type: Number, required: false },
-            biorep: { type: Number, required: false },
+            techrep: { type: String, required: false },
+            biorep: { type: String, required: false },
             fq1: { type: String, required: false },
             fq2: { type: String, required: false },
         },
diff --git a/src/backend/models/User.js b/src/backend/models/User.js
index 9300e6e7e05dc87de9b2e3aa76f88b9016a3e249..396ea7e78ec94f354ad58be301e60d2ea11b7e94 100644
--- a/src/backend/models/User.js
+++ b/src/backend/models/User.js
@@ -18,6 +18,10 @@ const UserSchema = new Schema({
         type: Date,
         default: Date.now,
     },
+    jbPath: {
+        type: String,
+        required: true,
+    },
     runs: [
         {
             type: Schema.Types.ObjectId,
diff --git a/src/backend/routes/api/userController.js b/src/backend/routes/api/userController.js
index 475d3e9e6329436342ff4b5864c34558a35d06d6..61524119eb16c7e3bae9d0ef5a522900c8818dc3 100644
--- a/src/backend/routes/api/userController.js
+++ b/src/backend/routes/api/userController.js
@@ -3,6 +3,9 @@ const router = express.Router();
 const bcrypt = require("bcryptjs");
 const jwt = require("jsonwebtoken");
 const path = require("path");
+const portastic = require("portastic");
+const handler = require("serve-handler");
+const http = require("http");
 const createJB = require("../../helpers/createJbrowse");
 // Load input validation
 const validateRegisterInput = require("../../validation/register");
@@ -25,11 +28,16 @@ router.post("/register", (req, res) => {
         if (user) {
             return res.status(400).json({ email: "Email already exists" });
         } else {
-            createJB(req.body);
+            const jbPath = path.join(
+                __dirname,
+                `../../../resources/users/${req.body.name}/`
+            );
+            createJB(jbPath);
             const newUser = new User({
                 name: req.body.name,
                 email: req.body.email,
                 password: req.body.password,
+                jbPath,
             });
             // Hash password before saving in database
             bcrypt.genSalt(10, (err, salt) => {
@@ -69,24 +77,47 @@ router.post("/login", (req, res) => {
             if (isMatch) {
                 // User matched
                 // Create JWT Payload
-                const payload = {
-                    id: user.id,
-                    name: user.name,
-                };
-                // Sign token
-                jwt.sign(
-                    payload,
-                    process.env.SECRET,
-                    {
-                        expiresIn: 31556926, // 1 year in seconds
-                    },
-                    (err, token) => {
-                        res.json({
-                            success: true,
-                            token: "Bearer " + token,
+                portastic
+                    .find({
+                        min: 30000,
+                        max: 35000,
+                        retrieve: 1,
+                    })
+                    .then(function (port) {
+                        const server = http.createServer(
+                            (request, response) => {
+                                return handler(request, response, {
+                                    public: user.jbPath,
+                                });
+                            }
+                        );
+                        server.listen(port[0], () => {
+                            console.log(`Running at http://localhost:${port}`);
+                            const payload = {
+                                id: user.id,
+                                name: user.name,
+                                jbPath: user.jbPath,
+                                email: user.email,
+                                runs: user.runs,
+                                views: user.runs,
+                                port: port,
+                            };
+                            // Sign token
+                            jwt.sign(
+                                payload,
+                                process.env.SECRET,
+                                {
+                                    expiresIn: 31556926, // 1 year in seconds
+                                },
+                                (err, token) => {
+                                    res.json({
+                                        success: true,
+                                        token: "Bearer " + token,
+                                    });
+                                }
+                            );
                         });
-                    }
-                );
+                    });
             } else {
                 return res
                     .status(400)
diff --git a/src/backend/routes/api/viewController.js b/src/backend/routes/api/viewController.js
index c20aa4327d7a193109e41b7f5723c14e5d682b19..0fe460c26b20abbfbe885b8e6c6951deb8179a0e 100644
--- a/src/backend/routes/api/viewController.js
+++ b/src/backend/routes/api/viewController.js
@@ -47,7 +47,7 @@ router.post("/visualize", (req, res) => {
         spawnJbrowse(req.body, uniqueDir);
     }
 });
-router.post("/nonassigned", (req, res) => {
+router.post("/serve", (req, res) => {
     console.log(req.body);
 });
 router.get("/", function (req, res) {
diff --git a/src/components/Table/ComparisonTable.js b/src/components/Table/ComparisonTable.js
index b2dbb2ea21df884bde892571baa12f983c7c5a10..9df5148a8ebc8bc39a9e57305f619d01b19cc7d7 100644
--- a/src/components/Table/ComparisonTable.js
+++ b/src/components/Table/ComparisonTable.js
@@ -20,6 +20,7 @@ import Typography from "@material-ui/core/Typography";
 import FolderIcon from "@material-ui/icons/Folder";
 import DeleteIcon from "@material-ui/icons/Delete";
 import { Link } from "react-router-dom";
+import Iframe from "react-iframe";
 
 const fs = require("fs");
 const portastic = require("portastic");
@@ -126,7 +127,7 @@ export default function InteractiveList() {
     <Container maxWidth="lg" className={classes.container} gutterBottom>
       <Grid container direction="column" alignItems="center" gutterBottom>
         <Box m={3}>
-          <Button
+          {/* <Button
             alignItems="center"
             variant="contained"
             variant="outlined"
@@ -135,10 +136,25 @@ export default function InteractiveList() {
             to="/newcomparison"
           >
             New Comparison
-          </Button>
+          </Button> */}
         </Box>
       </Grid>
+      {/* <Iframe
+        url="http://127.0.0.1:8080/"
+        position="absolute"
+        width="70%"
+        id="myId"
+        className="myClassname"
+        height="100%"
+        styles={{ height: "100%", border: "none" }}
+      /> */}
 
+      <iframe
+        src="http://127.0.0.1:8080/"
+        style={{ border: "none", display: "true" }}
+        width="100%"
+        height="1000"
+      ></iframe>
       {/* <FormGroup row>
         <FormControlLabel
           control={
diff --git a/src/components/Table/NewTable.js b/src/components/Table/NewTable.js
index 20158a23ffb95b9c18a1ac8f47fa453aa09b95ea..723010815cc60d8a01a1e0e328f59e04aa97cb09 100644
--- a/src/components/Table/NewTable.js
+++ b/src/components/Table/NewTable.js
@@ -256,9 +256,9 @@ export default function NewTable() {
   const blankUnit = {
     id: uuid(),
     sample: "",
-    lane: 1,
-    techrep: 1,
-    biorep: 1,
+    lane: "",
+    techrep: "",
+    biorep: "",
     fq1: "",
     fq2: "",
   };
@@ -411,23 +411,25 @@ export default function NewTable() {
                         {" "}
                         <InputBase
                           placeholder="Lane"
+                          inputProps={{ "data-idx": index }}
+                          label={`Lane ${index}`}
+                          placeholder="Lane Number"
                           required
+                          type="text"
                           value={unit.lane}
                           onChange={handleUnitChange}
-                          inputProps={{ "data-idx": index, min: "1" }}
                           id="lane"
-                          type="number"
                         ></InputBase>
                       </TableCell>
                       <TableCell align="right">
                         {" "}
                         <InputBase
+                          inputProps={{ "data-idx": index }}
                           onChange={handleUnitChange}
                           placeholder="Technical Replicate"
                           value={unit.techrep}
-                          inputProps={{ "data-idx": index, min: "1" }}
                           id="techrep"
-                          type="number"
+                          type="text"
                         ></InputBase>
                       </TableCell>
 
@@ -438,9 +440,9 @@ export default function NewTable() {
                           placeholder="Biological Replicate"
                           value={unit.biorep}
                           required
-                          inputProps={{ "data-idx": index, min: "1" }}
+                          inputProps={{ "data-idx": index }}
                           id="biorep"
-                          type="number"
+                          type="text"
                         ></InputBase>
                       </TableCell>
                       <TableCell align="right">
diff --git a/src/components/Tableau/listItems.js b/src/components/Tableau/listItems.js
index 2eb81c10b39d8852c8b987f48cb7c46726e2a4dd..d8dcc3ece192e864283e303b58ba5f5de8e06752 100644
--- a/src/components/Tableau/listItems.js
+++ b/src/components/Tableau/listItems.js
@@ -29,7 +29,7 @@ export const mainListItems = (
       <ListItemIcon>
         <BarChartIcon />
       </ListItemIcon>
-      <ListItemText primary="Reports" />
+      <ListItemText primary="Nothing" />
     </ListItem>
     <ListItem component={Link} to="/visualization" button button>
       <ListItemIcon>
diff --git a/src/components/Visualization/VisualizationFill.js b/src/components/Visualization/VisualizationFill.js
index e37d2fc5e14376628f3f97362d70ae8e26fbb882..c9d8085f23cdb77742fc4cab1dac0b6946a12af1 100644
--- a/src/components/Visualization/VisualizationFill.js
+++ b/src/components/Visualization/VisualizationFill.js
@@ -17,6 +17,8 @@ import DialogContent from "@material-ui/core/DialogContent";
 import DialogContentText from "@material-ui/core/DialogContentText";
 import DialogTitle from "@material-ui/core/DialogTitle";
 import { Link } from "react-router-dom";
+import ButtonGroup from "@material-ui/core/ButtonGroup";
+
 const electron = window.require("electron");
 const { shell } = window.require("electron");
 const remote = electron.remote;
@@ -24,7 +26,8 @@ const { BrowserWindow } = remote;
 import Grid from "@material-ui/core/Grid";
 import Typography from "@material-ui/core/Typography";
 import FolderIcon from "@material-ui/icons/Folder";
-const handler = require("serve-handler");
+const fs = require("fs");
+
 const http = require("http");
 import IconButton from "@material-ui/core/IconButton";
 import CommentIcon from "@material-ui/icons/Comment";
@@ -41,18 +44,7 @@ const useStyles = makeStyles((theme) => ({
 
 export default function VisualizationFill() {
   const classes = useStyles();
-  const [dense, setDense] = useState(false);
-  const [secondary, setSecondary] = useState(false);
-  const [open, setOpen] = useState(false);
-  const handleClickOpen = () => {
-    setOpen(true);
-  };
-
-  const handleClose = () => {
-    setOpen(false);
-  };
-  const [checked, setChecked] = useState([0]);
-  const [openJB, setOpenJB] = useState([]);
+  const [checked, setChecked] = useState([]);
   const { user } = useAuth();
 
   const handleToggle = (genome) => () => {
@@ -69,7 +61,6 @@ export default function VisualizationFill() {
   };
   const [data, setData] = useState([]);
   const [views, setViews] = useState([]);
-
   useEffect(() => {
     const fetchData = async () => {
       const token = localStorage.jwtToken;
@@ -107,6 +98,7 @@ export default function VisualizationFill() {
 
     fetchData();
   }, []);
+
   useEffect(() => {
     const fetchData = async () => {
       const token = localStorage.jwtToken;
@@ -156,62 +148,48 @@ export default function VisualizationFill() {
   };
 
   const handleClick = () => {
-    portastic
-      .find({
-        min: 30000,
-        max: 35000,
-        retrieve: 1,
-      })
-      .then(function (port) {
-        window.ipcRenderer.send("ping", port[0]);
-        const request = {
-          port: port[0],
-          genomes:
-            "/home/shatira/Documents/Demo_Data/genome/Malus_domestica_cultivar_Golden_Delicious-chr4.fasta",
-          outdir: "/home/shatira/Bureau/jbrowse2",
-          userId: user.user.id,
-        };
-        const token = localStorage.jwtToken;
-        const options = {
-          method: "POST",
-          path: "http://localhost/api/jbrowse/visualize",
-          socketPath: sessionStorage.Sock,
-          hostname: "unix",
-          port: null,
-          headers: {
-            "Content-Type": "application/json",
-            Authorization: token,
-          },
-        };
-
-        const req = http.request(options, function (res) {
-          const chunks = [];
-          console.log("STATUS: " + res.statusCode);
-          console.log("HEADERS: " + JSON.stringify(res.headers));
-          res.on("data", function (chunk) {
-            chunks.push(chunk);
-          });
-          res.on("error", (err) => console.log(err));
-          res.on("end", function () {
-            const body = Buffer.concat(chunks).toString();
+    const request = {
+      genomes: checked,
+      userId: user.user.id,
+    };
+    const token = localStorage.jwtToken;
+    const options = {
+      method: "POST",
+      path: "http://localhost/api/jbrowse/visualize",
+      socketPath: sessionStorage.Sock,
+      hostname: "unix",
+      port: null,
+      headers: {
+        "Content-Type": "application/json",
+        Authorization: token,
+      },
+    };
+    const req = http.request(options, function (res) {
+      const chunks = [];
+      console.log("STATUS: " + res.statusCode);
+      console.log("HEADERS: " + JSON.stringify(res.headers));
+      res.on("data", function (chunk) {
+        chunks.push(chunk);
+      });
+      res.on("error", (err) => console.log(err));
+      res.on("end", function () {
+        const body = Buffer.concat(chunks).toString();
 
-            const jsbody = JSON.parse(body);
-            if (res.statusCode !== 200) {
-              console.log("failed post request");
-            } else {
-              console.log("successful post request");
-            }
-          });
-        });
-        req.on("error", (err) => console.log(err));
-        req.write(JSON.stringify(request));
-        req.end();
-        setOpenJB([...openJB, `http:///localhost:${port}`]);
-        setOpen(false);
-        shell.openExternal(`http:///localhost:${port}`);
+        const jsbody = JSON.parse(body);
+        if (res.statusCode !== 200) {
+          console.log("failed post request");
+        } else {
+          console.log("successful post request");
+        }
       });
+    });
+    req.on("error", (err) => console.log(err));
+    req.write(JSON.stringify(request));
+    req.end();
+    setOpen(false);
+    shell.openExternal(`http:///localhost:${user.user.port[0]}`);
   };
-  console.log(openJB);
+
   const blankSample = {};
   const helper = {};
   const result = data.reduce(function (r, o) {
@@ -228,194 +206,165 @@ export default function VisualizationFill() {
 
   console.log(result);
 
-  const handleServe = (outdir) => {
-    portastic
-      .find({
-        min: 30000,
-        max: 35000,
-        retrieve: 1,
-      })
-      .then(function (port) {
-        console.log(outdir);
-        const server = http.createServer((request, response) => {
-          return handler(request, response, { public: outdir });
-        });
-        server.listen(port[0], () => {
-          console.log(`Running at http://localhost:${port}`);
-        });
-        shell.openExternal(`http:///localhost:${port}`);
-      });
+  const handleServe = () => {
+    shell.openExternal(`http:///localhost:${user.user.port[0]}`);
   };
   return (
     <Container maxWidth="lg" className={classes.container} gutterBottom>
       <Grid container direction="column" alignItems="center" gutterBottom>
         <Box m={3}>
           {" "}
-          <Button
-            alignItems="center"
-            variant="contained"
-            variant="outlined"
+          <ButtonGroup
             color="primary"
-            onClick={handleClickOpen}
+            aria-label="outlined primary button group"
           >
-            New Jbrowse
-          </Button>
+            <Button
+              alignItems="center"
+              variant="contained"
+              variant="outlined"
+              color="primary"
+              onClick={handleServe}
+            >
+              Start Jbrowse{" "}
+            </Button>
+            <Button
+              alignItems="center"
+              variant="contained"
+              variant="outlined"
+              color="primary"
+            >
+              Reset Jbrowse{" "}
+            </Button>
+            <Button alignItems="center" variant="contained" color="primary">
+              Populate Jbrowse{" "}
+            </Button>
+          </ButtonGroup>
         </Box>
       </Grid>
 
-      <Dialog
-        open={open}
-        onClose={handleClose}
-        aria-labelledby="alert-dialog-title"
-        aria-describedby="alert-dialog-description"
-      >
-        <DialogTitle id="alert-dialog-title">
-          {"Create a new Jbrowse Intance?"}
-        </DialogTitle>
-        <DialogContent>
-          <DialogContentText id="alert-dialog-description">
-            Select the assemblies and tracks you want in your Jbrowse Instance,
-            Please note that a whole new Instance is created with a copy of all
-            selected files inside , this can quickly consume a lot of space.
-          </DialogContentText>
-          <List className={classes.root}>
-            {result.map((genome, idx) => {
-              const labelId = `checkbox-list-label-${genome}`;
-              console.log(idx);
-              return (
-                <ListItem
-                  key={idx}
-                  role={undefined}
-                  dense
-                  button
-                  onClick={handleToggle(idx)}
-                >
-                  <ListItemIcon>
-                    <Checkbox
-                      edge="start"
-                      checked={checked.indexOf(idx) !== -1}
-                      tabIndex={-1}
-                      disableRipple
-                      inputProps={{ "aria-labelledby": labelId }}
-                    />
-                  </ListItemIcon>
-                  <ListItemText id={labelId} primary={`${genome.genome}`} />
-                  <ListItemSecondaryAction>
-                    <IconButton edge="end" aria-label="comments">
-                      <CommentIcon />
-                    </IconButton>
-                  </ListItemSecondaryAction>
-                </ListItem>
-              );
-            })}
-          </List>
-          <List className={classes.root}>
-            {data &&
-              data.map((row) => {
-                console.log(row);
-                row.samples.map((sample) => {
+      <List subheader={"Genomes"}>
+        {result.map((genome, idx) => {
+          console.log(user.user.jbPath, genome.genome);
+          const labelId = `checkbox-list-label-${genome}`;
+          console.log(idx);
+          if (!fileExist(path.join(user.user.jbPath, genome.genome))) {
+            return (
+              <ListItem
+                key={idx}
+                button
+                onClick={handleToggle(genome.genomePath)}
+              >
+                <ListItemIcon>
+                  <Checkbox
+                    edge="start"
+                    checked={checked.indexOf(genome.genomePath) !== -1}
+                    tabIndex={-1}
+                    disableRipple
+                    inputProps={{ "aria-labelledby": labelId }}
+                  />
+                </ListItemIcon>
+                <ListItemText id={labelId} primary={`${genome.genome}`} />
+                <ListItemSecondaryAction>
+                  <IconButton edge="end" aria-label="comments">
+                    <CommentIcon />
+                  </IconButton>
+                </ListItemSecondaryAction>
+              </ListItem>
+            );
+          }
+        })}
+      </List>
+      <List subheader={"Bam Files"}>
+        {data.map((row) => {
+          const labelId = `checkbox-list-label-${row}`;
+          return (
+            <div>
+              {row.samples.map((sample) => {
+                const samplePath = `${row.outdir}/results/${sample.samplePath}/alignment_bismark/${sample.sampleName}.deduplicated.bam`;
+                if (
+                  fileExist(samplePath) &&
+                  !fileExist(
+                    path.join(
+                      user.user.jbPath,
+                      `${sample.sampleName}.deduplicated.bam`
+                    )
+                  )
+                ) {
                   return (
-                    <ListItemText
-                      primary={`${row.outdir}/results/${sample.samplePath}/alignment_bismark/${sample.sampleName}.deduplicated.bam`}
-                    />
-                  );
-                });
-              })}
-          </List>
-        </DialogContent>
-        <DialogActions>
-          <Button onClick={handleClose} color="primary">
-            Quit
-          </Button>
-          <Button onClick={handleClick} color="primary" autoFocus>
-            Create
-          </Button>
-        </DialogActions>
-      </Dialog>
-
-      <Grid container spacing={2}>
-        {views.length > 0 ? (
-          views.map((view) => (
-            <Grid key={view._id} item xs={12} md={6}>
-              <List dense={dense}>
-                <ListItem
-                  button
-                  onClick={() => {
-                    const path = `${view.outdir}/index.html`;
-                    handleServe(view.outdir);
-                  }}
-                >
-                  Jbrowse Instance created by {view.createdBy.name}
-                </ListItem>
-              </List>
-
-              <div className={classes.demo}>
-                <List dense={dense}>
-                  {/* {view.samples.map((sample) => (
                     <ListItem
+                      key={row._id}
                       button
-                      disabled={
-                        fileExist(
-                          `${view.outdir}/results/${sample.samplePath}/multiqc_report.html`
-                        )
-                          ? false
-                          : true
-                      }
-                      key={sample._id}
-                      onClick={() => {
-                        const path = `${view.outdir}/results/${sample.samplePath}/multiqc_report.html`;
-                        console.log(path);
-                        createBrowserWindow(path);
-                      }}
+                      onClick={handleToggle(samplePath)}
                     >
-                      <ListItemAvatar>
-                        <Avatar>
-                          <FolderIcon />
-                        </Avatar>
-                      </ListItemAvatar>
+                      <ListItemIcon>
+                        <Checkbox
+                          edge="start"
+                          checked={checked.indexOf(samplePath) !== -1}
+                          tabIndex={-1}
+                          disableRipple
+                          inputProps={{ "aria-labelledby": labelId }}
+                        />
+                      </ListItemIcon>
                       <ListItemText
-                        primary={sample.sample}
-                        secondary={secondary ? "Secondary text" : null}
+                        id={labelId}
+                        primary={`${sample.sampleName}.deduplicated.bam`}
                       />
+                      <ListItemSecondaryAction>
+                        <IconButton edge="end" aria-label="comments">
+                          <CommentIcon />
+                        </IconButton>
+                      </ListItemSecondaryAction>
                     </ListItem>
-                  ))} */}
-                  {/* {generate(
-                  <ListItem>
-                    <ListItemAvatar>
-                      <Avatar>
-                        <FolderIcon />
-                      </Avatar>
-                    </ListItemAvatar>
-                    <ListItemText
-                      primary="Single-line item"
-                      secondary={secondary ? "Secondary text" : null}
-                    />
-                    <ListItemSecondaryAction>
-                      <IconButton edge="end" aria-label="delete">
-                        <DeleteIcon />
-                      </IconButton>
-                    </ListItemSecondaryAction>
-                  </ListItem>
-                )} */}
-                </List>
-              </div>
-            </Grid>
-          ))
-        ) : (
-          <Grid
-            container
-            spacing={0}
-            direction="column"
-            alignItems="center"
-            justify="center"
-            style={{ minHeight: "70vh" }}
-          >
-            <Typography variant="h6" className={classes.title}>
-              You have no analyses to view{" "}
-            </Typography>
-          </Grid>
-        )}
-      </Grid>
+                  );
+                }
+              })}
+            </div>
+          );
+          // console.log(row);
+          // {
+          //   row.samples.map((sample) => {
+          //     console.log(
+          //       `${row.outdir}/results/${sample.samplePath}/alignment_bismark/${sample.sampleName}.deduplicated.bam`
+          //     );
+          //     if (
+          //       !fileExist(
+          //         path.join(
+          //           user.user.jbPath,
+          //           `${sample.sampleName}.deduplicated.bam`
+          //         )
+          //       )
+          //     ) {
+          // return (
+          //   <ListItem
+          //     key={row._id}
+          //     button
+          //     onClick={handleToggle(row._id)}
+          //   >
+          //     <ListItemIcon>
+          //       <Checkbox
+          //         edge="start"
+          //         checked={checked.indexOf(row._id) !== -1}
+          //         tabIndex={-1}
+          //         disableRipple
+          //         inputProps={{ "aria-labelledby": labelId }}
+          //       />
+          //     </ListItemIcon>
+          //     <ListItemText
+          //       id={labelId}
+          //       primary={`${row.outdir}/results/${sample.samplePath}/alignment_bismark/${sample.sampleName}.deduplicated.bam`}
+          //     />
+          //     <ListItemSecondaryAction>
+          //       <IconButton edge="end" aria-label="comments">
+          //         <CommentIcon />
+          //       </IconButton>
+          //     </ListItemSecondaryAction>
+          //   </ListItem>
+          // );
+          //     }
+          //   });
+          // }
+        })}
+      </List>
     </Container>
   );
 }
diff --git a/src/index.js b/src/index.js
index df6e1bff97a7b8183c45281b3f42bc94f6c2a517..9880431d8c5dc62b8474decfce28d82fe0641206 100644
--- a/src/index.js
+++ b/src/index.js
@@ -5,6 +5,9 @@ import App from "./App";
 const electron = window.require("electron");
 const remote = electron.remote;
 sessionStorage.setItem("Sock", remote.getGlobal("sharedObj").prop1);
+sessionStorage.setItem("Jbrowse", remote.getGlobal("sharedObj").jbrowse);
+sessionStorage.setItem("Shiny", remote.getGlobal("sharedObj").shiny);
+console.log(sessionStorage);
 function render() {
   ReactDOM.render(
     <React.Fragment>
diff --git a/src/main.js b/src/main.js
index e40425161a96957b74dceaa541b56bf877268c52..b4d02791de6934ec59f7737bd4c694cd790296b9 100644
--- a/src/main.js
+++ b/src/main.js
@@ -8,6 +8,7 @@ const {
 } = require("electron");
 const path = require("path");
 const fs = require("fs");
+
 const server = require("../src/backend/spawnServer.js");
 
 // const mongod = require("./backend/spawnMongod.js");
@@ -116,9 +117,9 @@ const createWindow = () => {
   if (isDev) {
     mainWindow.webContents.openDevTools();
   }
-  // installExtension(REACT_DEVELOPER_TOOLS)
-  //   .then((name) => console.log(`Added Extension:  ${name}`))
-  //   .catch((err) => console.log("An error occurred: ", err));
+  installExtension(REACT_DEVELOPER_TOOLS)
+    .then((name) => console.log(`Added Extension:  ${name}`))
+    .catch((err) => console.log("An error occurred: ", err));
 };
 // This method will be called when Electron has finished
 // initialization and is ready to create browser windows.
diff --git a/src/preload.js b/src/preload.js
index e698cfd98047f9ad8850771d50f6d4e41d604317..5aca6c1b59b0cb1395400752bee94ddb60103e80 100644
--- a/src/preload.js
+++ b/src/preload.js
@@ -1,4 +1,5 @@
 window.ipcRenderer = require("electron").ipcRenderer;
+
 // window.ipcRenderer.on("ping", (event, sock) => {
 //   console.log("right here bruh");
 
diff --git a/yarn.lock b/yarn.lock
index 74f4b64f8b337095bd907fc43657d32a7f645d8f..6377236ea3a59b35d73556f75b1bc37ac47b9ffe 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3814,7 +3814,7 @@ arrify@^2.0.1:
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
   integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
 
-asap@~2.0.6:
+asap@~2.0.3, asap@~2.0.6:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
   integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
@@ -4175,7 +4175,7 @@ babel-preset-react-app@^10.0.0:
     babel-plugin-macros "2.8.0"
     babel-plugin-transform-react-remove-prop-types "0.4.24"
 
-babel-runtime@^6.26.0:
+babel-runtime@^6.23.0, babel-runtime@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
   integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
@@ -4394,6 +4394,11 @@ boolean@^3.0.1:
   resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.2.tgz#df1baa18b6a2b0e70840475e1d93ec8fe75b2570"
   integrity sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==
 
+bowser@^1.7.3:
+  version "1.9.4"
+  resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a"
+  integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==
+
 boxen@1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
@@ -4930,6 +4935,11 @@ caw@^2.0.0:
     tunnel-agent "^0.6.0"
     url-to-options "^1.0.1"
 
+chain-function@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc"
+  integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg==
+
 chainsaw@~0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
@@ -4982,6 +4992,11 @@ chalk@^4.0.0, chalk@^4.1.0:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
+change-emitter@^0.1.2:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
+  integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
+
 char-regex@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -5676,6 +5691,11 @@ core-js-pure@^3.0.0:
   resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.0.tgz#326cc74e1fef8b7443a6a793ddb0adfcd81f9efb"
   integrity sha512-3pEcmMZC9Cq0D4ZBh3pe2HLtqxpGNJBLXF/kZ2YzK17RbKp94w0HFbdbSx8H8kAlZG5k76hvLrkPm57Uyef+kg==
 
+core-js@^1.0.0:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+  integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
+
 core-js@^2.4.0, core-js@^2.6.5:
   version "2.6.12"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
@@ -5912,6 +5932,14 @@ css-has-pseudo@^0.10.0:
     postcss "^7.0.6"
     postcss-selector-parser "^5.0.0-rc.4"
 
+css-in-js-utils@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99"
+  integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==
+  dependencies:
+    hyphenate-style-name "^1.0.2"
+    isobject "^3.0.1"
+
 css-loader@4.3.0, css-loader@^4.2.1:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e"
@@ -6698,7 +6726,7 @@ dom-converter@^0.2:
   dependencies:
     utila "~0.4"
 
-dom-helpers@^3.4.0:
+dom-helpers@^3.2.0, dom-helpers@^3.4.0:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
   integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
@@ -7200,7 +7228,7 @@ encodeurl@^1.0.2, encodeurl@~1.0.2:
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
   integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
 
-encoding@^0.1.13:
+encoding@^0.1.11, encoding@^0.1.13:
   version "0.1.13"
   resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
   integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
@@ -8024,6 +8052,19 @@ fb-watchman@^2.0.0:
   dependencies:
     bser "2.1.1"
 
+fbjs@^0.8.1:
+  version "0.8.17"
+  resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
+  integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
+  dependencies:
+    core-js "^1.0.0"
+    isomorphic-fetch "^2.1.1"
+    loose-envify "^1.0.0"
+    object-assign "^4.1.0"
+    promise "^7.1.1"
+    setimmediate "^1.0.5"
+    ua-parser-js "^0.7.18"
+
 fd-slicer@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
@@ -9165,6 +9206,11 @@ hmac-drbg@^1.0.1:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.1"
 
+hoist-non-react-statics@^2.3.1:
+  version "2.5.5"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
+  integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
+
 hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
@@ -9413,7 +9459,7 @@ human-signals@^1.1.1:
   resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
   integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
 
-hyphenate-style-name@^1.0.3:
+hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
   integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
@@ -9629,6 +9675,14 @@ ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
   integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
 
+inline-style-prefixer@^3.0.8:
+  version "3.0.8"
+  resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534"
+  integrity sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=
+  dependencies:
+    bowser "^1.7.3"
+    css-in-js-utils "^2.0.0"
+
 inquirer@^7.3.3:
   version "7.3.3"
   resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
@@ -10151,7 +10205,7 @@ is-set@^2.0.1, is-set@^2.0.2:
   resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
   integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
 
-is-stream@^1.0.0, is-stream@^1.1.0:
+is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
   integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -10298,6 +10352,14 @@ isobject@^3.0.0, isobject@^3.0.1:
   resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
   integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
 
+isomorphic-fetch@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+  integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
+  dependencies:
+    node-fetch "^1.0.1"
+    whatwg-fetch ">=0.10.0"
+
 isstream@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -11159,6 +11221,11 @@ keyboardevents-areequal@^0.2.1:
   resolved "https://registry.yarnpkg.com/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz#88191ec738ce9f7591c25e9056de928b40277194"
   integrity sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==
 
+keycode@^2.1.8:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
+  integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=
+
 keyv@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
@@ -11440,6 +11507,11 @@ lodash.memoize@^4.1.2:
   resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
   integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
 
+lodash.merge@^4.6.0:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
 lodash.once@^4.0.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
@@ -11665,6 +11737,23 @@ material-colors@^1.2.1:
   resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46"
   integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==
 
+material-ui@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.20.2.tgz#5fc9b4b62b691d3b16c89d8e54597a0412b52c7d"
+  integrity sha512-VeqgQkdvtK193w+FFvXDEwlVxI4rWk83eWbpYLeOIHDPWr3rbB9B075JRnJt/8IsI2X8q5Aia5W3+7m4KkleDg==
+  dependencies:
+    babel-runtime "^6.23.0"
+    inline-style-prefixer "^3.0.8"
+    keycode "^2.1.8"
+    lodash.merge "^4.6.0"
+    lodash.throttle "^4.1.1"
+    prop-types "^15.5.7"
+    react-event-listener "^0.6.2"
+    react-transition-group "^1.2.1"
+    recompose "^0.26.0"
+    simple-assign "^0.1.0"
+    warning "^3.0.0"
+
 math-random@^1.0.1:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
@@ -12309,6 +12398,14 @@ node-fetch@2.6.1, node-fetch@^2.6.0:
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
   integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
 
+node-fetch@^1.0.1:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+  integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
+  dependencies:
+    encoding "^0.1.11"
+    is-stream "^1.0.1"
+
 node-forge@^0.10.0:
   version "0.10.0"
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
@@ -14231,6 +14328,13 @@ promise-inflight@^1.0.1:
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
   integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
 
+promise@^7.1.1:
+  version "7.3.1"
+  resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+  dependencies:
+    asap "~2.0.3"
+
 promise@^8.1.0:
   version "8.1.0"
   resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
@@ -14246,7 +14350,7 @@ prompts@2.4.0, prompts@^2.0.1:
     kleur "^3.0.3"
     sisteransi "^1.0.5"
 
-prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
   version "15.7.2"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
   integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -14932,6 +15036,15 @@ react-error-overlay@^6.0.9:
   resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a"
   integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==
 
+react-event-listener@^0.6.2:
+  version "0.6.6"
+  resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.6.tgz#758f7b991cad9086dd39fd29fad72127e1d8962a"
+  integrity sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==
+  dependencies:
+    "@babel/runtime" "^7.2.0"
+    prop-types "^15.6.0"
+    warning "^4.0.1"
+
 react-hot-loader@^4.13.0:
   version "4.13.0"
   resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.13.0.tgz#c27e9408581c2a678f5316e69c061b226dc6a202"
@@ -14946,6 +15059,13 @@ react-hot-loader@^4.13.0:
     shallowequal "^1.1.0"
     source-map "^0.7.3"
 
+react-iframe@^1.8.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/react-iframe/-/react-iframe-1.8.0.tgz#8c78f2c59b894ca5605fa7e45e61e27e57e96091"
+  integrity sha512-NYi89+rEqREwQxW9sDf+akh6/dtwWd3bOjByoVEIQ7SicOxVawRMer3pLdWjFaHXpuxTB9NqobPf/Ohj2iAKkg==
+  dependencies:
+    object-assign "^4.1.1"
+
 react-is@16.10.2:
   version "16.10.2"
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab"
@@ -15150,6 +15270,17 @@ react-syntax-highlighter@^14.0.0:
     prismjs "^1.21.0"
     refractor "^3.1.0"
 
+react-transition-group@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6"
+  integrity sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==
+  dependencies:
+    chain-function "^1.0.0"
+    dom-helpers "^3.2.0"
+    loose-envify "^1.3.1"
+    prop-types "^15.5.6"
+    warning "^3.0.0"
+
 react-transition-group@^2.3.1, react-transition-group@^2.5.0:
   version "2.9.0"
   resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
@@ -15387,6 +15518,16 @@ recharts@^2.0.8:
     recharts-scale "^0.4.2"
     reduce-css-calc "^2.1.7"
 
+recompose@^0.26.0:
+  version "0.26.0"
+  resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30"
+  integrity sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==
+  dependencies:
+    change-emitter "^0.1.2"
+    fbjs "^0.8.1"
+    hoist-non-react-statics "^2.3.1"
+    symbol-observable "^1.0.4"
+
 recursive-readdir@2.2.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
@@ -16263,7 +16404,7 @@ set-value@^2.0.0, set-value@^2.0.1:
     is-plain-object "^2.0.3"
     split-string "^3.0.1"
 
-setimmediate@^1.0.4, setimmediate@~1.0.4:
+setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
   integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
@@ -16366,6 +16507,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
   integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
 
+simple-assign@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa"
+  integrity sha1-F/0wZqXz13OPUDIbsPFMooHMS6o=
+
 simple-concat@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
@@ -17090,7 +17236,7 @@ svgo@^1.0.0, svgo@^1.2.2:
     unquote "~1.1.1"
     util.promisify "~1.0.0"
 
-symbol-observable@1.2.0:
+symbol-observable@1.2.0, symbol-observable@^1.0.4:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
   integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
@@ -17723,6 +17869,11 @@ typical@^2.6.1:
   resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d"
   integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=
 
+ua-parser-js@^0.7.18:
+  version "0.7.26"
+  resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.26.tgz#b3731860e241419abd5b542b1a0881070d92e0ce"
+  integrity sha512-VwIvGlFNmpKbjzRt51jpbbFTrKIEgGHxIwA8Y69K1Bqc6bTIV7TaGGABOkghSFQWsLmcRB4drGvpfv9z2szqoQ==
+
 uglify-js@^3.1.4:
   version "3.13.2"
   resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.2.tgz#fe10319861bccc8682bfe2e8151fbdd8aa921c44"
@@ -18166,6 +18317,13 @@ walker@^1.0.7, walker@~1.0.5:
   dependencies:
     makeerror "1.0.x"
 
+warning@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+  integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+  dependencies:
+    loose-envify "^1.0.0"
+
 warning@^4.0.1, warning@^4.0.2, warning@^4.0.3:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
@@ -18405,7 +18563,7 @@ whatwg-fetch@2.0.4:
   resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
   integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
 
-whatwg-fetch@^3.0.0:
+whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
   version "3.6.2"
   resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
   integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==