http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/header-logo.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/header-logo.pug 
b/modules/web-console/frontend/app/modules/branding/header-logo.pug
deleted file mode 100644
index f0453d3..0000000
--- a/modules/web-console/frontend/app/modules/branding/header-logo.pug
+++ /dev/null
@@ -1,18 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a(ui-sref='signin')
-    img.navbar-brand(ng-src='{{logo.url}}')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/header-title.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/branding/header-title.directive.js 
b/modules/web-console/frontend/app/modules/branding/header-title.directive.js
deleted file mode 100644
index f67439c..0000000
--- 
a/modules/web-console/frontend/app/modules/branding/header-title.directive.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `
-    <h1
-        style="margin: 0;font-size: 1.4em;"
-    >{{::title.text}}</h1>
-`;
-
-/**
- * @param {import('./branding.service').default} branding
- */
-export default function factory(branding) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.text = branding.headerText;
-    }
-
-    return {
-        restrict: 'E',
-        template,
-        controller,
-        controllerAs: 'title',
-        replace: true
-    };
-}
-
-factory.$inject = ['IgniteBranding'];
-

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
 
b/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
deleted file mode 100644
index 3f8b3de..0000000
--- 
a/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './powered-by-apache.pug';
-
-/**
- * @param {import('./branding.service').default} branding
- */
-export default function factory(branding) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.show = branding.showIgniteLogo;
-    }
-
-    return {
-        restrict: 'E',
-        template,
-        controller,
-        controllerAs: 'poweredBy'
-    };
-}
-
-factory.$inject = ['IgniteBranding'];
-

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug 
b/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug
deleted file mode 100644
index 6031235..0000000
--- a/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug
+++ /dev/null
@@ -1,18 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a(ng-if='poweredBy.show' href='//ignite.apache.org' target='_blank')
-    img(ng-src='/images/pb-ignite.png')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/demo/Demo.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/demo/Demo.module.js 
b/modules/web-console/frontend/app/modules/demo/Demo.module.js
index 6c14e4a..9416bca 100644
--- a/modules/web-console/frontend/app/modules/demo/Demo.module.js
+++ b/modules/web-console/frontend/app/modules/demo/Demo.module.js
@@ -71,34 +71,7 @@ function demoInterceptor(Demo) {
 
 demoInterceptor.$inject = ['Demo'];
 
-/**
- * @param {ng.IScope} $scope
- * @param {import('@uirouter/angularjs').StateService} $state
- * @param {ng.IWindowService} $window
- * @param {ReturnType<typeof import('app/services/Confirm.service').default>} 
Confirm
- */
-function demoController($scope, $state, $window, Confirm) {
-    const _openTab = (stateName) => $window.open($state.href(stateName), 
'_blank');
-
-    $scope.startDemo = () => {
-        if (!$scope.user.demoCreated)
-            return _openTab('demo.reset');
-
-        Confirm.confirm('Would you like to continue with previous demo 
session?', true, false)
-            .then((resume) => {
-                if (resume)
-                    return _openTab('demo.resume');
-
-                _openTab('demo.reset');
-            });
-    };
-
-    $scope.closeDemo = () => {
-        $window.close();
-    };
-}
 
-demoController.$inject = ['$scope', '$state', '$window', 'IgniteConfirm'];
 
 function igniteDemoInfoProvider() {
     const items = DEMO_INFO;
@@ -211,6 +184,5 @@ angular
 .config(config)
 .provider('Demo', DemoProvider)
 .factory('demoInterceptor', demoInterceptor)
-.controller('demoController', demoController)
 .provider('igniteDemoInfo', igniteDemoInfoProvider)
 .service('DemoInfo', DemoInfo);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js 
b/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
deleted file mode 100644
index 9b905d7..0000000
--- a/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default function() {
-    const items = [];
-
-    this.push = function(data) {
-        items.push(data);
-    };
-
-    this.$get = function() {
-        return items;
-    };
-
-    return this;
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/navbar/navbar.directive.js 
b/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
deleted file mode 100644
index e400cf7..0000000
--- a/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default function factory(IgniteNavbar) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.items = IgniteNavbar;
-    }
-
-    return {
-        restrict: 'A',
-        controller,
-        controllerAs: 'navbar'
-    };
-}
-
-factory.$inject = ['IgniteNavbar'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/navbar.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/navbar.module.js 
b/modules/web-console/frontend/app/modules/navbar/navbar.module.js
index 63588c7..e2a4f83 100644
--- a/modules/web-console/frontend/app/modules/navbar/navbar.module.js
+++ b/modules/web-console/frontend/app/modules/navbar/navbar.module.js
@@ -17,17 +17,10 @@
 
 import angular from 'angular';
 
-import IgniteNavbar from './Navbar.provider';
 import IgniteUserbar from './Userbar.provider';
 
-import igniteNavbar from './navbar.directive';
-import igniteUserbar from './userbar.directive';
-
 angular
 .module('ignite-console.navbar', [
 
 ])
-.provider('IgniteNavbar', IgniteNavbar)
-.provider('IgniteUserbar', IgniteUserbar)
-.directive('igniteNavbar', igniteNavbar)
-.directive('igniteUserbar', igniteUserbar);
+.provider('IgniteUserbar', IgniteUserbar);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/navbar/userbar.directive.js 
b/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
deleted file mode 100644
index b636a34..0000000
--- a/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @param {ng.IRootScopeService} $root
- * @param {unknown} IgniteUserbar
- * @param {unknown} AclService
- */
-function controller($root, IgniteUserbar, AclService) {
-    const ctrl = this;
-
-    this.$onInit = () => {
-        ctrl.items = [
-            {text: 'Profile', sref: 'base.settings.profile'},
-            {text: 'Getting started', click: 'gettingStarted.tryShow(true)'}
-        ];
-
-        const _rebuildSettings = () => {
-            ctrl.items.splice(2);
-
-            if (AclService.can('admin_page'))
-                ctrl.items.push({text: 'Admin panel', sref: 
'base.settings.admin'});
-
-            ctrl.items.push(...IgniteUserbar);
-
-            if (AclService.can('logout'))
-                ctrl.items.push({text: 'Log out', sref: 'logout'});
-        };
-
-        if ($root.user)
-            _rebuildSettings(null, $root.user);
-
-        $root.$on('user', _rebuildSettings);
-    };
-}
-
-controller.$inject = ['$rootScope', 'IgniteUserbar', 'AclService'];
-
-export default function() {
-    return {
-        restrict: 'A',
-        controller,
-        controllerAs: 'userbar'
-    };
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/services/store.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/store.ts 
b/modules/web-console/frontend/app/services/store.ts
new file mode 100644
index 0000000..19dde69
--- /dev/null
+++ b/modules/web-console/frontend/app/services/store.ts
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import {Subject} from 'rxjs/Subject';
+import {scan, tap} from 'rxjs/operators';
+import {merge} from 'rxjs/observable/merge';
+
+interface Reducer<State, Actions> {
+    (state: State, action: Actions): State
+}
+
+export class Store<Actions, State> {
+    static $inject = ['$injector'];
+
+    actions$: Subject<Actions>
+    state$: BehaviorSubject<State>
+    private _reducers: Array<Reducer<State, Actions>>
+
+    constructor(private $injector: ng.auto.IInjectorService) {
+        this.$injector = $injector;
+
+        this.actions$ = new Subject();
+        this.state$ = new BehaviorSubject({});
+        this.actions$.pipe(
+            scan((state, action) => this._reducers.reduce((state, reducer) => 
reducer(state, action), state), void 0),
+            tap((state) => this.state$.next(state))
+        ).subscribe();
+        this._reducers = [(state) => state];
+    }
+
+    dispatch(action: Actions) {
+        this.actions$.next(action);
+    }
+
+    addReducer<T extends keyof State, U = State[T]>(path: T, reducer: 
Reducer<U, Actions>): void
+    addReducer(reducer: Reducer<State, Actions>): void
+    addReducer(...args) {
+        if (typeof args[0] === 'string') {
+            const [path, reducer] = args;
+            this._reducers = [
+                ...this._reducers,
+                (state = {}, action) => {
+                    const pathState = reducer(state[path], action);
+                    // Don't update root state if child state changes
+                    return state[path] !== pathState ? {...state, [path]: 
pathState} : state;
+                }
+            ];
+        } else {
+            const [reducer] = args;
+            this._reducers = [...this._reducers, reducer];
+        }
+    }
+
+    addEffects(EffectsClass) {
+        const instance = this.$injector.instantiate(EffectsClass);
+        return merge(
+            ...Object.keys(instance).filter((k) => 
k.endsWith('Effect$')).map((k) => instance[k]),
+        ).pipe(tap((a) => this.dispatch(a))).subscribe();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/actions/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/actions/ui.ts 
b/modules/web-console/frontend/app/store/actions/ui.ts
new file mode 100644
index 0000000..25d9ba0
--- /dev/null
+++ b/modules/web-console/frontend/app/store/actions/ui.ts
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {NavigationMenuItem} from '../../types';
+
+export const TOGGLE_SIDEBAR: 'TOGGLE_SIDEBAR' = 'TOGGLE_SIDEBAR';
+export const toggleSidebar = () => ({type: TOGGLE_SIDEBAR});
+
+export const NAVIGATION_MENU_ITEM: 'NAVIGATION_MENU_ITEM' = 
'NAVIGATION_MENU_ITEM';
+export const navigationMenuItem = (menuItem: NavigationMenuItem) => ({type: 
NAVIGATION_MENU_ITEM, menuItem});
+
+export const HIDE_NAVIGATION_MENU_ITEM: 'HIDE_NAVIGATION_MENU_ITEM' = 
'HIDE_NAVIGATION_MENU_ITEM';
+export const hideNavigationMenuItem = (label: NavigationMenuItem['label']) => 
({type: HIDE_NAVIGATION_MENU_ITEM, label});
+
+export const SHOW_NAVIGATION_MENU_ITEM: 'SHOW_NAVIGATION_MENU_ITEM' = 
'SHOW_NAVIGATION_MENU_ITEM';
+export const showNavigationMenuItem = (label: NavigationMenuItem['label']) => 
({type: SHOW_NAVIGATION_MENU_ITEM, label});
+
+export type UIActions =
+    | ReturnType<typeof toggleSidebar>
+    | ReturnType<typeof navigationMenuItem>
+    | ReturnType<typeof hideNavigationMenuItem>
+    | ReturnType<typeof showNavigationMenuItem>;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/actions/user.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/actions/user.ts 
b/modules/web-console/frontend/app/store/actions/user.ts
new file mode 100644
index 0000000..34c8d20
--- /dev/null
+++ b/modules/web-console/frontend/app/store/actions/user.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {User} from '../../types';
+
+export const USER: 'USER' = 'USER';
+export const user = (user: User) => ({type: USER, user});
+
+export type UserActions =
+    | ReturnType<typeof user>;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/effects/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/effects/ui.ts 
b/modules/web-console/frontend/app/store/effects/ui.ts
new file mode 100644
index 0000000..2a635d6
--- /dev/null
+++ b/modules/web-console/frontend/app/store/effects/ui.ts
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {AppStore, USER, ofType, hideNavigationMenuItem, 
showNavigationMenuItem} from '..';
+import {map} from 'rxjs/operators';
+
+export class UIEffects {
+    static $inject = ['Store']
+    constructor(private store: AppStore) {}
+
+    toggleQueriesNavItemEffect$ = this.store.actions$.pipe(
+        ofType(USER),
+        map((action) => {
+            const QUERY_LABEL = 'Queries';
+            return action.user.becomeUsed ? 
hideNavigationMenuItem(QUERY_LABEL) : showNavigationMenuItem(QUERY_LABEL);
+        })
+    )
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/index.ts 
b/modules/web-console/frontend/app/store/index.ts
new file mode 100644
index 0000000..fa4a878
--- /dev/null
+++ b/modules/web-console/frontend/app/store/index.ts
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {Store} from '../services/store';
+
+import {UIState, uiReducer} from './reducers/ui';
+import {UIActions} from './actions/ui';
+import {UIEffects} from './effects/ui';
+
+import {UserActions} from './actions/user';
+
+export * from './actions/ui';
+export * from './reducers/ui';
+export * from './selectors/ui';
+
+export * from './actions/user';
+
+export {ofType} from './ofType';
+
+export type State = {
+    ui: UIState,
+};
+
+export type Actions =
+    | UserActions
+    | UIActions;
+
+export type AppStore = Store<Actions, State>;
+
+register.$inject = ['Store'];
+export function register(store: AppStore) {
+    store.addReducer('ui', uiReducer);
+    store.addEffects(UIEffects);
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/ofType.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/ofType.ts 
b/modules/web-console/frontend/app/store/ofType.ts
new file mode 100644
index 0000000..3d3bd8e
--- /dev/null
+++ b/modules/web-console/frontend/app/store/ofType.ts
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {OperatorFunction} from 'rxjs/interfaces';
+import {filter} from 'rxjs/operators';
+
+type Action = {type: string};
+export function ofType<T extends string, U extends Action, V extends 
Extract<U, {type: T}>>(type: T): OperatorFunction<U, V>
+export function ofType<U extends Action>(type): OperatorFunction<U, U> {
+    return filter((action: U): boolean => type === action.type);
+}
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/reducers/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/reducers/ui.ts 
b/modules/web-console/frontend/app/store/reducers/ui.ts
new file mode 100644
index 0000000..6f2859d
--- /dev/null
+++ b/modules/web-console/frontend/app/store/reducers/ui.ts
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {NavigationMenu} from '../../types';
+import {UIActions, TOGGLE_SIDEBAR, NAVIGATION_MENU_ITEM, 
HIDE_NAVIGATION_MENU_ITEM, SHOW_NAVIGATION_MENU_ITEM} from '..';
+
+export type UIState = {
+    sidebarOpened: boolean,
+    navigationMenu: NavigationMenu
+};
+
+const defaults: UIState = {
+    sidebarOpened: false,
+    navigationMenu: []
+};
+
+export function uiReducer(state: UIState = defaults, action: UIActions): 
UIState {
+    switch (action.type) {
+        case TOGGLE_SIDEBAR:
+            return {...state, sidebarOpened: !state.sidebarOpened};
+        case NAVIGATION_MENU_ITEM:
+            return {...state, navigationMenu: [...state.navigationMenu, 
action.menuItem]};
+        case HIDE_NAVIGATION_MENU_ITEM:
+            return {
+                ...state,
+                navigationMenu: state.navigationMenu.map((i) => i.label === 
action.label ? {...i, hidden: true} : i)
+            };
+        case SHOW_NAVIGATION_MENU_ITEM:
+            return {
+                ...state,
+                navigationMenu: state.navigationMenu.map((i) => i.label === 
action.label ? {...i, hidden: false} : i)
+            };
+        default:
+            return state;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/reduxDebug.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/reduxDebug.ts 
b/modules/web-console/frontend/app/store/reduxDebug.ts
new file mode 100644
index 0000000..d7b1474
--- /dev/null
+++ b/modules/web-console/frontend/app/store/reduxDebug.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {reducer, devTools} from 
'../components/page-configure/reduxDevtoolsIntegration';
+import {AppStore} from '.';
+import {filter, withLatestFrom, tap} from 'rxjs/operators';
+
+run.$inject = ['Store'];
+
+export function run(store: AppStore) {
+    if (devTools) {
+        devTools.subscribe((e) => {
+            if (e.type === 'DISPATCH' && e.state) store.dispatch(e);
+        });
+
+        const ignoredActions = new Set([
+        ]);
+
+        store.actions$.pipe(
+            filter((e) => e.type !== 'DISPATCH'),
+            withLatestFrom(store.state$.skip(1)),
+            tap(([action, state]) => {
+                if (ignoredActions.has(action.type)) return;
+                devTools.send(action, state);
+                console.log(action);
+            })
+        ).subscribe();
+
+        store.addReducer(reducer);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/selectors/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/selectors/ui.ts 
b/modules/web-console/frontend/app/store/selectors/ui.ts
new file mode 100644
index 0000000..0bd2fa9
--- /dev/null
+++ b/modules/web-console/frontend/app/store/selectors/ui.ts
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {State, AppStore} from '..';
+import {pluck, map} from 'rxjs/operators';
+import {pipe} from 'rxjs';
+import {memoize, orderBy} from 'lodash';
+
+const orderMenu = <T extends {order: number}>(menu: Array<T>) => orderBy(menu, 
'order');
+
+export const selectSidebarOpened = () => pluck<State, 
State['ui']['sidebarOpened']>('ui', 'sidebarOpened');
+export const selectNavigationMenu = () => pipe(
+    pluck<State, State['ui']['navigationMenu']>('ui', 'navigationMenu'),
+    map(orderMenu)
+);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/types/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/types/index.ts 
b/modules/web-console/frontend/app/types/index.ts
index df6a169..ad40c15 100644
--- a/modules/web-console/frontend/app/types/index.ts
+++ b/modules/web-console/frontend/app/types/index.ts
@@ -32,3 +32,33 @@ export interface IIgniteNg1StateDeclaration extends 
Ng1StateDeclaration {
     tfMetaTags: ITfMetatagsConfig,
     permission?: string
 }
+
+export type User = {
+    _id: string,
+    firstName: string,
+    lastName: string,
+    email: string,
+    phone?: string,
+    company: string,
+    country: string,
+    registered: string,
+    lastLogin: string,
+    lastActivity: string,
+    admin: boolean,
+    token: string,
+    resetPasswordToken: string,
+    // Assigned in UI
+    becomeUsed?: boolean
+};
+
+export type NavigationMenuItem = {
+    label: string,
+    icon: string,
+    order: number,
+    hidden?: boolean
+} & (
+    {sref: string, activeSref: string} |
+    {href: string}
+);
+
+export type NavigationMenu = Array<NavigationMenuItem>;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/cluster.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/cluster.icon.svg 
b/modules/web-console/frontend/public/images/icons/cluster.icon.svg
new file mode 100644
index 0000000..7576049
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/cluster.icon.svg
@@ -0,0 +1,10 @@
+<svg version="1.1" viewBox="0 0 20 17" xmlns="http://www.w3.org/2000/svg";>
+       <g fill="none" fill-rule="evenodd" stroke="currentColor" 
stroke-width="2">
+               <rect x="8.5" y="1" width="3" height="3" rx="1"/>
+               <rect x="8.5" y="12.25" width="3" height="3" rx="1"/>
+               <rect x="16" y="12.25" width="3" height="3" rx="1"/>
+               <rect x="1" y="12.25" width="3" height="3" rx="1"/>
+               <path d="M10 5v2.5l7.656.05v4.206" stroke-linecap="square" 
stroke-linejoin="round"/>
+               <path d="M10.156 5v6.756V7.5L2.5 7.55v4.206" 
stroke-linecap="round" stroke-linejoin="round"/>
+       </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg 
b/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg
deleted file mode 100644
index f405317..0000000
--- 
a/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 16 13"><g fill="none" 
fill-rule="evenodd"><path fill="currentColor" d="M6 0h4v4H6zm0 9h4v4H6zm6 
0h4v4h-4zM0 9h4v4H0z"/><path stroke="currentColor" stroke-linecap="square" 
d="M8 4v2l6.125.04v3.365"/><path stroke="currentColor" stroke-linecap="square" 
d="M8.125 4v5.405V6L2 6.04v3.365"/></g></svg>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg 
b/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg
new file mode 100644
index 0000000..afb51ee
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg
@@ -0,0 +1,16 @@
+<svg version="1.1" viewBox="0 0 20 18" xmlns="http://www.w3.org/2000/svg";>
+       <g fill="none" fill-rule="evenodd">
+               <g transform="translate(-263 -1597)" fill="currentColor">
+                       <g transform="translate(235 1485)">
+                               <g transform="translate(28 112)">
+                                       <path d="m-8.7041e-14 9.0435v7.1788c0 
0.97787 0.81811 1.7778 1.8182 1.7778h16.364c0.99966 0 1.8178-0.79991 
1.8178-1.7778v-7.1788h-20zm1.7103 0h16.472v7.1876h-16.364l-0.10794-7.1876z"/>
+                                       <g stroke="currentColor" 
stroke-width=".5">
+                                               <polygon points="14.7 8.635 
14.131 8.0659 10.757 11.44 10.757 5 9.9435 5 9.9435 11.44 6.5692 8.0659 6 8.635 
10.35 12.985"/>
+                                               <polygon points="10.757 3.719 
10.757 3 9.9435 3 9.9435 3.719"/>
+                                               <polygon points="10.757 1.719 
10.757 1 9.9435 1 9.9435 1.719"/>
+                                       </g>
+                               </g>
+                       </g>
+               </g>
+       </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/index.js 
b/modules/web-console/frontend/public/images/icons/index.js
index 0951d32..2e41085 100644
--- a/modules/web-console/frontend/public/images/icons/index.js
+++ b/modules/web-console/frontend/public/images/icons/index.js
@@ -21,7 +21,6 @@ export {default as check} from './check.icon.svg';
 export {default as checkmark} from './checkmark.icon.svg';
 export {default as clock} from './clock.icon.svg';
 export {default as collapse} from './collapse.icon.svg';
-export {default as connectedClusters} from './connectedClusters.icon.svg';
 export {default as copy} from './copy.icon.svg';
 export {default as cross} from './cross.icon.svg';
 export {default as csv} from './csv.icon.svg';
@@ -43,3 +42,7 @@ export {default as refresh} from './refresh.icon.svg';
 export {default as search} from './search.icon.svg';
 export {default as sort} from './sort.icon.svg';
 export {default as structure} from './structure.icon.svg';
+export {default as cluster} from './cluster.icon.svg';
+export {default as sql} from './sql.icon.svg';
+export {default as menu} from './menu.icon.svg';
+export {default as downloadAgent} from './downloadAgent.icon.svg';

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/menu.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/menu.icon.svg 
b/modules/web-console/frontend/public/images/icons/menu.icon.svg
new file mode 100644
index 0000000..392d42e
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/menu.icon.svg
@@ -0,0 +1,7 @@
+<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333332 4.2333332" 
xmlns="http://www.w3.org/2000/svg";>
+       <g transform="translate(0 -292.77)" fill="currentColor">
+               <rect y="295.95" width="4.2333" height=".52917" 
style="paint-order:markers fill stroke"/>
+               <rect x="1.1126e-7" y="294.62" width="4.2333" height=".52917" 
style="paint-order:markers fill stroke"/>
+               <rect y="293.3" width="4.2333" height=".52917" 
style="paint-order:markers fill stroke"/>
+       </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/sql.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/sql.icon.svg 
b/modules/web-console/frontend/public/images/icons/sql.icon.svg
new file mode 100644
index 0000000..bd54eee
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/sql.icon.svg
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 20 16" xmlns="http://www.w3.org/2000/svg";>
+       <path d="M6.454 
9.208c0-.2-.07-.353-.211-.46-.141-.107-.395-.22-.762-.338a5.4 5.4 0 0 
1-.871-.351c-.583-.315-.875-.74-.875-1.273 0-.278.079-.525.235-.743a1.53 1.53 0 
0 1 .673-.51c.293-.121.622-.183.986-.183.367 0 
.694.067.98.2.287.133.51.32.669.562.158.242.238.517.238.825H6.458c0-.235-.074-.417-.222-.548-.148-.13-.357-.196-.625-.196-.258
 0-.46.055-.603.164a.517.517 0 0 0-.215.432c0 
.167.084.307.252.42.169.113.416.219.743.317.602.181 1.04.406 
1.315.674.275.268.413.602.413 1.001 0 .445-.168.793-.505 
1.046-.336.253-.788.38-1.357.38-.395 0-.755-.073-1.08-.218a1.708 1.708 0 0 
1-.742-.594 1.522 1.522 0 0 1-.255-.875h1.061c0 .567.339.85 1.016.85.251 0 
.448-.05.589-.153a.5.5 0 0 0 .211-.429zm5.988-1.103c0 .48-.077.896-.233 
1.25-.155.354-.37.637-.645.851l.854.67-.674.596-1.093-.878a2.314 2.314 0 0 
1-.388.032c-.426 0-.805-.102-1.14-.307a2.038 2.038 0 0 
1-.775-.876c-.183-.38-.276-.816-.279-1.31v-.254c0-.506.091-.95.274-1.335.182-.384.44-.68.772-.885a2.124
 2.124 0 0 1 1.14-.309c.429 0 .809.103
  1.142.309.332.206.59.5.772.885.182.385.273.828.273 
1.331v.23zm-1.072-.233c0-.538-.096-.948-.289-1.227-.193-.28-.468-.42-.825-.42-.355
 0-.63.138-.822.414-.193.277-.29.682-.293 1.215v.25c0 .525.097.932.29 
1.22.192.29.47.435.832.435.355 0 
.628-.14.818-.418.19-.279.287-.685.29-1.219v-.25zm2.906 
1.834h2.246v.85h-3.304V5.42h1.058v4.285zM18.182 0H1.818C.818 0 0 .8 0 
1.778v12.444C0 15.2.818 16 1.818 16h16.364c1 0 1.818-.8 1.818-1.778V1.778C20 .8 
19.182 0 18.182 0zM1.818 1.769h16.364V14.23H1.818V1.77z" fill="currentColor" 
fill-rule="evenodd"/>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/stylesheets/style.scss 
b/modules/web-console/frontend/public/stylesheets/style.scss
index ce14e45..3f601be 100644
--- a/modules/web-console/frontend/public/stylesheets/style.scss
+++ b/modules/web-console/frontend/public/stylesheets/style.scss
@@ -255,17 +255,70 @@ body {
     flex-direction: column;
 }
 
-body > .wrapper,
-    // Nested ui-view, like on password reset state
-body > .wrapper > ui-view {
-    display: flex;
-    flex-direction: column;
+:root {
+    --page-side-padding: 30px;
+}
+
+.wrapper {
+    --header-height: 62px;
+
     min-height: 100vh;
+    display: grid;
+    grid-template-columns: auto 1fr;
+    grid-template-rows: auto var(--header-height) 1fr;
+    grid-template-areas: 'notifications notifications' 'header header' 
'sidebar content';
+
+    permanent-notifications {
+        grid-area: notifications;
+    }
+
+    web-console-header {
+        grid-area: header;
+        position: -webkit-sticky;
+        position: sticky;
+        top: 0;
+        z-index: 10;
+        transform: translateZ(1px);
+    }
+
+    web-console-sidebar {
+        grid-area: sidebar;
+        transform: translateZ(1px);
+    }
+
+    &>.content {
+        grid-area: content;
+        padding-left: var(--page-side-padding);
+        padding-right: var(--page-side-padding);
+        padding-bottom: var(--page-side-padding);
+        display: flex;
+        flex-direction: column;
+
+        &>ui-view {
+            display: flex;
+            flex-direction: column;
+            flex: 1;
+        }
+    }
+
+    &.wrapper-public {
+        grid-template-columns: 1fr;
+        grid-template-rows: auto var(--header-height) 1fr auto;
+        grid-template-areas: 'notifications' 'header' 'content' 'footer';
+    }
+}
+
+.public-page {
+    margin-left: auto;
+    margin-right: auto;
     flex: 1 0 auto;
+    width: 100%;
+    max-width: 530px;
 
-    .body-container {
-        flex: 1 0 auto;
-        padding-bottom: 30px;
+    .public-page__title {
+        font-size: 38px;
+        font-weight: 300;
+        margin: 30px 0 30px;
     }
 }
 
@@ -374,7 +427,6 @@ i.btn {
 h1,
 h2,
 h3 {
-    user-select: none;
     font-weight: normal;
     /* Makes the vertical size of the text the same for all fonts. */
     line-height: 1;
@@ -2004,10 +2056,6 @@ html, body {
     position: absolute !important;
 }
 
-.demo-mode {
-    padding-top: 30px;
-}
-
 // Fix for injecting svg icon into BS btn
 .btn--with-icon {
     display: flex;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/base.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/base.pug 
b/modules/web-console/frontend/views/base.pug
index 967d469..b14cdac 100644
--- a/modules/web-console/frontend/views/base.pug
+++ b/modules/web-console/frontend/views/base.pug
@@ -14,13 +14,10 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
+permanent-notifications
 web-console-header
-    web-console-header-left
-        include ./includes/header-left
-    web-console-header-right
-        include ./includes/header-right
+    web-console-header-content
 
-.container--responsive.body-container.flex-full-height
-    div(ui-view='').flex-full-height
+web-console-sidebar
 
-web-console-footer
+ui-view.content
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/includes/header-left.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/header-left.pug 
b/modules/web-console/frontend/views/includes/header-left.pug
deleted file mode 100644
index 03e0616..0000000
--- a/modules/web-console/frontend/views/includes/header-left.pug
+++ /dev/null
@@ -1,42 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a.wch-nav-item(
-    ui-sref='base.configuration.overview'
-    ui-sref-active='{active: "base.configuration"}'
-)
-    | Configure
-
-.wch-nav-item(ng-if='!$root.user.becomeUsed')
-    a(ui-sref='base.sql.tabs.notebooks-list' ui-sref-active='active')
-        | Queries
-
-.wch-additional-nav-items(ignite-navbar)
-    .wch-nav-item(ng-repeat='item in navbar.items')
-        div(ng-if='$root.user.becomeUsed ? item.canBecomed : item.children' 
ng-click='$event.stopPropagation()'
-                ng-class='{active: $state.includes(item.sref)}'
-                bs-dropdown='item.children'
-                data-placement='bottom-left'
-                data-trigger='hover focus'
-                data-container='self'
-                aria-haspopup='true'
-                aria-expanded='false'
-            )
-                span {{::item.text}}
-                    span.caret
-
-        a(ng-if='$root.user.becomeUsed ? item.canBecomed : !item.children' 
ui-sref='{{item.sref}}' ui-sref-active='active')
-            | {{::item.text}}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/includes/header-right.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/header-right.pug 
b/modules/web-console/frontend/views/includes/header-right.pug
deleted file mode 100644
index d2d89aa..0000000
--- a/modules/web-console/frontend/views/includes/header-right.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.wch-demo-toggle(ng-if='!$root.user.becomeUsed' ng-controller='demoController')
-    button.btn-ignite.btn-ignite--success(
-        ng-if='!IgniteDemoMode'
-        ng-click='startDemo()'
-    ) Start Demo
-
-web-console-header-extension
-
-.wch-nav-item(ignite-userbar)
-    .user-name-wrapper(
-        ng-class='{active: $state.includes("base.settings")}'
-        ng-click='$event.stopPropagation()'
-        bs-dropdown='userbar.items'
-        data-placement='bottom-right'
-        data-trigger='hover focus'
-        data-container='self'
-    )
-        span {{$root.user.firstName}} {{$root.user.lastName}}
-        span.caret

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/public.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/public.pug 
b/modules/web-console/frontend/views/public.pug
new file mode 100644
index 0000000..934ac56
--- /dev/null
+++ b/modules/web-console/frontend/views/public.pug
@@ -0,0 +1,20 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+web-console-header(hide-menu-button='true')
+    .web-console-header-content__title Management console for Apache Ignite
+.content(ui-view='page')
+web-console-footer.web-console-footer__page-bottom
\ No newline at end of file

Reply via email to