Repository Status: Architecture Notes
Repository Status: Architecture Notes
Updated after the Phase 1 refactor and Phase 2 UI modernization on the refactor-and-ui-overhaul branch. This document captures the current state of the repo: what is source-of-truth vs compiled, what frameworks are in use, and where styling actually comes from in the rendered HTML.
Source of truth vs compiled
Source of truth (committed):
_config.yml(+_config_dev.yml) — Jekyll config_data/navigation.yml,_data/authors.yml— site data_layouts/*.html— Liquid page templates (default,default-nocompress,compress,page,page-wide,page-extrawide)_includes/*.html— partials (_head.html,_masthead.html,_navigation.html,_footer.html,_favicon.html)_sass/*.scss— settings, layout, page-scoped styles, and the modern layout primitivesassets/css/styles.scss— the single SCSS entry point that@imports every partialpages/*.mdand the root pages (index.md,404.md,humans.txt,robots.txt,sitemap.xml)images/,files/,assets/css,assets/imgGemfile,Gemfile.lock,CNAME,STYLE.md,TODO.md,README.md,STATUS.md,APPEARANCE.md,PLAN.md
Compiled / build artifacts (in .gitignore):
_site/— what GitHub Pages serves (HTML +_site/assets/css/styles.css,.css.map).jekyll-cache/,.sass-cache/
Frameworks
- Jekyll (static site generator) + Liquid templates + Kramdown markdown + Rouge highlighting
- Sass/SCSS, compressed (
_config.yml). - Plugins:
jekyll-gist,jekyll-paginate. - Adobe Typekit for the
supria-sanswebfont (_includes/_head.html). - Ruby
3.3.x(not pinned in the Gemfile; local dev machine is3.3.5, the GitHub Pages builder uses3.3.4— a minor mismatch that only produces a warning).
Build/deploy environment. Production is built by GitHub Pages’ “Deploy from a branch” builder, which uses the github-pages gem’s pinned Jekyll ~3.10.x + Ruby Sass 3.7.4 in safe mode. As of 2026-07-24 the Gemfile is pinned to the github-pages gem, so local development reproduces that exact toolchain — bundle exec jekyll build locally now matches prod (this replaced the earlier Jekyll 4.3.3 setup, whose drift from prod let a Jekyll-4-only SCSS change pass locally yet break the live build). Consequence: do not use the Dart Sass module system (@use, math.div()) — it is a fatal syntax error under Ruby Sass 3.7.4; keep / for division in _sass/_functions.scss. See README.md and the CI/CD section of TODO.md.
The site no longer carries a CSS framework. Foundation 5 was removed in Phase 2.E; layout is implemented directly on CSS Grid and Flexbox in two small partials (_sass/_13_layout_modern.scss for primitives, _sass/_14_chrome.scss for site chrome).
No JavaScript ships on any page except a five-line inline script in _navigation.html that toggles the mobile menu’s aria-expanded attribute.
SCSS layer order
assets/css/styles.scss imports, in order:
- Settings —
_functions.scss,_01_settings_colors.scss,_02_settings_typography.scss,_12_tokens.scss. Colors, fonts, the$global-radiusvalue, and CSS custom-property design tokens (--color-*,--space-*,--text-*,--container-*). - Reset —
_05_normalize.scss(normalize.css v3). - Project styles —
_06_typography.scss(links, headings, lists, figures, code, blockquote, footnotes),_07_layout.scss(the white masthead block),_08_pages.scss(people roster grid, photo gallery, publications list, science page floats),_09_elements.scss(body+htmlbase rules that apply$body-bg/$body-font-color,box-sizing: border-boxreset, anchor-target offset, text-shadow helpers),_11_syntax-highlighting.scss(Rouge syntax colors). - Modern layout layer —
_13_layout_modern.scss(container/stack/cluster/grid/split utilities + text-alignment + visually-hidden),_14_chrome.scss(.site-nav+.site-footer).
Where displayed styles actually come from
The browser loads exactly one stylesheet: /assets/css/styles.css. Total weight: ~15KB minified.
- Body background —
$body-bg→$darktheme-background→$juns-CyPu-Navy=#1D3038. Variables defined in_sass/_01_settings_colors.scss; applied to thebodyelement by the base block in_sass/_09_elements.scss. (Thatbody { background; color; ... }rule used to live in Foundation’s_04_settings_global.scss. It must be applied explicitly now that Foundation is gone — losing it once already regressed the site into light mode.) - Body text color —
$text-color→$darktheme-text→$grey-1=#E4E4E4, same path. - Body font —
$body-font-family→"supria-sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif, in_sass/_02_settings_typography.scss. The webfont itself is delivered by the Typekit<link>in_includes/_head.html. - Masthead —
.site-mastheadrules in_sass/_07_layout.scss: hidden on mobile, white background with a 3px inset cyan accent at the bottom on tablet+, flexbox-centred content. The three title rows use the original22.9pt / 10pt / 14.9ptfont sizes — tuned so they render at approximately equal width in supria-sans — plusmargin-bottom: 0.5remon the title to keep the first row→subtitle gap visibly looser than the subtitle→description gap. Text content lives in_includes/_masthead.html, driven bysite.masthead.{title,subtitle,description}in_config.yml. - Navigation —
.site-navrules in_sass/_14_chrome.scss: navy sticky bar, white links, cyan accent on hover/active/focus, cyan 2px underline under the active page on tablet+. Mobile collapses behind a hamburger button (a 22×16 three-bar icon, not the word “Menu”); the brand usessite.title(“Allard Lab”, 10 chars) withwhite-space: nowrapso it never breaks the layout. Two breakpoints: 40em (tablet — inline links with tight padding + 14px font) and 64em (desktop — inline links with wider padding + 15px font). The intermediate range was added to keep Contact from overflowing on 640–1024px viewports. - Footer —
.site-footerrules in_sass/_14_chrome.scss: navy background continuous with body, centred on mobile and spaced on tablet+. - Page-scoped rules —
.peoplewrapper/.peoplephoto/.photo-gallery/.publist/.paper-title/.science-row(the Science page’s alternating blurb-plus-Bluesky-card rows) /.cite(muted citation tags in the Science “approaches” list) all live in_sass/_08_pages.scss. No<style>blocks remain inpages/*.md.
Design tokens (CSS custom properties)
Defined in _sass/_12_tokens.scss under :root. Highlights:
- Color —
--color-bg(navy),--color-fg(light grey),--color-accent(cyan),--color-accent-hover(deeper cyan),--color-warn(red),--color-success(gold),--color-surface(white),--color-fg-muted(grey-5). - Type —
--font-sans(supria-sans + modern fallbacks),--font-serif,--font-mono;--text-xsthrough--text-4xl;--leading-tight/snug/normal/loose. - Spacing —
--space-0through--space-20on a 4px baseline. - Containers —
--container-narrow(36rem),--container(48rem),--container-wide(64rem),--container-full(80rem). - Surface —
--radius-sm/--radius/--radius-lg,--shadow-sm/--shadow/--shadow-lg.
Modern layout primitives (_sass/_13_layout_modern.scss)
Composable, mobile-first utilities used by page layouts and content markup:
.container,.container-narrow,.container-wide,.container-full— max-width, centred, padded..stack,.stack-sm,.stack-lg— vertical flow with consistent gap..cluster— flex row that wraps with a gap..grid,.grid-2,.grid-3,.grid-auto-fit— CSS Grid templates that collapse to one column on mobile..split-1-1,.split-2-1,.split-1-2,.split-7-5— two-column layouts with the given fraction weights on desktop, stacked on mobile..text-justify(withhyphens: auto, falls back totext-align: lefton mobile),.text-center,.text-right,.text-left..visually-hiddenfor screen-reader-only content.
Accessibility
Contrast ratios for the dark theme (verified analytically, not via tooling):
| Pair | Ratio | WCAG |
|---|---|---|
#E4E4E4 body text on #1D3038 navy |
10.6 : 1 | AAA |
#45B29D cyan accent on #1D3038 navy |
5.3 : 1 | AA (normal text), AAA (large text) |
#A4A4A4 muted text on #1D3038 navy |
5.4 : 1 | AA |
#000 masthead text on #FFF surface |
21 : 1 | AAA |
aria-current="page" is set on the active nav link, the active link also carries a 2px cyan underline accent (so the active state is not communicated by colour alone). aria-expanded is toggled on the mobile menu button. The nav and the masthead anchor carry visible :focus-visible outlines.
Page layouts
_layouts/default.html/_layouts/default-nocompress.html— page shell (head, nav, masthead, content, footer)._layouts/page.html—<main class="container stack">(~768px)._layouts/page-wide.html—<main class="container-wide stack">(~1024px)._layouts/page-extrawide.html—<main class="container-full stack">(~1280px, used by People)._layouts/compress.html— Jekyll’s HTML compressor.
Page → layout map
| Page | Layout | Container |
|---|---|---|
index.md (home) |
page-wide |
1024px |
pages/science.md |
page |
768px |
pages/software.md |
page |
768px |
pages/publications.md |
page |
768px |
pages/contact.md |
page |
768px |
pages/people.md |
page-extrawide |
1280px |
pages/blog_how_I_organize2025.md |
page |
768px |
404.md |
page |
768px |