diff --git a/src/static/js/main.js b/src/static/js/main.js
index 2e35e33fa2328fc4a2a16a184be47097bf349ca2..515e89b9b564dfbe3b5f4951c185d6e6f99e1b58 100644
--- a/src/static/js/main.js
+++ b/src/static/js/main.js
@@ -3,7 +3,8 @@ let options = {
     margin: '2vh',
     column: 12,
     disableDrag: true,
-    disableResize: true
+    disableResize: true,
+    minWidth: 650
 };
 
 let grid = GridStack.init(options);
@@ -14,27 +15,27 @@ let socket = io.connect(url + '/update');
 socket.on('tileUpdate', function(msg)
 {
     let data = JSON.parse(msg);
-    let node = document.querySelector('#tile-' + data["fullName"] + ' .container');
+    let node = document.querySelector('#tile-' + data['fullName'] + ' .container');
 
     if(node === null)
     {
         return;
     }
 
-    if(data["content"] === null)
+    if(data['content'] === null)
     {
         node.innerHTML = '<div class="placeholder">❌ Data not yet available</div>';
         return;
     }
 
-    node.innerHTML = data["content"];
+    node.innerHTML = data['content'];
 
     // scripts have to be added dynamically instead of "innerHTML"
     // (otherwise they won't be executed due to browser code injection counter measurements)
     let scriptTags = node.querySelectorAll('script');
     for(script of scriptTags)
     {
-        let newScript = document.createElement("script");
+        let newScript = document.createElement('script');
         let inlineScript = document.createTextNode(script.innerText);
         newScript.appendChild(inlineScript);
         script.parentNode.appendChild(newScript);
@@ -65,4 +66,37 @@ function isMobileDevice()
         }
     })(navigator.userAgent || navigator.vendor || window.opera);
     return check;
+}
+
+
+if(isMobileDevice())
+{
+    onOrientationChange();
+}
+
+function onOrientationChange()
+{
+    let isPortrait = document.documentElement.clientWidth < document.documentElement.clientHeight;
+    if(isPortrait)
+    {
+        let viewportElement = document.getElementById('viewport');
+        if(viewportElement === null)
+        {
+            let newMeta = document.createElement('meta');
+            newMeta.name = 'viewport';
+            newMeta.id = 'viewport';
+            newMeta.content = 'width=device-width, initial-scale=1.0';
+            document.getElementsByTagName('head')[0].appendChild(newMeta);
+        }
+    }
+    else
+    {
+        let viewportElement = document.getElementById('viewport');
+        if(viewportElement !== null)
+        {
+            viewportElement.remove();
+        }
+    }
+
+    grid.update();
 }
\ No newline at end of file
diff --git a/src/templates/page.html b/src/templates/page.html
index 4cdfb8ec2675528e875a6d69fbd250ad076dfd3e..f92ebd559027d45841a9c4e1d166597833ce812a 100644
--- a/src/templates/page.html
+++ b/src/templates/page.html
@@ -11,8 +11,6 @@
         <link type="text/css" rel="stylesheet" href="../static/css/libs/weather-icons-wind.min.css" />
         <link type="text/css" rel="stylesheet" href="../static/css/libs/gridstack.min.css" />
         <link type="text/css" rel="stylesheet" href="../static/css/main.css" />
-
-{#        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>#}
     </head>
     <body>
         <div class="grid-stack">