diff --git a/zeppelin-web-angular/src/app/pages/login/login.component.less b/zeppelin-web-angular/src/app/pages/login/login.component.less
new file mode 100644
index 00000000000..7aac210300d
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/login/login.component.less
@@ -0,0 +1,69 @@
+/*
+ * Licensed 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 "theme-mixin";
+
+.themeMixin({
+ .content {
+ height: 100vh;
+ width: 100vw;
+
+ &:after {
+ content: "";
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-image: url("../../../assets/images/bg.jpg");
+ background-size: cover;
+ filter: blur(4px);
+ background-repeat: no-repeat;
+ background-position: center;
+ }
+
+ .inner {
+ width: 800px;
+ height: 300px;
+ position: absolute;
+ z-index: 1;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ box-shadow: @box-shadow-base;
+
+ .form {
+ width: 500px;
+ position: absolute;
+ left: 0;
+ height: 100%;
+ background: @component-background;
+ padding: 36px;
+ }
+
+ .sidebar {
+ width: 300px;
+ position: absolute;
+ right: 0;
+ height: 100%;
+ background: @primary-color;
+ padding: 24px 36px;
+ color: @text-color-dark;
+
+ h1 {
+ color: @heading-color-dark;
+ }
+ }
+ }
+ }
+});
diff --git a/zeppelin-web-angular/src/app/pages/login/login.component.ts b/zeppelin-web-angular/src/app/pages/login/login.component.ts
new file mode 100644
index 00000000000..937724974b6
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/login/login.component.ts
@@ -0,0 +1,47 @@
+/*
+ * Licensed 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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+
+import { TicketService } from '@zeppelin/services';
+
+@Component({
+ selector: 'zeppelin-login',
+ templateUrl: './login.component.html',
+ styleUrls: ['./login.component.less'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LoginComponent implements OnInit {
+ userName: string;
+ password: string;
+ loading = false;
+
+ login() {
+ this.loading = true;
+ this.ticketService.login(this.userName, this.password).subscribe(
+ () => {
+ this.loading = false;
+ this.cdr.markForCheck();
+ this.router.navigate(['/']).then();
+ },
+ () => {
+ this.loading = false;
+ this.cdr.markForCheck();
+ }
+ );
+ }
+
+ constructor(private ticketService: TicketService, private cdr: ChangeDetectorRef, private router: Router) {}
+
+ ngOnInit() {}
+}
diff --git a/zeppelin-web-angular/src/app/pages/login/login.module.ts b/zeppelin-web-angular/src/app/pages/login/login.module.ts
new file mode 100644
index 00000000000..46f40a055d5
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/login/login.module.ts
@@ -0,0 +1,26 @@
+/*
+ * Licensed 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 { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+
+import { NzButtonModule, NzFormModule, NzIconModule, NzInputModule } from 'ng-zorro-antd';
+
+import { LoginRoutingModule } from './login-routing.module';
+import { LoginComponent } from './login.component';
+
+@NgModule({
+ declarations: [LoginComponent],
+ imports: [CommonModule, LoginRoutingModule, FormsModule, NzFormModule, NzInputModule, NzButtonModule, NzIconModule]
+})
+export class LoginModule {}
diff --git a/zeppelin-web-angular/src/app/pages/workspace/home/home-routing.module.ts b/zeppelin-web-angular/src/app/pages/workspace/home/home-routing.module.ts
new file mode 100644
index 00000000000..23a345f025a
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/home/home-routing.module.ts
@@ -0,0 +1,29 @@
+/*
+ * Licensed 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 { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { HomeComponent } from './home.component';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: HomeComponent
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class HomeRoutingModule {}
diff --git a/zeppelin-web-angular/src/app/pages/workspace/home/home.component.html b/zeppelin-web-angular/src/app/pages/workspace/home/home.component.html
new file mode 100644
index 00000000000..5a26044c970
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/home/home.component.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+ Welcome to Zeppelin!
+
+ Zeppelin is web-based notebook that enables interactive data analytics.
+ You can make beautiful data-driven, interactive, collaborative document with SQL, code and even more!
+
+
+
diff --git a/zeppelin-web-angular/src/app/pages/workspace/home/home.component.less b/zeppelin-web-angular/src/app/pages/workspace/home/home.component.less
new file mode 100644
index 00000000000..3f79862ddc6
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/home/home.component.less
@@ -0,0 +1,37 @@
+/*
+ * Licensed 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 'theme-mixin';
+
+.themeMixin({
+ .content {
+ margin: 12px;
+ border: 1px solid @border-color-base;
+ padding: 24px;
+ background-color: @component-background;
+ position: relative;
+ background-image: url(../../../../assets/images/zeppelin_svg_logo_bg.svg);
+ background-repeat: no-repeat;
+ background-position: right bottom;
+ }
+ .welcome {
+ margin-bottom: 12px;
+ }
+ .more-info {
+ h3 {
+ margin-top: 0.5em;
+ }
+ }
+ .refresh-note {
+ margin-left: 6px
+ }
+});
diff --git a/zeppelin-web-angular/src/app/pages/workspace/home/home.component.ts b/zeppelin-web-angular/src/app/pages/workspace/home/home.component.ts
new file mode 100644
index 00000000000..ecc40995d68
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/home/home.component.ts
@@ -0,0 +1,48 @@
+/*
+ * Licensed 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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+
+import { MessageListener, MessageListenersManager } from '@zeppelin/core';
+import { OP } from '@zeppelin/sdk';
+import { MessageService, TicketService } from '@zeppelin/services';
+
+@Component({
+ selector: 'zeppelin-home',
+ templateUrl: './home.component.html',
+ styleUrls: ['./home.component.less'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class HomeComponent extends MessageListenersManager implements OnInit {
+ loading = false;
+
+ reloadNoteList() {
+ this.messageService.reloadAllNotesFromRepo();
+ this.loading = true;
+ }
+
+ @MessageListener(OP.NOTES_INFO)
+ getNotes() {
+ this.loading = false;
+ this.cdr.markForCheck();
+ }
+
+ constructor(
+ public ticketService: TicketService,
+ public messageService: MessageService,
+ private cdr: ChangeDetectorRef
+ ) {
+ super(messageService);
+ }
+
+ ngOnInit() {}
+}
diff --git a/zeppelin-web-angular/src/app/pages/workspace/home/home.module.ts b/zeppelin-web-angular/src/app/pages/workspace/home/home.module.ts
new file mode 100644
index 00000000000..24e59a71853
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/home/home.module.ts
@@ -0,0 +1,27 @@
+/*
+ * Licensed 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 { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+
+import { NzGridModule, NzIconModule, NzToolTipModule } from 'ng-zorro-antd';
+
+import { ShareModule } from '@zeppelin/share';
+
+import { HomeRoutingModule } from './home-routing.module';
+import { HomeComponent } from './home.component';
+
+@NgModule({
+ declarations: [HomeComponent],
+ imports: [CommonModule, HomeRoutingModule, NzGridModule, NzIconModule, NzToolTipModule, ShareModule]
+})
+export class HomeModule {}
diff --git a/zeppelin-web-angular/src/app/pages/workspace/interpreter/create-repository-modal/create-repository-modal.component.html b/zeppelin-web-angular/src/app/pages/workspace/interpreter/create-repository-modal/create-repository-modal.component.html
new file mode 100644
index 00000000000..57a0b6339d7
--- /dev/null
+++ b/zeppelin-web-angular/src/app/pages/workspace/interpreter/create-repository-modal/create-repository-modal.component.html
@@ -0,0 +1,158 @@
+
+
+