N. E. Karantanis — Site Docs View live site ↗
Documentation

Overview

This is the internal documentation for nekarantanis.co.uk — a Jekyll site with a hand-built design system and a Decap CMS admin panel for editing content without touching code. It covers how the CSS theme, the JavaScript behaviors, and the CMS all fit together, so a future change (yours or someone else’s) can be made consistently instead of by guesswork.

What this site is

A static site built with Jekyll, hosted on GitHub Pages, with three main page types:

  • Home (index.html) — hero intro, impact stats, leadership pillars, featured roles, education strip, latest blog posts, a closing CTA
  • About (About.html) — a CV-style page with four jump-linked sections (Leadership, Digital, Research, Education)
  • Blog (Blog.html + _posts/*.md) — a featured post, a live-searchable/filterable grid of the rest, and individual post pages

There’s no build tooling beyond Jekyll itself — no bundler, no npm dependencies for the front end. css/custom.css and js/site.js are hand-written and loaded directly on every page via _layouts/default.html, which also loads GoatCounter and Umami analytics site-wide — both are just a <script> tag apiece, added once in the shared layout rather than per page.

The three things that make up the theme

This is the short version — each has its own full page in the sidebar.

1. A small set of CSS custom properties (--nk-c0 through --nk-c4, plus gold) drive every color on the site. Everything else — buttons, cards, section backgrounds, text colors — is a utility class built on top of those variables. See Design System.

2. A handful of reusable section-level components — dotted/grid textured backgrounds, decorative floating “blobs,” animated wave dividers, and drifting SVG contour lines — that combine to give each page header and section its own quiet motion without any of it being page-specific code. See Sections & Components.

3. One JavaScript file, js/site.js, that layers in every animated behavior — scroll reveals, the homepage’s staged intro, the typewriter effect, counting-up stats, the wave drift, and the blog’s category/tag/search filtering — all gated behind prefers-reduced-motion and IntersectionObserver so nothing animates when it doesn’t need to. The contour-line backgrounds are pure CSS, not JS — see JavaScript.

Editing content

Everything editorial — blog posts and the About page’s career history — is meant to be edited through Decap CMS at /admin, not by hand-editing Markdown or YAML (though you can do that too, they’re just files). The CMS has a custom icon-picker widget and a live preview styled to match the real site. See the CMS Guide.

Where things live

Area Path
Page templates _layouts/default.html, _layouts/post.html
Shared partials _includes/
Theme CSS css/custom.css
Theme JS js/site.js
Blog posts _posts/*.md
Career history data _data/roles.yml
CMS config admin/config.yml
CMS custom widgets/preview admin/icon-picker.js, admin/preview.js

See File Reference for the complete map.