Inspired by Expose, this is a static, responsive photoessay generator using gulp.js to automate workflow. photoessay generates a site that looks like http://mikeli.me/photos/flowers/ and http://mikeli.me/photos/Taiwan/, from my personal site. The site is essentially a series of full-page photos with an optional title at the top and caption at the bottom.
photessay's dependencies are gulp, used to enhance development, and GraphicsMagick, used to resize images so they're small enough for the web.
Install GraphicsMagick: Linux users please read this for JPEG support.
Install gulp globally using npm install -g gulp
, and this command needs npm. gulp also needs Node.js to run.
Then navigate to this repo's base directory and run npm install
to install gulp libraries from package.json
that we'll be using.
If installation worked, run gulp
from the repo's base directory and if successful, your browser will open a new tab to http://localhost:9000 that shows the site; it should look like http://mikeli.me/github/photoessay-example/
When you run gulp
, it does the following:
- creates a build directory,
app/build
, which will be the static site - copies the CSS stylesheet,
app/style.css
to the build - copies JS files to the build and outputs any errors using JSHint
- takes images from
app/images
and copies resized versions (using GraphicsMagick) to the build - takes image data from
app/data.json
, pull that intoapp/index.pug
, a Pug file, and then compile thatindex.html
in the build - opens the build directory in your browser (i.e., run your build's
index.html
) as http://localhost:9000 using BrowserSync, a cross-browser testing tool - watches your development files for changes, and when one of them does, run the task to update the build. e.g., when you change a CSS file, gulp will copy that over to the build and use BrowserSync to automatically reload your browsers to reflect the changes you made
For more details, see gulpfile.js
. When you're ready to deploy, simply upload the app/build
directory to your website.
The site's html is generated from data in app/data.json
, which has the following variables:
defaultAspectRatio
: the default aspect ratio of your photos (width divided by height); useful if most of your photos have the same aspect ratio, like 1.5. The aspect ratio's needed to properly set the height of the images displayed on the site.imageData
: an array containing the file name, caption and title of each imagefilename
: base name of the image; the path is taken care of inapp/index.pug
title
[optional]: title of the image, placed at the top center of the imagecaption
[optional]: caption of the image, placed at the bottom of the imageaspectRatio
: aspect ratio of the image; if specified, is used instead ofdefaultAspectRatio
Using bLazy, the images on the site are lazy loaded 1000px before the user scrolls to them.