diff --git a/src/app/rmrf.cpp b/src/app/rmrf.cpp
index d1a0f635dcf058efa5c802bb4d7069fb469f703f..858efed90824707d1512a5a940b03d56804ada6a 100644
--- a/src/app/rmrf.cpp
+++ b/src/app/rmrf.cpp
@@ -3,16 +3,21 @@
 //
 
 #include "macros.hpp"
-#include "ui-imgui/graphics_context_gl3.h"
+#include "ui-imgui/graphics_context_gl3.hpp"
+#include "ui-imgui/imgui_application.hpp"
 
 int main(int argc, char *argv[], char *env[]) {
     // TODO later use command line arguments as the ncurses app
     MARK_UNUSED(argc);
     MARK_UNUSED(argv);
     MARK_UNUSED(env);
-    graphics_context_gl3 context(gui_style::DARK);
+    rmrf::ui::graphics_context_gl3 context(gui_style::DARK);
+
+    // TODO start event thread and open post offices
+    rmrf::ui::imgui_application app;
 
     while(!context.should_application_close()) {
+        app.render();
         context.perform_mainloop_actions();
     }
 
diff --git a/src/ui-imgui/graphics_context_gl3.cpp b/src/ui-imgui/graphics_context_gl3.cpp
index 34d7d3bb8eb6933daf7974833ecf3a92ceab1b23..6101d19923d3051353b14c9018a200cc4aa1e599 100644
--- a/src/ui-imgui/graphics_context_gl3.cpp
+++ b/src/ui-imgui/graphics_context_gl3.cpp
@@ -2,7 +2,7 @@
 // Created by Doralitze on 17.07.23.
 //
 
-#include "graphics_context_gl3.h"
+#include "graphics_context_gl3.hpp"
 
 #include <iostream>
 
diff --git a/src/ui-imgui/graphics_context_gl3.h b/src/ui-imgui/graphics_context_gl3.hpp
similarity index 100%
rename from src/ui-imgui/graphics_context_gl3.h
rename to src/ui-imgui/graphics_context_gl3.hpp
diff --git a/src/ui-imgui/imgui_application.cpp b/src/ui-imgui/imgui_application.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..caf482c128af69855d41f87ed63ad28fdbda68a2
--- /dev/null
+++ b/src/ui-imgui/imgui_application.cpp
@@ -0,0 +1,91 @@
+//
+// Created by Leon Dietrich on 18.07.23.
+//
+
+#include "imgui_application.hpp"
+
+#include "lib/imgui/imgui.h"
+
+namespace rmrf {
+    namespace ui {
+
+        imgui_application::imgui_application() {
+
+        }
+
+        void imgui_application::render() {
+            // TODO check if the window was resized
+            ImGUI::Begin(this->window_title.c_str());
+            render_head_toolbar();
+            if(this->side_panel_displayed) {
+                render_sidepanel();
+            }
+            switch(this->open_window) {
+                default:
+                    render_exception_window();
+                    break;
+                case window_state::INBOX:
+                    render_inbox();
+                    break;
+                case window_state::READ_MAIL:
+                    render_read_mail();
+                    break;
+                case window_state::COMPOSE:
+                    render_send_mail_dialog();
+                    break;
+                case window_state::SEARCH_RESULTS:
+                    render_search_results_dialog();
+                    break;
+                case window_state::SETTINGS:
+                    render_settings_panel();
+                    break;
+            }
+            render_footer();
+            ImGUI::End();
+        }
+
+        void imgui_application::window_resized() {
+            // TODO disable side panel if window became too small
+        }
+
+        void imgui_application::render_exception_window() {
+            ImGui::Text("Something went wrong.");
+        }
+
+        void imgui_application::render_head_toolbar() {
+            // TODO display title of current page
+            // TODO display back button
+            // TODO display side panel toggle button
+        }
+
+        void imgui_application::render_sidepanel() {
+            // TODO display navigation structure
+            // TODO display search text box
+        }
+
+        void imgui_application::render_footer() {
+            // TODO display progress bar if applicable
+        }
+
+        void imgui_application::render_inbox() {
+            // TODO draw list of mails
+        }
+
+        void imgui_application::render_read_mail() {
+            //
+        }
+
+        void imgui_application::render_send_mail_dialog() {
+            //
+        }
+
+        void imgui_application::render_search_results_dialog() {
+            //
+        }
+
+        void imgui_application::render_settings_panel() {
+            //
+        }
+
+    } // rmrf
+} // ui
\ No newline at end of file
diff --git a/src/ui-imgui/imgui_application.hpp b/src/ui-imgui/imgui_application.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..69e2ac0c97442b97a89035765658a29c877085eb
--- /dev/null
+++ b/src/ui-imgui/imgui_application.hpp
@@ -0,0 +1,44 @@
+//
+// Created by Doralitze on 18.07.23.
+//
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+
+namespace rmrf::ui {
+
+    enum class window_state : uint8_t {
+        INBOX,
+        READ_MAIL,
+        COMPOSE,
+        SEARCH_RESULTS,
+        SETTINGS,
+    };
+
+    class imgui_application {
+        window_state open_window = window_state::INBOX;
+        bool side_panel_displayed = false;
+        std::string window_title = "RMRF";
+    public:
+        imgui_application();
+
+        void render();
+    private:
+        void window_resized();
+
+        void render_head_toolbar();
+        void render_sidepanel();
+        void render_footer();
+
+        void render_exception_window();
+        void render_inbox();
+        void render_read_mail();
+        void render_send_mail_dialog();
+        void render_search_results_dialog();
+        void render_settings_panel();
+    };
+
+}
+
diff --git a/src/ui-imgui/imgui_theme.cpp b/src/ui-imgui/imgui_theme.cpp
index 523ecb358e93e68f974f360973a9625776f49245..f37cfd3214e87b429a19408d5cee1ddc24e81950 100644
--- a/src/ui-imgui/imgui_theme.cpp
+++ b/src/ui-imgui/imgui_theme.cpp
@@ -2,7 +2,7 @@
 // Created by Leon Dietrich on 17.07.23.
 //
 
-#include "imgui_theme.h"
+#include "imgui_theme.hpp"
 
 namespace Spectrum {
     const float CHECKBOX_BORDER_SIZE = 2.0f;
diff --git a/src/ui-imgui/imgui_theme.h b/src/ui-imgui/imgui_theme.hpp
similarity index 100%
rename from src/ui-imgui/imgui_theme.h
rename to src/ui-imgui/imgui_theme.hpp