diff --git a/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_black.png b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_black.png
new file mode 100644
index 0000000000..d3c6dc56c2
Binary files /dev/null and b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_black.png differ
diff --git a/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_white.png b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_white.png
new file mode 100644
index 0000000000..72b2fe470a
Binary files /dev/null and b/src/Umbraco.Web.UI.Client/src/assets/img/application/logo_white.png differ
diff --git a/src/Umbraco.Web.UI.Client/src/assets/img/installer.jpg b/src/Umbraco.Web.UI.Client/src/assets/img/installer.jpg
new file mode 100644
index 0000000000..4a48ed831a
Binary files /dev/null and b/src/Umbraco.Web.UI.Client/src/assets/img/installer.jpg differ
diff --git a/src/Umbraco.Web.UI.Client/src/install.loader.js b/src/Umbraco.Web.UI.Client/src/install.loader.js
new file mode 100644
index 0000000000..bf4a8e787d
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/install.loader.js
@@ -0,0 +1,21 @@
+yepnope({
+
+ load: [
+ 'lib/jquery/jquery-2.0.3.min.js',
+
+ /* 1.1.5 */
+ 'lib/angular/1.1.5/angular.min.js',
+ 'lib/angular/1.1.5/angular-cookies.min.js',
+ 'lib/angular/1.1.5/angular-mobile.min.js',
+ 'lib/angular/1.1.5/angular-mocks.js',
+ 'lib/angular/1.1.5/angular-sanitize.min.js',
+ 'lib/underscore/underscore.js',
+ 'js/umbraco.installer.js'
+ ],
+
+ complete: function () {
+ jQuery(document).ready(function () {
+ angular.bootstrap(document, ['umbraco.install']);
+ });
+ }
+});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.controller.js b/src/Umbraco.Web.UI.Client/src/installer/installer.controller.js
new file mode 100644
index 0000000000..b2e4c4f595
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/installer.controller.js
@@ -0,0 +1,19 @@
+angular.module("umbraco.install").controller("Umbraco.InstallerController",
+ function($scope, installerService){
+
+ $scope.stepIndex = 0;
+ installerService.init();
+ $scope.installer = installerService.status;
+
+ $scope.forward = function(){
+ installerService.forward();
+ };
+
+ $scope.backward = function(){
+ installerService.backward();
+ };
+
+ $scope.install = function(){
+ installerService.install();
+ };
+});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.html b/src/Umbraco.Web.UI.Client/src/installer/installer.html
new file mode 100644
index 0000000000..601b2e8852
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/installer.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+ Install Umbraco
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js
new file mode 100644
index 0000000000..12b316904e
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js
@@ -0,0 +1,101 @@
+angular.module("umbraco.install").factory('installerService', function($q, $timeout){
+
+ var _status = {
+ index: 0,
+ current: undefined,
+ steps: undefined
+ };
+
+ var _installerModel = {};
+ var service = {
+
+ status : _status,
+ getSteps : function(){
+ var deferred = $q.defer();
+
+ var s = [
+ {
+ name: "User",
+ view: "user",
+ description: "Configuring your user account",
+ completed: false
+ },
+ {
+ name: "Database",
+ view: "database",
+ description: "Setting up the system database",
+ completed: false
+ },
+ {
+ name: "Packages",
+ view: "packages",
+ description: "Installing a staterkit",
+ completed: false
+ }
+ ];
+
+ deferred.resolve(s);
+ return deferred.promise;
+ },
+
+ init : function(){
+ if(!_status.all){
+ service.getSteps().then(function(steps){
+ service.status.steps = steps;
+ service.status.index = 0;
+ service.gotoStep(0);
+ });
+ }
+ },
+
+ gotoStep : function(index){
+ var step = service.status.steps[index];
+
+ if(step.view.indexOf(".html") < 0){
+ step.view = step.view + ".html";
+ }
+
+ if(step.view.indexOf("/") < 0){
+ step.view = "views/install/" + step.view;
+ }
+
+ if(!step.model){
+ step.model = {};
+ }
+
+ service.status.index = index;
+ service.status.current = step;
+ },
+
+ storeCurrentStep : function(){
+ _installerModel[service.status.current.name] = service.status.current.model;
+ },
+
+ forward : function(){
+ service.storeCurrentStep();
+ service.status.index++;
+ service.gotoStep(service.status.index);
+ },
+
+ backwards : function(){
+ service.storeCurrentStep();
+ service.gotoStep(service.status.index--);
+ },
+
+ install : function(){
+ service.storeCurrentStep();
+ service.status.current = undefined;
+
+
+ _.each(service.status.steps, function(step){
+ $timeout(function(){
+ step.completed = true;
+ }, 2000);
+ });
+
+ //post the installer model to somewhere...
+ }
+ };
+
+ return service;
+});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js b/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js
new file mode 100644
index 0000000000..7ee3a29383
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js
@@ -0,0 +1,3 @@
+angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseController", function(){
+ alert("we are in your database");
+});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/database.html b/src/Umbraco.Web.UI.Client/src/installer/steps/database.html
new file mode 100644
index 0000000000..4c0b1d98f0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/steps/database.html
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/packages.html b/src/Umbraco.Web.UI.Client/src/installer/steps/packages.html
new file mode 100644
index 0000000000..ed769e7484
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/steps/packages.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/user.controller.js b/src/Umbraco.Web.UI.Client/src/installer/steps/user.controller.js
new file mode 100644
index 0000000000..441c3177a8
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/steps/user.controller.js
@@ -0,0 +1,12 @@
+angular.module("umbraco.install").controller("Umbraco.Install.UserController", function($scope, installerService){
+
+ $scope.validateAndInstall = function(){
+ installerService.install();
+ };
+
+
+ $scope.validateAndForward = function(){
+ installerService.forward();
+ };
+
+});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/user.html b/src/Umbraco.Web.UI.Client/src/installer/steps/user.html
new file mode 100644
index 0000000000..f88b875911
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/installer/steps/user.html
@@ -0,0 +1,48 @@
+
+
Install Umbraco 7
+
+
Enter your name, email and password to install Umbraco 7 with its default settings, alternatively you can customize your installation
+
+
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/less/installer.less b/src/Umbraco.Web.UI.Client/src/less/installer.less
new file mode 100644
index 0000000000..28630898e5
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/less/installer.less
@@ -0,0 +1,154 @@
+// Core variables and mixins
+@import "fonts.less"; // Loading fonts
+@import "variables.less"; // Modify this for custom colors, font-sizes, etc
+@import "mixins.less";
+@import "buttons.less";
+@import "forms.less";
+
+// Grid system and page structure
+@import "../../lib/bootstrap/less/scaffolding.less";
+@import "../../lib/bootstrap/less/grid.less";
+@import "../../lib/bootstrap/less/layouts.less";
+
+
+
+html {
+ background: url('../img/installer.jpg') no-repeat center center fixed;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ width: 100%;
+
+ font-family: @baseFontFamily;
+ font-size: @baseFontSize;
+ line-height: @baseLineHeight;
+ color: @textColor;
+
+ vertical-align: center;
+ text-align: center;
+}
+
+#logo{
+ position: absolute;
+ top: 20px;
+ left: 20px;
+ opacity: 0.8
+}
+
+#installer{
+ margin: auto;
+ background: rgba(255, 255, 255, 1);
+ height: 400px;
+}
+
+input.ng-dirty.ng-invalid{border-color: #b94a48; color: #b94a48;}
+
+.disabled{
+ opacity: 0.6;
+}
+
+.controls{
+ text-align: left
+}
+
+.controls small{display: block; color: @gray;}
+
+.absolute-center {
+ margin: auto;
+ position: absolute;
+ top: 0; left: 0; bottom: 0; right: 0;
+}
+
+.umb-loader{
+background-color: @blue;
+margin-top:0;
+margin-left:-100%;
+-moz-animation-name:bounce_loadingProgressG;
+-moz-animation-duration:1s;
+-moz-animation-iteration-count:infinite;
+-moz-animation-timing-function:linear;
+-webkit-animation-name:bounce_loadingProgressG;
+-webkit-animation-duration:1s;
+-webkit-animation-iteration-count:infinite;
+-webkit-animation-timing-function:linear;
+-ms-animation-name:bounce_loadingProgressG;
+-ms-animation-duration:1s;
+-ms-animation-iteration-count:infinite;
+-ms-animation-timing-function:linear;
+-o-animation-name:bounce_loadingProgressG;
+-o-animation-duration:1s;
+-o-animation-iteration-count:infinite;
+-o-animationtiming-function:linear;
+animation-name:bounce_loadingProgressG;
+animation-duration:1s;
+animation-iteration-count:infinite;
+animation-timing-function:linear;
+width:100%;
+height:1px;
+}
+
+
+ @-moz-keyframes bounce_loadingProgressG{
+ 0%{
+ margin-left:-100%;
+ }
+
+ 100%{
+ margin-left:100%;
+ }
+
+ }
+
+ @-webkit-keyframes bounce_loadingProgressG{
+ 0%{
+ margin-left:-100%;
+ }
+
+ 100%{
+ margin-left:100%;
+ }
+
+ }
+
+ @-ms-keyframes bounce_loadingProgressG{
+ 0%{
+ margin-left:-100%;
+ }
+
+ 100%{
+ margin-left:100%;
+ }
+
+ }
+
+ @-o-keyframes bounce_loadingProgressG{
+ 0%{
+ margin-left:-100%;
+ }
+
+ 100%{
+ margin-left:100%;
+ }
+
+ }
+
+ @keyframes bounce_loadingProgressG{
+ 0%{
+ margin-left:-100%;
+ }
+ 100%{
+ margin-left:100%;
+ }
+}
+
+//loader defaults
+.umb-loader{
+ height: 10px; margin: 10px 10px 10px 10px;
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI/Umbraco/js/install.js b/src/Umbraco.Web.UI/Umbraco/js/install.js
new file mode 100644
index 0000000000..41aab12c80
--- /dev/null
+++ b/src/Umbraco.Web.UI/Umbraco/js/install.js
@@ -0,0 +1,30 @@
+yepnope({
+
+ load: [
+ 'lib/jquery/jquery-2.0.3.min.js',
+
+ /* 1.1.5 */
+ 'lib/angular/1.1.5/angular.min.js',
+ 'lib/angular/1.1.5/angular-cookies.min.js',
+ 'lib/angular/1.1.5/angular-mobile.min.js',
+ 'lib/angular/1.1.5/angular-mocks.js',
+ 'lib/angular/1.1.5/angular-sanitize.min.js',
+ 'lib/underscore/underscore.js',
+ 'js/umbraco.servervariables.js',
+ 'js/app.dev.js'
+ ],
+
+ complete: function () {
+ jQuery(document).ready(function () {
+
+ angular.module('umbraco.install', [
+ 'umbraco.resources',
+ 'umbraco.services',
+ 'umbraco.httpbackend',
+ 'ngMobile'
+ ]);
+
+ angular.bootstrap(document, ['umbraco.install']);
+ });
+ }
+});
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI/Umbraco/js/install.loader.js b/src/Umbraco.Web.UI/Umbraco/js/install.loader.js
new file mode 100644
index 0000000000..bf4a8e787d
--- /dev/null
+++ b/src/Umbraco.Web.UI/Umbraco/js/install.loader.js
@@ -0,0 +1,21 @@
+yepnope({
+
+ load: [
+ 'lib/jquery/jquery-2.0.3.min.js',
+
+ /* 1.1.5 */
+ 'lib/angular/1.1.5/angular.min.js',
+ 'lib/angular/1.1.5/angular-cookies.min.js',
+ 'lib/angular/1.1.5/angular-mobile.min.js',
+ 'lib/angular/1.1.5/angular-mocks.js',
+ 'lib/angular/1.1.5/angular-sanitize.min.js',
+ 'lib/underscore/underscore.js',
+ 'js/umbraco.installer.js'
+ ],
+
+ complete: function () {
+ jQuery(document).ready(function () {
+ angular.bootstrap(document, ['umbraco.install']);
+ });
+ }
+});
\ No newline at end of file