diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js
index 94f64b087bc633135aaad83a9a69fee62d5286b6..9ad5d371fedf005a0c9785e19a079221406b2240 100644
--- a/config/webpack.config.prod.js
+++ b/config/webpack.config.prod.js
@@ -12,6 +12,7 @@ var autoprefixer = require('autoprefixer');
 var webpack = require('webpack');
 var HtmlWebpackPlugin = require('html-webpack-plugin');
 var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var url = require('url');
 
 // TODO: hide this behind a flag and eliminate dead code on eject.
 // This shouldn't be exposed to the user.
@@ -26,6 +27,8 @@ var nodeModulesPath = path.join(__dirname, '..', 'node_modules');
 var indexHtmlPath = path.resolve(__dirname, relativePath, 'index.html');
 var faviconPath = path.resolve(__dirname, relativePath, 'favicon.ico');
 var buildPath = path.join(__dirname, isInNodeModules ? '../../..' : '..', 'build');
+var homepagePath = require(path.resolve(__dirname, relativePath, 'package.json')).homepage;
+var publicPath = homepagePath ? url.parse(homepagePath).pathname : '/';
 
 module.exports = {
   bail: true,
@@ -35,9 +38,7 @@ module.exports = {
     path: buildPath,
     filename: '[name].[chunkhash].js',
     chunkFilename: '[name].[chunkhash].chunk.js',
-    // TODO: this wouldn't work for e.g. GH Pages.
-    // Good news: we can infer it from package.json :-)
-    publicPath: '/'
+    publicPath: publicPath
   },
   resolve: {
     extensions: ['', '.js'],
diff --git a/scripts/build.js b/scripts/build.js
index 6ac64886a75ad1b6253c0c656076388ccedd646f..cfc194cace3b4ec0c573bf1a786fa0823521cc21 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -17,6 +17,9 @@ var config = require('../config/webpack.config.prod');
 var isInNodeModules = 'node_modules' ===
   path.basename(path.resolve(path.join(__dirname, '..', '..')));
 var relative = isInNodeModules ? '../..' : '.';
+if (process.argv[2] === '--debug-template') {
+  relative = './template';
+}
 rimrafSync(relative + '/build');
 
 webpack(config).run(function(err, stats) {
@@ -27,13 +30,18 @@ webpack(config).run(function(err, stats) {
   }
 
   var openCommand = process.platform === 'win32' ? 'start' : 'open';
+  var homepagePath = require(path.resolve(relative, 'package.json')).homepage;
   console.log('Successfully generated a bundle in the build folder!');
   console.log();
-  console.log('You can now serve it with any static server, for example:');
-  console.log('  cd build');
-  console.log('  npm install -g http-server');
-  console.log('  hs');
-  console.log('  ' + openCommand + ' http://localhost:8080');
+  if (homepagePath) {
+    console.log('You can now deploy and serve it from ' + homepagePath + '.');
+  } else {
+    console.log('You can now serve it with any static server, for example:');
+    console.log('  cd build');
+    console.log('  npm install -g http-server');
+    console.log('  hs');
+    console.log('  ' + openCommand + ' http://localhost:8080');
+  }
   console.log();
   console.log('The bundle is optimized and ready to be deployed to production.');
 });
diff --git a/template/package.json b/template/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e74146c7029be4502813b4a2060baad35240eefa
--- /dev/null
+++ b/template/package.json
@@ -0,0 +1,17 @@
+{
+  "name": "my-app",
+  "version": "0.0.1",
+  "private": true,
+  "devDependencies": {
+    "react-scripts": "0.1.0"
+  },
+  "dependencies": {
+    "react": "^15.2.1",
+    "react-dom": "^15.2.1"
+  },
+  "scripts": {
+    "start": "react-scripts start",
+    "build": "react-scripts build",
+    "eject": "react-scripts eject"
+  }
+}
\ No newline at end of file