remote-jobs/site
2021-10-25 20:53:50 -07:00
..
assets Add template for custom 404 page 2021-10-24 16:58:11 -07:00
templates Update 404.html 2021-10-25 20:53:50 -07:00
README.md update site/README.md to use main branch 2021-08-05 16:49:28 +01:00

Static site generator

Overview

This folder contains the template files needed to generate the static site for this repo ( https://remoteintech.company/ ).

The code that parses the site's data from the Markdown files in this repository is located in bin/build-site.js and lib/index.js.

On each new change to main or to a GitHub pull request, if there are no data validation errors, the site is built and deployed to Netlify (the domain mentioned above for the main branch, or a temporary subdomain for pull requests).

The static site uses a layout and CSS copied from https://blog.remoteintech.company/ which is a site hosted on WordPress.com, and the site builder code uses swig as an HTML templating engine.

Development

If you submit any changes as a pull request, GitHub and Netlify will automatically validate, build, and deploy a preview of the site for you.

For longer-running or more complicated changes, though, it can be useful to run the site locally. To make this work, you should be using the version of Node.js specified in the .nvmrc file. Other versions may work but have not been tested.

Run npm install to install dependencies.

Then run npm start to build and serve the site locally.

You can also use nodemon to automatically rebuild and reload the site when you make changes:

npm install -g nodemon
nodemon bin/serve-site.js

If you just want the data structure used to build the site, you can do this:

~/code/remote-jobs $ node
> const { parseFromDirectory } = require( './lib' );
undefined
> const data = parseFromDirectory( '.' );
undefined
> Object.keys( data );
[ 'ok',
  'profileFilenames',
  'profileHeadingCounts',
  'companies',
  'readmeContent' ]
> Object.keys( data.companies[ 0 ] )
[ 'name',
  'isIncomplete',
  'websiteUrl',
  'websiteText',
  'shortRegion',
  'linkedFilename',
  'profileContent' ]
...