GUI starting point

Change-Id: Ic7d23bfce0307c4b7cfc9fad9fb5834286ee195c
diff --git a/src/app/hello.html b/src/app/hello.html
new file mode 100644
index 0000000..2ec8382
--- /dev/null
+++ b/src/app/hello.html
@@ -0,0 +1 @@
+<h1>{{ hello }}</h1>
\ No newline at end of file
diff --git a/src/app/hello.spec.ts b/src/app/hello.spec.ts
new file mode 100644
index 0000000..7e3b2cc
--- /dev/null
+++ b/src/app/hello.spec.ts
@@ -0,0 +1,22 @@
+/// <reference path="../../typings/index.d.ts"/>
+
+import {HelloComponent} from './hello';
+import {TestBed, async} from '@angular/core/testing';
+
+describe('hello component', () => {
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [
+        HelloComponent
+      ]
+    });
+    TestBed.compileComponents();
+  }));
+
+  it('should render hello world', () => {
+    const fixture = TestBed.createComponent(HelloComponent);
+    fixture.detectChanges();
+    const hello = fixture.nativeElement;
+    expect(hello.querySelector('h1').textContent).toBe('Hello World!');
+  });
+});
diff --git a/src/app/hello.ts b/src/app/hello.ts
new file mode 100644
index 0000000..9f42916
--- /dev/null
+++ b/src/app/hello.ts
@@ -0,0 +1,13 @@
+import {Component} from '@angular/core';
+
+@Component({
+  selector: 'fountain-app',
+  template: require('./hello.html')
+})
+export class HelloComponent {
+  public hello: string;
+
+  constructor() {
+    this.hello = 'Hello World!';
+  }
+}
diff --git a/src/app/index.ts b/src/app/index.ts
new file mode 100644
index 0000000..5f02fe6
--- /dev/null
+++ b/src/app/index.ts
@@ -0,0 +1,18 @@
+import {NgModule} from '@angular/core';
+import {BrowserModule} from '@angular/platform-browser';
+import {routing, RootComponent} from './routes';
+
+import {HelloComponent} from './hello';
+
+@NgModule({
+  imports: [
+    BrowserModule,
+    routing
+  ],
+  declarations: [
+    RootComponent,
+    HelloComponent
+  ],
+  bootstrap: [RootComponent]
+})
+export class AppModule {}
diff --git a/src/app/routes.ts b/src/app/routes.ts
new file mode 100644
index 0000000..9a197e7
--- /dev/null
+++ b/src/app/routes.ts
@@ -0,0 +1,20 @@
+/// <reference path="../../typings/index.d.ts"/>
+
+import {Component} from '@angular/core';
+import {RouterModule, Routes} from '@angular/router';
+import {HelloComponent} from './hello';
+
+@Component({
+  selector: 'fountain-root',
+  template: '<router-outlet></router-outlet>'
+})
+export class RootComponent {}
+
+export const routes: Routes = [
+  {
+    path: '',
+    component: HelloComponent
+  }
+];
+
+export const routing = RouterModule.forRoot(routes);
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000..2d0e805
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+  <head>
+    <base href="/">
+    <meta charset="utf-8">
+    <title>FountainJS</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width">
+    <link rel="icon" type="image/png" href="http://fountainjs.io/assets/imgs/fountain.png" />
+  </head>
+
+  <body>
+    <fountain-root>Loading...</fountain-root>
+  </body>
+</html>
diff --git a/src/index.scss b/src/index.scss
new file mode 100644
index 0000000..f1df96a
--- /dev/null
+++ b/src/index.scss
@@ -0,0 +1,3 @@
+body {
+  background-color: lightgrey;
+}
diff --git a/src/index.spec.js b/src/index.spec.js
new file mode 100644
index 0000000..3f4ad63
--- /dev/null
+++ b/src/index.spec.js
@@ -0,0 +1,20 @@
+Error.stackTraceLimit = Infinity;
+
+require('core-js/client/shim');
+
+require('@angular/common');
+require('rxjs');
+
+require('zone.js/dist/zone');
+require('zone.js/dist/long-stack-trace-zone');
+require('zone.js/dist/proxy');
+require('zone.js/dist/sync-test');
+require('zone.js/dist/jasmine-patch');
+require('zone.js/dist/async-test');
+require('zone.js/dist/fake-async-test');
+const context = require.context('./app', true, /\.(js|ts|tsx)$/);
+context.keys().forEach(context);
+const testing = require('@angular/core/testing');
+const testingBrowser = require('@angular/platform-browser-dynamic/testing');
+
+testing.TestBed.initTestEnvironment(testingBrowser.BrowserDynamicTestingModule, testingBrowser.platformBrowserDynamicTesting());
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..f7b360a
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,23 @@
+/// <reference path="../typings/index.d.ts"/>
+
+import 'core-js/client/shim';
+import 'zone.js/dist/zone';
+
+import '@angular/common';
+import 'rxjs';
+
+import './index.scss';
+
+import {enableProdMode} from '@angular/core';
+import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
+import {AppModule} from './app';
+
+declare var process: any;
+if (process.env.NODE_ENV === 'production') {
+  enableProdMode();
+} else {
+  Error['stackTraceLimit'] = Infinity; // tslint:disable-line:no-string-literal
+  require('zone.js/dist/long-stack-trace-zone'); // tslint:disable-line:no-var-requires
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule);