Bug 514544 - Landing page for Oxygen

Change-Id: Ia83830520ac99cf9f9033b36e26c554486cf1c0d
Signed-off-by: Eric Poirier <eric.poirier@eclipse-foundation.org>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..31191d4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/bower_components/
+/node_modules/
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 0000000..f22efe5
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,81 @@
+/**
+ * Eclipse Downloads Grunt File
+ *
+ * Copyright (c) 2017 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eric Poirier (Eclipse Foundation) - initial API and implementation
+ */
+module.exports = function(grunt) {
+    // Initializing the configuration object
+    grunt.initConfig({
+        // Task configuration
+        copy: {
+          main: {
+              files: [
+                // includes files within path
+                {
+                    expand: true,
+                    cwd: 'bower_components/solstice-assets/images/eclipse_org/oxygen',
+                    src: ['**'],
+                    dest: 'public/images/',
+                    filter: 'isFile'
+                }
+              ]
+          }
+        },
+        less: {
+            development: {
+                options: {
+                    compress: true,
+                    // minifying the result
+                },
+                files: {
+                    // compiling styles.less into styles.css
+                    "public/stylesheets/oxygen.min.css": "bower_components/solstice-assets/stylesheets/eclipse_org/oxygen/oxygen.less",
+                }
+            }
+        },
+        uglify: {
+            options: {
+                mangle: false
+                // Use if you want the names of your functions and variables
+                // unchanged.
+            },
+            js_files: {
+                files: {
+                    'public/javascript/oxygen.min.js': 'src/javascript/oxygen.js',
+                }
+            },
+        },
+        watch: {
+            js_files: {
+                files: ['src/javascript/oxygen.js'],
+                tasks: ['uglify:js_files']
+            },
+            less: {
+                files: ['src/stylesheets/**/*.less',
+                        'bower_components/solstice-assets/less/*.less',
+                        'bower_components/solstice-assets/**/*.less',
+                ],
+                tasks: ['less'],
+                options: {
+                    livereload: true
+                    // reloads the browser
+                }
+            },
+        }
+    });
+    // Plugin loading
+    grunt.loadNpmTasks('grunt-contrib-copy');
+    grunt.loadNpmTasks('grunt-contrib-watch');
+    grunt.loadNpmTasks('grunt-contrib-less');
+    grunt.loadNpmTasks('grunt-contrib-uglify');
+    // Task definition
+    grunt.registerTask('default', ['watch']);
+    grunt.registerTask('init', ['copy','watch']);
+};
\ No newline at end of file
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..e46889e
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,21 @@
+{
+  "name": "eclipse-oxygen",
+  "version": "0.0.1",
+  "authors": [
+    "Eric Poirier <eric@eclipse.org>"
+  ],
+  "description": "Assets for eclipse.org Oxygen section.",
+  "license": "EPL",
+  "homepage": "https://www.eclipse.org/oxygen",
+  "private": true,
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "devDependencies": {
+    "solstice-assets": "git@github.com:EclipseFdn/solstice-assets.git"
+  }
+}
diff --git a/content/en_index.php b/content/en_index.php
index f4ae120..37568b3 100755
--- a/content/en_index.php
+++ b/content/en_index.php
@@ -8,13 +8,186 @@
  *
  * Contributors:
  *    Christopher Guindon (Eclipse Foundation) - Initial implementation
+ *    Eric Poirier (Eclipse Foundation)
  *******************************************************************************/
+
+// Get Oxygen Content
+$oxygen_content_items = json_decode(file_get_contents("oxygen-content.json"), TRUE);
+
 ?>
 
-<div class="text-center">
-  <h1 class="sr-only">Oxygen</h1>
-  <h2 class="sr-only">Coming Soon June 28, 2017</h2>
-  <a href="/downloads/index-developer.php?oxygen">
-    <img src="images/oxygen_splash.jpg" class="img-responsive center-block">
-  </a>
+<div class="oxygen-header">
+  <div class="container">
+    <h1 class="sr-only">Oxygen</h1>
+      <h2 class="release-date">June 28, 2017</h2>
+      <?php //foreach ($links['links'] as $link): ?>
+       <!--  <a class="btn btn-xl btn-oxygen hidden-xs hidden-sm hidden-md" href="<?php //print $link; ?>">Download</a> -->
+      <?php //endforeach;?>
+  </div>
+</div>
+
+<div class="oxygen-stats">
+  <div class="container">
+    <div class="row">
+      <?php foreach ($oxygen_content_items['stats'] as $item) :?>
+      <div class="col-sm-6 col-xs-12 stats-item">
+        <div class="row">
+          <div class="col-xs-10 col-sm-12 padding-right-10">
+            <img class="img-responsive" src="<?php print $item['image_url']; ?>" alt="<?php print $item['image_alt']; ?>">
+          </div>
+          <div class="col-xs-14 col-sm-12 padding-left-0">
+            <p class="stats-item-number">
+              <span class="stats-item-digit"><?php print $item['number']; ?></span>
+              <?php print isset($item['number_suffix']) ? $item['number_suffix'] : ""; ?>
+            </p>
+            <p class="stats-item-title"><?php print $item['title']; ?></p>
+          </div>
+        </div>
+      </div>
+      <?php endforeach; ?>
+    </div>
+  </div>
+</div>
+
+<div class="oxygen-key-features">
+  <div class="container text-center">
+    <!-- <h2 class="oxygen-subtitle">Key Features</h2>
+    <div class="row">
+      <?php //$i = 1; ?>
+      <?php //foreach ($oxygen_content_items['key_features'] as $item) :?>
+        <div class="col-sm-8 key-features-item">
+          <img alt="<?php// print $item['image_alt']; ?>" src="<?php //print $item['image_url']; ?>">
+          <h3 class="key-features-item-title"><?php //print $item['title']; ?></h3>
+          <p><?php //print $item['text']; ?></p>
+        </div>
+        <?php //if ($i === 3) :?>
+          </div>
+          <div class="row">
+        <?php //endif; ?>
+        <?php //$i++ ?>
+      <?php //endforeach; ?>
+    </div> -->
+
+    <ul class="list-inline">
+      <li><a href="https://www.eclipse.org/downloads/eclipse-packages/" class="btn btn-oxygen btn-lg">Packages</a></li>
+      <!-- <li><a href="#" class="btn btn-oxygen btn-lg">Resources</a></li> -->
+      <li><a href="https://projects.eclipse.org/releases/oxygen" class="btn btn-oxygen btn-lg">Projects</a></li>
+      <!-- <li><a href="#" class="btn btn-oxygen btn-lg">New and Noteworthy</a></li> -->
+    </ul>
+  </div>
+</div>
+
+<div class="oxygen-slideshow">
+  <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
+    <!-- Indicators -->
+    <ol class="carousel-indicators">
+      <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
+      <li data-target="#carousel-example-generic" data-slide-to="1"></li>
+    </ol>
+
+    <!-- Wrapper for slides -->
+    <div class="carousel-inner" role="listbox">
+      <?php foreach ($oxygen_content_items['slideshow'] as $item) : ?>
+        <div class="item slideshow-item <?php print isset($item['active']) ? $item['active'] : ""; ?>">
+          <div class="container">
+            <div class="row">
+              <div class="col-md-8">
+                <h2 class="oxygen-subtitle"><?php print $item['title']; ?></h2>
+                <p class="slideshow-item-text"><?php print $item['text']; ?></p>
+              </div>
+              <div class="col-md-16">
+                <img class="img-responsive" src="<?php print $item['image_url']; ?>" alt="<?php print $item['image_alt']; ?>">
+              </div>
+            </div>
+          </div>
+        </div>
+      <?php endforeach; ?>
+    </div>
+
+    <!-- Controls -->
+    <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
+      <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
+      <span class="sr-only">Previous</span>
+    </a>
+    <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
+      <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
+      <span class="sr-only">Next</span>
+    </a>
+  </div>
+</div>
+
+
+<div class="oxygen-webinars">
+  <div class="container">
+    <h2 class="oxygen-subtitle">Webinars</h2>
+    <div class="row">
+      <div class="col-md-5 text-center">
+        <div class="webinars-icon-wrapper"><img class="hidden-xs webinars-icon img-responsive" src="/oxygen/public/images/webinars-icon.png"></div>
+        <p class="webinars-icon-text text-justify">Join the Virtual Eclipse Community MeetUp (vECM). Learn from the experts and
+            discover what's new in the Eclipse Oxygen Release Train (June 28). Register
+            today! It's free. #VirtualEclipse</p>
+      </div>
+      <div class="col-md-19">
+        <?php foreach ($oxygen_content_items['webinars'] as $item) :?>
+          <div class="row webinars-item">
+            <div class="col-sm-6">
+              <p class="oxygen-item-date"><?php print $item['date']; ?></p>
+            </div>
+            <div class="col-sm-8">
+              <p class="webinars-item-text"><?php print $item['text']; ?></p>
+              <p class="webinars-item-text"><?php print $item['time']; ?></p>
+              <p class="webinars-item-speaker"><?php print $item['speaker']; ?></p>
+            </div>
+            <div class="col-sm-10">
+              <p><a class="btn btn-oxygen" href="<?php print $item['button_link']; ?>"><?php print $item['button_title']; ?></a></p>
+            </div>
+          </div>
+        <?php endforeach; ?>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="oxygen-news">
+  <div class="container">
+    <h2 class="oxygen-subtitle">News and Social Media</h2>
+    <div class="row">
+      <div class="col-md-18">
+        <?php $count = count($oxygen_content_items['news']) - 1; ?>
+        <?php foreach ($oxygen_content_items['news'] as $key => $item) :?>
+          <div class="row news-item">
+            <div class="col-sm-6">
+              <p class="oxygen-item-date"><?php print $item['date']; ?></p>
+            </div>
+            <div class="col-sm-18">
+              <p class="margin-bottom-0"><a class="news-item-link" href="<?php print $item['title']['link']?>"><?php print $item['title']['text']?></a></p>
+              <p><?php print $item['text']?></p>
+              <?php if ($key == $count): ?>
+                <p class="margin-top-20"><a class="btn btn-oxygen" href="#">Read More</a></p>
+              <?php endif; ?>
+            </div>
+          </div>
+        <?php endforeach; ?>
+      </div>
+      <div class="col-md-6">
+        <h3 class="news-item-twitter-title">#EclipseOxygen</h3>
+        <div class="news-item-twitter">
+          <a class="twitter-timeline"
+          data-dnt="true"
+          href="https://twitter.com/hashtag/EclipseOxygen"
+          data-widget-id="859841735580692481"
+          data-chrome="noheader transparent noscrollbar nofooter"
+          data-link-color="#69c1bd"
+          data-show-replies="false"
+          data-height="300"
+          data-theme="dark">#EclipseOxygen Tweets</a>
+          <script>
+            !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';
+            if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";
+            fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
+          </script>
+        </div>
+      </div>
+    </div>
+  </div>
 </div>
\ No newline at end of file
diff --git a/index.php b/index.php
index 98ed484..8661f52 100644
--- a/index.php
+++ b/index.php
@@ -11,12 +11,40 @@
  *******************************************************************************/
 
   require_once(realpath(dirname(__FILE__) . "/../eclipse.org-common/system/app.class.php"));
+  require_once(realpath(dirname(__FILE__) . "/../eclipse.org-common/system/eclipseenv.class.php"));
+  require_once(realpath(dirname(__FILE__) . "/../eclipse.org-common/classes/downloads/eclipseInstaller.php"));
 
   $App = new App();
+  $EclipseEnv = new EclipseEnv();
+  $eclipse_env = $EclipseEnv->getEclipseEnv();
+
+  $EclipseInstaller = new EclipseInstaller('oxygen/R');
+  $EclipseInstaller->setInstallerLayout('layout_a');
+
+  $links = array("links" => array("#"));
+  if ($eclipse_env['shortname'] === "prod") {
+    $links = $EclipseInstaller->getInstallerLinks('64bit');
+  }
+
+  #redirect the user if he already saw the oxygen landing page
+  $uri = explode("/", $_SERVER['REQUEST_URI']);
+  if (strtolower($uri[1]) != 'oxygen') {
+    if (!isset($_COOKIE['eclipse_oxygen'])){
+      setcookie('eclipse_oxygen', 'eclipse_oxygen', time()+3600*24*365, "/");
+    }
+    else {
+      header('Location: /home/index.php', TRUE, 302);
+      exit();
+    }
+  }
 
     // Custom theme variables
   $variables = array();
   $variables['hide_breadcrumbs'] = TRUE;
+  $variables['main_container_classes'] = 'container-full breadcrumbs-offset footer-offset';
+  $variables['btn_cfa']['text'] = "Donate";
+  $variables['btn_cfa']['href'] = 'https://www.eclipse.org/donate/';
+  $variables['btn_cfa']['class'] = 'btn btn-huge btn-oxygen-donate';
   $App->setThemeVariables($variables);
 
   $Theme = $App->getThemeClass($theme);
@@ -32,4 +60,6 @@
   $html = ob_get_clean();
 
   $Theme->setHtml($html);
+  $App->AddExtraJSFooter('<script type="text/javascript" src="/oxygen/public/javascript/oxygen.min.js"></script>');
+  $Theme->setExtraHeaders('<link href="/oxygen/public/stylesheets/oxygen.min.css" media="screen" rel="stylesheet" type="text/css"/>');
   $Theme->generatePage();
diff --git a/oxygen-content.json b/oxygen-content.json
new file mode 100644
index 0000000..ae2acd7
--- /dev/null
+++ b/oxygen-content.json
@@ -0,0 +1,163 @@
+{
+
+
+  "stats": [
+    {
+      "image_url": "/oxygen/public/images/stats-icon-projects.png",
+      "image_alt": "Projects icon",
+      "number": "77",
+      "title": "Projects"
+    },
+    {
+      "image_url": "/oxygen/public/images/stats-icon-committers.png",
+      "image_alt": "Committers icon",
+      "number": "450",
+      "title": "Committers"
+    },
+    {
+      "image_url": "/oxygen/public/images/stats-icon-code.png",
+      "image_alt": "Code icon",
+      "number": "65",
+      "number_suffix": "M",
+      "title": "Lines of Code"
+    },
+    {
+      "image_url": "/oxygen/public/images/stats-icon-contributors.png",
+      "image_alt": "Contributors icon",
+      "number": "1200",
+      "title": "Contributors"
+    }
+  ],
+  
+  
+  "key_features": [
+    {
+      "image_url": "/oxygen/public/images/key-features-01.png",
+      "image_alt": "Key Feature #1",
+      "title": "In venenatis mattis",
+      "text": "New tools for JavaScript developers, including a JSON editor."
+    },
+    {
+      "image_url": "/oxygen/public/images/key-features-02.png",
+      "image_alt": "Key Feature #1",
+      "title": "In venenatis mattis",
+      "text": "New tools for JavaScript developers, including a JSON editor, support for Grunt/Gulp and new Chromium V8 Debugger."
+    },
+    {
+      "image_url": "/oxygen/public/images/key-features-03.png",
+      "image_alt": "Key Feature #1",
+      "title": "In venenatis mattis",
+      "text": "New tools for JavaScript developers, including a JSON editor, support for Grunt/Gulp."
+    },
+    {
+      "image_url": "/oxygen/public/images/key-features-04.png",
+      "image_alt": "Key Feature #1",
+      "title": "In venenatis mattis",
+      "text": "New tools for JavaScript developers, including a JSON editor, support for Grunt/Gulp and new Chromium V8 Debugger."
+    },
+    {
+      "image_url": "/oxygen/public/images/key-features-05.png",
+      "image_alt": "Key Feature #1",
+      "title": "In venenatis mattis",
+      "text": "New tools for JavaScript developers, including a JSON editor, support for Grunt/Gulp and new Chromium."
+    },
+    {
+      "image_url": "/oxygen/public/images/key-features-06.png",
+      "image_alt": "Key Feature #1",
+      "title": "In venenatis mattis",
+      "text": "New tools for JavaScript developers, including a JSON editor."
+    }
+  ],
+  
+  
+  "slideshow": [
+    {
+      "active": "active",
+      "comment": {
+        
+      },
+      "title": "Darker and Better dark theme on all platforms",
+      "text": "Eclipse looks better in dark than ever with all the improvements that have been made this year. All platforms have seen improvements, and among others, table headers and popup now looks way darker than before.",
+      "image_url": "/oxygen/public/images/oxygen_darktheme_linux.jpg",
+      "image_alt": "Oxygen IDE screenshot"
+    },
+    {
+      "title": "Debug faster with Java Development Tool",
+      "text": "The return value of the last method call is always displayed in the variable view when you debug some Java code. No more need to create temporary variable to find and eradicate sneaky bugs!",
+      "image_url": "/oxygen/public/images/oxygen_jdt_debug.png",
+      "image_alt": "Oxygen IDE screenshot"
+    }
+  ],
+  
+  
+  "webinars": [
+    {
+      "date": "June 20",
+      "text": "EclEmma - Code Coverage in Practice",
+      "time": "11am EDT",
+      "speaker": "Marc R. Hoffmann",
+      "button_title": "RSVP",
+      "button_link": "https://www.meetup.com/Virtual-Eclipse-Community-MeetUp/events/239923584"
+    },
+    {
+      "date": "June 21",
+      "text": "PHP Development Tools (PDT) 5.0",
+      "time": "11am EDT",
+      "speaker": "Kaloyan Raev",
+      "button_title": "RSVP",
+      "button_link": "https://www.meetup.com/Virtual-Eclipse-Community-MeetUp/events/239304732/"
+    },
+    {
+      "date": "June 26",
+      "text": "Eclipse Oxygen Series: New in Xtext: Core Framework, LSP, Tracing Code Generator",
+      "time": "11am EDT",
+      "speaker": "Sven Efftinge, Miro Spönemann",
+      "button_title": "RSVP",
+      "button_link": "https://www.meetup.com/Virtual-Eclipse-Community-MeetUp/events/240208154/"
+    },
+    {
+      "date": "June 27",
+      "text": "What's New in Eclipse SDK/Platform?",
+      "time": "9am EDT",
+      "speaker": "Lakshmi P Shanmugam",
+      "button_title": "RSVP",
+      "button_link": "https://www.meetup.com/Virtual-Eclipse-Community-MeetUp/events/239923689/"
+    },
+    {
+      "date": "June 29",
+      "text": "Eclipse Sirius 5.0, All about UX",
+      "time": "10am EDT",
+      "speaker": "Mélanie Bats, Stéphane Bégaudeau",
+      "button_title": "RSVP",
+      "button_link": "https://www.meetup.com/Virtual-Eclipse-Community-MeetUp/events/239923903/"
+    }
+  ],
+  
+  
+  "news": [
+    {
+      "date": "April 20",
+      "title": {
+        "text": "Eclipse Newsletter - Mastering Eclipse CDT",
+        "link": "#"
+      },
+      "text": "Learn all about Eclipse CDT, a fully functional C & C++ IDE for the Eclipse platform in this month's newsletter."
+    },
+    {
+      "date": "April 19",
+      "title": {
+        "text": "IoT Developer Trends - 2017 Edition",
+        "link": "#"
+      },
+      "text": "The third annual IoT Developer Survey results are now available! What has changed in IoT this year?"
+    },
+    {
+      "date": "April 18",
+      "title": {
+        "text": "EPLv2: A New Version of the Eclipse Public License",
+        "link": "#"
+      },
+      "text": "Participate in the community discussion on the Eclipse Foundation's revised Eclipse Public License (EPL)."
+    }
+  ]
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..35a2ac9
--- /dev/null
+++ b/package.json
@@ -0,0 +1,25 @@
+{
+  "name": "eclipse-oxygen",
+  "version": "0.0.1",
+  "description": "Assets for eclipse.org oxygen section.",
+  "main": "Gruntfile.js",
+  "author": "Eric Poirier",
+  "license": "EPL",
+  "bugs": {
+    "url": "https://bugs.eclipse.org/bugs/buglist.cgi?component=Website&list_id=8318814&product=Community&resolution=---"
+  },
+  "scripts": {
+    "grunt": "node_modules/.bin/grunt",
+    "bower": "node_modules/.bin/bower"
+  },
+  "readmeFilename": "README.md",
+  "devDependencies": {
+    "bower": "^1.4.1",
+    "grunt": "^0.4.5",
+    "grunt-cli": "^0.1.13",
+    "grunt-contrib-copy": "^0.5.0",
+    "grunt-contrib-less": "^1.0.1",
+    "grunt-contrib-uglify": "^0.9.1",
+    "grunt-contrib-watch": "^0.6.1"
+  }
+}
diff --git a/public/images/header-logo-trees-mobile.png b/public/images/header-logo-trees-mobile.png
new file mode 100644
index 0000000..f7b5ae8
--- /dev/null
+++ b/public/images/header-logo-trees-mobile.png
Binary files differ
diff --git a/public/images/header-logo-trees.png b/public/images/header-logo-trees.png
new file mode 100644
index 0000000..07bd991
--- /dev/null
+++ b/public/images/header-logo-trees.png
Binary files differ
diff --git a/public/images/header-mountains.png b/public/images/header-mountains.png
new file mode 100644
index 0000000..f126d59
--- /dev/null
+++ b/public/images/header-mountains.png
Binary files differ
diff --git a/public/images/key-features-bottom-waves.png b/public/images/key-features-bottom-waves.png
new file mode 100644
index 0000000..6606f4b
--- /dev/null
+++ b/public/images/key-features-bottom-waves.png
Binary files differ
diff --git a/public/images/key-features-bubbles.png b/public/images/key-features-bubbles.png
new file mode 100644
index 0000000..5029b45
--- /dev/null
+++ b/public/images/key-features-bubbles.png
Binary files differ
diff --git a/public/images/license.md b/public/images/license.md
new file mode 100644
index 0000000..03ca56b
--- /dev/null
+++ b/public/images/license.md
@@ -0,0 +1,3 @@
+Font Awesome License:
+
+http://fontawesome.io/license/
\ No newline at end of file
diff --git a/public/images/news-sm-corals-left.png b/public/images/news-sm-corals-left.png
new file mode 100644
index 0000000..ac8e988
--- /dev/null
+++ b/public/images/news-sm-corals-left.png
Binary files differ
diff --git a/public/images/news-sm-corals-right.png b/public/images/news-sm-corals-right.png
new file mode 100644
index 0000000..13145f6
--- /dev/null
+++ b/public/images/news-sm-corals-right.png
Binary files differ
diff --git a/public/images/oxygen_darktheme_linux.jpg b/public/images/oxygen_darktheme_linux.jpg
new file mode 100644
index 0000000..1e01aa2
--- /dev/null
+++ b/public/images/oxygen_darktheme_linux.jpg
Binary files differ
diff --git a/public/images/oxygen_jdt_debug.png b/public/images/oxygen_jdt_debug.png
new file mode 100644
index 0000000..9270a54
--- /dev/null
+++ b/public/images/oxygen_jdt_debug.png
Binary files differ
diff --git a/images/oxygen_splash.jpg b/public/images/oxygen_splash.jpg
similarity index 100%
rename from images/oxygen_splash.jpg
rename to public/images/oxygen_splash.jpg
Binary files differ
diff --git a/public/images/slideshow-bottom-waves.png b/public/images/slideshow-bottom-waves.png
new file mode 100644
index 0000000..054000f
--- /dev/null
+++ b/public/images/slideshow-bottom-waves.png
Binary files differ
diff --git a/public/images/slideshow-bubbles.png b/public/images/slideshow-bubbles.png
new file mode 100644
index 0000000..adea6d8
--- /dev/null
+++ b/public/images/slideshow-bubbles.png
Binary files differ
diff --git a/public/images/slideshow-fishes.png b/public/images/slideshow-fishes.png
new file mode 100644
index 0000000..e38cf66
--- /dev/null
+++ b/public/images/slideshow-fishes.png
Binary files differ
diff --git a/public/images/slideshow-screenshots-01.png b/public/images/slideshow-screenshots-01.png
new file mode 100644
index 0000000..d59d410
--- /dev/null
+++ b/public/images/slideshow-screenshots-01.png
Binary files differ
diff --git a/public/images/stats-bottom-waves.png b/public/images/stats-bottom-waves.png
new file mode 100644
index 0000000..3e99cfb
--- /dev/null
+++ b/public/images/stats-bottom-waves.png
Binary files differ
diff --git a/public/images/stats-icon-code.png b/public/images/stats-icon-code.png
new file mode 100644
index 0000000..a5761a8
--- /dev/null
+++ b/public/images/stats-icon-code.png
Binary files differ
diff --git a/public/images/stats-icon-committers.png b/public/images/stats-icon-committers.png
new file mode 100644
index 0000000..1e2cd31
--- /dev/null
+++ b/public/images/stats-icon-committers.png
Binary files differ
diff --git a/public/images/stats-icon-contributors.png b/public/images/stats-icon-contributors.png
new file mode 100644
index 0000000..81e752b
--- /dev/null
+++ b/public/images/stats-icon-contributors.png
Binary files differ
diff --git a/public/images/stats-icon-projects.png b/public/images/stats-icon-projects.png
new file mode 100644
index 0000000..0774a60
--- /dev/null
+++ b/public/images/stats-icon-projects.png
Binary files differ
diff --git a/public/images/webinars-bottom-waves.png b/public/images/webinars-bottom-waves.png
new file mode 100644
index 0000000..7314f55
--- /dev/null
+++ b/public/images/webinars-bottom-waves.png
Binary files differ
diff --git a/public/images/webinars-bubbles.png b/public/images/webinars-bubbles.png
new file mode 100644
index 0000000..59ce118
--- /dev/null
+++ b/public/images/webinars-bubbles.png
Binary files differ
diff --git a/public/images/webinars-icon.png b/public/images/webinars-icon.png
new file mode 100644
index 0000000..6e0e5f3
--- /dev/null
+++ b/public/images/webinars-icon.png
Binary files differ
diff --git a/public/javascript/oxygen.min.js b/public/javascript/oxygen.min.js
new file mode 100644
index 0000000..9af70ad
--- /dev/null
+++ b/public/javascript/oxygen.min.js
@@ -0,0 +1 @@
+$(function(){$(".stats-item-digit").each(function(){$(this).prop("Count",0).animate({Count:$(this).text()},{duration:1e3,step:function(number){$(this).text(Math.ceil(number))}})})});
\ No newline at end of file
diff --git a/public/stylesheets/oxygen.min.css b/public/stylesheets/oxygen.min.css
new file mode 100644
index 0000000..e75611e
--- /dev/null
+++ b/public/stylesheets/oxygen.min.css
@@ -0,0 +1 @@
+body{font-size:16px}.oxygen-subtitle{color:#fff;text-align:center;font-size:2.5em;margin-bottom:30px}@media (max-width:1199px){.oxygen-subtitle{font-size:2em}}.oxygen-header{background-color:#6d6d6d;background-image:url('../images/header-mountains.png');background-position:bottom right;background-repeat:no-repeat;background-size:contain;height:340px;padding:30px 0 60px;position:relative}@media (min-width:768px){.oxygen-header{padding:60px 0}}@media (max-width:767px){.oxygen-header{height:200px}}.oxygen-header:after{position:absolute;bottom:0;content:"";background-image:url('../images/header-logo-trees.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 150px;height:150px;width:100%;background-size:auto}@media (max-width:1199px){.oxygen-header:after{background-size:auto}}@media (min-width:1199px) and (max-width:1024px){.oxygen-header:after{background-size:120%}}@media (max-width:1199px){.oxygen-header:after{position:absolute;bottom:0;content:"";background-image:url('../images/header-logo-trees-mobile.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 150px;height:150px;width:100%}}@media (max-width:1199px) and (max-width:1199px){.oxygen-header:after{background-size:contain}}@media (max-width:1199px) and (min-width:1199px) and (max-width:1024px){.oxygen-header:after{background-size:120%}}@media (min-width:768px) and (max-width:1199px){.oxygen-header:after{position:absolute;bottom:0;content:"";background-image:url('../images/header-logo-trees.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 150px;height:150px;width:100%;background-position:-375px 30px}}@media (min-width:768px) and (max-width:1199px) and (max-width:1199px){.oxygen-header:after{background-size:auto}}@media (min-width:768px) and (max-width:1199px) and (min-width:1199px) and (max-width:1024px){.oxygen-header:after{background-size:120%}}.oxygen-header .release-date{color:#fff;font-size:40px;font-weight:bold}@media (min-width:768px){.oxygen-header .release-date{font-size:55px;padding-top:70px}}@media (max-width:767px){.oxygen-header .release-date{padding-left:20px}}.oxygen-stats{padding:50px 0 80px;position:relative}@media (max-width:1199px){.oxygen-stats{padding:50px 0 65px}}@media (max-width:767px){.oxygen-stats{padding:30px 0 40px}}.oxygen-stats:after{position:absolute;bottom:0;content:"";background-image:url('../images/stats-bottom-waves.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 37px;height:37px;width:100%}@media (max-width:1199px){.oxygen-stats:after{background-size:cover}}@media (min-width:1199px) and (max-width:1024px){.oxygen-stats:after{background-size:120%}}.oxygen-stats .stats-item{margin-bottom:15px}.oxygen-stats .stats-item-image{max-width:50px}.oxygen-stats .stats-item-number{font-size:2.5em;padding-top:25px;margin-bottom:0;line-height:1em;font-weight:100}@media (max-width:1199px){.oxygen-stats .stats-item-number{font-size:2em;padding-top:10px}}@media (max-width:767px){.oxygen-stats .stats-item-number{font-size:2em;padding-top:0}}.oxygen-stats .stats-item-title{margin-bottom:0;font-size:.9em;font-weight:700}@media (max-width:767px){.oxygen-stats .stats-item-title{margin-bottom:10px}}.oxygen-key-features{background-color:#edf6fe;background-image:url('../images/key-features-bubbles.png');background-repeat:no-repeat;background-position:top center;padding:50px 0 150px;position:relative}@media (max-width:1199px){.oxygen-key-features{padding:30px 0 150px}}@media (max-width:767px){.oxygen-key-features{padding:0 0 150px;background-repeat:repeat-y}}.oxygen-key-features:after{position:absolute;bottom:0;content:"";background-image:url('../images/key-features-bottom-waves.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 138px;height:138px;width:100%}@media (max-width:1199px){.oxygen-key-features:after{background-size:cover}}@media (min-width:1199px) and (max-width:1024px){.oxygen-key-features:after{background-size:120%}}.oxygen-key-features .oxygen-subtitle{color:#6d6d6d}.oxygen-key-features .key-features-item{margin-bottom:15px;padding:0 45px}.oxygen-key-features .key-features-item-title{font-size:1em;color:#333;font-weight:700;margin-bottom:0}.oxygen-slideshow{padding:80px 0;background-color:#454884;background-image:url('../images/slideshow-bubbles.png');background-repeat:no-repeat;background-position:top center;position:relative}@media (max-width:1199px){.oxygen-slideshow{padding:0 0 20px}}@media (min-width:768px){.oxygen-slideshow:after{position:absolute;bottom:0;content:"";background-image:url('../images/slideshow-fishes.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 127px;height:127px;width:100%}}@media (min-width:768px) and (max-width:1199px){.oxygen-slideshow:after{background-size:cover}}@media (min-width:768px) and (min-width:1199px) and (max-width:1024px){.oxygen-slideshow:after{background-size:120%}}.oxygen-slideshow .slideshow-item{text-align:center}.oxygen-slideshow .slideshow-item-text{color:#fff}@media (max-width:1199px){.oxygen-slideshow .slideshow-item-text{margin-bottom:40px}}.oxygen-webinars{position:relative;background-color:#171738;padding:50px 0 160px;background-image:url('../images/webinars-bubbles.png');background-repeat:no-repeat;background-position:top center;color:#fff}@media (max-width:1199px){.oxygen-webinars{padding:30px 0 160px}}@media (max-width:767px){.oxygen-webinars{padding:20px 0 100px;background-repeat:repeat-y}}.oxygen-webinars:before{position:absolute;top:-83px;content:"";background-image:url('../images/slideshow-bottom-waves.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 83px;height:83px;width:100%}@media (max-width:1199px){.oxygen-webinars:before{background-size:cover}}.oxygen-webinars:after{position:absolute;bottom:0;content:"";background-image:url('../images/webinars-bottom-waves.png');background-repeat:no-repeat;background-position:bottom center;background-size:100% 150px;height:150px;width:100%}@media (max-width:1199px){.oxygen-webinars:after{background-size:cover}}@media (min-width:1199px) and (max-width:1024px){.oxygen-webinars:after{background-size:120%}}.oxygen-webinars .oxygen-subtitle{margin-bottom:30px}.oxygen-webinars .webinars-icon-wrapper{border-radius:115px;overflow:hidden;margin-bottom:20px;border:8px solid #69c1bd}.oxygen-webinars .webinars-icon-text{color:#ccc;font-size:14px}@media (max-width:1023px){.oxygen-webinars .webinars-icon{width:100px;margin-bottom:30px}}@media (max-width:767px){.oxygen-webinars .webinars-item{text-align:center;margin-bottom:20px}}.oxygen-webinars .webinars-item-text{font-size:1em;margin-bottom:0}.oxygen-webinars .webinars-item-speaker{color:#69c1bd;font-size:1em;margin-bottom:20px}.oxygen-news{position:relative;background-color:#1c1c23;color:#fff;padding:50px 0 100px}@media (max-width:1199px){.oxygen-news{padding:20px 0 50px}}@media (max-width:767px){.oxygen-news{text-align:center;padding:20px 0 50px}}.oxygen-news .container{z-index:999;position:relative}.oxygen-news:after{z-index:1;position:absolute;bottom:0;left:0;content:"";background-image:url('../images/news-sm-corals-left.png');background-repeat:no-repeat;background-position:bottom left;background-size:initial;height:547px;width:473px}@media (max-width:767px){.oxygen-news:after{display:none}}.oxygen-news:before{z-index:1;position:absolute;bottom:0;right:0;content:"";background-image:url('../images/news-sm-corals-right.png');background-repeat:no-repeat;background-position:bottom right;background-size:initial;height:377px;width:214px}@media (max-width:767px){.oxygen-news .news-item{margin-bottom:20px}}.oxygen-news .news-item-link{color:#fff}.oxygen-news .news-item-link:hover{color:#ccc}.oxygen-news .news-item-twitter{text-align:center}.oxygen-news .news-item-twitter-title{color:#fff;margin-top:0}.oxygen-item-date{color:#69c1bd;font-size:2em;text-align:right;line-height:1;font-weight:700}@media (max-width:1199px){.oxygen-item-date{font-size:2em}}@media (max-width:767px){.oxygen-item-date{text-align:center;font-size:1.8em}}.btn-oxygen{color:#fff;background-color:#69c1bd;border-color:#69c1bd;box-shadow:0 3px 0 #398b87;margin-bottom:15px}.btn-oxygen:hover,.btn-oxygen:active,.btn-oxygen:focus{position:relative;top:3px;color:#69c1bd;box-shadow:none;background-color:#fff}.btn-oxygen-donate{background-color:#58809d;color:#fff}.btn-oxygen-donate:hover{background-color:#7699b2;color:#fff}.btn-xl{padding:25px 60px;font-size:24px;line-height:1.3333333;border-radius:15px}.carousel-control.left,.carousel-control.right{background-image:none}
\ No newline at end of file
diff --git a/src/javascript/oxygen.js b/src/javascript/oxygen.js
new file mode 100644
index 0000000..33dd903
--- /dev/null
+++ b/src/javascript/oxygen.js
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eric Poirier (Eclipse Foundation) - Initial implementation
+ *******************************************************************************/
+
+$(function() {
+
+  // Increment the stats number from 0 to the specified value
+  $('.stats-item-digit').each(function() {
+    $(this).prop('Count', 0).animate({
+      Count: $(this).text()
+    },{
+      duration: 1000,
+      step: function(number) {
+        $(this).text(Math.ceil(number));
+      }
+    });
+  });
+
+});
\ No newline at end of file