diff --git a/.gitignore b/.gitignore
index e444e07a4aacc15df7018e503d1fb5a552cb5c91..cc162fda146a3a02b819307b6b8d536c79861ff9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,5 +11,5 @@ salt_observer/private_settings.py
 node_modules/
 db.sqlite3
 
-# static files
-static/
+# gathered static files
+/static/
diff --git a/salt_observer/static/js/events.min.js b/salt_observer/static/js/events.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..3090029bf3427e84ae945183a7877255472696c8
--- /dev/null
+++ b/salt_observer/static/js/events.min.js
@@ -0,0 +1 @@
+$(function(){function t(t){var e=$("#event-template").clone();e.removeAttr("id"),e.find(".icon").html('<i class="fa fa-fw fa-2x fa-bug"></i>'),e.find(".title").text(t.data.id),e.find(".message").html("<pre>"+JSON.stringify(t.data)+"</pre>"),e.find(".tag").text(t.tag),e.find(".minion-id").text(t.data.id),$("#eventholder").prepend(e),setTimeout(function(){e.remove()},3e5)}function e(t){var e=$("#job-template").clone();e.removeAttr("id"),e.find(".timestamp").text(t.data._stamp),e.find(".tag").text(t.tag),$("#jobholder").prepend(e),setTimeout(function(){e.remove()},6e4)}var n=new WebSocket("ws://localhost:8002/all_events/"+token);n.onopen=function(){n.send("websocket client ready"),console.log("Connected!"),$("#conn_status").html('<i class="fa fa-fw fa-check"></i> Connected!')},n.onerror=function(t){console.debug("Error!",t),$("#conn_status").html('<i class="fa fa-fw fa-times"></i> Connection failed!')},n.onmessage=function(n){console.log(n);var o=JSON.parse(n.data.substring(6));o.tag.startsWith("salt/job/")?e(o):t(o)}});
\ No newline at end of file