diff --git a/platypush/backend/http/webapp/dist/index.html b/platypush/backend/http/webapp/dist/index.html
index 6c20f9260..859a0625c 100644
--- a/platypush/backend/http/webapp/dist/index.html
+++ b/platypush/backend/http/webapp/dist/index.html
@@ -1 +1 @@
-
platypush
\ No newline at end of file
+platypush
\ No newline at end of file
diff --git a/platypush/backend/http/webapp/dist/static/js/app-legacy.db44850f.js b/platypush/backend/http/webapp/dist/static/js/app-legacy.db44850f.js
deleted file mode 100644
index cc7e8ba87..000000000
--- a/platypush/backend/http/webapp/dist/static/js/app-legacy.db44850f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(){var e={5250:function(e,t,n){"use strict";n.d(t,{$:function(){return i}});var s=n(9652),i=(0,s.Z)();i.publishEntity=function(e){i.emit("entity-update",e)},i.onEntity=function(e){i.on("entity-update",e)},i.publishNotification=function(e){i.emit("notification-create",e)},i.onNotification=function(e){i.on("notification-create",e)}},1820:function(e,t,n){"use strict";n(6992),n(8674),n(9601),n(7727);var s=n(9963),i=n(6252);function r(e,t,n,s,r,a){var o=(0,i.up)("Events"),c=(0,i.up)("Notifications"),l=(0,i.up)("VoiceAssistant"),u=(0,i.up)("Pushbullet"),d=(0,i.up)("Ntfy"),f=(0,i.up)("router-view");return(0,i.wg)(),(0,i.iD)(i.HY,null,[a.hasWebsocket?((0,i.wg)(),(0,i.j4)(o,{key:0,ref:"events","ws-port":r.config["backend.http"].websocket_port},null,8,["ws-port"])):(0,i.kq)("",!0),(0,i.Wm)(c,{ref:"notifications"},null,512),a.hasAssistant?((0,i.wg)(),(0,i.j4)(l,{key:1,ref:"voice-assistant"},null,512)):(0,i.kq)("",!0),a.hasPushbullet?((0,i.wg)(),(0,i.j4)(u,{key:2,ref:"pushbullet"},null,512)):(0,i.kq)("",!0),a.hasNtfy?((0,i.wg)(),(0,i.j4)(d,{key:3,ref:"ntfy"},null,512)):(0,i.kq)("",!0),(0,i.Wm)(f)],64)}var a=n(8534),o=(n(5666),n(9254),{class:"notifications"});function c(e,t,n,s,r,a){var c=(0,i.up)("Notification");return(0,i.wg)(),(0,i.iD)("div",o,[((0,i.wg)(!0),(0,i.iD)(i.HY,null,(0,i.Ko)(e.notifications,(function(e,t,n){return(0,i.wg)(),(0,i.j4)(c,{key:n,id:t,text:e.text,html:e.html,title:e.title,link:e.link,image:e.image,warning:e.warning,error:e.error,onClicked:a.destroy},null,8,["id","text","html","title","link","image","warning","error","onClicked"])})),128))])}n(9653);var l=n(3577),u=["textContent"],d={class:"body"},f={key:0,class:"image col-3"},p={class:"row"},m=["src"],h={key:3,class:"fa fa-exclamation"},g={key:4,class:"fa fa-times"},v=["textContent"],b=["innerHTML"],w=["textContent"],y=["innerHTML"];function k(e,t,n,s,r,a){return(0,i.wg)(),(0,i.iD)("div",{class:(0,l.C_)(["notification fade-in",{warning:n.warning,error:n.error}]),onClick:t[0]||(t[0]=function(){return a.clicked&&a.clicked.apply(a,arguments)})},[n.title?((0,i.wg)(),(0,i.iD)("div",{key:0,class:"title",textContent:(0,l.zw)(n.title)},null,8,u)):(0,i.kq)("",!0),(0,i._)("div",d,[n.image||n.warning||n.error?((0,i.wg)(),(0,i.iD)("div",f,[(0,i._)("div",p,[n.image&&n.image.src?((0,i.wg)(),(0,i.iD)("img",{key:0,src:n.image.src,alt:""},null,8,m)):n.image&&n.image.icon?((0,i.wg)(),(0,i.iD)("i",{key:1,class:(0,l.C_)(["fa","fa-"+n.image.icon]),style:(0,l.j5)(n.image.color?"--color: "+n.image.color:"")},null,6)):n.image&&n.image.iconClass?((0,i.wg)(),(0,i.iD)("i",{key:2,class:(0,l.C_)(n.image.iconClass),style:(0,l.j5)(n.image.color?"--color: "+n.image.color:"")},null,6)):n.warning?((0,i.wg)(),(0,i.iD)("i",h)):n.error?((0,i.wg)(),(0,i.iD)("i",g)):(0,i.kq)("",!0)])])):(0,i.kq)("",!0),n.text&&n.image?((0,i.wg)(),(0,i.iD)("div",{key:1,class:"text col-9",textContent:(0,l.zw)(n.text)},null,8,v)):(0,i.kq)("",!0),n.html&&n.image?((0,i.wg)(),(0,i.iD)("div",{key:2,class:"text col-9",innerHTML:n.html},null,8,b)):(0,i.kq)("",!0),n.text&&!n.image?((0,i.wg)(),(0,i.iD)("div",{key:3,class:"text row horizontal-center",textContent:(0,l.zw)(n.text)},null,8,w)):(0,i.kq)("",!0),n.html&&!n.image?((0,i.wg)(),(0,i.iD)("div",{key:4,class:"text row horizontal-center",innerHTML:n.html},null,8,y)):(0,i.kq)("",!0)])],2)}var x={name:"Notification",props:["id","text","html","title","image","link","error","warning"],methods:{clicked:function(){this.link&&window.open(this.link,"_blank"),this.$emit("clicked",this.id)}}},_=n(3744);const C=(0,_.Z)(x,[["render",k],["__scopeId","data-v-7646705e"]]);var D=C,I={name:"Notifications",components:{Notification:D},props:{duration:{type:Number,default:1e4}},data:function(){return{index:0,notifications:{},timeouts:{}}},methods:{create:function(e){var t=this.index++;this.notifications[t]=e,null==e.duration&&(e.duration=this.duration);var n=e.duration?parseInt(e.duration):0;n&&(this.timeouts[t]=setTimeout(this.destroy.bind(null,t),n))},destroy:function(e){delete this.notifications[e],delete this.timeouts[e]}}};const T=(0,_.Z)(I,[["render",c],["__scopeId","data-v-6dc8bebc"]]);var Z=T,S=n(6813);function U(e,t,n,s,r,a){return(0,i.wg)(),(0,i.iD)("div")}var M=n(6347),R=n(9584),P=(n(2479),n(2222),n(7941),n(5250)),N={name:"Events",data:function(){return{ws:null,initialized:!1,pending:!1,opened:!1,timeout:null,reconnectMsecs:1e3,minReconnectMsecs:1e3,maxReconnectMsecs:3e4,handlers:{},handlerNameToEventTypes:{}}},methods:{onWebsocketTimeout:function(){console.log("Websocket reconnection timed out, retrying"),this.reconnectMsecs=Math.min(2*this.reconnectMsecs,this.maxReconnectMsecs),this.pending=!1,this.ws&&this.ws.close(),this.onClose()},onMessage:function(e){var t=[];if(e=e.data,"string"===typeof e)try{e=JSON.parse(e)}catch(r){console.warn("Received invalid non-JSON event"),console.warn(e)}if(console.debug(e),"event"===e.type){null in this.handlers&&t.push(this.handlers[null]),e.args.type in this.handlers&&t.push.apply(t,(0,R.Z)(Object.values(this.handlers[e.args.type])));for(var n=0,s=t;n