freenode / web-7.0

The freenode website, home to our blog, knowledge base and policies
https://freenode.net/
Other
116 stars 92 forks source link
freenode jinja2 markdown python website

web-7.0 Build Status irc: #freenode-website

A shiny replacement for http://freenode.net.

Building

You'll need our node.js dependencies:

$ sudo npm install -g postcss-cli@7.1.2 svgo uglify-js
$ npm install

Then, assuming a Python 3.4 (or later) installation:

$ python3 -m venv env
$ . env/bin/activate
$ pip install -r requirements.txt
$ cms7

If everything went well, you should see a lot of log output, and out/ will have the website in it.

Because we generate the site statically, you'll need to re-run cms7 each time you change something. If your editor likes compile commands that can run from any directory, you can also use cms7 -c /path/to/config.yml.

Contributing

Please comply with the contribution guidelines

Helpful tip for those merging PRs: you can browse the tree a merge would result in by navigating to https://github.com/freenode/web-7.0/tree/pull/XYZ/merge, where XYZ is the pull request number.

You can also go to https://freenode.net/web-7.0/BRANCHNAME/ to see a build of any particular branch. This also works for internal pull requests (they are named pull-X).

Architecture / Orientation

The site is generated from Markdown sources and Jinja2 templates, found in content/ and templates/ respectively. The Travis build deploys to GitHub Pages automatically on every push.

Various modules convert the sources to a useful output structure. Eventually cms7 will document this process, but for now:

Markdown metadata

cms7 uses the markdown metadata extension, and recognises some special keys:

Blog-specific:

Internal linking

Everything that ends up in the final output has a name that identifies it to the rest of the website. If a file is derived directly from an input file, generally its name is derived from the name of the input.

cms7 can generate a relative URL to anything with a name from any page. This should always be preferred over manually writing links. To generate a relative link from a Markdown document, just link to a name:

[A page about frogs](pages/frog)

To do the same from a template, call url_for:

<a href="https://github.com/freenode/web-7.0/blob/main/{{ url_for('pages/frog') }}">A page about frogs</a>