commit 51bc13358a9909734a6504ebf29e64b0c06b332d
Author: Konstantin Tarkus <hello@tarkus.me>
Date: Sun, 8 Jun 2014 19:20:36 +0400
Initial commit
Diffstat:
29 files changed, 724 insertions(+), 0 deletions(-)
diff --git a/.editorconfig b/.editorconfig
@@ -0,0 +1,19 @@
+# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
+# http://editorconfig.org
+
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[{.travis.yml,bower.json,package.json,.jshintrc}]
+indent_style = space
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.gitattributes b/.gitattributes
@@ -0,0 +1,5 @@
+# These attributes affect how the contents stored in the repository are copied
+# to the working tree files when commands such as git checkout and git merge run.
+# http://git-scm.com/docs/gitattributes
+
+* text=auto
+\ No newline at end of file
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,13 @@
+# Git uses this file to determine which files and directories to ignore
+# https://help.github.com/articles/ignoring-files
+
+build
+bower_components
+node_modules
+npm-debug.log
+
+## WebStrom
+.idea/
+*.ipr
+*.iws
+*.iml
diff --git a/.jshintrc b/.jshintrc
@@ -0,0 +1,7 @@
+{
+ "globalstrict": true,
+ "globals": {
+ "require": false,
+ "__dirname": false
+ }
+}
+\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - '0.10'
+before_script:
+ - 'npm install -g gulp'
diff --git a/LICENSE.txt b/LICENSE.txt
@@ -0,0 +1,21 @@
+ The MIT License
+
+Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+\ No newline at end of file
diff --git a/README.md b/README.md
@@ -0,0 +1,75 @@
+# KriaSoft React Seed
+
+> **Web Application Front-end Starter Kit** built with [Facebook React](https://github.com/facebook/react).
+
+**Source**: [https://github.com/kriasoft/React-Seed](https://github.com/kriasoft/React-Seed)
+
+#### Runtime Components:
+
+ * [React](https://facebook.github.io/react/) - A JavaScript library for building user interfaces, developed by Facebook
+ * [Bootstrap](http://getbootstrap.com/) - CSS framework for developing responsive, mobile first interfaces
+ * [jQuery](http://jquery.com/) - a JavaScript library designed to simplify the client-side scripting of HTML
+
+#### Development Tools:
+
+ * [Webpack](http://webpack.github.io/) - Compiles front-end source code into modules / bundles
+ * [Gulp](http://gulpjs.com/) - JavaScript streaming build system and task automation
+ * [Karma](http://karma-runner.github.io/) - JavaScript unit-test runner (coming)
+ * [Protractor](https://github.com/angular/protractor) - End-to-end test framework (coming)
+
+### Directory Layout
+
+```
+.
+├── /bower_components/ # 3rd party client-side libraries
+├── /build/ # The folder for compiled output
+├── /docs/ # Documentation files
+├── /node_modules/ # Node.js-based dev tools and utilities
+├── /src/ # The source code of the application
+│ ├── /assets/
+│ ├── /data/
+│ ├── /common/
+│ ├── /images/
+│ ├── /styles/
+│ ├── /services/
+│ ├── /404.html
+│ ├── /app.jsx
+│ ├── /app.less
+│ └── /index.html
+├── /test/ # Unit, integration and load tests
+│ ├── /e2e/ # End-to-end tests
+│ └── /unit/ # Unit tests
+└── ...
+```
+
+### Getting Started
+
+To get started you can simply clone the repo and install the dependencies:
+
+```
+> git clone https://github.com/kriasoft/React-Seed MyApp && cd MyApp
+> npm install -g gulp # Install Gulp task runner globally
+> npm install # Install Node.js components listed in ./package.json
+> bower install # Install Bower components listed in ./bower.json
+```
+
+To compile the application and start a dev server just run:
+
+```
+> gulp
+```
+
+Now browse to the app at [http://localhost:8080/](http://localhost:8080/)
+
+### Authors
+
+ * [Konstantin Tarkus](https://angel.co/koistya) ([@koistya](https://twitter.com/koistya)), KriaSoft LLC
+
+### Support
+
+Need help or willing to contribute? Contact me via email: [hello@tarkus.me](mailto:hello@tarkus.me) or Skype: koistya
+
+### Copyright
+
+ * Source code is licensed under the MIT License. See [LICENSE.txt](./LICENSE.txt) file in the project root.
+ * Documentation to the project is licensed under the [CC BY 4.0](http://creativecommons.org/licenses/by/4.0/) license.
diff --git a/bower.json b/bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "react-seed",
+ "version": "0.0.0",
+ "homepage": "https://github.com/kriasoft/React-Seed",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test"
+ ],
+ "dependencies": {
+ "jquery": "~2.1.1"
+ },
+ "devDependencies": {
+ "bootstrap": "~3.1.1"
+ }
+}
diff --git a/config/webpack.config.js b/config/webpack.config.js
@@ -0,0 +1,64 @@
+// Webpack Configuration
+// http://webpack.github.io/docs/configuration.html
+
+module.exports = function (isDebug) {
+ return {
+ output: {
+ publicPatch: './build/',
+ path: './build/',
+ filename: 'app.js',
+ hideModules: true
+ },
+
+ cache: isDebug,
+ debug: isDebug,
+ devtool: false,
+ entry: './src/app.jsx',
+ qiuet: true,
+
+ stats: {
+ colors: true,
+ reasons: isDebug
+ },
+
+ plugins: isDebug ? [] : [
+ new webpack.optimize.DedupePlugin(),
+ new webpack.optimize.UglifyJsPlugin(),
+ new webpack.optimize.OccurenceOrderPlugin(),
+ new webpack.optimize.AggressiveMergingPlugin()
+ ],
+
+ module: {
+ preLoaders: [
+ {
+ test: '\\.js$',
+ exclude: 'node_modules',
+ loader: 'jshint'
+ }
+ ],
+
+ loaders: [
+ {
+ test: /\.css$/,
+ loader: 'style!css'
+ },
+ {
+ test: /\.gif/,
+ loader: 'url-loader?limit=10000&minetype=image/gif'
+ },
+ {
+ test: /\.jpg/,
+ loader: 'url-loader?limit=10000&minetype=image/jpg'
+ },
+ {
+ test: /\.png/,
+ loader: 'url-loader?limit=10000&minetype=image/png'
+ },
+ {
+ test: /\.jsx$/,
+ loader: 'jsx-loader'
+ }
+ ]
+ }
+ };
+};
+\ No newline at end of file
diff --git a/docs/FAQ.md b/docs/FAQ.md
@@ -0,0 +1,4 @@
+FAQ
+===
+
+...
+\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
@@ -0,0 +1,178 @@
+// For more information on how to configure Gulp.js build system, please visit:
+// https://github.com/gulpjs/gulp/blob/master/docs/API.md
+
+var es = require('event-stream');
+var gulp = require('gulp');
+var changed = require('gulp-changed');
+var embedlr = require('gulp-embedlr');
+var htmlmin = require('gulp-htmlmin');
+var jshint = require('gulp-jshint');
+var less = require('gulp-less');
+var minifyCSS = require('gulp-minify-css');
+var plumber = require('gulp-plumber');
+var uglify = require('gulp-uglify');
+var gutil = require('gulp-util');
+var path = require('path');
+var rimraf = require('rimraf');
+var webpack = require('webpack');
+
+// Settings
+var isDebug = !require('minimist')(process.argv.slice(2)).production;
+var compiler = webpack(require('./config/webpack.config.js')(isDebug));
+
+// A cache for Gulp tasks. It is used as a workaround for Gulp's dependency resolution
+// limitations. It won't be needed anymore starting with Gulp 4.
+var task = {};
+
+// Clean up
+gulp.task('clean', function (cb) {
+ rimraf('./build', cb);
+});
+
+// Copy vendor files
+// -----------------------------------------------------------------------------
+gulp.task('vendor', task.vendor = function () {
+ var pkg = require('./bower.json').dependencies;
+ return es.concat(
+ gulp.src('./bower_components/jquery/dist/**')
+ .pipe(gulp.dest('./build/vendor/jquery-' + pkg.jquery.substring(1))),
+ gulp.src('./bower_components/bootstrap/dist/fonts/**')
+ .pipe(gulp.dest('./build/fonts'))
+ );
+});
+gulp.task('vendor:clean', ['clean'], task.vendor);
+
+// Copy static files / assets
+// -----------------------------------------------------------------------------
+gulp.task('assets', task.assets = function () {
+ return es.concat(
+ gulp.src('./src/assets/**')
+ .pipe(gulp.dest('./build')),
+ gulp.src('./src/images/**')
+ .pipe(gulp.dest('./build/images/')),
+ gulp.src('./src/*.html')
+ .pipe(isDebug ? gutil.noop() : htmlmin({
+ removeComments: true,
+ collapseWhitespace: true,
+ minifyJS: true
+ }))
+ .pipe(isDebug ? embedlr() : gutil.noop())
+ .pipe(gulp.dest('./build'))
+ );
+});
+gulp.task('assets:clean', ['clean'], task.assets);
+
+// CSS stylesheets
+// -----------------------------------------------------------------------------
+gulp.task('styles', task.styles = function () {
+ return gulp.src('./src/app.less')
+ .pipe(plumber())
+ .pipe(less({sourceMap: isDebug, sourceMapBasepath: __dirname}))
+ .on('error', gutil.log)
+ .pipe(isDebug ? gutil.noop() : minifyCSS())
+ .pipe(gulp.dest('./build'));
+});
+gulp.task('styles:clean', ['clean'], task.styles);
+
+// Create JavaScript bundle
+// -----------------------------------------------------------------------------
+gulp.task('bundle', ['clean'], function (cb) {
+ compiler.run(function (err, stats) {
+ if (err) {
+ throw new gutil.PluginError('webpack', err);
+ }
+ gutil.log('[webpack]', stats.toString({colors: true}));
+ cb();
+ });
+});
+gulp.task('bundle:watch', ['clean'], function (cb) {
+ compiler.watch(200, function (err, stats) {
+ if (err) {
+ throw new gutil.PluginError('webpack', err);
+ }
+ gutil.log('[webpack]', stats.toString({colors: true}));
+ if (cb) {
+ cb();
+ cb = null;
+ }
+ });
+});
+
+// Build the app from source code
+// -----------------------------------------------------------------------------
+gulp.task('build', ['vendor:clean', 'assets:clean', 'styles:clean', 'bundle']);
+gulp.task('build:watch', ['vendor:clean', 'assets:clean', 'styles:clean', 'bundle:watch']);
+
+// Launch a lightweight HTTP Server
+// -----------------------------------------------------------------------------
+gulp.task('run', ['build:watch'], function (next) {
+ var url = require('url');
+ var server = require('ecstatic')({root: './', cache: 'no-cache', showDir: true});
+ var port = 8080;
+
+ require('http').createServer()
+ .on('request', function (req, res) {
+ // For non-existent files output the contents of /index.html page in order to make HTML5 routing work
+ var urlPath = url.parse(req.url).pathname;
+ if (urlPath === '/') {
+ req.url = '/build/index.html';
+ } else if (['src', 'bower_components'].indexOf(urlPath.split('/')[1]) === -1) {
+ if (urlPath.length > 3 &&
+ ['src', 'bower_components'].indexOf(urlPath.split('/')[1]) === -1 &&
+ ['css', 'html', 'ico', 'js', 'png', 'txt', 'xml'].indexOf(urlPath.split('.').pop()) == -1 &&
+ ['fonts', 'images', 'vendor', 'views'].indexOf(urlPath.split('/')[1]) == -1) {
+ req.url = '/build/index.html';
+ } else {
+ req.url = '/build' + req.url;
+ }
+ }
+ server(req, res);
+ })
+ .listen(port, function () {
+ gutil.log('Server is listening on ' + gutil.colors.magenta('http://localhost:' + port + '/'));
+ next();
+ });
+});
+
+// Watch for changes in source files
+// -----------------------------------------------------------------------------
+gulp.task('watch', ['run'], function () {
+ var path = require('path');
+ var lr = require('gulp-livereload');
+
+ // Watch for changes in source files
+ gulp.watch('./src/assets/**', ['assets']);
+ gulp.watch('./src/**/*.less', ['styles']);
+
+ // Watch for changes in 'compiled' files
+ gulp.watch('./build/**', function (file) {
+ var relPath = 'build\\' + path.relative('./build', file.path);
+ gutil.log('File changed: ' + gutil.colors.magenta(relPath));
+ lr.changed(file.path);
+ });
+
+ lr.listen();
+});
+
+// Deploy to GitHub Pages. See: https://pages.github.com
+// -----------------------------------------------------------------------------
+gulp.task('deploy', ['build'], function (cb) {
+ var url = 'https://github.com/watchlist/watchlist.github.io.git';
+ var exec = require('child_process').exec;
+ var cwd = path.join(__dirname, './build');
+ var cmd = 'git init && git remote add origin ' + url + ' && ' +
+ 'git add . && git commit -m Release && ' +
+ 'git push -f origin master';
+
+ exec(cmd, { 'cwd': cwd }, function (err, stdout, stderr) {
+ if (err !== null) {
+ cb(err);
+ } else {
+ gutil.log(stdout, stderr);
+ cb();
+ }
+ });
+});
+
+// The default task
+gulp.task('default', ['watch']);
+\ No newline at end of file
diff --git a/package.json b/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "react-seed",
+ "private": true,
+ "version": "0.0.0",
+ "description": "Facebook React Starter Kit",
+ "repository": "https://github.com/kriasoft/react-seed",
+ "dependencies": {
+ "react": "^0.10.0"
+ },
+ "devDependencies": {
+ "ecstatic": "^0.5.3",
+ "event-stream": "^3.1.5",
+ "gulp": "^3.7.0",
+ "gulp-changed": "^0.4.0",
+ "gulp-embedlr": "^0.5.2",
+ "gulp-htmlmin": "^0.1.2",
+ "gulp-jshint": "^1.6.2",
+ "gulp-less": "^1.2.3",
+ "gulp-livereload": "^2.0.0",
+ "gulp-minify-css": "^0.3.4",
+ "gulp-plumber": "^0.6.2",
+ "gulp-uglify": "^0.3.0",
+ "gulp-util": "^2.2.16",
+ "jshint-stylish": "^0.2.0",
+ "jsx-loader": "^0.10.2",
+ "karma": "^0.12.16",
+ "minimist": "^0.1.0",
+ "protractor": "^0.24.0",
+ "rimraf": "^2.2.8",
+ "url-loader": "^0.5.5",
+ "webpack": "^1.3.0-beta5"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ }
+}
diff --git a/src/404.html b/src/404.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Page Not Found</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <style>
+
+ * {
+ line-height: 1.5;
+ margin: 0;
+ }
+
+ html {
+ color: #888;
+ font-family: sans-serif;
+ text-align: center;
+ }
+
+ body {
+ left: 50%;
+ margin: -43px 0 0 -150px;
+ position: absolute;
+ top: 50%;
+ width: 300px;
+ }
+
+ h1 {
+ color: #555;
+ font-size: 2em;
+ font-weight: 400;
+ }
+
+ p {
+ line-height: 1.2;
+ }
+
+ @media only screen and (max-width: 270px) {
+
+ body {
+ margin: 10px auto;
+ position: static;
+ width: 95%;
+ }
+
+ h1 {
+ font-size: 1.5em;
+ }
+
+ }
+
+ </style>
+</head>
+<body>
+ <h1>Page Not Found</h1>
+ <p>Sorry, but the page you were trying to view does not exist.</p>
+</body>
+</html>
+<!-- IE needs 512+ bytes: http://blogs.msdn.com/b/ieinternals/archive/2010/08/19/http-error-pages-in-internet-explorer.aspx -->
diff --git a/src/app.jsx b/src/app.jsx
@@ -0,0 +1,43 @@
+/**
+ * @jsx React.DOM
+ */
+
+var React = require('react');
+
+var Navbar = React.createClass({
+ render: function () {
+ return (
+ <div className="navbar navbar-inverse navbar-fixed-top">
+ <div className="container">
+ <a className="navbar-brand" href="/"><img src="/images/logo-small.png" width="38" height="38" alt="" /> React Seed</a>
+ </div>
+ </div>
+ );
+ }
+});
+
+var Page = React.createClass({
+ render: function () {
+ return (
+ <div className="container">
+ <h2>Facebook React Starter Kit</h2>
+ <p>This is a single-page application (SPA) project template based on Facebook React.</p>
+ <h4>Runtime Components:</h4>
+ <ul>
+ <li><a href="https://facebook.github.io/react/">React</a> - A JavaScript library for building user interfaces, developed by Facebook</li>
+ <li><a href="http://getbootstrap.com/">Bootstrap</a> - CSS framework for developing responsive, mobile first interfaces</li>
+ <li><a href="http://jquery.com/">jQuery</a> - a JavaScript library designed to simplify the client-side scripting of HTML</li>
+ </ul>
+ <h4>Development Tools:</h4>
+ <ul>
+ <li><a href="http://webpack.github.io/">Webpack</a> - Compiles front-end source code into modules / bundles</li>
+ <li><a href="http://gulpjs.com">Gulp</a> - JavaScript streaming build system and task automation</li>
+ </ul>
+ <h3>Fork me on GitHub</h3>
+ <p><a href="https://github.com/kriasoft/react-seed">https://github.com/kriasoft/react-seed</a></p>
+ </div>
+ );
+ }
+});
+
+React.renderComponent(<div><Navbar /><Page /></div>, document.body);
+\ No newline at end of file
diff --git a/src/app.less b/src/app.less
@@ -0,0 +1,56 @@
+/* ==========================================================================
+ Bootstrap CSS + Custom Styles and overrides
+ ========================================================================== */
+
+// Core variables and mixins
+@import "..\bower_components\bootstrap\less\variables.less";
+@import "styles\variables.less";
+@import "..\bower_components\bootstrap\less\mixins.less";
+
+// Reset
+@import "..\bower_components\bootstrap\less\normalize.less";
+@import "..\bower_components\bootstrap\less\print.less";
+
+// Core CSS
+@import "..\bower_components\bootstrap\less\scaffolding.less";
+@import "..\bower_components\bootstrap\less\type.less";
+@import "..\bower_components\bootstrap\less\code.less";
+@import "..\bower_components\bootstrap\less\grid.less";
+@import "..\bower_components\bootstrap\less\tables.less";
+@import "..\bower_components\bootstrap\less\forms.less";
+@import "..\bower_components\bootstrap\less\buttons.less";
+@import "styles\base.less";
+
+// Components
+@import "..\bower_components\bootstrap\less\component-animations.less";
+@import "..\bower_components\bootstrap\less\glyphicons.less";
+@import "..\bower_components\bootstrap\less\dropdowns.less";
+@import "..\bower_components\bootstrap\less\button-groups.less";
+@import "..\bower_components\bootstrap\less\input-groups.less";
+@import "..\bower_components\bootstrap\less\navs.less";
+@import "..\bower_components\bootstrap\less\navbar.less";
+@import "styles\navbar.less";
+@import "..\bower_components\bootstrap\less\breadcrumbs.less";
+@import "..\bower_components\bootstrap\less\pagination.less";
+@import "..\bower_components\bootstrap\less\pager.less";
+@import "..\bower_components\bootstrap\less\labels.less";
+@import "..\bower_components\bootstrap\less\badges.less";
+@import "..\bower_components\bootstrap\less\jumbotron.less";
+@import "..\bower_components\bootstrap\less\thumbnails.less";
+@import "..\bower_components\bootstrap\less\alerts.less";
+@import "..\bower_components\bootstrap\less\progress-bars.less";
+@import "..\bower_components\bootstrap\less\media.less";
+@import "..\bower_components\bootstrap\less\list-group.less";
+@import "..\bower_components\bootstrap\less\panels.less";
+@import "..\bower_components\bootstrap\less\wells.less";
+@import "..\bower_components\bootstrap\less\close.less";
+
+// Components w/ JavaScript
+@import "..\bower_components\bootstrap\less\modals.less";
+@import "..\bower_components\bootstrap\less\tooltip.less";
+@import "..\bower_components\bootstrap\less\popovers.less";
+@import "..\bower_components\bootstrap\less\carousel.less";
+
+// Utility classes
+@import "..\bower_components\bootstrap\less\utilities.less";
+@import "..\bower_components\bootstrap\less\responsive-utilities.less";
diff --git a/src/assets/apple-touch-icon-precomposed.png b/src/assets/apple-touch-icon-precomposed.png
Binary files differ.
diff --git a/src/assets/browserconfig.xml b/src/assets/browserconfig.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Please read: http://msdn.microsoft.com/en-us/library/ie/dn455106.aspx -->
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square70x70logo src="tile.png"/>
+ <square150x150logo src="tile.png"/>
+ <wide310x150logo src="tile-wide.png"/>
+ <square310x310logo src="tile.png"/>
+ </tile>
+ </msapplication>
+</browserconfig>
diff --git a/src/assets/crossdomain.xml b/src/assets/crossdomain.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
+<cross-domain-policy>
+ <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
+
+ <!-- Most restrictive policy: -->
+ <site-control permitted-cross-domain-policies="none"/>
+
+ <!-- Least restrictive policy: -->
+ <!--
+ <site-control permitted-cross-domain-policies="all"/>
+ <allow-access-from domain="*" to-ports="*" secure="false"/>
+ <allow-http-request-headers-from domain="*" headers="*" secure="false"/>
+ -->
+</cross-domain-policy>
diff --git a/src/assets/favicon.ico b/src/assets/favicon.ico
Binary files differ.
diff --git a/src/assets/humans.txt b/src/assets/humans.txt
@@ -0,0 +1,15 @@
+# humanstxt.org/
+# The humans responsible & technology colophon
+
+# TEAM
+
+ <name> -- <role> -- <twitter>
+
+# THANKS
+
+ <name>
+
+# TECHNOLOGY COLOPHON
+
+ HTML5, CSS3, JavaScript
+ React, jQuery, Bootstrap
diff --git a/src/assets/robots.txt b/src/assets/robots.txt
@@ -0,0 +1,5 @@
+# www.robotstxt.org/
+
+# Allow crawling of all content
+User-agent: *
+Disallow:
diff --git a/src/assets/tile-wide.png b/src/assets/tile-wide.png
Binary files differ.
diff --git a/src/assets/tile.png b/src/assets/tile.png
Binary files differ.
diff --git a/src/images/logo-small.png b/src/images/logo-small.png
Binary files differ.
diff --git a/src/images/logo-small@2x.png b/src/images/logo-small@2x.png
Binary files differ.
diff --git a/src/index.html b/src/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html class="no-js" lang="">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <title></title>
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="app.css">
+ </head>
+ <body>
+ <!--[if lt IE 8]>
+ <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
+ <![endif]-->
+
+ <!-- Add your site or application content here -->
+ <p>Hello world! This is HTML5 Boilerplate.</p>
+
+ <script src="app.js"></script>
+
+ <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
+ <script>
+ (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
+ function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
+ e=o.createElement(i);r=o.getElementsByTagName(i)[0];
+ e.src='//www.google-analytics.com/analytics.js';
+ r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
+ ga('create','UA-XXXXX-X');ga('send','pageview');
+ </script>
+ </body>
+</html>
diff --git a/src/styles/base.less b/src/styles/base.less
@@ -0,0 +1,22 @@
+/* ==========================================================================
+ Base styles
+ ========================================================================== */
+
+html {
+ padding-top: 48px;
+}
+
+html, body {
+ background-color: #f9f9f9;
+}
+
+/* ==========================================================================
+ Browse Happy prompt
+ ========================================================================== */
+
+.browsehappy {
+ margin: 0.2em 0;
+ background: #ccc;
+ color: #000;
+ padding: 0.2em 0;
+}
+\ No newline at end of file
diff --git a/src/styles/navbar.less b/src/styles/navbar.less
@@ -0,0 +1,10 @@
+/* ==========================================================================
+ Navigation Bar
+ ========================================================================== */
+
+.navbar-brand {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #00d8ff !important;
+ font-size: 24px;
+}
+\ No newline at end of file
diff --git a/src/styles/variables.less b/src/styles/variables.less
@@ -0,0 +1,3 @@
+/* ==========================================================================
+ Variables
+ ========================================================================== */