Add basic IDE UI
diff --git a/ide/qml/Cell.qml b/ide/qml/Cell.qml
new file mode 100644
index 0000000..d060dee
--- /dev/null
+++ b/ide/qml/Cell.qml
@@ -0,0 +1,44 @@
+import QtQuick 2.0
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Material 2.0
+import QtQuick.Layouts 1.0
+
+ColumnLayout {
+    id: root
+
+    RowLayout {
+        Layout.fillWidth: true
+
+        Button {
+            Layout.alignment: Qt.AlignTop
+            icon.source: "qrc:///icons/play-circle.svg"
+            icon.color: Material.color(Material.Grey, Material.Shade600)
+            flat: true
+        }
+
+        ColumnLayout {
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+
+            TextArea {
+                Layout.fillWidth: true
+                Layout.fillHeight: true
+                id: code
+                font.family: "monospace"
+                text: "Hello"
+                selectByMouse: true
+                wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
+            }
+
+            Label {
+                Layout.fillWidth: true
+                font.family: "monospace"
+                text: "Result\nasdfasdf\nasdad"
+            }
+        }
+    }
+
+    InsertRow {
+
+    }
+}
diff --git a/ide/qml/InsertRow.qml b/ide/qml/InsertRow.qml
new file mode 100644
index 0000000..b12896a
--- /dev/null
+++ b/ide/qml/InsertRow.qml
@@ -0,0 +1,62 @@
+import QtQuick 2.0
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Material 2.0
+import QtQuick.Layouts 1.0
+
+Rectangle {
+    id: root
+
+    color: Material.color(Material.Grey, Material.Shade800)
+    height: 2
+    Layout.fillWidth: true
+    Layout.topMargin: 14
+    Layout.bottomMargin: 14
+
+    transitions: Transition {
+        NumberAnimation {
+            property: "opacity"
+            duration: 100
+            easing.type: Easing.OutCubic
+        }
+    }
+
+    MouseArea {
+        id: mouseArea
+        height: 30
+        width: parent.width
+        anchors.centerIn: parent
+        hoverEnabled: true
+
+        states: [
+            State {
+                when: mouseArea.containsMouse
+                PropertyChanges {
+                    target: root
+                    opacity: 1
+                }
+            },
+            State {
+                when: !mouseArea.containsMouse
+                PropertyChanges {
+                    target: root
+                    opacity: 0
+                }
+            }
+        ]
+    }
+
+    Item {
+        id: insertRow
+        anchors.centerIn: parent
+        height: 24
+        width: 24
+
+        Button {
+            id: addButton
+            anchors.centerIn: parent
+            icon.source: "qrc:///icons/add.svg"
+            icon.color: Material.color(Material.Grey, Material.Shade400)
+            flat: true
+        }
+    }
+}
diff --git a/ide/qml/main.qml b/ide/qml/main.qml
new file mode 100644
index 0000000..d3bca25
--- /dev/null
+++ b/ide/qml/main.qml
@@ -0,0 +1,67 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Material 2.0
+import QtQuick.Layouts 1.3
+
+ApplicationWindow {
+    id: root
+    width: 1080
+    height: 720
+    title: "Notebook"
+    visible: true
+
+    Material.theme: Material.Dark
+    Material.accent: Material.Orange
+
+    ColumnLayout {
+        id: column
+        anchors.fill: parent
+
+        TabBar {
+            id: bar
+
+            Layout.fillWidth: true
+
+            TabButton {
+                text: "Example Workspace"
+            }
+
+            TabButton {
+                text: "Another Workspace"
+            }
+
+            TabButton {
+                text: "Testing"
+            }
+        }
+
+        SplitView {
+            id: split
+            Layout.fillHeight: true
+            Layout.fillWidth: true
+            orientation: Qt.Horizontal
+
+            ListView {
+                id: codeEditor
+                SplitView.fillWidth: true
+                SplitView.minimumWidth: 400
+                model: 3
+                clip: true
+
+                delegate: Cell {
+                    width: codeEditor.width - 5
+                }
+            }
+
+            Item {
+                id: variables
+                SplitView.minimumWidth: 240
+
+                Label {
+                    anchors.centerIn: parent
+                    text: "Vars"
+                }
+            }
+        }
+    }
+}