You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@senssoft.apache.org by ar...@apache.org on 2016/10/21 16:12:40 UTC

[47/48] incubator-senssoft-tap git commit: Endpoints updates for front end connections

Endpoints updates for front end connections


Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/9cd21f5b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/9cd21f5b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/9cd21f5b

Branch: refs/heads/master
Commit: 9cd21f5bb1bfc9d5eb139d771e19b6a8ced63b54
Parents: 39ef689
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Tue Oct 11 15:04:26 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Tue Oct 11 15:04:26 2016 -0400

----------------------------------------------------------------------
 .gitignore                                      |   2 +
 app_mgr/__init__.py                             |   1 +
 app_mgr/admin.py                                |   1 +
 app_mgr/apps.py                                 |   1 +
 app_mgr/distillviews.py                         |  15 +
 app_mgr/migrations/0001_initial.py              |   1 +
 app_mgr/migrations/0002_membership_is_admin.py  |   1 +
 app_mgr/migrations/0003_auto_20160629_0112.py   |   1 +
 app_mgr/migrations/0004_auto_20160629_0252.py   |   1 +
 app_mgr/models.py                               |  14 -
 app_mgr/permissions.py                          |   1 +
 app_mgr/serializers.py                          |   1 +
 app_mgr/signals/handlers.py                     |   1 +
 app_mgr/templates/index.html                    |  22 +
 app_mgr/templates/main.html                     |  22 +
 app_mgr/templates/registration/login.html       |   1 +
 app_mgr/templates/registration/register.html    |   1 +
 .../registration/reset_password_confirm.html    |   1 +
 .../registration/reset_password_done.html       |   1 +
 .../registration/reset_password_email.html      |   1 +
 .../registration/reset_password_form.html       |   1 +
 app_mgr/templates/user_profile.html             |   1 +
 app_mgr/templates/userpage.html                 |   1 +
 app_mgr/tests.py                                |  14 -
 app_mgr/urls.py                                 |   3 +-
 app_mgr/views.py                                |   1 +
 public/actions/app.js                           |   3 +-
 public/components/AppProfile.js                 |  40 ++
 public/components/AppResults.jsx                |  90 ++--
 public/components/Profile.js                    |  39 ++
 public/components/Settings.js                   |  53 +++
 public/components/UserProfile.js                |  30 ++
 public/components/UserSettings.js               |  25 ++
 public/components/visualizations/Counts.jsx     |   2 +-
 public/containers/App.js                        |  40 ++
 requirements.txt                                |   1 +
 semantic.json                                   |   2 +-
 semantic/src/definitions/modules/accordion.less | 438 +++++++++----------
 semantic/src/definitions/modules/dimmer.js      |   5 +-
 semantic/src/definitions/modules/dropdown.less  |   2 +-
 semantic/src/definitions/modules/shape.js       |  32 +-
 tap/settings.py                                 | 135 ++++++
 tap/settings/archive/secret2.py                 |  12 +
 tap/settings/archive/settings2.py               | 135 ++++++
 tap/settings/dev.py                             |   3 +-
 tap/settings/production.py                      |   1 +
 tap/settings/settings.py                        | 181 ++++++++
 tap/urls.py                                     |  10 +-
 tap/wsgi.py                                     |   1 +
 templates/main.html                             |  22 +
 vagrant/settings.py                             | 135 ++++++
 51 files changed, 1249 insertions(+), 299 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 2c1979d..9df8927 100755
--- a/.gitignore
+++ b/.gitignore
@@ -26,5 +26,7 @@ build
 static/*
 !static/admin/
 
+archive/*
+
 /public/neon_counts.js
 /public/neon_graph.js

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/__init__.py
----------------------------------------------------------------------
diff --git a/app_mgr/__init__.py b/app_mgr/__init__.py
index f6f9a61..8df9d62 100644
--- a/app_mgr/__init__.py
+++ b/app_mgr/__init__.py
@@ -12,4 +12,5 @@
 # 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.
+
 default_app_config = 'app_mgr.apps.AppMgrConfig'

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/admin.py
----------------------------------------------------------------------
diff --git a/app_mgr/admin.py b/app_mgr/admin.py
index 023c186..1b519a4 100644
--- a/app_mgr/admin.py
+++ b/app_mgr/admin.py
@@ -12,6 +12,7 @@
 # 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.
+
 from django.contrib import admin
 
 from django.contrib.contenttypes.admin import GenericTabularInline

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/apps.py
----------------------------------------------------------------------
diff --git a/app_mgr/apps.py b/app_mgr/apps.py
index b9e48b3..dd4b7e6 100644
--- a/app_mgr/apps.py
+++ b/app_mgr/apps.py
@@ -12,6 +12,7 @@
 # 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.
+
 from django.apps import AppConfig
 
 class AppMgrConfig(AppConfig):

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/distillviews.py
----------------------------------------------------------------------
diff --git a/app_mgr/distillviews.py b/app_mgr/distillviews.py
index 080b0f2..c021819 100644
--- a/app_mgr/distillviews.py
+++ b/app_mgr/distillviews.py
@@ -1,3 +1,18 @@
+# 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.
+
 from django.shortcuts import render, redirect, render_to_response
 from django.http import HttpResponseRedirect, HttpResponse
 from django.contrib.sites.shortcuts import get_current_site

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0001_initial.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0001_initial.py b/app_mgr/migrations/0001_initial.py
index 3b1e58a..c3bf762 100644
--- a/app_mgr/migrations/0001_initial.py
+++ b/app_mgr/migrations/0001_initial.py
@@ -12,6 +12,7 @@
 # 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.
+
 # -*- coding: utf-8 -*-
 # Generated by Django 1.9.7 on 2016-06-23 22:51
 from __future__ import unicode_literals

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0002_membership_is_admin.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0002_membership_is_admin.py b/app_mgr/migrations/0002_membership_is_admin.py
index 718ad4a..59c1cb8 100644
--- a/app_mgr/migrations/0002_membership_is_admin.py
+++ b/app_mgr/migrations/0002_membership_is_admin.py
@@ -12,6 +12,7 @@
 # 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.
+
 # -*- coding: utf-8 -*-
 # Generated by Django 1.9.7 on 2016-06-28 04:39
 from __future__ import unicode_literals

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0003_auto_20160629_0112.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0003_auto_20160629_0112.py b/app_mgr/migrations/0003_auto_20160629_0112.py
index 2207716..6a0fe37 100644
--- a/app_mgr/migrations/0003_auto_20160629_0112.py
+++ b/app_mgr/migrations/0003_auto_20160629_0112.py
@@ -12,6 +12,7 @@
 # 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.
+
 # -*- coding: utf-8 -*-
 # Generated by Django 1.9.7 on 2016-06-29 05:12
 from __future__ import unicode_literals

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0004_auto_20160629_0252.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0004_auto_20160629_0252.py b/app_mgr/migrations/0004_auto_20160629_0252.py
index d3b0a34..04629c6 100644
--- a/app_mgr/migrations/0004_auto_20160629_0252.py
+++ b/app_mgr/migrations/0004_auto_20160629_0252.py
@@ -12,6 +12,7 @@
 # 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.
+
 # -*- coding: utf-8 -*-
 # Generated by Django 1.9.7 on 2016-06-29 06:52
 from __future__ import unicode_literals

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/models.py
----------------------------------------------------------------------
diff --git a/app_mgr/models.py b/app_mgr/models.py
old mode 100644
new mode 100755
index f2d084e..ca7d735
--- a/app_mgr/models.py
+++ b/app_mgr/models.py
@@ -1,17 +1,3 @@
-# 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.
 from django.db import models
 from django.conf import settings
 from django.contrib.postgres.fields import JSONField

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/permissions.py
----------------------------------------------------------------------
diff --git a/app_mgr/permissions.py b/app_mgr/permissions.py
index 2cc7477..180fe43 100644
--- a/app_mgr/permissions.py
+++ b/app_mgr/permissions.py
@@ -12,6 +12,7 @@
 # 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.
+
 from rest_framework.permissions import DjangoObjectPermissions
 from django.http import Http404
 from guardian.shortcuts import get_perms, get_perms_for_model, get_users_with_perms

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/serializers.py
----------------------------------------------------------------------
diff --git a/app_mgr/serializers.py b/app_mgr/serializers.py
index f7fcc07..2e8bd0e 100644
--- a/app_mgr/serializers.py
+++ b/app_mgr/serializers.py
@@ -12,6 +12,7 @@
 # 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.
+
 from rest_framework import serializers
 
 from django.contrib.auth import get_user_model

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/signals/handlers.py
----------------------------------------------------------------------
diff --git a/app_mgr/signals/handlers.py b/app_mgr/signals/handlers.py
index 91fe1c1..20a4b2a 100644
--- a/app_mgr/signals/handlers.py
+++ b/app_mgr/signals/handlers.py
@@ -12,6 +12,7 @@
 # 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.
+
 from django.contrib.auth.models import Group
 
 from django.conf import settings

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/index.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/index.html b/app_mgr/templates/index.html
new file mode 100644
index 0000000..fc706b4
--- /dev/null
+++ b/app_mgr/templates/index.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>Tap Home</title>
+    {% load staticfiles %}
+    <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+    <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
+    <script src="{% static "semantic.min.js" %}"></script>
+    <link href="{% static "styles.min.css" %}" rel="stylesheet">
+</head>
+<body>
+    <div id="main-container">
+        <div id="react-container" />
+    </div>
+    <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+    <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+    <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+    <script src="{% static "app.js" %}"></script>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/main.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/main.html b/app_mgr/templates/main.html
new file mode 100644
index 0000000..fc706b4
--- /dev/null
+++ b/app_mgr/templates/main.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>Tap Home</title>
+    {% load staticfiles %}
+    <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+    <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
+    <script src="{% static "semantic.min.js" %}"></script>
+    <link href="{% static "styles.min.css" %}" rel="stylesheet">
+</head>
+<body>
+    <div id="main-container">
+        <div id="react-container" />
+    </div>
+    <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+    <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+    <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+    <script src="{% static "app.js" %}"></script>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/login.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/login.html b/app_mgr/templates/registration/login.html
index 684ea00..79f1676 100755
--- a/app_mgr/templates/registration/login.html
+++ b/app_mgr/templates/registration/login.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "main.html" %}
 
 {% block container %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/register.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/register.html b/app_mgr/templates/registration/register.html
index 87cd580..5039fcf 100755
--- a/app_mgr/templates/registration/register.html
+++ b/app_mgr/templates/registration/register.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "main.html" %}
 
 {% block container %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_confirm.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_confirm.html b/app_mgr/templates/registration/reset_password_confirm.html
index 4c73a62..4435740 100644
--- a/app_mgr/templates/registration/reset_password_confirm.html
+++ b/app_mgr/templates/registration/reset_password_confirm.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "main.html" %}
 {% block title %}Reset Password{% endblock %}
 {% block container %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_done.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_done.html b/app_mgr/templates/registration/reset_password_done.html
index 1077f9a..941bdf4 100644
--- a/app_mgr/templates/registration/reset_password_done.html
+++ b/app_mgr/templates/registration/reset_password_done.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "main.html" %}
 
 {% block title %}Password Reset In Progress{% endblock %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_email.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_email.html b/app_mgr/templates/registration/reset_password_email.html
index 4f74fb6..8ce89c7 100644
--- a/app_mgr/templates/registration/reset_password_email.html
+++ b/app_mgr/templates/registration/reset_password_email.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% autoescape off %}
 You're receiving this email because you requested a password reset for your user account at {{ site_name }}.
 

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_form.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_form.html b/app_mgr/templates/registration/reset_password_form.html
index 6eceae8..bb8175b 100644
--- a/app_mgr/templates/registration/reset_password_form.html
+++ b/app_mgr/templates/registration/reset_password_form.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "main.html" %}
 {% block title %}Reset Password{% endblock %}
 {% block container %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/user_profile.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/user_profile.html b/app_mgr/templates/user_profile.html
index 6d15eb6..bd8daed 100644
--- a/app_mgr/templates/user_profile.html
+++ b/app_mgr/templates/user_profile.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "userpage.html" %}
 
 {% block content %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/userpage.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/userpage.html b/app_mgr/templates/userpage.html
index 795a91b..700c8ff 100644
--- a/app_mgr/templates/userpage.html
+++ b/app_mgr/templates/userpage.html
@@ -14,6 +14,7 @@ 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.
 -->
+
 {% extends "page.html" %}
 
 {% block side_block %}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/tests.py
----------------------------------------------------------------------
diff --git a/app_mgr/tests.py b/app_mgr/tests.py
old mode 100644
new mode 100755
index c98fdeb..7ce503c
--- a/app_mgr/tests.py
+++ b/app_mgr/tests.py
@@ -1,17 +1,3 @@
-# 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.
 from django.test import TestCase
 
 # Create your tests here.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index 7992345..6698228 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -12,6 +12,7 @@
 # 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.
+
 """tap URL Configuration
 
 The `urlpatterns` list routes URLs to views. For more information please see:
@@ -52,7 +53,7 @@ urlpatterns = [
     url(r'^org/(?P<pk>[\d]+)/$', views.OrganizationInstanceView.as_view(), name='org-instance'),
     url(r'^app/(?P<pk>[\d]+)/$', views.ApplicationInstanceView.as_view(), name='app-instance'),
     
-    url(r'^app/(?P<pk>current+)/$', views.AliasListView.as_view(), name='alias-list'),
+    #url(r'^app/(?P<pk>current+)/$', views.AliasListView.as_view(), name='alias-list'),
 
     url(r'^appresults/(?P<appId>[0-9]{1,2})/(?P<searchType>\w+)/$', distillviews.app_results, name='app-results'),
     url(r'^appresults/(?P<appName>\w+)/(?P<searchType>\w+)/$', distillviews.app_results_byname, name='app-results'),

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 7ce3dfa..8973be8 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -12,6 +12,7 @@
 # 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.
+
 from django.shortcuts import render, redirect, render_to_response
 from django.http import HttpResponseRedirect, HttpResponse
 from django.contrib.auth.decorators import login_required

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/actions/app.js
----------------------------------------------------------------------
diff --git a/public/actions/app.js b/public/actions/app.js
index 7c1254e..3badb05 100644
--- a/public/actions/app.js
+++ b/public/actions/app.js
@@ -1,4 +1,5 @@
-import { REQUEST_APP, RECEIVE_APP, REQUEST_APP_UPDATE, CONFIRM_APP_UPDATE, REQUEST_APP_RESULTS, RECEIVE_APP_RESULTS } from '../constants/ActionTypes';
+import { REQUEST_APP, RECEIVE_APP, REQUEST_APP_UPDATE, CONFIRM_APP_UPDATE, REQUEST_APP_RESULTS, RECEIVE_APP_RESULTS } 
+	from '../constants/ActionTypes';
 
 export function fetchApp () {
   return { type : REQUEST_APP };

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/AppProfile.js
----------------------------------------------------------------------
diff --git a/public/components/AppProfile.js b/public/components/AppProfile.js
new file mode 100644
index 0000000..1615194
--- /dev/null
+++ b/public/components/AppProfile.js
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class AppProfile extends Component {
+  render () {
+    const { id, name, users } = this.props;
+
+    return (
+      <div className='ui text container'>
+        <div className='ui vertical basic page segment'>
+          <div className='ui large header'>
+            {name}
+          </div>
+          <Link to={`/app/${id}/settings`}>
+            <div className='ui brown button'>
+              Settings
+            </div>
+          </Link>
+          <Link to={`/app/${id}/results`}>
+            <div className='ui brown button'>
+              Results
+            </div>
+          </Link>
+        </div>
+
+        <Profile feed={['a', 1, 'c']} firstSide={users} firstType={'user'} />
+      </div>
+    );
+  }
+}
+
+AppProfile.propTypes = {
+  id : PropTypes.number,
+  name : PropTypes.string,
+  users : PropTypes.array,
+};
+
+export default AppProfile;

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/AppResults.jsx
----------------------------------------------------------------------
diff --git a/public/components/AppResults.jsx b/public/components/AppResults.jsx
index c8671f0..f5d3b84 100644
--- a/public/components/AppResults.jsx
+++ b/public/components/AppResults.jsx
@@ -9,14 +9,14 @@ class AppResults extends Component {
     this.state = {
       result : 'counts',
       metric : 'out_degree',
-      ethnicities : [1, 2, 3, 4, 5, 6, 7],
+      educationlevels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
       gender : 0,
       ab : false,
     };
   }
 
   componentDidMount() {
-    $('#ethnicity-accordion').accordion({
+    $('#education-accordion').accordion({
       collapsible : true,
     });
     $('#results-controls').accordion({
@@ -37,13 +37,13 @@ class AppResults extends Component {
       },
     });
 
-    $('.ui.ethnicity.checkbox').checkbox({
+    $('.ui.education.checkbox').checkbox({
       onChange : () => {
-        let ethnicities = [];
-        $('input[name=ethnicity]:checked').each((i, el) => {
-          ethnicities.push(+$(el).val());
+        let educationlevels = [];
+        $('input[name=education]:checked').each((i, el) => {
+          educationlevels.push(+$(el).val());
         });
-        this.setState({ ethnicities : ethnicities });
+        this.setState({ educationlevels : educationlevels });
       },
     });
 
@@ -93,55 +93,85 @@ class AppResults extends Component {
                     </div>
 
                     <div className='field'>
-                      <div id='ethnicity-accordion' className='accordion'>
+                      <div id='education-accordion' className='accordion'>
                         <div className='title'>
                           <i className='dropdown icon'></i>
-                          Ethnicity
+                          Highest Education Level
                         </div>
                         <div className='content'>
 
                           <div className='ui form'>
                             <div className='grouped fields'>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='1' defaultChecked></input>
-                                  <label>Asian</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='1' defaultChecked></input>
+                                  <label>No schooling completed</label>
                                 </div>
                               </div>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='2' defaultChecked></input>
-                                  <label>Pacific Islander</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='2' defaultChecked></input>
+                                  <label>Nursery school to 8th grade</label>
                                 </div>
                               </div>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='3' defaultChecked></input>
-                                  <label>African American/Of African Descent</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='3' defaultChecked></input>
+                                  <label>9th, 10th, or 11th grade</label>
                                 </div>
                               </div>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='4' defaultChecked></input>
-                                  <label>White/Caucasian</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='4' defaultChecked></input>
+                                  <label>12th grade, or no diploma</label>
                                 </div>
                               </div>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='5' defaultChecked></input>
-                                  <label>Native American</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='5' defaultChecked></input>
+                                  <label>High school graduate</label>
                                 </div>
                               </div>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='6' defaultChecked></input>
-                                  <label>Indian</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='6' defaultChecked></input>
+                                  <label>Some college credit</label>
                                 </div>
                               </div>
                               <div className='field'>
-                                <div className='ui ethnicity checkbox'>
-                                  <input type='checkbox' name='ethnicity' value='7' defaultChecked></input>
-                                  <label>Decline to State</label>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='7' defaultChecked></input>
+                                  <label>1 or more years of college</label>
+                                </div>
+                              </div>
+                              <div className='field'>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='8' defaultChecked></input>
+                                  <label>Associate degree</label>
+                                </div>
+                              </div>
+                              <div className='field'>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='9' defaultChecked></input>
+                                  <label>Bachelors degree</label>
+                                </div>
+                              </div>
+                              <div className='field'>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='10' defaultChecked></input>
+                                  <label>Masters degree</label>
+                                </div>
+                              </div>
+                              <div className='field'>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='11' defaultChecked></input>
+                                  <label>Professional degree</label>
+                                </div>
+                              </div>
+                              <div className='field'>
+                                <div className='ui education checkbox'>
+                                  <input type='checkbox' name='education' value='12' defaultChecked></input>
+                                  <label>Doctorate degree</label>
                                 </div>
                               </div>
                             </div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/Profile.js
----------------------------------------------------------------------
diff --git a/public/components/Profile.js b/public/components/Profile.js
new file mode 100644
index 0000000..528166a
--- /dev/null
+++ b/public/components/Profile.js
@@ -0,0 +1,39 @@
+import React, { Component, PropTypes } from 'react';
+
+import Feed from './Feed';
+import Sidebox from './Sidebox';
+
+class Profile extends Component {
+  render() {
+    const { feed, firstSide, secondSide, firstType, secondType } = this.props;
+
+    return(
+      <div className='ui padded grid'>
+        <div className='ten wide column'>
+          <Feed feed={feed} />
+        </div>
+
+        <div className='six wide column'>
+          <Sidebox type={firstType} content={firstSide} />
+          {(() => {
+            if (secondSide) {
+              return(
+                <Sidebox type={secondType} content={secondSide} />
+              );
+            }
+          })()}
+        </div>
+      </div>
+    );
+  }
+}
+
+Profile.propTypes = {
+  feed : PropTypes.array,
+  firstSide : PropTypes.array,
+  firstType : PropTypes.string,
+  secondSide : PropTypes.array,
+  secondType : PropTypes.string,
+};
+
+export default Profile;

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/Settings.js
----------------------------------------------------------------------
diff --git a/public/components/Settings.js b/public/components/Settings.js
new file mode 100644
index 0000000..0194d43
--- /dev/null
+++ b/public/components/Settings.js
@@ -0,0 +1,53 @@
+import React, { Component, PropTypes } from 'react';
+
+class Settings extends Component {
+  componentDidMount() {
+    let $settingsControls = $('#settings-menu .item');
+    $settingsControls.on('click', (e) => {
+      $settingsControls.removeClass('active');
+      $(e.target).addClass('active');
+    });
+  }
+
+  render() {
+    const { settings } = this.props;
+
+    return (
+      <div className='ui grid'>
+        <div className='four wide column'>
+          <div id='settings-menu' className='ui vertical fluid tabular menu'>
+            <a className='item active'>
+              Account
+            </a>
+            <a className='item'>
+              Notifications
+            </a>
+            <a className='item'>
+              Organizations
+            </a>
+          </div>
+        </div>
+
+        <div className='twelve wide stretched column'>
+          <div className='ui segment'>
+            <ul>
+              {Object.keys(settings).map((setting, index) => {
+                return (
+                  <li key={index}>
+                    {setting}, {settings[setting].toString()}
+                  </li>
+                );
+              })}
+            </ul>
+          </div>
+        </div>
+      </div>
+    );
+  }
+}
+
+Settings.propTypes = {
+  settings : PropTypes.object,
+};
+
+export default Settings;

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/UserProfile.js
----------------------------------------------------------------------
diff --git a/public/components/UserProfile.js b/public/components/UserProfile.js
new file mode 100644
index 0000000..384fe03
--- /dev/null
+++ b/public/components/UserProfile.js
@@ -0,0 +1,30 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class UserProfile extends Component {
+  render () {
+    const { email, orgs, apps } = this.props;
+
+    return (
+      <div className='ui text container'>
+        <div className='ui vertical basic page segment'>
+          <div className='ui large header'>
+            {`${email}'s Profile`}
+          </div>
+        </div>
+
+        <Profile feed={['a', 1, 'c']} firstSide={orgs} firstType={'org'} secondSide={apps} secondType={'app'} />
+      </div>
+    );
+  }
+}
+
+UserProfile.propTypes = {
+  email : PropTypes.string,
+  orgs : PropTypes.array,
+  apps : PropTypes.array,
+};
+
+export default UserProfile;

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/UserSettings.js
----------------------------------------------------------------------
diff --git a/public/components/UserSettings.js b/public/components/UserSettings.js
new file mode 100644
index 0000000..51dface
--- /dev/null
+++ b/public/components/UserSettings.js
@@ -0,0 +1,25 @@
+import React, { Component, PropTypes } from 'react';
+
+import Settings from './Settings';
+
+class UserSettings extends Component {
+  render () {
+    const { email, settings } = this.props;
+
+    return (
+      <div className='ui text container'>
+        <div className='ui large header'>
+          Settings for {email}
+        </div>
+        <Settings settings={settings} />
+      </div>
+    );
+  }
+}
+
+UserSettings.propTypes = {
+  email : PropTypes.string,
+  settings : PropTypes.object,
+};
+
+export default UserSettings;

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/visualizations/Counts.jsx
----------------------------------------------------------------------
diff --git a/public/components/visualizations/Counts.jsx b/public/components/visualizations/Counts.jsx
index a1a2d6e..1540878 100644
--- a/public/components/visualizations/Counts.jsx
+++ b/public/components/visualizations/Counts.jsx
@@ -100,7 +100,7 @@ function subset(data, filters) {
   preprocessData(data);
 
   var dataSubset = data.filter((p) => {
-    return (filters.gender === 0 || filters.gender == p.intake_data.demographics.Gender) && (filters.ethnicities.includes(+p.intake_data.demographics.Ethnicity));
+    return (filters.gender === 0 || filters.gender == p.intake_data.demographics.Gender) && (filters.educationlevels.includes(+p.intake_data.education["Most school completed"]));
   });
 
   var logs = {};

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/containers/App.js
----------------------------------------------------------------------
diff --git a/public/containers/App.js b/public/containers/App.js
new file mode 100644
index 0000000..5110ee0
--- /dev/null
+++ b/public/containers/App.js
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+
+class App extends Component {
+  render() {
+    const { children, id, name, settings, results, users } = this.props;
+
+    return(
+      <div>
+        {React.cloneElement(children, {
+          id,
+          name,
+          settings,
+          results,
+          users,
+        })}
+      </div>
+    );
+  }
+}
+
+App.propTypes = {
+  id : PropTypes.number,
+  name : PropTypes.string,
+  settings : PropTypes.object,
+  results : PropTypes.object,
+  users : PropTypes.array,
+};
+
+function mapStateToProps(state, ownProps) {
+  return {
+    id : state.app.id,
+    name : state.app.name,
+    settings : state.app.settings,
+    results : state.app.results,
+    users : state.app.users,
+  };
+}
+
+export default connect(mapStateToProps)(App);

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/requirements.txt
----------------------------------------------------------------------
diff --git a/requirements.txt b/requirements.txt
index befdd67..235fdb0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,3 +11,4 @@ psycopg2==2.6.1
 Pygments==2.1.3
 requests==2.10.0
 six==1.10.0
+django-webpack-loader==0.3.3

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic.json
----------------------------------------------------------------------
diff --git a/semantic.json b/semantic.json
index edb31cc..17c42f5 100644
--- a/semantic.json
+++ b/semantic.json
@@ -18,5 +18,5 @@
   "permission": false,
   "autoInstall": false,
   "rtl": false,
-  "version": "2.2.1"
+  "version": "2.2.2"
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/accordion.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/accordion.less b/semantic/src/definitions/modules/accordion.less
index eaf0776..835f490 100755
--- a/semantic/src/definitions/modules/accordion.less
+++ b/semantic/src/definitions/modules/accordion.less
@@ -1,219 +1,219 @@
-/*!
- * # Semantic UI - Accordion
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-
-/*******************************
-            Theme
-*******************************/
-
-@type    : 'module';
-@element : 'accordion';
-
-@import (multiple) '../../theme.config';
-
-/*******************************
-            Accordion
-*******************************/
-
-.ui.accordion,
-.ui.accordion .accordion {
-  max-width: 100%;
-}
-.ui.accordion .accordion {
-  margin: @childAccordionMargin;
-  padding: @childAccordionPadding;
-}
-
-/* Title */
-.ui.accordion .title,
-.ui.accordion .accordion .title {
-  cursor: pointer;
-}
-
-/* Default Styling */
-.ui.accordion .title:not(.ui) {
-  padding: @titlePadding;
-  font-family: @titleFont;
-  font-size: @titleFontSize;
-  color: @titleColor;
-}
-
-/* Content */
-.ui.accordion .title ~ .content,
-.ui.accordion .accordion .title ~ .content {
-  display: none;
-}
-
-/* Default Styling */
-.ui.accordion:not(.styled) .title ~ .content:not(.ui),
-.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {
-  margin: @contentMargin;
-  padding: @contentPadding;
-}
-.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {
-  padding-bottom: 0em;
-}
-
-/* Arrow */
-.ui.accordion .title .dropdown.icon,
-.ui.accordion .accordion .title .dropdown.icon {
-  display: @iconDisplay;
-  float: @iconFloat;
-  opacity: @iconOpacity;
-  width: @iconWidth;
-  height: @iconHeight;
-  margin: @iconMargin;
-  padding: @iconPadding;
-  font-size: @iconFontSize;
-  transition: @iconTransition;
-  vertical-align: @iconVerticalAlign;
-  transform: @iconTransform;
-}
-
-/*--------------
-    Coupling
----------------*/
-
-/* Menu */
-.ui.accordion.menu .item .title {
-  display: block;
-  padding: @menuTitlePadding;
-}
-.ui.accordion.menu .item .title > .dropdown.icon {
-  float: @menuIconFloat;
-  margin: @menuIconMargin;
-  transform: @menuIconTransform;
-}
-
-/* Header */
-.ui.accordion .ui.header .dropdown.icon {
-  font-size: @iconFontSize;
-  margin: @iconMargin;
-}
-
-/*******************************
-            States
-*******************************/
-
-.ui.accordion .active.title .dropdown.icon,
-.ui.accordion .accordion .active.title .dropdown.icon {
-  transform: @activeIconTransform;
-}
-
-.ui.accordion.menu .item .active.title > .dropdown.icon {
-  transform: @activeIconTransform;
-}
-
-/*******************************
-            Types
-*******************************/
-
-/*--------------
-     Styled
----------------*/
-
-.ui.styled.accordion {
-  width: @styledWidth;
-}
-
-.ui.styled.accordion,
-.ui.styled.accordion .accordion {
-  border-radius: @styledBorderRadius;
-  background: @styledBackground;
-  box-shadow: @styledBoxShadow;
-}
-.ui.styled.accordion .title,
-.ui.styled.accordion .accordion .title {
-  margin: @styledTitleMargin;
-  padding: @styledTitlePadding;
-  color: @styledTitleColor;
-  font-weight: @styledTitleFontWeight;
-  border-top: @styledTitleBorder;
-  transition: @styledTitleTransition;
-}
-.ui.styled.accordion > .title:first-child,
-.ui.styled.accordion .accordion .title:first-child {
-  border-top: none;
-}
-
-
-/* Content */
-.ui.styled.accordion .content,
-.ui.styled.accordion .accordion .content {
-  margin: @styledContentMargin;
-  padding: @styledContentPadding;
-}
-.ui.styled.accordion .accordion .content {
-  padding: @styledChildContentMargin;
-  padding: @styledChildContentPadding;
-}
-
-
-/* Hover */
-.ui.styled.accordion .title:hover,
-.ui.styled.accordion .active.title,
-.ui.styled.accordion .accordion .title:hover,
-.ui.styled.accordion .accordion .active.title {
-  background: @styledTitleHoverBackground;
-  color: @styledTitleHoverColor;
-}
-.ui.styled.accordion .accordion .title:hover,
-.ui.styled.accordion .accordion .active.title {
-  background: @styledHoverChildTitleBackground;
-  color: @styledHoverChildTitleColor;
-}
-
-
-/* Active */
-.ui.styled.accordion .active.title {
-  background: @styledActiveTitleBackground;
-  color: @styledActiveTitleColor;
-}
-.ui.styled.accordion .accordion .active.title {
-  background: @styledActiveChildTitleBackground;
-  color: @styledActiveChildTitleColor;
-}
-
-
-/*******************************
-            States
-*******************************/
-
-/*--------------
-     Active
----------------*/
-
-.ui.accordion .active.content,
-.ui.accordion .accordion .active.content {
-  display: block;
-}
-
-/*******************************
-           Variations
-*******************************/
-
-/*--------------
-     Fluid
----------------*/
-
-.ui.fluid.accordion,
-.ui.fluid.accordion .accordion {
-  width: 100%;
-}
-
-/*--------------
-     Inverted
----------------*/
-
-.ui.inverted.accordion .title:not(.ui) {
-  color: @invertedTitleColor;
-}
-
-.loadUIOverrides();
-
+/*!
+ * # Semantic UI - Accordion
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+            Theme
+*******************************/
+
+@type    : 'module';
+@element : 'accordion';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+            Accordion
+*******************************/
+
+.ui.accordion,
+.ui.accordion .accordion {
+  max-width: 100%;
+}
+.ui.accordion .accordion {
+  margin: @childAccordionMargin;
+  padding: @childAccordionPadding;
+}
+
+/* Title */
+.ui.accordion .title,
+.ui.accordion .accordion .title {
+  cursor: pointer;
+}
+
+/* Default Styling */
+.ui.accordion .title:not(.ui) {
+  padding: @titlePadding;
+  font-family: @titleFont;
+  font-size: @titleFontSize;
+  color: @titleColor;
+}
+
+/* Content */
+.ui.accordion .title ~ .content,
+.ui.accordion .accordion .title ~ .content {
+  display: none;
+}
+
+/* Default Styling */
+.ui.accordion:not(.styled) .title ~ .content:not(.ui),
+.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {
+  margin: @contentMargin;
+  padding: @contentPadding;
+}
+.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {
+  padding-bottom: 0em;
+}
+
+/* Arrow */
+.ui.accordion .title .dropdown.icon,
+.ui.accordion .accordion .title .dropdown.icon {
+  display: @iconDisplay;
+  float: @iconFloat;
+  opacity: @iconOpacity;
+  width: @iconWidth;
+  height: @iconHeight;
+  margin: @iconMargin;
+  padding: @iconPadding;
+  font-size: @iconFontSize;
+  transition: @iconTransition;
+  vertical-align: @iconVerticalAlign;
+  transform: @iconTransform;
+}
+
+/*--------------
+    Coupling
+---------------*/
+
+/* Menu */
+.ui.accordion.menu .item .title {
+  display: block;
+  padding: @menuTitlePadding;
+}
+.ui.accordion.menu .item .title > .dropdown.icon {
+  float: @menuIconFloat;
+  margin: @menuIconMargin;
+  transform: @menuIconTransform;
+}
+
+/* Header */
+.ui.accordion .ui.header .dropdown.icon {
+  font-size: @iconFontSize;
+  margin: @iconMargin;
+}
+
+/*******************************
+            States
+*******************************/
+
+.ui.accordion .active.title .dropdown.icon,
+.ui.accordion .accordion .active.title .dropdown.icon {
+  transform: @activeIconTransform;
+}
+
+.ui.accordion.menu .item .active.title > .dropdown.icon {
+  transform: @activeIconTransform;
+}
+
+/*******************************
+            Types
+*******************************/
+
+/*--------------
+     Styled
+---------------*/
+
+.ui.styled.accordion {
+  width: @styledWidth;
+}
+
+.ui.styled.accordion,
+.ui.styled.accordion .accordion {
+  border-radius: @styledBorderRadius;
+  background: @styledBackground;
+  box-shadow: @styledBoxShadow;
+}
+.ui.styled.accordion .title,
+.ui.styled.accordion .accordion .title {
+  margin: @styledTitleMargin;
+  padding: @styledTitlePadding;
+  color: @styledTitleColor;
+  font-weight: @styledTitleFontWeight;
+  border-top: @styledTitleBorder;
+  transition: @styledTitleTransition;
+}
+.ui.styled.accordion > .title:first-child,
+.ui.styled.accordion .accordion .title:first-child {
+  border-top: none;
+}
+
+
+/* Content */
+.ui.styled.accordion .content,
+.ui.styled.accordion .accordion .content {
+  margin: @styledContentMargin;
+  padding: @styledContentPadding;
+}
+.ui.styled.accordion .accordion .content {
+  padding: @styledChildContentMargin;
+  padding: @styledChildContentPadding;
+}
+
+
+/* Hover */
+.ui.styled.accordion .title:hover,
+.ui.styled.accordion .active.title,
+.ui.styled.accordion .accordion .title:hover,
+.ui.styled.accordion .accordion .active.title {
+  background: @styledTitleHoverBackground;
+  color: @styledTitleHoverColor;
+}
+.ui.styled.accordion .accordion .title:hover,
+.ui.styled.accordion .accordion .active.title {
+  background: @styledHoverChildTitleBackground;
+  color: @styledHoverChildTitleColor;
+}
+
+
+/* Active */
+.ui.styled.accordion .active.title {
+  background: @styledActiveTitleBackground;
+  color: @styledActiveTitleColor;
+}
+.ui.styled.accordion .accordion .active.title {
+  background: @styledActiveChildTitleBackground;
+  color: @styledActiveChildTitleColor;
+}
+
+
+/*******************************
+            States
+*******************************/
+
+/*--------------
+     Active
+---------------*/
+
+.ui.accordion .active.content,
+.ui.accordion .accordion .active.content {
+  display: block;
+}
+
+/*******************************
+           Variations
+*******************************/
+
+/*--------------
+     Fluid
+---------------*/
+
+.ui.fluid.accordion,
+.ui.fluid.accordion .accordion {
+  width: 100%;
+}
+
+/*--------------
+     Inverted
+---------------*/
+
+.ui.inverted.accordion .title:not(.ui) {
+  color: @invertedTitleColor;
+}
+
+.loadUIOverrides();
+

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/dimmer.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dimmer.js b/semantic/src/definitions/modules/dimmer.js
index 604141e..2feb915 100644
--- a/semantic/src/definitions/modules/dimmer.js
+++ b/semantic/src/definitions/modules/dimmer.js
@@ -83,6 +83,7 @@ $.fn.dimmer = function(parameters) {
             else {
               $dimmer = module.create();
             }
+            module.set.variation();
           }
         },
 
@@ -173,10 +174,6 @@ $.fn.dimmer = function(parameters) {
           var
             $element = $( settings.template.dimmer() )
           ;
-          if(settings.variation) {
-            module.debug('Creating dimmer with variation', settings.variation);
-            $element.addClass(settings.variation);
-          }
           if(settings.dimmerName) {
             module.debug('Creating named dimmer', settings.dimmerName);
             $element.addClass(settings.dimmerName);

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/dropdown.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dropdown.less b/semantic/src/definitions/modules/dropdown.less
index c726781..b968213 100755
--- a/semantic/src/definitions/modules/dropdown.less
+++ b/semantic/src/definitions/modules/dropdown.less
@@ -547,7 +547,7 @@ select.ui.dropdown {
   background: none transparent !important;
   border: none !important;
   box-shadow: none !important;
-  cursor: pointer;
+  cursor: text;
   top: 0em;
   left: 0em;
   width: 100%;

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/shape.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/shape.js b/semantic/src/definitions/modules/shape.js
index d86791a..d399046 100644
--- a/semantic/src/definitions/modules/shape.js
+++ b/semantic/src/definitions/modules/shape.js
@@ -244,6 +244,11 @@ $.fn.shape = function(parameters) {
             var
               $clone      = $module.clone().addClass(className.loading),
               $activeSide = $clone.find('.' + settings.className.active),
+              $nextSide   = (nextIndex)
+                ? $clone.find(selector.side).eq(nextIndex)
+                : ( $activeSide.next(selector.side).length > 0 )
+                  ? $activeSide.next(selector.side)
+                  : $clone.find(selector.side).first(),
               newWidth    = (settings.width == 'next')
                 ? $nextSide.outerWidth(true)
                 : (settings.width == 'initial')
@@ -253,12 +258,7 @@ $.fn.shape = function(parameters) {
                 ? $nextSide.outerHeight(true)
                 : (settings.height == 'initial')
                   ? $module.height()
-                  : settings.height,
-              $nextSide   = (nextIndex)
-                ? $clone.find(selector.side).eq(nextIndex)
-                : ( $activeSide.next(selector.side).length > 0 )
-                  ? $activeSide.next(selector.side)
-                  : $clone.find(selector.side).first()
+                  : settings.height
             ;
             $activeSide.removeClass(className.active);
             $nextSide.addClass(className.active);
@@ -307,9 +307,12 @@ $.fn.shape = function(parameters) {
             }
             if( !module.is.animating()) {
               module.debug('Flipping up', $nextSide);
+              var
+                transform = module.get.transform.up()
+              ;
               module.set.stageSize();
               module.stage.above();
-              module.animate( module.get.transform.up() );
+              module.animate(transform);
             }
             else {
               module.queue('flip up');
@@ -323,9 +326,12 @@ $.fn.shape = function(parameters) {
             }
             if( !module.is.animating()) {
               module.debug('Flipping down', $nextSide);
+              var
+                transform = module.get.transform.down()
+              ;
               module.set.stageSize();
               module.stage.below();
-              module.animate( module.get.transform.down() );
+              module.animate(transform);
             }
             else {
               module.queue('flip down');
@@ -339,9 +345,12 @@ $.fn.shape = function(parameters) {
             }
             if( !module.is.animating()) {
               module.debug('Flipping left', $nextSide);
+              var
+                transform = module.get.transform.left()
+              ;
               module.set.stageSize();
               module.stage.left();
-              module.animate(module.get.transform.left() );
+              module.animate(transform);
             }
             else {
               module.queue('flip left');
@@ -355,9 +364,12 @@ $.fn.shape = function(parameters) {
             }
             if( !module.is.animating()) {
               module.debug('Flipping right', $nextSide);
+              var
+                transform = module.get.transform.right()
+              ;
               module.set.stageSize();
               module.stage.right();
-              module.animate(module.get.transform.right() );
+              module.animate(transform);
             }
             else {
               module.queue('flip right');

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings.py
----------------------------------------------------------------------
diff --git a/tap/settings.py b/tap/settings.py
new file mode 100644
index 0000000..8f66901
--- /dev/null
+++ b/tap/settings.py
@@ -0,0 +1,135 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+#SECRET_KEY = 'm^7q3z0x9q%)fb6^lo(=%=$=5+g7h2(w8pfhxi0pw_#)xnw(!9'
+SECRET_KEY = 'ro4o76lktk+x)0^fwp^(tua76p2y$p_2*19$gnk8+!)k^er0p='
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'appmgr.apps.AppmgrConfig',
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+]
+
+MIDDLEWARE_CLASSES = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'tap.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [
+            os.path.join(BASE_DIR, 'templates'),
+        ],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2',
+        'NAME': 'tapdb',
+        'USER': 'tapuser',
+        'PASSWORD': 'Dr@p3rUs3r',
+        'HOST': 'localhost',
+        'PORT': '',
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.9/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.9/howto/static-files/
+
+STATIC_URL = '/static/'
+
+# STATIC_ROOT = os.path.join(BASE_DIR, "static/")
+
+STATICFILES_DIRS = (
+    os.path.join(BASE_DIR, "static"),
+)

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/archive/secret2.py
----------------------------------------------------------------------
diff --git a/tap/settings/archive/secret2.py b/tap/settings/archive/secret2.py
new file mode 100644
index 0000000..492f0d6
--- /dev/null
+++ b/tap/settings/archive/secret2.py
@@ -0,0 +1,12 @@
+"""
+Secret Django settings for tap project.
+"""
+
+# SECURITY WARNING: keep the secret key used in production secret!
+MY_SECRET_KEY = 'ro4o76lktk+x)0^fwp^(tua76p2y$p_2*19$gnk8+!)k^er0p='
+MY_DB_NAME = 'tapdb'
+MY_DB_USER = 'tapuser'
+MY_DB_PASSWORD = 'Dr@p3rUs3r'
+
+MY_EMAIL_PASSWORD =''
+ADMIN_EMAILS = (('Steve', 'syork@draper.com'))

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/archive/settings2.py
----------------------------------------------------------------------
diff --git a/tap/settings/archive/settings2.py b/tap/settings/archive/settings2.py
new file mode 100644
index 0000000..92626d3
--- /dev/null
+++ b/tap/settings/archive/settings2.py
@@ -0,0 +1,135 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'm^7q3z0x9q%)fb6^lo(=%=$=5+g7h2(w8pfhxi0pw_#)xnw(!9'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'appmgr.apps.AppmgrConfig',
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    #'grappelli',
+]
+
+MIDDLEWARE_CLASSES = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'tap.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [
+            os.path.join(BASE_DIR, 'templates'),
+        ],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2',
+        'NAME': 'tapdb',
+        'USER': 'tapuser',
+        'PASSWORD': 'Dr@perUs3r!',
+        'HOST': 'localhost',
+        'PORT': '',
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.9/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.9/howto/static-files/
+
+STATIC_URL = '/static/'
+
+# STATIC_ROOT = os.path.join(BASE_DIR, "static/")
+
+STATICFILES_DIRS = (
+    os.path.join(BASE_DIR, "static"),
+)

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/dev.py
----------------------------------------------------------------------
diff --git a/tap/settings/dev.py b/tap/settings/dev.py
index ef49e67..9847fd0 100644
--- a/tap/settings/dev.py
+++ b/tap/settings/dev.py
@@ -12,6 +12,7 @@
 # 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.
+
 """
 Django settings for tap project.
 
@@ -24,7 +25,7 @@ https://docs.djangoproject.com/en/1.8/ref/settings/
 
 import os
 
-from base import *
+from settings import *
 
 INSTALLED_APPS += (
     'django_extensions',

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/production.py
----------------------------------------------------------------------
diff --git a/tap/settings/production.py b/tap/settings/production.py
index 28495cc..4fbfaa5 100644
--- a/tap/settings/production.py
+++ b/tap/settings/production.py
@@ -12,6 +12,7 @@
 # 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.
+
 """
 Django settings for tap project.
 

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/settings.py
----------------------------------------------------------------------
diff --git a/tap/settings/settings.py b/tap/settings/settings.py
new file mode 100755
index 0000000..1011853
--- /dev/null
+++ b/tap/settings/settings.py
@@ -0,0 +1,181 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import os
+from secret import *
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = MY_SECRET_KEY
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = ['*']
+
+SITE_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
+
+SITE_ID = 1
+
+# Email integration setup
+EMAIL_USE_TLS = True
+EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
+EMAIL_PORT = 587
+EMAIL_HOST_USER = 'AKIAJJDM2ZC67STGF4IA'
+EMAIL_HOST_PASSWORD = MY_EMAIL_PASSWORD
+
+# Configurable email addresses
+# These are addresses where mail is sent from...
+EMAIL_FROM_NOMINAL_ADDRESS = "onlinetesting@xdataonline.com"
+EMAIL_FROM_ERROR_ADDRESS = "no-reply@xdataonline.com"
+# These are addresses used to send mail to...
+EMAIL_TO_ERROR_ADDRESS = "errors@xdataonline.com"
+
+
+# Application definition
+
+INSTALLED_APPS = (
+    'grappelli', # must be before django.contrib.admin
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.sites',
+    'django.contrib.staticfiles',
+    'custom_user',
+    'app_mgr',
+    'axes',
+    'rest_framework',
+    'rest_framework.authtoken',
+    'guardian',
+    'webpack_loader',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    'django.middleware.security.SecurityMiddleware',
+)
+
+ROOT_URLCONF = 'tap.urls'
+
+AUTHENTICATION_BACKENDS = (
+    'django.contrib.auth.backends.ModelBackend',
+    'guardian.backends.ObjectPermissionBackend',
+    )
+GUARDIAN_MONKEY_PATCH = False
+
+AUTH_USER_MODEL = 'app_mgr.UserProfile'
+
+REST_FRAMEWORK = {
+    'DEFAULT_AUTHENTICATION_CLASSES': (
+        'rest_framework.authentication.TokenAuthentication',
+    )
+}
+LOGIN_REDIRECT_URL = '/app_mgr/users'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [os.path.join(SITE_ROOT, 'templates')],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2',
+        'NAME': MY_DB_NAME,
+        'USER': MY_DB_USER,
+        'PASSWORD': MY_DB_PASSWORD,
+        'HOST': 'localhost',
+        'PORT': '',
+    }
+}
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.8/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'America/New_York'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+#STATIC_ROOT = os.path.join(BASE_DIR, '../static')
+
+STATIC_URL = '/static/'
+
+STATICFILES_DIRS = [
+    os.path.join(BASE_DIR, '../static'),
+]
+
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': True,
+    'formatters': {
+        'verbose': {
+            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
+        },
+    },
+    'handlers': {
+        'console': {
+            'level': 'NOTSET',
+            'class': 'logging.StreamHandler',
+            'formatter': 'verbose'
+        }
+    },
+    'loggers': {
+        '': {
+            'handlers': ['console'],
+            'level': 'NOTSET',
+        },
+        'django.request': {
+            'handlers': ['console'],
+            'propagate': False,
+            'level': 'ERROR'
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index 582735a..eee23c2 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -12,6 +12,7 @@
 # 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.
+
 """tap URL Configuration
 
 The `urlpatterns` list routes URLs to views. For more information please see:
@@ -26,6 +27,8 @@ Class-based views
 Including another URLconf
     1. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
 """
+from django.conf import settings
+from django.conf.urls.static import static
 from django.conf.urls import include, url
 from django.contrib import admin
 from django.views.generic import TemplateView
@@ -38,5 +41,8 @@ urlpatterns = [
     url(r'^app_mgr/', include('app_mgr.urls', namespace='app_mgr')),
     #url(r'^api-auth/', include('rest_framework.urls')), #used for basic authentication (cookies)
     url(r'^api-token-auth/', token_views.obtain_auth_token),
-    url(r'', TemplateView.as_view(template_name='index.html')),
-]
+    url(r'^$', TemplateView.as_view(template_name='index.html')),
+    ##below are test views
+    url(r'^view2/', TemplateView.as_view(template_name='view2.html')),
+    url(r'^view1/', TemplateView.as_view(template_name='view1.html')),
+] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/wsgi.py
----------------------------------------------------------------------
diff --git a/tap/wsgi.py b/tap/wsgi.py
index c79164d..88859a5 100644
--- a/tap/wsgi.py
+++ b/tap/wsgi.py
@@ -12,6 +12,7 @@
 # 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.
+
 """
 WSGI config for tap project.
 

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/templates/main.html
----------------------------------------------------------------------
diff --git a/templates/main.html b/templates/main.html
new file mode 100644
index 0000000..fc706b4
--- /dev/null
+++ b/templates/main.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>Tap Home</title>
+    {% load staticfiles %}
+    <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+    <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
+    <script src="{% static "semantic.min.js" %}"></script>
+    <link href="{% static "styles.min.css" %}" rel="stylesheet">
+</head>
+<body>
+    <div id="main-container">
+        <div id="react-container" />
+    </div>
+    <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+    <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+    <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+    <script src="{% static "app.js" %}"></script>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/vagrant/settings.py
----------------------------------------------------------------------
diff --git a/vagrant/settings.py b/vagrant/settings.py
new file mode 100644
index 0000000..caa6344
--- /dev/null
+++ b/vagrant/settings.py
@@ -0,0 +1,135 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'm^7q3z0x9q%)fb6^lo(=%=$=5+g7h2(w8pfhxi0pw_#)xnw(!9'
+#ro4o76lktk+x)0^fwp^(tua76p2y$p_2*19$gnk8+!)k^er0p='
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'appmgr.apps.AppmgrConfig',
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+]
+
+MIDDLEWARE_CLASSES = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'tap.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [
+            os.path.join(BASE_DIR, 'templates'),
+        ],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2',
+        'NAME': 'tapdb',
+        'USER': 'tapuser',
+        'PASSWORD': 'Dr@p3rUs3r',
+        'HOST': 'localhost',
+        'PORT': '',
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.9/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.9/howto/static-files/
+
+STATIC_URL = '/static/'
+
+STATIC_ROOT = os.path.join(BASE_DIR, "static")
+
+STATICFILES_DIRS = (
+    os.path.join(BASE_DIR, "static"),
+)