diff --git a/hyracks-admin-console/.classpath b/hyracks-admin-console/.classpath
new file mode 100644
index 0000000..c5921a9
--- /dev/null
+++ b/hyracks-admin-console/.classpath
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/hyracks-admin-console-0.1.8-SNAPSHOT/WEB-INF/classes" path="src/main/java"/>
+	<classpathentry excluding="**" kind="src" output="target/hyracks-admin-console-0.1.8-SNAPSHOT/WEB-INF/classes" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="src" path="target/generated-sources/gwt"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
+	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+	<classpathentry kind="output" path="target/hyracks-admin-console-0.1.8-SNAPSHOT/WEB-INF/classes"/>
+</classpath>
diff --git a/hyracks-admin-console/.project b/hyracks-admin-console/.project
new file mode 100644
index 0000000..df60f9a
--- /dev/null
+++ b/hyracks-admin-console/.project
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>hyracks-admin-console</name>
+	<comment>hyracks-admin-console project</comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+		<nature>com.google.gwt.eclipse.core.gwtNature</nature>
+	</natures>
+</projectDescription>
diff --git a/hyracks-admin-console/.settings/.jsdtscope b/hyracks-admin-console/.settings/.jsdtscope
new file mode 100644
index 0000000..ba3c245
--- /dev/null
+++ b/hyracks-admin-console/.settings/.jsdtscope
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+  <classpathentry kind="src" path="src/main/webapp" />
+  <classpathentry kind="con"
+    path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER" />
+  <classpathentry kind="con"
+    path="org.eclipse.wst.jsdt.launching.WebProject">
+    <attributes>
+      <attribute name="hide" value="true" />
+    </attributes>
+  </classpathentry>
+  <classpathentry kind="con"
+    path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary" />
+  <classpathentry kind="output" path="" />
+</classpath>
diff --git a/hyracks-admin-console/.settings/com.google.appengine.eclipse.core.prefs b/hyracks-admin-console/.settings/com.google.appengine.eclipse.core.prefs
new file mode 100644
index 0000000..a60576c
--- /dev/null
+++ b/hyracks-admin-console/.settings/com.google.appengine.eclipse.core.prefs
@@ -0,0 +1,3 @@
+#Thu Jun 16 10:18:26 CEST 2011
+eclipse.preferences.version=1
+filesCopiedToWebInfLib=
diff --git a/hyracks-admin-console/.settings/com.google.gdt.eclipse.core.prefs b/hyracks-admin-console/.settings/com.google.gdt.eclipse.core.prefs
new file mode 100644
index 0000000..8019224
--- /dev/null
+++ b/hyracks-admin-console/.settings/com.google.gdt.eclipse.core.prefs
@@ -0,0 +1,5 @@
+#Thu Sep 02 10:55:28 CEST 2010
+eclipse.preferences.version=1
+jarsExcludedFromWebInfLib=
+warSrcDir=src/main/webapp
+warSrcDirIsOutput=true
diff --git a/hyracks-admin-console/.settings/com.google.gwt.eclipse.core.prefs b/hyracks-admin-console/.settings/com.google.gwt.eclipse.core.prefs
new file mode 100644
index 0000000..c803c44
--- /dev/null
+++ b/hyracks-admin-console/.settings/com.google.gwt.eclipse.core.prefs
@@ -0,0 +1,5 @@
+#Thu Jun 16 11:14:17 CEST 2011
+eclipse.preferences.version=1
+entryPointModules=
+filesCopiedToWebInfLib=gwt-servlet.jar
+gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgc3JjL21haW4vd2ViYXBwXV0+PC9leHRyYS1hcmdzPjx2bS1hcmdzPjwhW0NEQVRBWy1YbXg1MTJtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLmNvbXBhbnkuU29tZU1vZHVsZTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+
diff --git a/hyracks-admin-console/.settings/org.eclipse.jdt.core.prefs b/hyracks-admin-console/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..96e4c8c
--- /dev/null
+++ b/hyracks-admin-console/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+#Wed Aug 24 10:20:07 PDT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/hyracks-admin-console/.settings/org.eclipse.wst.common.component b/hyracks-admin-console/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..8b16bad
--- /dev/null
+++ b/hyracks-admin-console/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+  <wb-module deploy-name="${module}">
+    <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
+    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
+        <wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/gwt"/>
+    <property name="context-root" value="${module}"/>
+    <property name="java-output-path" value="/${module}/target/www/WEB-INF/classes"/>
+  </wb-module>
+</project-modules>
diff --git a/hyracks-admin-console/.settings/org.eclipse.wst.common.project.facet.core.xml b/hyracks-admin-console/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..18c1b9a
--- /dev/null
+++ b/hyracks-admin-console/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="wst.jsdt.web" />
+  <installed facet="java" version="1.5" />
+  <installed facet="jst.web" version="2.3" />
+  <installed facet="wst.jsdt.web" version="1.0" />
+</faceted-project>
diff --git a/hyracks-admin-console/.settings/org.eclipse.wst.jsdt.ui.superType.container b/hyracks-admin-console/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/hyracks-admin-console/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/hyracks-admin-console/.settings/org.maven.ide.eclipse.prefs b/hyracks-admin-console/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..c74c58e
--- /dev/null
+++ b/hyracks-admin-console/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Thu Sep 02 10:42:12 CEST 2010
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/hyracks-admin-console/pom.xml b/hyracks-admin-console/pom.xml
new file mode 100644
index 0000000..ca200e5
--- /dev/null
+++ b/hyracks-admin-console/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>edu.uci.ics.hyracks</groupId>
+  <artifactId>hyracks-admin-console</artifactId>
+  <packaging>war</packaging>
+  <version>0.1.8-SNAPSHOT</version>
+
+  <parent>
+    <groupId>edu.uci.ics.hyracks</groupId>
+    <artifactId>hyracks</artifactId>
+    <version>0.1.8-SNAPSHOT</version>
+  </parent>
+
+  <properties>
+    <gwtVersion>2.3.0</gwtVersion>
+    <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.google.gwt</groupId>
+      <artifactId>gwt-user</artifactId>
+      <version>${gwtVersion}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.7</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.validation</groupId>
+      <artifactId>validation-api</artifactId>
+      <version>1.0.0.GA</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.validation</groupId>
+      <artifactId>validation-api</artifactId>
+      <version>1.0.0.GA</version>
+      <classifier>sources</classifier>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.googlecode.gchart</groupId>
+      <artifactId>gchart</artifactId>
+      <version>2.6</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <!-- Generate compiled stuff in the folder used for developing mode -->
+    <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
+
+    <plugins>
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>gwt-maven-plugin</artifactId>
+        <version>2.3.0-1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>compile</goal>
+              <goal>test</goal>
+              <goal>i18n</goal>
+              <goal>generateAsync</goal>
+            </goals>
+          </execution>
+        </executions>
+        <!-- Plugin configuration. There are many available options, see 
+          gwt-maven-plugin documentation at codehaus.org -->
+        <configuration>
+          <runTarget>HyracksAdminConsole.html</runTarget>
+          <hostedWebapp>${webappDirectory}</hostedWebapp>
+          <i18nMessagesBundle>edu.uci.ics.hyracks.adminconsole.client.Messages</i18nMessagesBundle>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>2.1.1</version>
+        <executions>
+          <execution>
+            <phase>compile</phase>
+            <goals>
+              <goal>exploded</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <webappDirectory>${webappDirectory}</webappDirectory>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/HyracksAdminConsole.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/HyracksAdminConsole.java
new file mode 100644
index 0000000..587a8a4
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/HyracksAdminConsole.java
@@ -0,0 +1,67 @@
+package edu.uci.ics.hyracks.adminconsole.client;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.DockLayoutPanel;
+import com.google.gwt.user.client.ui.RootLayoutPanel;
+
+import edu.uci.ics.hyracks.adminconsole.client.connection.ServerConnection;
+import edu.uci.ics.hyracks.adminconsole.client.panels.ApplicationsPanel;
+import edu.uci.ics.hyracks.adminconsole.client.panels.DashboardPanel;
+import edu.uci.ics.hyracks.adminconsole.client.panels.JobsPanel;
+import edu.uci.ics.hyracks.adminconsole.client.panels.NodeControllersPanel;
+import edu.uci.ics.hyracks.adminconsole.client.panels.TopPanel;
+
+public class HyracksAdminConsole implements EntryPoint {
+    public static HyracksAdminConsole INSTANCE;
+
+    private final Messages messages = GWT.create(Messages.class);
+
+    private ServerConnection serverConnection;
+
+    @UiField
+    TopPanel topPanel;
+
+    @UiField
+    DashboardPanel dashboardPanel;
+
+    @UiField
+    ApplicationsPanel applicationsPanel;
+
+    @UiField
+    NodeControllersPanel nodeControllersPanel;
+
+    @UiField
+    JobsPanel jobsPanel;
+
+    interface Binder extends UiBinder<DockLayoutPanel, HyracksAdminConsole> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    public ServerConnection getServerConnection() {
+        return serverConnection;
+    }
+
+    public void onModuleLoad() {
+        INSTANCE = this;
+        serverConnection = new ServerConnection();
+        String serverURLPrefix = Window.Location.getParameter("cclocation");
+        serverConnection.setServerURLPrefix(serverURLPrefix);
+
+        DockLayoutPanel lp = binder.createAndBindUi(this);
+
+        // Get rid of scrollbars, and clear out the window's built-in margin,
+        // because we want to take advantage of the entire client area.
+        Window.enableScrolling(false);
+        Window.setMargin("0px");
+
+        // Add the outer panel to the RootLayoutPanel, so that it will be
+        // displayed.
+        RootLayoutPanel root = RootLayoutPanel.get();
+        root.add(lp);
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/HyracksAdminConsole.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/HyracksAdminConsole.ui.xml
new file mode 100644
index 0000000..929e1de
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/HyracksAdminConsole.ui.xml
@@ -0,0 +1,44 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:hac.panels='urn:import:edu.uci.ics.hyracks.adminconsole.client.panels'>
+
+  <g:DockLayoutPanel unit='EM'>
+    <g:north size='5'>
+      <hac.panels:TopPanel ui:field='topPanel' />
+    </g:north>
+
+    <g:center>
+      <g:TabLayoutPanel barUnit="EM" barHeight="2">
+        <g:tab>
+          <g:header>
+            Dashboard
+          </g:header>
+          <hac.panels:DashboardPanel ui:field='dashboardPanel' />
+        </g:tab>
+        <g:tab>
+          <g:header>
+            Applications
+          </g:header>
+          <hac.panels:ApplicationsPanel ui:field='applicationsPanel' />
+        </g:tab>
+        <g:tab>
+          <g:header>
+            Node Controllers
+          </g:header>
+          <hac.panels:NodeControllersPanel ui:field='nodeControllersPanel' />
+        </g:tab>
+        <g:tab>
+          <g:header>
+            Jobs
+          </g:header>
+          <hac.panels:JobsPanel ui:field='jobsPanel' />
+        </g:tab>
+      </g:TabLayoutPanel>
+    </g:center>
+  </g:DockLayoutPanel>
+
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/JobSummary.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/JobSummary.java
new file mode 100644
index 0000000..d7af7f7
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/JobSummary.java
@@ -0,0 +1,46 @@
+package edu.uci.ics.hyracks.adminconsole.client.beans;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.view.client.ProvidesKey;
+
+public final class JobSummary extends JavaScriptObject {
+    public static final ProvidesKey<JobSummary> KEY_PROVIDER = new ProvidesKey<JobSummary>() {
+        @Override
+        public Object getKey(JobSummary item) {
+            return item.getJobId();
+        }
+    };
+
+    protected JobSummary() {
+    }
+
+    public native String getJobId()
+    /*-{
+         return this["job-id"];
+    }-*/;
+
+    public native String getApplicationName()
+    /*-{
+         return this["application-name"];
+    }-*/;
+
+    public native String getStatus()
+    /*-{
+         return this.status;
+    }-*/;
+
+    public native Long getCreateTime()
+    /*-{
+         return this["create-time"];
+    }-*/;
+
+    public native Long getStartTime()
+    /*-{
+         return this["start-time"];
+    }-*/;
+
+    public native Long getEndTime()
+    /*-{
+         return this["end-time"];
+    }-*/;
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/NodeDetails.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/NodeDetails.java
new file mode 100644
index 0000000..d04c02c
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/NodeDetails.java
@@ -0,0 +1,101 @@
+package edu.uci.ics.hyracks.adminconsole.client.beans;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArrayInteger;
+import com.google.gwt.core.client.JsArrayNumber;
+
+public final class NodeDetails extends JavaScriptObject {
+    protected NodeDetails() {
+
+    }
+
+    public native String getNodeId()
+    /*-{
+         return this["node-id"];
+    }-*/;
+
+    public native String getOSName()
+    /*-{
+         return this["os-name"];
+    }-*/;
+
+    public native String getArch()
+    /*-{
+         return this["arch"];
+    }-*/;
+
+    public native String getOSVersion()
+    /*-{
+         return this["os-version"];
+    }-*/;
+
+    public native int getNProcessors()
+    /*-{
+         return this["num-processors"];
+    }-*/;
+
+    public native int getRRDPtr()
+    /*-{
+         return this["rrd-ptr"];
+    }-*/;
+
+    public native JsArrayNumber getHeartbeatTimes()
+    /*-{
+         return this["heartbeat-times"];
+    }-*/;
+
+    public native JsArrayNumber getHeapInitSizes()
+    /*-{
+         return this["heap-init-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getHeapUsedSizes()
+    /*-{
+         return this["heap-used-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getHeapCommittedSizes()
+    /*-{
+         return this["heap-committed-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getHeapMaxSizes()
+    /*-{
+         return this["heap-max-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getNonHeapInitSizes()
+    /*-{
+         return this["nonheap-init-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getNonHeapUsedSizes()
+    /*-{
+         return this["nonheap-used-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getNonHeapCommittedSizes()
+    /*-{
+         return this["nonheap-committed-sizes"];
+    }-*/;
+
+    public native JsArrayNumber getNonHeapMaxSizes()
+    /*-{
+         return this["nonheap-max-sizes"];
+    }-*/;
+
+    public native JsArrayInteger getThreadCounts()
+    /*-{
+         return this["thread-counts"];
+    }-*/;
+
+    public native JsArrayInteger getPeakThreadCounts()
+    /*-{
+         return this["peak-thread-counts"];
+    }-*/;
+
+    public native JsArrayNumber getSystemLoadAverages()
+    /*-{
+         return this["system-load-averages"];
+    }-*/;
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/NodeSummary.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/NodeSummary.java
new file mode 100644
index 0000000..1ee5e85
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/beans/NodeSummary.java
@@ -0,0 +1,37 @@
+package edu.uci.ics.hyracks.adminconsole.client.beans;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArray;
+import com.google.gwt.view.client.ProvidesKey;
+
+public final class NodeSummary extends JavaScriptObject {
+    public static final ProvidesKey<NodeSummary> KEY_PROVIDER = new ProvidesKey<NodeSummary>() {
+        @Override
+        public Object getKey(NodeSummary item) {
+            return item.getNodeId();
+        }
+    };
+
+    protected NodeSummary() {
+    }
+
+    public native String getNodeId()
+    /*-{
+         return this["node-id"];
+    }-*/;
+
+    public native Double getSystemLoadAverage()
+    /*-{
+         return this["system-load-average"];
+    }-*/;
+
+    public native Long getHeapUsed()
+    /*-{
+         return this["heap-used"];
+    }-*/;
+
+    public static native JsArray<NodeSummary> parseNodeSummariesResult(String json)
+    /*-{
+        return eval(json)[0].result;
+     }-*/;
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/connection/ServerConnection.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/connection/ServerConnection.java
new file mode 100644
index 0000000..0d147c6
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/connection/ServerConnection.java
@@ -0,0 +1,16 @@
+package edu.uci.ics.hyracks.adminconsole.client.connection;
+
+public class ServerConnection {
+    private String serverURLPrefix;
+
+    public ServerConnection() {
+    }
+
+    public String getServerURLPrefix() {
+        return serverURLPrefix;
+    }
+
+    public void setServerURLPrefix(String serverURLPrefix) {
+        this.serverURLPrefix = serverURLPrefix;
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/MemoryUsageChart.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/MemoryUsageChart.java
new file mode 100644
index 0000000..dbc670f
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/MemoryUsageChart.java
@@ -0,0 +1,51 @@
+package edu.uci.ics.hyracks.adminconsole.client.details.node.charts;
+
+import com.google.gwt.core.client.JsArrayNumber;
+import com.googlecode.gchart.client.GChart;
+
+public class MemoryUsageChart extends GChart {
+    private String prefix;
+
+    public MemoryUsageChart() {
+        setChartSize(720, 200);
+        setPadding("30px");
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public void reset(int rrdPtr, JsArrayNumber times, JsArrayNumber initSizes, JsArrayNumber usedSizes,
+            JsArrayNumber committedSizes, JsArrayNumber maxSizes) {
+        clearCurves();
+        addCurve();
+        getCurve().setLegendLabel(prefix + " Initial Size");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        addCurve();
+        getCurve().setLegendLabel(prefix + " Used Size");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        addCurve();
+        getCurve().setLegendLabel(prefix + " Committed Size");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        addCurve();
+        getCurve().setLegendLabel(prefix + " Maximum Size");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        int ptr = rrdPtr;
+        for (int i = 0; i < times.length(); ++i) {
+            getCurve(0).addPoint(i, initSizes.get(ptr));
+            getCurve(1).addPoint(i, usedSizes.get(ptr));
+            getCurve(2).addPoint(i, committedSizes.get(ptr));
+            getCurve(3).addPoint(i, maxSizes.get(ptr));
+            ptr = (ptr + 1) % times.length();
+        }
+        update();
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/SystemLoadAverageChart.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/SystemLoadAverageChart.java
new file mode 100644
index 0000000..21faf21
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/SystemLoadAverageChart.java
@@ -0,0 +1,26 @@
+package edu.uci.ics.hyracks.adminconsole.client.details.node.charts;
+
+import com.google.gwt.core.client.JsArrayNumber;
+import com.googlecode.gchart.client.GChart;
+
+public class SystemLoadAverageChart extends GChart {
+    public SystemLoadAverageChart() {
+        setChartSize(720, 200);
+        setPadding("30px");
+    }
+
+    public void reset(int rrdPtr, JsArrayNumber times, JsArrayNumber systemLoadAverages) {
+        clearCurves();
+        addCurve();
+        getCurve().setLegendLabel("System Load Average");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        int ptr = rrdPtr;
+        for (int i = 0; i < times.length(); ++i) {
+            getCurve().addPoint(i, systemLoadAverages.get(ptr));
+            ptr = (ptr + 1) % times.length();
+        }
+        update();
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/ThreadCountChart.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/ThreadCountChart.java
new file mode 100644
index 0000000..77b6b8c
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/details/node/charts/ThreadCountChart.java
@@ -0,0 +1,33 @@
+package edu.uci.ics.hyracks.adminconsole.client.details.node.charts;
+
+import com.google.gwt.core.client.JsArrayInteger;
+import com.google.gwt.core.client.JsArrayNumber;
+import com.googlecode.gchart.client.GChart;
+
+public class ThreadCountChart extends GChart {
+    public ThreadCountChart() {
+        setChartSize(720, 200);
+        setPadding("30px");
+    }
+
+    public void reset(int rrdPtr, JsArrayNumber times, JsArrayInteger threadCounts, JsArrayInteger peakThreadCounts) {
+        clearCurves();
+        addCurve();
+        getCurve().setLegendLabel("Thread Count");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        addCurve();
+        getCurve().setLegendLabel("Peak Thread Count");
+        getCurve().getSymbol().setWidth(0);
+        getCurve().getSymbol().setHeight(0);
+        getCurve().getSymbol().setSymbolType(SymbolType.LINE);
+        int ptr = rrdPtr;
+        for (int i = 0; i < times.length(); ++i) {
+            getCurve(0).addPoint(i, threadCounts.get(ptr));
+            getCurve(1).addPoint(i, peakThreadCounts.get(ptr));
+            ptr = (ptr + 1) % times.length();
+        }
+        update();
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/ApplicationsPanel.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/ApplicationsPanel.java
new file mode 100644
index 0000000..f25ea7f
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/ApplicationsPanel.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.hyracks.adminconsole.client.panels;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+public class ApplicationsPanel extends Composite {
+    interface Binder extends UiBinder<Widget, ApplicationsPanel> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    public ApplicationsPanel() {
+        initWidget(binder.createAndBindUi(this));
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/ApplicationsPanel.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/ApplicationsPanel.ui.xml
new file mode 100644
index 0000000..74669b0
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/ApplicationsPanel.ui.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:hac.panels='urn:import:edu.uci.ics.hyracks.adminconsole.client.panels'>
+  <g:HTML></g:HTML>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/DashboardPanel.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/DashboardPanel.java
new file mode 100644
index 0000000..6917090
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/DashboardPanel.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.hyracks.adminconsole.client.panels;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+public class DashboardPanel extends Composite {
+    interface Binder extends UiBinder<Widget, DashboardPanel> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    public DashboardPanel() {
+        initWidget(binder.createAndBindUi(this));
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/DashboardPanel.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/DashboardPanel.ui.xml
new file mode 100644
index 0000000..74669b0
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/DashboardPanel.ui.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:hac.panels='urn:import:edu.uci.ics.hyracks.adminconsole.client.panels'>
+  <g:HTML></g:HTML>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/JobsPanel.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/JobsPanel.java
new file mode 100644
index 0000000..c8350dc
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/JobsPanel.java
@@ -0,0 +1,82 @@
+package edu.uci.ics.hyracks.adminconsole.client.panels;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JsArray;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.SplitLayoutPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.view.client.AsyncDataProvider;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.JobSummary;
+import edu.uci.ics.hyracks.adminconsole.client.rest.AbstractRestFunction;
+import edu.uci.ics.hyracks.adminconsole.client.rest.GetJobSummariesFunction;
+import edu.uci.ics.hyracks.adminconsole.client.widgets.JobsTableWidget;
+
+public class JobsPanel extends Composite implements JobsTableWidget.IRefreshRequestHandler {
+    interface Binder extends UiBinder<Widget, JobsPanel> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    @UiField
+    SplitLayoutPanel split;
+
+    @UiField
+    JobsTableWidget jobs;
+
+    @UiField
+    Widget details;
+
+    private int callCounter;
+
+    public JobsPanel() {
+        initWidget(binder.createAndBindUi(this));
+
+        jobs.setRefreshRequestHandler(this);
+
+        Timer timer = new Timer() {
+            @Override
+            public void run() {
+                refresh();
+            }
+        };
+        refresh();
+        timer.scheduleRepeating(5000);
+    }
+
+    @Override
+    public void refresh() {
+        try {
+            final int counter = ++callCounter;
+            GetJobSummariesFunction.INSTANCE.call(new AbstractRestFunction.ResultCallback<JsArray<JobSummary>>() {
+                @Override
+                public void onSuccess(JsArray<JobSummary> result) {
+                    if (counter == callCounter) {
+                        AsyncDataProvider<JobSummary> dataProvider = jobs.getDataProvider();
+                        List<JobSummary> data = new ArrayList<JobSummary>();
+                        for (int i = 0; i < result.length(); ++i) {
+                            data.add(result.get(i));
+                        }
+                        dataProvider.updateRowData(0, data);
+                        dataProvider.updateRowCount(result.length(), true);
+                    }
+                }
+
+                @Override
+                public void onError(Throwable exception) {
+
+                }
+            });
+        } catch (RequestException e) {
+            e.printStackTrace();
+        }
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/JobsPanel.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/JobsPanel.ui.xml
new file mode 100644
index 0000000..c12640f
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/JobsPanel.ui.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:widgets='urn:import:edu.uci.ics.hyracks.adminconsole.client.widgets'>
+  <g:SplitLayoutPanel ui:field="split">
+    <g:north size="300">
+      <g:ScrollPanel>
+        <widgets:JobsTableWidget ui:field="jobs" width="100%" height="300px"></widgets:JobsTableWidget>
+      </g:ScrollPanel>    
+    </g:north>
+    <g:center>
+      <g:HTML ui:field="details"></g:HTML>
+    </g:center>
+  </g:SplitLayoutPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllerDetailsPanel.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllerDetailsPanel.java
new file mode 100644
index 0000000..bbc08d4
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllerDetailsPanel.java
@@ -0,0 +1,91 @@
+package edu.uci.ics.hyracks.adminconsole.client.panels;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.NodeDetails;
+import edu.uci.ics.hyracks.adminconsole.client.details.node.charts.MemoryUsageChart;
+import edu.uci.ics.hyracks.adminconsole.client.details.node.charts.SystemLoadAverageChart;
+import edu.uci.ics.hyracks.adminconsole.client.details.node.charts.ThreadCountChart;
+import edu.uci.ics.hyracks.adminconsole.client.rest.AbstractRestFunction;
+import edu.uci.ics.hyracks.adminconsole.client.rest.GetNodeDetailsFunction;
+
+public class NodeControllerDetailsPanel extends Composite {
+    interface Binder extends UiBinder<Widget, NodeControllerDetailsPanel> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    private final String nodeId;
+
+    @UiField
+    MemoryUsageChart heapUsage;
+
+    @UiField
+    MemoryUsageChart nonheapUsage;
+
+    @UiField
+    SystemLoadAverageChart loadAverage;
+
+    @UiField
+    ThreadCountChart threadCount;
+
+    private int callCounter;
+
+    private Timer timer;
+
+    public NodeControllerDetailsPanel(String nodeId) {
+        initWidget(binder.createAndBindUi(this));
+
+        this.nodeId = nodeId;
+        heapUsage.setPrefix("Heap ");
+        nonheapUsage.setPrefix("Non-Heap ");
+
+        timer = new Timer() {
+            @Override
+            public void run() {
+                refresh();
+            }
+        };
+        refresh();
+        timer.scheduleRepeating(10000);
+    }
+
+    public void destroy() {
+        timer.cancel();
+    }
+
+    private void refresh() {
+        try {
+            final int counter = ++callCounter;
+            new GetNodeDetailsFunction(nodeId).call(new AbstractRestFunction.ResultCallback<NodeDetails>() {
+                @Override
+                public void onSuccess(NodeDetails result) {
+                    if (counter == callCounter) {
+                        loadAverage.reset(result.getRRDPtr(), result.getHeartbeatTimes(),
+                                result.getSystemLoadAverages());
+                        heapUsage.reset(result.getRRDPtr(), result.getHeartbeatTimes(), result.getHeapInitSizes(),
+                                result.getHeapUsedSizes(), result.getHeapCommittedSizes(), result.getHeapMaxSizes());
+                        nonheapUsage.reset(result.getRRDPtr(), result.getHeartbeatTimes(),
+                                result.getNonHeapInitSizes(), result.getNonHeapUsedSizes(),
+                                result.getNonHeapCommittedSizes(), result.getNonHeapMaxSizes());
+                        threadCount.reset(result.getRRDPtr(), result.getHeartbeatTimes(), result.getThreadCounts(),
+                                result.getPeakThreadCounts());
+                    }
+                }
+
+                @Override
+                public void onError(Throwable exception) {
+
+                }
+            });
+        } catch (RequestException e) {
+            e.printStackTrace();
+        }
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllerDetailsPanel.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllerDetailsPanel.ui.xml
new file mode 100644
index 0000000..4506f2b
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllerDetailsPanel.ui.xml
@@ -0,0 +1,37 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:charts='urn:import:edu.uci.ics.hyracks.adminconsole.client.details.node.charts'>
+  <g:StackLayoutPanel unit="EM">
+    <g:stack>
+      <g:header size="2">
+        System Load
+      </g:header>
+      <g:ScrollPanel>
+        <charts:SystemLoadAverageChart ui:field="loadAverage"/>
+      </g:ScrollPanel>
+    </g:stack>
+    <g:stack>
+      <g:header size="2">
+        Memory Usage
+      </g:header>
+      <g:ScrollPanel>
+        <g:FlowPanel>
+          <charts:MemoryUsageChart ui:field="heapUsage"/>
+          <charts:MemoryUsageChart ui:field="nonheapUsage"/>
+        </g:FlowPanel>
+      </g:ScrollPanel>
+    </g:stack>
+    <g:stack>
+      <g:header size="2">
+        Thread Count
+      </g:header>
+      <g:ScrollPanel>
+        <charts:ThreadCountChart ui:field="threadCount"/>
+      </g:ScrollPanel>
+    </g:stack>
+  </g:StackLayoutPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllersPanel.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllersPanel.java
new file mode 100644
index 0000000..6110d17
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllersPanel.java
@@ -0,0 +1,92 @@
+package edu.uci.ics.hyracks.adminconsole.client.panels;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JsArray;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.SplitLayoutPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.view.client.AsyncDataProvider;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.NodeSummary;
+import edu.uci.ics.hyracks.adminconsole.client.rest.AbstractRestFunction;
+import edu.uci.ics.hyracks.adminconsole.client.rest.GetNodeSummariesFunction;
+import edu.uci.ics.hyracks.adminconsole.client.widgets.NodesTableWidget;
+
+public class NodeControllersPanel extends Composite implements NodesTableWidget.IRefreshRequestHandler {
+    interface Binder extends UiBinder<Widget, NodeControllersPanel> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    @UiField
+    SplitLayoutPanel split;
+
+    @UiField
+    NodesTableWidget nodes;
+
+    @UiField
+    Widget details;
+
+    private int callCounter;
+
+    public NodeControllersPanel() {
+        initWidget(binder.createAndBindUi(this));
+
+        nodes.setRefreshRequestHandler(this);
+        nodes.setClickListener(new NodesTableWidget.IClickListener() {
+            @Override
+            public void click(String nodeId) {
+                if (details instanceof NodeControllerDetailsPanel) {
+                    ((NodeControllerDetailsPanel) details).destroy();
+                }
+                split.remove(details);
+                details = new NodeControllerDetailsPanel(nodeId);
+                split.add(details);
+            }
+        });
+
+        Timer timer = new Timer() {
+            @Override
+            public void run() {
+                refresh();
+            }
+        };
+        refresh();
+        timer.scheduleRepeating(10000);
+    }
+
+    @Override
+    public void refresh() {
+        try {
+            final int counter = ++callCounter;
+            GetNodeSummariesFunction.INSTANCE.call(new AbstractRestFunction.ResultCallback<JsArray<NodeSummary>>() {
+                @Override
+                public void onSuccess(JsArray<NodeSummary> result) {
+                    if (counter == callCounter) {
+                        AsyncDataProvider<NodeSummary> dataProvider = nodes.getDataProvider();
+                        List<NodeSummary> data = new ArrayList<NodeSummary>();
+                        for (int i = 0; i < result.length(); ++i) {
+                            data.add(result.get(i));
+                        }
+                        dataProvider.updateRowData(0, data);
+                        dataProvider.updateRowCount(result.length(), true);
+                    }
+                }
+
+                @Override
+                public void onError(Throwable exception) {
+
+                }
+            });
+        } catch (RequestException e) {
+            e.printStackTrace();
+        }
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllersPanel.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllersPanel.ui.xml
new file mode 100644
index 0000000..80b4148
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/NodeControllersPanel.ui.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:widgets='urn:import:edu.uci.ics.hyracks.adminconsole.client.widgets'>
+  <g:SplitLayoutPanel ui:field="split">
+    <g:west size="300">
+      <g:ScrollPanel>
+        <widgets:NodesTableWidget ui:field="nodes" width="100%"></widgets:NodesTableWidget>
+      </g:ScrollPanel>    
+    </g:west>
+    <g:center>
+      <g:HTML ui:field="details"></g:HTML>
+    </g:center>
+  </g:SplitLayoutPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/TopPanel.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/TopPanel.java
new file mode 100644
index 0000000..a849615
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/TopPanel.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.hyracks.adminconsole.client.panels;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+public class TopPanel extends Composite {
+    interface Binder extends UiBinder<Widget, TopPanel> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    public TopPanel() {
+        initWidget(binder.createAndBindUi(this));
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/TopPanel.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/TopPanel.ui.xml
new file mode 100644
index 0000000..71c7b24
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/panels/TopPanel.ui.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:mail='urn:import:com.google.gwt.sample.mail.client'>
+
+  <ui:style>
+
+  </ui:style>
+
+  <g:HTMLPanel>
+  </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/AbstractRestFunction.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/AbstractRestFunction.java
new file mode 100644
index 0000000..6297fd2
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/AbstractRestFunction.java
@@ -0,0 +1,47 @@
+package edu.uci.ics.hyracks.adminconsole.client.rest;
+
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+
+import edu.uci.ics.hyracks.adminconsole.client.HyracksAdminConsole;
+
+public abstract class AbstractRestFunction<T> {
+    protected abstract void appendURLPath(StringBuilder buffer);
+
+    protected native T packageResults(String result)
+    /*-{
+        return eval("[" + result + "]")[0].result;
+    }-*/;
+
+    public interface ResultCallback<T> {
+        public void onSuccess(T result);
+
+        public void onError(Throwable exception);
+    }
+
+    public void call(final ResultCallback<T> callback) throws RequestException {
+        StringBuilder buffer = new StringBuilder();
+        buffer.append(HyracksAdminConsole.INSTANCE.getServerConnection().getServerURLPrefix());
+        buffer.append("/rest");
+        appendURLPath(buffer);
+        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(buffer.toString()));
+
+        builder.sendRequest(null, new RequestCallback() {
+            public void onError(Request request, Throwable exception) {
+                callback.onError(exception);
+            }
+
+            public void onResponseReceived(Request request, Response response) {
+                if (200 == response.getStatusCode()) {
+                    callback.onSuccess(packageResults(response.getText()));
+                } else {
+                    callback.onError(null);
+                }
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetJobSummariesFunction.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetJobSummariesFunction.java
new file mode 100644
index 0000000..e96bc22
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetJobSummariesFunction.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.hyracks.adminconsole.client.rest;
+
+import com.google.gwt.core.client.JsArray;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.JobSummary;
+
+public class GetJobSummariesFunction extends AbstractRestFunction<JsArray<JobSummary>> {
+    public static final GetJobSummariesFunction INSTANCE = new GetJobSummariesFunction();
+
+    private GetJobSummariesFunction() {
+    }
+
+    @Override
+    protected void appendURLPath(StringBuilder buffer) {
+        buffer.append("/jobs");
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetNodeDetailsFunction.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetNodeDetailsFunction.java
new file mode 100644
index 0000000..b535ffc
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetNodeDetailsFunction.java
@@ -0,0 +1,16 @@
+package edu.uci.ics.hyracks.adminconsole.client.rest;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.NodeDetails;
+
+public class GetNodeDetailsFunction extends AbstractRestFunction<NodeDetails> {
+    private String nodeId;
+
+    public GetNodeDetailsFunction(String nodeId) {
+        this.nodeId = nodeId;
+    }
+
+    @Override
+    protected void appendURLPath(StringBuilder buffer) {
+        buffer.append("/nodes/").append(nodeId);
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetNodeSummariesFunction.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetNodeSummariesFunction.java
new file mode 100644
index 0000000..6af5a01
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/rest/GetNodeSummariesFunction.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.hyracks.adminconsole.client.rest;
+
+import com.google.gwt.core.client.JsArray;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.NodeSummary;
+
+public class GetNodeSummariesFunction extends AbstractRestFunction<JsArray<NodeSummary>> {
+    public static final GetNodeSummariesFunction INSTANCE = new GetNodeSummariesFunction();
+
+    private GetNodeSummariesFunction() {
+    }
+
+    @Override
+    protected void appendURLPath(StringBuilder buffer) {
+        buffer.append("/nodes");
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/JobsTableWidget.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/JobsTableWidget.java
new file mode 100644
index 0000000..4e49bba
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/JobsTableWidget.java
@@ -0,0 +1,118 @@
+package edu.uci.ics.hyracks.adminconsole.client.widgets;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.cellview.client.CellTable;
+import com.google.gwt.user.cellview.client.TextColumn;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.view.client.AsyncDataProvider;
+import com.google.gwt.view.client.HasData;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.JobSummary;
+
+public class JobsTableWidget extends Composite {
+    public interface IRefreshRequestHandler {
+        public void refresh();
+    }
+
+    interface Binder extends UiBinder<Widget, JobsTableWidget> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    @UiField
+    CellTable<JobSummary> table;
+
+    private AsyncDataProvider<JobSummary> jobSummaryProvider;
+
+    private IRefreshRequestHandler refreshRequestHandler;
+
+    public JobsTableWidget() {
+        initWidget(binder.createAndBindUi(this));
+
+        TextColumn<JobSummary> idCol = new TextColumn<JobSummary>() {
+            @Override
+            public String getValue(JobSummary object) {
+                return object.getJobId();
+            }
+        };
+        idCol.setSortable(true);
+
+        TextColumn<JobSummary> appCol = new TextColumn<JobSummary>() {
+            @Override
+            public String getValue(JobSummary object) {
+                return object.getApplicationName();
+            }
+        };
+        appCol.setSortable(true);
+
+        TextColumn<JobSummary> statusCol = new TextColumn<JobSummary>() {
+            @Override
+            public String getValue(JobSummary object) {
+                return object.getStatus();
+            }
+        };
+        statusCol.setSortable(true);
+
+        /*
+        TextColumn<JobSummary> createTimeCol = new TextColumn<JobSummary>() {
+            @Override
+            public String getValue(JobSummary object) {
+                return renderTime(object.getCreateTime());
+            }
+        };
+        createTimeCol.setSortable(true);
+
+        TextColumn<JobSummary> startTimeCol = new TextColumn<JobSummary>() {
+            @Override
+            public String getValue(JobSummary object) {
+                return renderTime(object.getStartTime());
+            }
+        };
+        startTimeCol.setSortable(true);
+
+        TextColumn<JobSummary> endTimeCol = new TextColumn<JobSummary>() {
+            @Override
+            public String getValue(JobSummary object) {
+                return renderTime(object.getEndTime());
+            }
+        };
+        endTimeCol.setSortable(true);
+        */
+        table.addColumn(idCol, "Job Id");
+        table.addColumn(appCol, "Application Name");
+        table.addColumn(statusCol, "Status");
+        /*
+        table.addColumn(createTimeCol, "Created At");
+        table.addColumn(startTimeCol, "Started At");
+        table.addColumn(endTimeCol, "Finished At");
+        */
+
+        jobSummaryProvider = new AsyncDataProvider<JobSummary>(JobSummary.KEY_PROVIDER) {
+            @Override
+            protected void onRangeChanged(HasData<JobSummary> display) {
+                if (refreshRequestHandler != null) {
+                    refreshRequestHandler.refresh();
+                }
+            }
+        };
+        jobSummaryProvider.addDataDisplay(table);
+    }
+
+    public AsyncDataProvider<JobSummary> getDataProvider() {
+        return jobSummaryProvider;
+    }
+
+    public void setRefreshRequestHandler(IRefreshRequestHandler refreshRequestHandler) {
+        this.refreshRequestHandler = refreshRequestHandler;
+    }
+
+    private static String renderTime(Long time) {
+        if (time < 0) {
+            return "";
+        }
+        return time.toString();
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/JobsTableWidget.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/JobsTableWidget.ui.xml
new file mode 100644
index 0000000..9c48d77
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/JobsTableWidget.ui.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:c='urn:import:com.google.gwt.user.cellview.client'>
+  <c:CellTable ui:field="table" width="100%"></c:CellTable>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/NodesTableWidget.java b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/NodesTableWidget.java
new file mode 100644
index 0000000..088619c
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/NodesTableWidget.java
@@ -0,0 +1,102 @@
+package edu.uci.ics.hyracks.adminconsole.client.widgets;
+
+import com.google.gwt.cell.client.ClickableTextCell;
+import com.google.gwt.cell.client.FieldUpdater;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.cellview.client.CellTable;
+import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.TextColumn;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.view.client.AsyncDataProvider;
+import com.google.gwt.view.client.HasData;
+
+import edu.uci.ics.hyracks.adminconsole.client.beans.NodeSummary;
+
+public class NodesTableWidget extends Composite {
+    public interface IRefreshRequestHandler {
+        public void refresh();
+    }
+
+    public interface IClickListener {
+        public void click(String nodeId);
+    }
+
+    interface Binder extends UiBinder<Widget, NodesTableWidget> {
+    }
+
+    private final static Binder binder = GWT.create(Binder.class);
+
+    @UiField
+    CellTable<NodeSummary> table;
+
+    private AsyncDataProvider<NodeSummary> nodeSummaryProvider;
+
+    private IRefreshRequestHandler refreshRequestHandler;
+
+    private IClickListener cl;
+
+    public NodesTableWidget() {
+        initWidget(binder.createAndBindUi(this));
+
+        Column<NodeSummary, String> idCol = new Column<NodeSummary, String>(new ClickableTextCell()) {
+            @Override
+            public String getValue(NodeSummary object) {
+                return object.getNodeId();
+            }
+        };
+        idCol.setFieldUpdater(new FieldUpdater<NodeSummary, String>() {
+            @Override
+            public void update(int index, NodeSummary object, String value) {
+                if (cl != null) {
+                    cl.click(value);
+                }
+            }
+        });
+        idCol.setSortable(true);
+
+        TextColumn<NodeSummary> heapUsedCol = new TextColumn<NodeSummary>() {
+            @Override
+            public String getValue(NodeSummary object) {
+                return String.valueOf(object.getHeapUsed());
+            }
+        };
+        heapUsedCol.setSortable(true);
+
+        TextColumn<NodeSummary> systemLoadAvgCol = new TextColumn<NodeSummary>() {
+            @Override
+            public String getValue(NodeSummary object) {
+                return String.valueOf(object.getSystemLoadAverage());
+            }
+        };
+        systemLoadAvgCol.setSortable(true);
+
+        table.addColumn(idCol, "Node Id");
+        table.addColumn(heapUsedCol, "Heap Used");
+        table.addColumn(systemLoadAvgCol, "System Load Average");
+
+        nodeSummaryProvider = new AsyncDataProvider<NodeSummary>(NodeSummary.KEY_PROVIDER) {
+            @Override
+            protected void onRangeChanged(HasData<NodeSummary> display) {
+                if (refreshRequestHandler != null) {
+                    refreshRequestHandler.refresh();
+                }
+            }
+        };
+        nodeSummaryProvider.addDataDisplay(table);
+    }
+
+    public void setClickListener(IClickListener cl) {
+        this.cl = cl;
+    }
+
+    public AsyncDataProvider<NodeSummary> getDataProvider() {
+        return nodeSummaryProvider;
+    }
+
+    public void setRefreshRequestHandler(IRefreshRequestHandler refreshRequestHandler) {
+        this.refreshRequestHandler = refreshRequestHandler;
+    }
+}
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/NodesTableWidget.ui.xml b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/NodesTableWidget.ui.xml
new file mode 100644
index 0000000..9c48d77
--- /dev/null
+++ b/hyracks-admin-console/src/main/java/edu/uci/ics/hyracks/adminconsole/client/widgets/NodesTableWidget.ui.xml
@@ -0,0 +1,9 @@
+<!DOCTYPE ui:UiBinder
+  SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"
+>
+<ui:UiBinder
+  xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui'
+  xmlns:c='urn:import:com.google.gwt.user.cellview.client'>
+  <c:CellTable ui:field="table" width="100%"></c:CellTable>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/resources/edu/uci/ics/hyracks/adminconsole/HyracksAdminConsole.gwt.xml b/hyracks-admin-console/src/main/resources/edu/uci/ics/hyracks/adminconsole/HyracksAdminConsole.gwt.xml
new file mode 100644
index 0000000..765ad1b
--- /dev/null
+++ b/hyracks-admin-console/src/main/resources/edu/uci/ics/hyracks/adminconsole/HyracksAdminConsole.gwt.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module rename-to='HyracksAdminConsole'>
+  <!-- Inherit the core Web Toolkit stuff.                        -->
+  <inherits name='com.google.gwt.user.User' />
+  <inherits name='com.google.gwt.http.HTTP' />
+  <inherits name='com.googlecode.gchart.GChart' />
+
+  <inherits name='com.google.gwt.user.theme.standard.Standard' />
+  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
+  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
+
+  <!-- Other module inherits                                      -->
+
+  <!-- Specify the app entry point class.                         -->
+  <entry-point class='edu.uci.ics.hyracks.adminconsole.client.HyracksAdminConsole' />
+
+  <!-- Specify the paths for translatable code                    -->
+  <source path='client' />
+
+  <!--set-property name="user.agent" value="safari"></set-property-->
+  <set-configuration-property name="UiBinder.useSafeHtmlTemplates" value="true"/>
+</module>
diff --git a/hyracks-admin-console/src/main/resources/edu/uci/ics/hyracks/adminconsole/client/Messages.properties b/hyracks-admin-console/src/main/resources/edu/uci/ics/hyracks/adminconsole/client/Messages.properties
new file mode 100644
index 0000000..c222555
--- /dev/null
+++ b/hyracks-admin-console/src/main/resources/edu/uci/ics/hyracks/adminconsole/client/Messages.properties
@@ -0,0 +1,2 @@
+sendButton = Send
+nameField = Enter your name
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/webapp/HyracksAdminConsole.css b/hyracks-admin-console/src/main/webapp/HyracksAdminConsole.css
new file mode 100644
index 0000000..7aca7ac
--- /dev/null
+++ b/hyracks-admin-console/src/main/webapp/HyracksAdminConsole.css
@@ -0,0 +1,34 @@
+/** Add css rules here for your application. */
+
+
+/** Example rules used by the template application (remove for your app) */
+h1 {
+  font-size: 2em;
+  font-weight: bold;
+  color: #777777;
+  margin: 40px 0px 70px;
+  text-align: center;
+}
+
+.sendButton {
+  display: block;
+  font-size: 16pt;
+}
+
+/** Most GWT widgets already have a style name defined */
+.gwt-DialogBox {
+  width: 400px;
+}
+
+.dialogVPanel {
+  margin: 5px;
+}
+
+.serverResponseLabelError {
+  color: red;
+}
+
+/** Set ids using widget.getElement().setId("idOfElement") */
+#closeButton {
+  margin: 15px 6px 6px;
+}
diff --git a/hyracks-admin-console/src/main/webapp/HyracksAdminConsole.html b/hyracks-admin-console/src/main/webapp/HyracksAdminConsole.html
new file mode 100644
index 0000000..b909e08
--- /dev/null
+++ b/hyracks-admin-console/src/main/webapp/HyracksAdminConsole.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    <link type="text/css" rel="stylesheet" href="HyracksAdminConsole.css">
+    <title>Hyracks Administration Console</title>
+    <script type="text/javascript" language="javascript" src="HyracksAdminConsole/HyracksAdminConsole.nocache.js"></script>
+  </head>
+  <body>
+    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
+    <noscript>
+      <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
+        Your web browser must have JavaScript enabled
+        in order for this application to display correctly.
+      </div>
+    </noscript>
+  </body>
+</html>
\ No newline at end of file
diff --git a/hyracks-admin-console/src/main/webapp/WEB-INF/web.xml b/hyracks-admin-console/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..8c1ab37
--- /dev/null
+++ b/hyracks-admin-console/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app
+    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+    "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+
+  <!-- Servlets -->
+  <!--servlet>
+    <servlet-name>greetServlet</servlet-name>
+    <servlet-class>edu.uci.ics.hyracks.adminconsole.server.GreetingServiceImpl</servlet-class>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>greetServlet</servlet-name>
+    <url-pattern>/HyracksAdminConsole/greet</url-pattern>
+  </servlet-mapping-->
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>HyracksAdminConsole.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
