Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
e237ee3
Start the Doors redesign branch
LukasWallrich Nov 3, 2026
eccffb2
Record the pre-redesign baseline and add the build checks (#949)
LukasWallrich Nov 3, 2026
932c987
Merge main into rebrand-doors
LukasWallrich Nov 3, 2026
55e1e70
Build the preview at forrt.org/rebrand-doors/ on every push (#950)
LukasWallrich Nov 3, 2026
2aa5573
Add Doors foundations: colour tokens, self-hosted fonts and the castl…
LukasWallrich Nov 3, 2026
777506a
Draw the Doors header and footer from the real menus (#952)
LukasWallrich Nov 3, 2026
7725d62
Keep links that climb past the top inside the preview (#954)
LukasWallrich Nov 3, 2026
8d52ade
Keep Bootstrap's italic class upright and clip stray row margins (#956)
LukasWallrich Nov 3, 2026
713a7d2
Let the preview check see the newsletter's Google Fonts request (#958)
LukasWallrich Nov 3, 2026
ab9ff06
Compare with the merge base, widen the generated-path rule, describe …
LukasWallrich Nov 3, 2026
55a7491
Close the remaining review items on the Doors checks and castle (#961)
LukasWallrich Nov 3, 2026
71e9eb8
Clip sideways overflow on the home page only (#966)
LukasWallrich Nov 3, 2026
517d7f5
Load the newsletter form on a click, restyled in Doors colours (#968)
LukasWallrich Nov 3, 2026
8563e3d
Rebuild the resources directory at real size, with filters and crawla…
LukasWallrich Nov 3, 2026
a68363f
Draw the home page on real content, with quotes in the band and a sha…
LukasWallrich Nov 3, 2026
9d4937b
Draw the Replication Hub's four stages on real content, with the ORE …
LukasWallrich Nov 3, 2026
b91bd6e
Draw articles and short pages in the Doors reading layout (#972)
LukasWallrich Nov 3, 2026
fe8428a
Install Pillow for the design check's budget report (#974)
LukasWallrich Nov 3, 2026
c6154c8
Close the independent review's findings on Phase 2 (#975)
LukasWallrich Nov 3, 2026
3690b10
Bring back a lesson's button on phones and stop two sideways scrolls …
LukasWallrich Nov 3, 2026
5059aa7
Close the empty space beside article text (#985)
LukasWallrich Nov 3, 2026
3268b63
Merge main into rebrand-doors
LukasWallrich Nov 3, 2026
6d1702c
Allow the visitors page's description to differ from main (#986)
LukasWallrich Nov 4, 2026
a0bb56c
Take Bootstrap, jQuery and Font Awesome off the designed pages (#988)
LukasWallrich Nov 4, 2026
aff39e5
Draw section pages on the reading layout (#989)
LukasWallrich Nov 4, 2026
a23aa90
Draw glossary, resource and author pages on the reading layout (#990)
LukasWallrich Nov 4, 2026
75644c2
Draw the remaining templates, and take the theme's look off every pag…
LukasWallrich Nov 4, 2026
ecd5aea
Close the review bot's findings on the Phase 3 templates (#992)
LukasWallrich Nov 4, 2026
d9014eb
Close the independent review's blockers and serious findings (#994)
LukasWallrich Nov 4, 2026
c2c26f5
Bound long summaries and tag results, and mark DEI summaries in text …
LukasWallrich Nov 4, 2026
a54752f
Keep keyboard focus and opened entries through Show more, and close t…
LukasWallrich Nov 4, 2026
cf4e4f7
Close the independent review's minor findings on chat history and sum…
LukasWallrich Nov 4, 2026
95ca258
Keep existing author folders when re-running the steering committee g…
LukasWallrich Nov 4, 2026
9ea62c0
Let pages set call-outs beside the text, in the reading layout's righ…
LukasWallrich Nov 4, 2026
a869d0f
Offer the tower game from the castle, loaded only when someone asks f…
LukasWallrich Nov 4, 2026
4a95e4f
Merge main into rebrand-doors: on-request embeds, local assets, new b…
LukasWallrich Nov 4, 2026
284ae83
Merge remote-tracking branch 'origin/main' into rebrand-doors
LukasWallrich Nov 4, 2026
e0ed4d8
Drop the syllabus form from /syllabus/ and keep the list (#1007)
LukasWallrich Nov 4, 2026
1f6b581
Close the Level A problems axe-core and keyboard tests found (#1008)
LukasWallrich Nov 4, 2026
ae68fe7
Keep English term titles left to right in Arabic, and shrink and hyph…
LukasWallrich Nov 4, 2026
a7b53df
Merge main into rebrand-doors: clusters data, resource fields, phone …
LukasWallrich Nov 4, 2026
340376b
Check accessibility rules in CI, run the design check in other engine…
LukasWallrich Nov 4, 2026
41aab75
Finish the pages independent review flagged: launcher, embed panels, …
LukasWallrich Nov 4, 2026
05e35f5
On phones make the chat launcher a tab in the gutter, open activities…
LukasWallrich Nov 4, 2026
84c8f3d
On phones let cluster filters scroll away, show contents on every pag…
LukasWallrich Nov 4, 2026
c3fa289
Separate back to top from the chat launcher, and remove the gap above…
LukasWallrich Nov 4, 2026
bbda634
Keep the end of the cluster side list reachable while it is pinned (#…
LukasWallrich Nov 4, 2026
24e3e14
Say how to suggest a syllabus for the list (#1023)
LukasWallrich Nov 5, 2026
ff8f32e
Use the screen's width on directory pages, and make the Publications …
LukasWallrich Nov 5, 2026
02588b4
Make tool, document and team pages work on a desktop screen (#1024)
LukasWallrich Nov 5, 2026
e5c736a
Give embedded tools room, and shrink testimonial portraits (#1025)
LukasWallrich Nov 5, 2026
f4d8a3e
Redesign the contributor analysis page in Doors (#1027)
LukasWallrich Nov 5, 2026
7d09ed2
Spread the contributor network while it runs on the older data (#1029)
LukasWallrich Nov 5, 2026
f5d84f0
Fit the booklet to its frame, group Steering Committee teams, and tid…
LukasWallrich Nov 5, 2026
fee0ab5
Give forms the height they need, and keep lesson rules at reading wid…
LukasWallrich Nov 5, 2026
739e58c
Describe the first contributor chart as projects again (#1034)
LukasWallrich Nov 5, 2026
1eeb45c
Make the AI in Metascience programme compact (#1038)
LukasWallrich Nov 5, 2026
838507a
Lead tool pages with their tool, widen Syllabus and the lesson bank, …
LukasWallrich Nov 5, 2026
94aa665
Rebuild the Citation Politics Toolkit page in Doors (#1036)
LukasWallrich Nov 5, 2026
e396a51
Merge main into rebrand-doors: resource title entities, specialist re…
LukasWallrich Nov 7, 2026
81b2252
Check that cluster pages hide specialist resources until their box is…
LukasWallrich Nov 7, 2026
ebc0eae
Check forrt.org on launch day, and rehearse the launch locally (#1041)
LukasWallrich Nov 7, 2026
81248dc
Fix the pages the final design review found wanting (#1043)
LukasWallrich Nov 7, 2026
e4f2a0a
Keep the chat launcher and back to top off the page (#1044)
LukasWallrich Nov 7, 2026
69dca6e
Say plainly that the clusters diagram is an earlier version, in place…
LukasWallrich Nov 8, 2026
f8e602d
Keep the round chat button and its focus ring in the margin at 1440 p…
LukasWallrich Nov 8, 2026
dfece30
Fix typos and small errors on hand-written pages, and show current cl…
LukasWallrich Nov 8, 2026
a34e70b
Clarify which part of the FLoRA page is generated (#1051)
LukasWallrich Nov 8, 2026
92ec85a
Repair verified external links in hand-maintained pages (#1054)
LukasWallrich Nov 8, 2026
93e0a46
Hyphenate long words in headings below 300px instead of breaking them…
LukasWallrich Nov 8, 2026
f66a42a
Exclude generator scripts and draft outputs from site bundles (#1052)
LukasWallrich Nov 8, 2026
e76f920
Preserve query strings and anchors in legacy redirects (#1053)
LukasWallrich Nov 8, 2026
acf0ab7
Fix resource pagination metadata and social image formats (#1058)
LukasWallrich Nov 8, 2026
f335987
Restore the GEP link and document the daily chart cutoff (#1056)
LukasWallrich Nov 8, 2026
7bfd853
Lighten the clusters pages: load publication data and the full diagra…
LukasWallrich Nov 8, 2026
13bc764
Replace the outdated clusters diagram with a map drawn from the curre…
LukasWallrich Nov 8, 2026
a045b73
Use only main's data artifacts on rebrand-doors too (preview, deploy,…
LukasWallrich Nov 8, 2026
ae4edd6
Add site-wide citation popovers and shared references (#1062)
LukasWallrich Nov 8, 2026
5c3fb57
Add glossary term popovers across the site (#1066)
LukasWallrich Nov 9, 2026
8f9a640
Drop the spacer line breaks old pages put between blocks (#1069)
LukasWallrich Nov 9, 2026
3fb32ed
Put the side card left of the text and set prose at 18px (#1070)
LukasWallrich Nov 9, 2026
9360419
Present /cv/ as a CV template for members (#1079)
LukasWallrich Nov 9, 2026
b0f7dce
Accept 'Career / Technical' in the resources education-level filter (…
LukasWallrich Nov 9, 2026
9210016
Allow the CV page's new title in the build comparison (#1089)
LukasWallrich Nov 9, 2026
98a66d2
Apply the content-review decisions to hand-written pages (#1078)
LukasWallrich Nov 9, 2026
b54e175
Render Markdown in glossary term titles and related terms (#1085)
LukasWallrich Nov 9, 2026
811ac96
Spread the contributor network's dense middle so it holds up at phone…
LukasWallrich Nov 11, 2026
db45fbd
List newsletter issues from data/newsletters.json (#1105)
LukasWallrich Nov 11, 2026
98576a0
Redesign the newsletter sign-up as a native form (#1096)
LukasWallrich Nov 11, 2026
9218080
Impact page: drop the missing slides link, keep the lecture video (#1…
LukasWallrich Nov 11, 2026
37184d3
Install Chromium without its system packages when the Ubuntu mirror f…
LukasWallrich Nov 11, 2026
eb6c818
Move the home page newsletter sign-up under "Take part" (#1110)
LukasWallrich Nov 11, 2026
b09ba10
Show long author lists as three authors and et al., with a button for…
LukasWallrich Nov 11, 2026
ac1f271
Redraw the /clusters/ map as a mind map like the original illustratio…
LukasWallrich Nov 11, 2026
87b4268
Render italics and small caps in publication titles on cluster pages …
LukasWallrich Nov 11, 2026
e405c63
Let the newsletter form retry after a stalled reCAPTCHA load (#1114)
LukasWallrich Nov 11, 2026
f2fe438
Doors: keep the clusters share-image reminder when AGENTS.md drops it…
LukasWallrich Nov 11, 2026
1d707b1
Drop the EmailOctopus links from the newsletter front matter (#1108)
LukasWallrich Nov 11, 2026
cb6e3bb
Doors design rounds: ten key pages reworked from model reviews (#1118)
LukasWallrich Nov 12, 2026
d6add38
Merge main into rebrand-doors
LukasWallrich Nov 13, 2026
4573f30
Allow main's newsletter script to go: the Doors footer form replaces it
LukasWallrich Nov 13, 2026
457685e
Resource entries: button in the first screen, shorter creator lists, …
LukasWallrich Nov 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .codespell-ignore.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Udo
Yau
Mathes
Smal
Asai

# Technical or code related terms
aCount
Expand Down Expand Up @@ -98,3 +99,9 @@ ons
sie
tru
ublication
doubleclick

# German glossary label
Referenz
pre-selected
jus
2 changes: 1 addition & 1 deletion .codespellrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[codespell]
# Skip these files and directories
skip = .git,*.png,*.jpg,*.jpeg,*.gif,*.svg,*.ico,*.woff,*.woff2,*.ttf,*.eot,*.min.js,*.min.css,themes,node_modules,public,resources,static/admin,static/newsletters,*.lock,package-lock.json,.hugo_build.lock,go.sum,*.json,*.css,*.scss,*.toml,content/glossary/german,content/glossary/portuguese,content/glossary/arabic,content/glossary/spanish,content/glossary/french,content/glossary/turkish,data,*.pdf,content/glossary/english/open_material.md
skip = .git,assets/three,assets/three/*,scripts/rebrand/baseline,scripts/rebrand/baseline/*,*.png,*.jpg,*.jpeg,*.gif,*.svg,*.ico,*.woff,*.woff2,*.ttf,*.eot,*.min.js,*.bundle.js,*.min.css,themes,node_modules,public,resources,static/admin,static/newsletters,*.lock,package-lock.json,.hugo_build.lock,go.sum,*.json,*.css,*.scss,*.toml,content/glossary/german,content/glossary/portuguese,content/glossary/arabic,content/glossary/spanish,content/glossary/french,content/glossary/turkish,data,*.pdf,content/glossary/english/open_material.md

# Ignore these words (project-specific terms and proper nouns)
ignore-words = .codespell-ignore.txt
Expand Down
26 changes: 20 additions & 6 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ This document describes the GitHub Actions workflows used in the FORRT website r

## Deployment Workflows

### [deploy.yaml](workflows/deploy.yaml)
### [deploy.yaml](deploy.yaml)
**Production deployment to forrt.org**

| Trigger | Target | Schedule |
Expand All @@ -33,7 +33,7 @@ Builds the Hugo site and deploys to GitHub Pages (`gh-pages` branch).

It uses the newest `data-artifact` and `announcements-artifact` from runs on `main` only. Runs of `data-processing.yml` or `create_announcements.yml` dispatched from another branch, for example to test a pipeline change, upload `*-preview` artifacts (#1030) that production never uses (#960). Staging can opt in to a branch's data artifact only; it never uses branch announcement artifacts. To stage branch data, run `data-processing.yml` on the branch, then dispatch `staging-aggregate.yaml` with `data_branch` set to that branch (combine with `single_pr` to stage only the PR that changes the pipeline). Production never uses it. If a branch other than `main` is named and has no data artifact, staging stops with an error rather than substituting `main`'s data (`data_branch: main` behaves like leaving it empty). For default staging runs and production, a missing data artifact makes the fallback dispatch `data-processing.yml` on `main`; a missing announcements artifact is not regenerated by these workflows.

### [staging-aggregate.yaml](workflows/staging-aggregate.yaml)
### [staging-aggregate.yaml](staging-aggregate.yaml)
**Staging deployment for pull requests**

| Trigger | Target | Schedule |
Expand All @@ -49,9 +49,23 @@ Features:
- Queues builds instead of canceling (concurrency)
- Auto-cleans old staging branches (keeps 2)

### [rebrand-preview.yaml](rebrand-preview.yaml)
**Preview of the Doors redesign, while it is in progress**

| Trigger | Target | Schedule |
|---------|--------|----------|
| Push to `rebrand-doors` | forrt.org/rebrand-doors/ (`forrtproject/rebrand-doors`) | On push |
| PR into `rebrand-doors` | Checks only, no deployment | On PR events |

Features:
- Uses the same data and announcement artifacts as `deploy.yaml`, with noindex and no analytics
- Compares each build with its merge base with `main`: URL list, structured data, SEO tags and internal links. See `scripts/rebrand/README.md`
- A failed check marks the run red but still updates the preview
- Delete this workflow when the redesign launches

## Data Workflows

### [data-processing.yml](workflows/data-processing.yml)
### [data-processing.yml](data-processing.yml)
**Fetches and processes external data sources**

| Trigger | Schedule |
Expand All @@ -78,7 +92,7 @@ Triggers `deploy.yaml` after successful processing via `repository_dispatch`.

## Quality Checks

### [spell-check.yaml](workflows/spell-check.yaml)
### [spell-check.yaml](spell-check.yaml)
**Spelling validation using codespell**

| Trigger | Runs on |
Expand All @@ -94,7 +108,7 @@ Triggers `deploy.yaml` after successful processing via `repository_dispatch`.
|---------|---------|
| Pull requests changing the clusters data, parser or tests | PR branches |

### [check_images.yaml](workflows/check_images.yaml)
### [check_images.yaml](check_images.yaml)
**Image validation in PRs**

| Trigger | Runs on |
Expand All @@ -105,7 +119,7 @@ Validates image files and references.

## Repository Maintenance

### [cleanup-branches.yml](workflows/cleanup-branches.yml)
### [cleanup-branches.yml](cleanup-branches.yml)
**Automated branch cleanup**

| Trigger | Schedule |
Expand Down
228 changes: 228 additions & 0 deletions .github/workflows/rebrand-preview.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
name: Doors preview

# =======================
# Doors Redesign Preview
# =======================
# Purpose: Builds the rebrand-doors branch and publishes it at forrt.org/rebrand-doors/
# Triggers: Push to rebrand-doors, and PRs into it (checks only, no deployment)
# Target: forrtproject/rebrand-doors, on GitHub Pages under the forrt.org domain
# Checks: Every run also builds the merge base with main from the same data, then compares
# the two builds.
# A failed check shows on the run but does not hold back the preview.
# Note: Uses the same data and announcement artifacts as deploy.yaml. Delete this
# workflow when the redesign launches.

on:
push:
branches:
- rebrand-doors
pull_request:
branches:
- rebrand-doors

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"

concurrency:
group: rebrand-preview-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build and check
runs-on: ubuntu-22.04
# Fork PRs get no artifacts token and have no preview to update.
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
permissions:
contents: read
actions: read # Needed for artifact access
env:
HUGO_VERSION: "0.158.0"
HUGO_EXTENDED: true
PREVIEW_BASE: /rebrand-doors/
PREVIEW_URL: https://forrt.org/rebrand-doors/
outputs:
source-rules: ${{ steps.source-rules.outcome }}
compare: ${{ steps.compare.outcome }}
links: ${{ steps.links.outcome }}
seo: ${{ steps.seo.outcome }}
design: ${{ steps.design.outcome }}
axe: ${{ steps.axe.outcome }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0

# See deploy.yaml: Git quotes non-ASCII paths unless this is off, and Hugo
# then finds no date for them.
- name: Let Git report non-ASCII paths unquoted
run: git config core.quotepath false

# The point where the branch last took main, not main's tip: otherwise anything landing
# on main shows up here as a change, until main is next merged in.
- name: Check out the merge base with main as the reference
run: git worktree add --detach "$RUNNER_TEMP/reference" "$(git merge-base origin/main HEAD)"

# =======================
# Artifacts, as in deploy.yaml
# =======================
- name: Download data artifact
uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295
continue-on-error: true
with:
workflow: data-processing.yml
name: data-artifact
path: ${{ runner.temp }}/artifacts/data
github_token: ${{ secrets.GITHUB_TOKEN }}
search_artifacts: true
branch: main # as in deploy.yaml: only main's runs, never a branch test run (#960)
if_no_artifact_found: warn

- name: Download announcements artifact
uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295
continue-on-error: true
with:
workflow: create_announcements.yml
name: announcements-artifact
path: ${{ runner.temp }}/artifacts/announcements
github_token: ${{ secrets.GITHUB_TOKEN }}
search_artifacts: true
branch: main # as in deploy.yaml: only main's runs, never a branch test run (#960)
if_no_artifact_found: warn

- name: Apply artifacts to both checkouts
run: |
for checkout in . "$RUNNER_TEMP/reference"; do
scripts/rebrand/apply_artifacts.sh "$checkout" \
"$RUNNER_TEMP/artifacts/data" "$RUNNER_TEMP/artifacts/announcements"
done

# =======================
# Builds
# =======================
- name: Setup Hugo
uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f
with:
hugo-version: ${{ env.HUGO_VERSION }}
extended: ${{ env.HUGO_EXTENDED }}

# HUGO_ENV=staging adds noindex and leaves out Google Analytics.
- name: Build the branch
run: hugo --gc --minify --cleanDestinationDir --destination public --baseURL "$PREVIEW_URL"
env:
HUGO_ENV: staging

- name: Build the reference from the same data
working-directory: ${{ runner.temp }}/reference
run: hugo --gc --minify --destination "$RUNNER_TEMP/public-reference" --baseURL "$PREVIEW_URL"
env:
HUGO_ENV: staging

- name: Point root-relative links at the subfolder
run: |
python3 scripts/rebrand/preview_paths.py public --base "$PREVIEW_BASE"
python3 scripts/rebrand/preview_paths.py "$RUNNER_TEMP/public-reference" --base "$PREVIEW_BASE"

# =======================
# Checks
# =======================
- name: Templates and generated paths
id: source-rules
continue-on-error: true
run: python3 scripts/rebrand/check_source_rules.py --base origin/main

- name: URL list, structured data and SEO tags against the reference
id: compare
continue-on-error: true
run: python3 scripts/rebrand/compare_builds.py "$RUNNER_TEMP/public-reference" public

- name: Internal links
id: links
continue-on-error: true
run: |
python3 scripts/rebrand/check_internal_links.py public --base "$PREVIEW_BASE" \
--reference "$RUNNER_TEMP/public-reference"

- name: Built HTML (headings, conditional assets, image alt and dimensions)
id: seo
continue-on-error: true
run: python3 scripts/check_seo_html.py public

- name: Designed screens in a browser (overflow, position, layout shift, pause, directory)
id: design
continue-on-error: true
run: |
pip install --quiet playwright==1.63.0 pillow
# The runner image already has Chromium's libraries; --with-deps adds fonts from the
# Ubuntu mirror. When the mirror is unreachable, install the browser without them.
playwright install --with-deps chromium || {
echo "::warning::Could not install Chromium's system packages; installing the browser without them"
playwright install chromium
}
python3 scripts/rebrand/check_design.py public --base "$PREVIEW_BASE"

- name: Accessibility rules in a browser (axe-core, by WCAG level)
id: axe
continue-on-error: true
run: |
curl -fsSL https://cdn.jsdelivr.net/npm/axe-core@4.11.1/axe.min.js -o "$RUNNER_TEMP/axe.min.js"
python3 scripts/rebrand/check_axe.py public --base "$PREVIEW_BASE" --axe "$RUNNER_TEMP/axe.min.js"

- name: Upload site artifact
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v7
with:
name: rebrand-preview-${{ github.run_number }}
path: public/
retention-days: 1
if-no-files-found: error

deploy:
name: Deploy preview
runs-on: ubuntu-22.04
needs: build
if: github.event_name != 'pull_request'
timeout-minutes: 15
steps:
- name: Download site artifact
uses: actions/download-artifact@v7
with:
name: rebrand-preview-${{ github.run_number }}
path: public

# No cname: the repository inherits the organisation site's forrt.org domain, which
# is what puts it at forrt.org/rebrand-doors/. force_orphan keeps one commit, so the
# repository does not grow by the size of the site on every push.
- name: Deploy to forrtproject/rebrand-doors
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e
with:
personal_token: ${{ secrets.STAGING_GITHUB_TOKEN }}
external_repository: forrtproject/rebrand-doors
publish_dir: public
publish_branch: gh-pages
force_orphan: true

checks:
name: Check results
runs-on: ubuntu-22.04
needs: build
steps:
- name: Fail if any check failed
env:
SOURCE_RULES: ${{ needs.build.outputs.source-rules }}
COMPARE: ${{ needs.build.outputs.compare }}
LINKS: ${{ needs.build.outputs.links }}
SEO: ${{ needs.build.outputs.seo }}
DESIGN: ${{ needs.build.outputs.design }}
AXE: ${{ needs.build.outputs.axe }}
run: |
echo "Templates and generated paths: $SOURCE_RULES"
echo "URL list, structured data and SEO tags: $COMPARE"
echo "Internal links: $LINKS"
echo "Built HTML: $SEO"
echo "Designed screens: $DESIGN"
echo "Accessibility rules: $AXE"
for result in "$SOURCE_RULES" "$COMPARE" "$LINKS" "$SEO" "$DESIGN" "$AXE"; do
[ "$result" = "success" ] || exit 1
done
24 changes: 24 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ Please follow the [FORRT Code of Conduct](https://forrt.org/coc/) in issues, rev

- [Questions, Ideas & Suggestions](#questions-ideas--suggestions)
- [Edit content in your browser](#edit-content-in-your-browser)
- [Linking glossary terms](#linking-glossary-terms)
- [Local Development Setup](#local-development-setup)
- [Standard Setup](#standard-setup-git--hugo)
- [RStudio Setup](#rstudio-setup)
- [Contribution Workflow](#contribution-workflow)
- [Citing references](#citing-references)
- [Contributing with AI tools](#contributing-with-ai-tools)
- [Content, Licensing & Fact-Checking](#content-licensing--fact-checking)
- [Deployment & Staging](#deployment--staging)
Expand Down Expand Up @@ -47,6 +49,12 @@ You do not need to install Git or Hugo to fix text or a broken link. Find the re

Preserve the YAML/TOML front matter at the top of the file and existing Hugo shortcodes. Describe the affected page and link to it in your PR. Generated paths include `content/curated_resources/` (except `_index.md`), `content/glossary/`, `content/contributors/tenzing.md`, `content/contributor-analysis/`, `content/publications/citation_chart.webp`, announcement bundles in `content/post/`, `static/data/fred_citation.txt`, and generated files in `data/`. The manually maintained `data/publications.yaml` is editable; follow the [publication instructions](content/publications/README). Generated content is refreshed during deployment. Use the source submission form/sheet linked from the public page or open an issue rather than editing the generated output. Local previews use committed copies and can differ from production. For layout or code changes, use the local setup below.

To set a short note beside the text, put `{{% callout title="A title" %}}Your note{{% /callout %}}` just before the paragraph it goes with. On articles and most other text pages it sits in the right-hand column on wide screens, and in the text on phones and on pages set to full width. `title` is optional, and `tone="example"` or `tone="warning"` changes its colour. Keep it short: a long note runs on past the text it goes with.

### Linking glossary terms

On hand-written pages, use `{{< term "Preregistration" >}}` to link an English glossary term. To match an existing inflection, use `{{< term "Preregistration" "preregistered" >}}`. Preserve the author's exact wording and spelling; add markup only, and skip an occurrence if it cannot be marked without changing the text. Titles are matched without regard to case. Mark only the first occurrence of each term on a page, and keep existing resource links intact. Hover, keyboard focus, or a first touch tap shows a short definition; the popover links to the full entry. A repeat tap on the open trigger, mouse clicks, and Enter follow the term link, which also works without JavaScript. Unknown terms render as plain text and produce a Hugo build warning; check the [English glossary](https://forrt.org/glossary/english/) for the exact title. Do not add these shortcodes to generated content.

## Local Development Setup

Choose the setup method that suits your workflow.
Expand Down Expand Up @@ -145,6 +153,22 @@ All proposed changes must be made on a feature branch and submitted via a Pull R

For more on Git, see the [official documentation](https://docs.github.com/en/get-started/using-git/about-git).

### Citing references

Hand-written pages can cite works in [`content/glossary/apa_lookup.json`](content/glossary/apa_lookup.json), the shared bibliography generated from the Glossary BibTeX Google Doc. Use its exact keys:

```text
{{< cite "Nosek2018" "Simmons2011" >}}
{{< cite key="Nosek2018" narrative="true" >}}
(e.g. Smith, 2019; {{< cite key="Nosek2018" bare="true" >}})
```

These render as “(Nosek et al., 2018; Simmons et al., 2011)”, “Nosek et al. (2018)” and “(e.g. Smith, 2019; Nosek et al., 2018)”. Use `bare` inside brackets you write yourself, for example alongside a work that isn't in the bibliography, so the author's wording stays as it was. Every page that cites must include `{{< references >}}` once, after its last citation, to add an alphabetical reference list. The built-HTML check fails citation links without matching reference entries. Clicking a citation opens its full APA reference with source and copy actions; without JavaScript it jumps to the reference list. Unknown keys produce a build warning and appear in square brackets.

To ask readers to cite a work, show it as a card with a copy button: `{{< citation-card key="Asai2026OpenScholar" />}}` takes the reference from the bibliography, and `{{< citation-card >}}…{{< /citation-card >}}` takes one written out. In reference lists, cards and the “cite us” blocks, a reference with more than five authors shows the first three and “et al.”, with a button that shows the rest. Copying always gives the full reference.

Do not edit the generated bibliography or glossary terms. Request additions to the Glossary BibTeX Doc through an issue; the bibliography generator supplies the APA text. Glossary definitions automatically link citations only when their first author and year identify exactly one of the term’s listed references and their author lists agree. Other citations stay plain text. Citations already linked to a source are left alone.

### Contributing with AI tools

Contributions co-authored with AI agents are welcome, but only if you have **fully reviewed both the code and the content** yourself and can stand behind them.
Expand Down
Loading
Loading