From c8483d08fe07889013c2e89f516e17d9c3538e98 Mon Sep 17 00:00:00 2001 From: Lukas Wallrich Date: Wed, 24 Jun 2026 19:51:50 +0100 Subject: [PATCH 1/2] Add announcements feature with real data; refresh homepage top MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a Google Sheet → R → Hugo announcements pipeline and surfaces it on the homepage and a dedicated /post/ page, plus a redesigned homepage top. Announcements - scripts/create_announcements.R generates content/post/ bundles from the "FORRT Announcements" sheet (rows with Show=yes); caches a hash to no-op on unchanged data. Dates normalised to YYYY-MM-DD. - .github/workflows/create_announcements.yml runs it hourly and delivers the posts to the deploy as an artifact (no commit to main, no full data run); deploy.yaml unpacks the artifact before building. - announcements widget (3 recent cards) + /post/ section page with category filters; shared announcement_card partial. Image-less cards get a brand accent. - Seeded with 11 real announcements (last 5 newsletters + 6 site updates). Homepage top - Rotating-quote hero (hero_quotes widget) replacing the wordmark hero. - "What is FORRT?" restructured: logo + click-to-play video lightbox in one column, text beside (ytlightbox shortcode; fancybox). - Achievements & Awards merged into one two-column section. - Unified section-heading divider via one CSS rule (drops ad-hoc `---`). - JUST-OS bubble drops below the seal on mobile; newsletter button themed teal. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/create_announcements.yml | 104 ++++++ .github/workflows/deploy.yaml | 25 ++ assets/scss/custom.scss | 316 ++++++++++++++++++ content/authors/forrt/_index.md | 5 - content/home/1-hero.md | 73 ++-- content/home/2-welcome.md | 2 +- content/home/3-what-is-forrt.md | 5 +- content/home/3b-announcements.md | 17 + content/home/4-products.md | 2 - content/home/5-achievements.md | 60 +--- content/home/5-awards.md | 2 +- content/home/5-get-involved.md | 3 - content/post/2026-01-newsletter/index.md | 12 + content/post/2026-02-newsletter/index.md | 12 + content/post/2026-03-newsletter/index.md | 12 + content/post/2026-04-newsletter/index.md | 12 + .../post/2026-05-chinese-glossary/index.md | 12 + .../post/2026-05-get-involved-page/index.md | 12 + content/post/2026-05-just-os-chatbot/index.md | 12 + content/post/2026-05-newsletter/index.md | 12 + content/post/2026-05-nowhere-lab/index.md | 12 + .../post/2026-06-ai-metascience-call/index.md | 12 + .../index.md | 12 + content/post/_index.md | 7 + gs_announcement_hash.txt | 1 + layouts/partials/announcement_card.html | 20 ++ layouts/partials/chatbot.html | 14 + layouts/partials/widgets/about_welcome.html | 7 + layouts/partials/widgets/announcements.html | 20 ++ layouts/partials/widgets/hero_quotes.html | 63 ++++ layouts/section/post.html | 43 +++ layouts/shortcodes/ytlightbox.html | 9 + scripts/create_announcements.R | 170 ++++++++++ 33 files changed, 996 insertions(+), 104 deletions(-) create mode 100644 .github/workflows/create_announcements.yml create mode 100644 content/home/3b-announcements.md create mode 100644 content/post/2026-01-newsletter/index.md create mode 100644 content/post/2026-02-newsletter/index.md create mode 100644 content/post/2026-03-newsletter/index.md create mode 100644 content/post/2026-04-newsletter/index.md create mode 100644 content/post/2026-05-chinese-glossary/index.md create mode 100644 content/post/2026-05-get-involved-page/index.md create mode 100644 content/post/2026-05-just-os-chatbot/index.md create mode 100644 content/post/2026-05-newsletter/index.md create mode 100644 content/post/2026-05-nowhere-lab/index.md create mode 100644 content/post/2026-06-ai-metascience-call/index.md create mode 100644 content/post/2026-06-peer-community-in-partner/index.md create mode 100644 content/post/_index.md create mode 100644 gs_announcement_hash.txt create mode 100644 layouts/partials/announcement_card.html create mode 100644 layouts/partials/widgets/announcements.html create mode 100644 layouts/partials/widgets/hero_quotes.html create mode 100644 layouts/section/post.html create mode 100644 layouts/shortcodes/ytlightbox.html create mode 100644 scripts/create_announcements.R diff --git a/.github/workflows/create_announcements.yml b/.github/workflows/create_announcements.yml new file mode 100644 index 00000000000..4b38198e93b --- /dev/null +++ b/.github/workflows/create_announcements.yml @@ -0,0 +1,104 @@ +name: Create announcements + +# ===================================================================== +# Generates FORRT announcement posts from the "FORRT Announcements" +# Google Sheet and delivers them to the deploy as an ARTIFACT — it never +# commits to main and never runs the full data-processing pipeline. +# +# Flow: +# 1. Download the previous run's announcements artifact (for the cached +# sheet hash) to decide whether anything changed. +# 2. Run scripts/create_announcements.R. It no-ops (exits early) when the +# sheet hash is unchanged. +# 3. If — and only if — the sheet changed, upload content/post as the +# `announcements-artifact` and fire the `data-update` repository_dispatch. +# +# deploy.yaml downloads `announcements-artifact` and unpacks it over +# content/post before the Hugo build (see "Apply announcements" there). The +# latest successful artifact always holds the full current set of posts, so +# deploys triggered by anything else still pick up the announcements. +# ===================================================================== + +on: + schedule: + - cron: '15 * * * *' # hourly (offset to balance runner load) + workflow_dispatch: + +concurrency: + group: create-announcements + cancel-in-progress: false + +jobs: + announcements: + name: Generate announcements + runs-on: ubuntu-latest + permissions: + contents: read + actions: read # read previous artifact + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Download previous announcements artifact (for change detection) + id: prev + uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295 + continue-on-error: true + with: + workflow: create_announcements.yml + name: announcements-artifact + path: .prev + github_token: ${{ secrets.GITHUB_TOKEN }} + search_artifacts: true + if_no_artifact_found: warn + + - name: Seed previous hash + run: | + if [ -f .prev/gs_announcement_hash.txt ]; then + cp .prev/gs_announcement_hash.txt gs_announcement_hash.txt + echo "Seeded previous hash." + else + echo "No previous hash — first run or expired artifact." + fi + + - name: Setup r2u + uses: eddelbuettel/github-actions/r2u-setup@master + + - name: Install R package dependencies + run: Rscript -e 'install.packages(c("googlesheets4", "httr", "digest"))' + + - name: Generate announcement posts + id: gen + run: | + before="$(cat gs_announcement_hash.txt 2>/dev/null || echo none)" + Rscript scripts/create_announcements.R + after="$(cat gs_announcement_hash.txt 2>/dev/null || echo none)" + if [ "$before" = "$after" ]; then + echo "changed=false" >> "$GITHUB_OUTPUT" + echo "Sheet unchanged — nothing to publish." + else + echo "changed=true" >> "$GITHUB_OUTPUT" + echo "Sheet changed — packaging announcements." + fi + + - name: Package announcements + if: steps.gen.outputs.changed == 'true' + run: tar czf announcements.tar.gz content/post + + - name: Upload announcements artifact + if: steps.gen.outputs.changed == 'true' + uses: actions/upload-artifact@v7 + with: + name: announcements-artifact + path: | + announcements.tar.gz + gs_announcement_hash.txt + retention-days: 90 + + - name: Trigger production deploy + if: steps.gen.outputs.changed == 'true' + run: | + curl -s -X POST \ + -H "Authorization: Bearer ${{ secrets.FORRT_PAT }}" \ + -H "Accept: application/vnd.github+json" \ + "https://api.github.com/repos/${{ github.repository }}/dispatches" \ + -d '{"event_type": "data-update"}' diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 7639e0af497..afd5c362e36 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -149,6 +149,31 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} run_id: ${{ steps.data-processing.outputs.run_id }} + # ======================= + # Announcements (generated by create_announcements.yml, delivered as an artifact) + # ======================= + - name: Download announcements artifact + id: download-announcements + uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295 + continue-on-error: true + with: + workflow: create_announcements.yml + name: announcements-artifact + path: .announcements + github_token: ${{ secrets.GITHUB_TOKEN }} + search_artifacts: true + if_no_artifact_found: warn + + - name: Apply announcements + if: steps.download-announcements.outcome == 'success' + run: | + if [ -f .announcements/announcements.tar.gz ]; then + echo "📥 Applying announcement posts from artifact..." + tar xzf .announcements/announcements.tar.gz + else + echo "::warning::announcements artifact present but tarball missing; skipping." + fi + # ======================= # Hugo Build Environment # ======================= diff --git a/assets/scss/custom.scss b/assets/scss/custom.scss index c1908fe41b8..df157861230 100644 --- a/assets/scss/custom.scss +++ b/assets/scss/custom.scss @@ -2990,3 +2990,319 @@ h1.clusters-site-heading.clusters-hub-page__title { gap: 0.25rem; } } + +/* ============================================================ + * Announcements (card grid) — homepage widget + /post/ page + * ============================================================ */ +.announcements-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.6rem; +} +.announcement-card { + display: flex; + flex-direction: column; + background: #fff; + border: 1px solid #ece9db; + border-radius: 12px; + overflow: hidden; + box-shadow: 0 1px 3px rgba(0, 64, 85, 0.06); + transition: transform 0.15s, box-shadow 0.15s; + color: inherit; + text-decoration: none; + height: 100%; +} +.announcement-card:hover { + transform: translateY(-3px); + box-shadow: 0 8px 22px rgba(0, 64, 85, 0.12); + text-decoration: none; +} +.announcement-card .ac-thumb { + aspect-ratio: 16 / 9; + background: #eef1ec; + overflow: hidden; +} +.announcement-card .ac-thumb img { + width: 100%; + height: 100%; + object-fit: cover; +} +.announcement-card .ac-body { + display: flex; + flex-direction: column; + flex: 1; + padding: 1rem 1.1rem 1.2rem; +} +.announcement-card .ac-meta { + display: flex; + align-items: center; + gap: 0.6rem; + margin-bottom: 0.55rem; +} +.announcement-card .ac-date { + font-size: 0.78rem; + color: #8a8a8a; +} +.announcement-card h3 { + font-size: 1.06rem; + line-height: 1.3; + color: #004055; + margin: 0 0 0.5rem; +} +.announcement-card p { + flex: 1; + font-size: 0.9rem; + line-height: 1.5; + color: #4a4a4a; + margin: 0 0 0.9rem; +} +.announcement-card .ac-more { + font-size: 0.86rem; + font-weight: 700; + color: #8e0000; +} +.announcement-card:hover .ac-more { color: #ff6bbc; } + +/* Image-less cards: a slim brand accent on top so they don't read as bare. */ +.announcement-card.no-image { border-top: 3px solid #69b3a2; } +.announcement-card.no-image .ac-body { padding-top: 1.1rem; } + +/* category pills */ +.ac-cat { + display: inline-block; + font-size: 0.68rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 0.16rem 0.5rem; + border-radius: 999px; + color: #004055; + background: #d9eef2; +} +.ac-cat.event { color: #7a1f47; background: #f7dce8; } +.ac-cat.opportunity { color: #7a4a00; background: #fbeccd; } +.ac-cat.resource { color: #1f5e52; background: #d8efe9; } +.ac-cat.milestone { color: #5c2e8e; background: #ece0f7; } +.ac-cat.newsletter { color: #004055; background: #d9eef2; } + +.announcements-all { text-align: center; margin-top: 40px; } + +/* dedicated-page filter chips */ +.ac-filters { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + justify-content: center; + margin: 0 0 36px; +} +.ac-chip { + font-family: inherit; + font-size: 0.82rem; + color: #004055; + border: 1px solid #cfd9d3; + background: #fff; + padding: 0.32rem 0.9rem; + border-radius: 999px; + cursor: pointer; +} +.ac-chip.active { background: #004055; color: #fff; border-color: #004055; } + +@media (max-width: 820px) { .announcements-grid { grid-template-columns: 1fr 1fr; } } +@media (max-width: 560px) { .announcements-grid { grid-template-columns: 1fr; } } + +/* ---- YouTube lightbox thumbnail (compact "video in lightbox") ---- */ +.yt-lightbox { + position: relative; + display: block; + width: 100%; + border-radius: 10px; + overflow: hidden; + line-height: 0; +} +.yt-lightbox img { width: 100%; height: auto; } +.yt-lightbox .yt-play { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0, 0, 0, 0.18); + transition: background 0.15s; +} +.yt-lightbox:hover .yt-play { background: rgba(0, 0, 0, 0.34); } +.yt-lightbox .yt-play i { + color: #fff; + font-size: 1.6rem; + width: 64px; + height: 64px; + line-height: 64px; + text-align: center; + padding-left: 6px; + border-radius: 50%; + background: rgba(184, 51, 106, 0.92); +} + +/* ============================================================ + * Unified homepage section-heading divider. + * One real rule for every home section title, replacing the ad-hoc + * `subtitle = "---"` / `***` content dividers (which some sections had and + * others didn't). Scoped to .home-section so inner pages are unaffected. + * ============================================================ */ +.home-section .section-heading h1::after, +.home-section.wg-about-welcome h1::after { + content: ""; + display: block; + height: 1px; + background: rgba(0, 64, 85, 0.18); + margin: 16px auto 0; +} + +/* ============================================================ + * Newsletter (EmailOctopus) submit button — ships Bootstrap-purple; + * repaint it in FORRT teal. High specificity + !important to beat the + * embed's own injected, later-loaded styles. + * ============================================================ */ +[id^="octopus-form"] input.btn.btn-primary, +[id^="octopus-form"] input[type="submit"], +[id^="octopus-form"] button[type="submit"] { + background-color: #004055 !important; + border-color: #004055 !important; + color: #fff !important; +} +[id^="octopus-form"] input.btn.btn-primary:hover, +[id^="octopus-form"] input[type="submit"]:hover, +[id^="octopus-form"] button[type="submit"]:hover { + background-color: #00566f !important; + border-color: #00566f !important; +} + +/* ============================================================ + * Combined Achievements & Awards section (two columns) + * ============================================================ */ +.aa-grid { + display: grid; + grid-template-columns: 1fr 1.05fr; + gap: 2.8rem; + align-items: start; + max-width: 980px; + margin: 0 auto; +} +.aa-col img { max-width: 100%; height: auto; } +.aa-achievements { text-align: center; } +.aa-achievements img { max-width: 440px; } +.aa-awards p:first-child { margin-top: 0; } +@media (max-width: 768px) { + .aa-grid { grid-template-columns: 1fr; gap: 1.4rem; } +} + +/* ============================================================ + * Rotating-quote hero (wg-hero-quotes) + * ============================================================ */ +.hero-quotes { + max-width: 1000px; + margin: 0 auto; + text-align: center; +} +.hq-eyebrow { + font-family: 'Domine', serif; + font-size: 0.82rem; + text-transform: uppercase; + letter-spacing: 0.18em; + color: #69b3a2; + font-weight: 700; + margin: 0 0 1.6rem; +} +/* All quotes share one grid cell so the hero height = tallest quote (no shift). + minmax(0,1fr) stops the column auto-sizing to the longest quote's one-line + (max-content) width, which would otherwise overflow narrow viewports. */ +.hq-stage { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center; align-items: center; } +.hq-quote { + grid-area: 1 / 1; + /* Match the site-wide section-title treatment: Domine, weight 400, #313131. */ + font-family: 'Domine', serif; + color: #313131; + font-weight: 400; + font-size: 3.3rem; + line-height: 1.22; + margin: 0 auto; + max-width: 22ch; + /* Neutralise the theme's default blockquote treatment (left border, padding). */ + border: 0; + padding: 0; + /* Resting state: waiting just below, hidden. Active slides up into place; + leaving keeps sliding up and out — a continuous upward motion. */ + opacity: 0; + transform: translateY(34px); + transition: opacity 0.55s ease, transform 0.55s cubic-bezier(0.22, 0.61, 0.36, 1); + pointer-events: none; +} +.hq-quote.is-active { opacity: 1; transform: translateY(0); pointer-events: auto; } +.hq-quote.is-leaving { opacity: 0; transform: translateY(-34px); } +.hq-quote .accent { color: #b8336a; } +@media (prefers-reduced-motion: reduce) { + .hq-quote { transition: opacity 0.4s ease; transform: none; } + .hq-quote.is-leaving { transform: none; } +} +.hq-actions { + display: flex; + gap: 0.8rem; + justify-content: center; + margin-top: 1.8rem; +} +.hq-dots { + display: flex; + gap: 0.5rem; + justify-content: center; + margin-top: 1.8rem; +} +.hq-dot { + width: 9px; + height: 9px; + padding: 0; + border: 0; + border-radius: 50%; + background: #d8d4c2; + cursor: pointer; + transition: background 0.2s, transform 0.2s; +} +.hq-dot:hover { transform: scale(1.2); } +.hq-dot.on { background: #b8336a; } +@media (max-width: 992px) { .hq-quote { font-size: 2.5rem; } } +@media (max-width: 640px) { .hq-quote { font-size: 1.8rem; max-width: 18ch; overflow-wrap: break-word; } } +@media (max-width: 430px) { .hq-quote { font-size: 1.42rem; max-width: 17ch; } } + +/* ---- Compress the hero: cap the logo height so the top of the site is tighter. + Base rule keeps the logo within the viewport on every screen; the height + cap (which needs width:auto) only kicks in on large screens. ---- */ +.wg-hero-welcome .hero-media img { + max-width: 100%; + height: auto; +} +@media (min-width: 992px) { + .wg-hero-welcome .hero-media img { + width: auto; + max-height: 240px; + margin: 0 auto; + display: block; + } +} + +/* ---- "What is FORRT?" media column: logo + video stacked, text beside it. ---- */ +.wg-about-welcome .avatar { + width: 170px; + height: 170px; +} +.wg-about-welcome .profile-video { + display: block; + width: 100%; + max-width: 280px; + margin: 1.4rem auto 0; +} +.wg-about-welcome #profile { text-align: center; } +.wg-about-welcome .network-icon { margin-top: 1.1rem; } +/* On mobile, lead with the heading + intro text, then the logo/video/socials. */ +@media (max-width: 991px) { + .wg-about-welcome .row { flex-direction: column; } + .wg-about-welcome .col-lg-8 { order: 1; } + .wg-about-welcome .col-lg-4 { order: 2; margin-top: 1.5rem; } +} diff --git a/content/authors/forrt/_index.md b/content/authors/forrt/_index.md index 82b06685a26..1bb12b70d17 100644 --- a/content/authors/forrt/_index.md +++ b/content/authors/forrt/_index.md @@ -52,13 +52,8 @@ user_groups: display_name: false --- -*** In a nutshell, FORRT is a ***F***ramework for ***O***pen and ***R***eproducible ***R***esearch ***T***raining advancing research transparency, reproducibility, rigor, and ethics through pedagogical reform and meta-scientific research. FORRT provides a pedagogical infrastructure & didactic resources designed to recognize and support the teaching and mentoring of open and reproducible science. FORRT strives to raise awareness of the pedagogical implications of open and reproducible science and its associated challenges (i.e., curricular reform, epistemological uncertainty, methods of education) and advocates for the opening and formal recognition of teaching and mentoring materials to facilitate access, discovery, and learning to those who otherwise would be educationally disenfranchised. -{{< youtube XlL54egjSoA >}} - -
- {{< expand "Expand to learn more" >}} diff --git a/content/home/1-hero.md b/content/home/1-hero.md index a21073fe896..a75d385a46c 100644 --- a/content/home/1-hero.md +++ b/content/home/1-hero.md @@ -1,56 +1,35 @@ +++ -# Hero widget. -widget = "hero_welcome" # See https://sourcethemes.com/academic/docs/page-builder/ +# Rotating-quote hero (see layouts/partials/widgets/hero_quotes.html). +widget = "hero_quotes" headless = true # This file represents a page section. active = true # Activate this widget? true/false weight = 10 # Order that this section will appear. -title = "Framework for
Open and
Reproducible
Research
Training" +eyebrow = "FORRT — a fort and a force" -# Hero image (optional). Enter filename of an image in the `static/img/` folder. -hero_media = "FORRT.svg" -hero_media_alttext = "Logo of FORRT is a fort." -# [design.spacing] -# # Customize the section spacing. Order is top, right, bottom, left. -# padding = ["20px", "0", "20px", "0"] - -[design.background] - # Apply a background color, gradient, or image. - # Uncomment (by removing `#`) an option to apply it. - # Choose a light or dark text color by setting `text_color_light`. - # Any HTML color name or Hex value is valid. +# Key statements to cycle through. Wrap the part to highlight in +# . Drawn from FORRT's vision and mission. +[[quote]] + text = 'Care is not a distraction from the work. It is the work.' +[[quote]] + text = 'Scientific excellence and social justice, inseparable.' +[[quote]] + text = 'From a culture of competition to one of community.' +[[quote]] + text = 'Teaching and community building, on equal footing with discovery.' - # Background color. - # color = "#fefdf6" - - # Background gradient. - # gradient_start = "#4bb4e3" - # gradient_end = "#2b94c3" - - # Background image. - # image = "FORRT.svg" # Name of image in `static/img/`. - # image_darken = 0.6 # Darken the image? Range 0-1 where 0 is transparent and 1 is opaque. - # image_size = "cover" # Options are `cover` (default), `contain`, or `actual` size. - # image_position = "center" # Options include `left`, `center` (default), or `right`. - # image_parallax = true # Use a fun parallax-like fixed background effect? true/false - - # Text color (true=light or false=dark). - text_color_light = false +[primary_cta] + label = "Get involved" + url = "/about/get-involved/" + +[secondary_cta] + label = "About FORRT" + url = "/about/us/" -# Call to action links (optional). -# Display link(s) by specifying a URL and label below. Icon is optional for `[cta]`. -# Remove a link/note by deleting a cta/note block. -# [cta] -# url = "https://sourcethemes.com/academic/docs/install/" -# label = "Get Started" -# icon_pack = "fas" -# icon = "download" - -# [cta_alt] -# url = "https://sourcethemes.com/academic/" -# label = "View Documentation" +[design.spacing] + # Customize the section spacing. Order is top, right, bottom, left. + padding = ["60px", "0", "56px", "0"] -# Note. An optional note to show underneath the links. -# [cta_note] -# label = 'Latest release' -+++ \ No newline at end of file +[design.background] + text_color_light = false ++++ diff --git a/content/home/2-welcome.md b/content/home/2-welcome.md index 6df2f9e526b..467c054110c 100644 --- a/content/home/2-welcome.md +++ b/content/home/2-welcome.md @@ -5,7 +5,7 @@ widget = "blank" # See https://sourcethemes.com/academic/docs/page-builder/ headless = true # This file represents a page section. -active = true # Activate this widget? true/false +active = false # Disabled: redundant with the hero. Its tagline now lives in the hero lead (1-hero.md). weight = 20 # Order that this section will appear. title = "**Welcome to FORRT**
------
" diff --git a/content/home/3-what-is-forrt.md b/content/home/3-what-is-forrt.md index 9efc6d972d9..9d84446eedf 100644 --- a/content/home/3-what-is-forrt.md +++ b/content/home/3-what-is-forrt.md @@ -12,9 +12,12 @@ title = "What is FORRT?" # See https://sourcethemes.com/academic/docs/get-started/#introduce-yourself author = "forrt" +# YouTube video shown (as a click-to-play lightbox) in the left media column. +video_id = "XlL54egjSoA" + [design.spacing] # Customize the section spacing. Order is top, right, bottom, left. - padding = ["60px", "0", "60px", "0"] + padding = ["24px", "0", "24px", "0"] +++ diff --git a/content/home/3b-announcements.md b/content/home/3b-announcements.md new file mode 100644 index 00000000000..a19849217e3 --- /dev/null +++ b/content/home/3b-announcements.md @@ -0,0 +1,17 @@ ++++ +# Announcements section (custom card widget). +widget = "announcements" # See layouts/partials/widgets/announcements.html +headless = true # This file represents a page section. +active = true # Activate this widget? true/false +weight = 35 # Order that this section will appear (after "What is FORRT?", before Products). + +title = "News & Announcements" +# Divider under the header comes from the shared .home-section heading rule (custom.scss). + +# Number of recent announcements to show. +count = 3 + +[design.spacing] + # Customize the section spacing. Order is top, right, bottom, left. + padding = ["20px", "0", "50px", "0"] ++++ diff --git a/content/home/4-products.md b/content/home/4-products.md index 6f081926ff0..4a51caa5b47 100644 --- a/content/home/4-products.md +++ b/content/home/4-products.md @@ -6,8 +6,6 @@ active = true # Activate this widget? true/false weight = 40 # Order that this section will appear. title = "Open Educational Resources &
Metascientific Works" -subtitle = "---" - # Showcase personal skills or business features. # diff --git a/content/home/5-achievements.md b/content/home/5-achievements.md index 0cd4ce648c1..158b7a479ca 100644 --- a/content/home/5-achievements.md +++ b/content/home/5-achievements.md @@ -1,67 +1,39 @@ +++ -# A Demo section created with the Blank widget. -# Any elements can be added in the body: https://sourcethemes.com/academic/docs/writing-markdown-latex/ -# Add more sections by duplicating this file and customizing to your requirements. - +# Combined Achievements & Awards section (two columns). widget = "blank" # See https://sourcethemes.com/academic/docs/page-builder/ headless = true # This file represents a page section. active = true # Activate this widget? true/false weight = 50 # Order that this section will appear. -title = "Achievements" -subtitle = "---" - +title = "Achievements & Awards" [design] # Choose how many columns the section has. Valid values: 1 or 2. columns = "1" [design.background] - # Apply a background color, gradient, or image. - # Uncomment (by removing `#`) an option to apply it. - # Choose a light or dark text color by setting `text_color_light`. - # Any HTML color name or Hex value is valid. - - # Background color. - color = "#fefdf6" - - # Background gradient. - # gradient_start = "DeepSkyBlue" - # gradient_end = "SkyBlue" - - # Background image. - # image = "headers/bubbles-wide.webp" # Name of image in `static/img/`. - # image_darken = 0.6 # Darken the image? Range 0-1 where 0 is transparent and 1 is opaque. - # image_size = "cover" # Options are `cover` (default), `contain`, or `actual` size. - # image_position = "center" # Options include `left`, `center` (default), or `right`. - # image_parallax = true # Use a fun parallax-like fixed background effect? true/false - - # Text color (true=light or false=dark). + color = "#fefdf6" text_color_light = false [design.spacing] # Customize the section spacing. Order is top, right, bottom, left. - padding = ["60px", "0", "60px", "0"] - -[advanced] - # Custom CSS. - css_style = "" - - # CSS class. - css_class = "" + padding = ["40px", "0", "40px", "0"] +++ -
- -
+
+
-
+![FORRT achievements infographic](/img/Achievements.webp) -![FORRT Awards](/img/Achievements.webp) +
+
-
+FORRT has won a series of awards and commendations for our work, including: -
+- The UK Reproducibility Network's Dorothy Bishop Prize +- Open Science Community Amsterdam's OSC Award in the Open Educational Resources / Open Education / Open Online Courses category +- An Open Scholarship Prize (1st Place) award from the Atlantic Technological University and the Open Science Community Galway - +To find out more about these and more, read [FORRT's awards page](/awards). -
+ + diff --git a/content/home/5-awards.md b/content/home/5-awards.md index c3ca44d8d9d..7fe1a490070 100644 --- a/content/home/5-awards.md +++ b/content/home/5-awards.md @@ -5,7 +5,7 @@ widget = "blank" # See https://sourcethemes.com/academic/docs/page-builder/ headless = true # This file represents a page section. -active = true # Activate this widget? true/false +active = false # Disabled: merged into 5-achievements.md as a two-column "Achievements & Awards" section. weight = 50 # Order that this section will appear. title = "Awards" diff --git a/content/home/5-get-involved.md b/content/home/5-get-involved.md index d65cb50b102..fc603108271 100644 --- a/content/home/5-get-involved.md +++ b/content/home/5-get-involved.md @@ -6,9 +6,6 @@ active = true # Activate this widget? true/false weight = 60 # Order that this section will appear. title = "How can you help?" -subtitle = "---" - - # Add/remove as many `[[feature]]` blocks below as you like. # # For available icons, see: https://sourcethemes.com/academic/docs/widgets/#icons diff --git a/content/post/2026-01-newsletter/index.md b/content/post/2026-01-newsletter/index.md new file mode 100644 index 00000000000..8d90d9f63e3 --- /dev/null +++ b/content/post/2026-01-newsletter/index.md @@ -0,0 +1,12 @@ +--- +title: "FORRT Newsletter — January 2026" +date: 2026-01-28 +tags: [] +categories: + - Newsletter +authors: ["FORRT"] +--- + +Marks the launch of the Replication Research (R2) journal with its inaugural editorial, and introduces the FORWARD (FORRT for World Development) initiative aligned with UNESCO's International Decade of Sciences for Sustainable Development. It also flags upcoming events including Love Replications Week and the Making Replications Count Hackathon. + +[Read the newsletter](https://eocampaign1.com/web-version?p=fe198ab4-f705-11f0-b264-b3838bc6094d&pt=campaign&t=1769634321&s=8d9de871b0b694f3fb7ea79f9d5365fb858c018631402d1f306912c583e846e0) diff --git a/content/post/2026-02-newsletter/index.md b/content/post/2026-02-newsletter/index.md new file mode 100644 index 00000000000..2ec0c39cf0d --- /dev/null +++ b/content/post/2026-02-newsletter/index.md @@ -0,0 +1,12 @@ +--- +title: "FORRT Newsletter — February 2026" +date: 2026-02-25 +tags: [] +categories: + - Newsletter +authors: ["FORRT"] +--- + +Previews Love Replications Week (2-6 March), a Team Credit Hackathon (9 March), and the in-person Making Replications Count Hackathon (4-6 May). It also introduces new tools including ARIADNE, the FReD Explorer App, and the FLoRA Annotator, with the FReD database now holding over 1,000 replication findings. + +[Read the newsletter](https://eocampaign1.com/web-version?p=e0c335de-11b6-11f1-a1c2-6ba123ee4ad5&pt=campaign&t=1772047352&s=dec61220bf547f2a4345d54a8819f206f19df3923ec3234ae2e98517cbe4d9a7) diff --git a/content/post/2026-03-newsletter/index.md b/content/post/2026-03-newsletter/index.md new file mode 100644 index 00000000000..59ced7d4836 --- /dev/null +++ b/content/post/2026-03-newsletter/index.md @@ -0,0 +1,12 @@ +--- +title: "FORRT Newsletter — March 2026" +date: 2026-03-31 +tags: [] +categories: + - Newsletter +authors: ["FORRT"] +--- + +Shares the call for submissions to the FORRT AI in Metascience online conference and the upcoming launch of Round 3 of the Predicting Replicability Challenge (22 April). It also highlights recordings from Love Replications Week and the Zotero Replication Checker, now available in five languages. + +[Read the newsletter](https://eocampaign1.com/web-version?p=37587f24-13bc-11f1-a58e-016a4c8ed9d0&pt=campaign&t=1774939747&s=0364890f4fe6275bb6fcf840a4994b12cab30ff7fa9428df282730367dd893bb) diff --git a/content/post/2026-04-newsletter/index.md b/content/post/2026-04-newsletter/index.md new file mode 100644 index 00000000000..0c1ea31d4bb --- /dev/null +++ b/content/post/2026-04-newsletter/index.md @@ -0,0 +1,12 @@ +--- +title: "FORRT Newsletter — April 2026" +date: 2026-04-30 +tags: [] +categories: + - Newsletter +authors: ["FORRT"] +--- + +Opens submissions for the online FORRT AI in Metascience Conference and a call for contributors to the FLoRA replication library, alongside the new interactive Re-Search Terms app. It also invites responses to the Big Team Science Experience and Tools & Infrastructure surveys (deadline 18 May). + +[Read the newsletter](https://eocampaign1.com/web-version?p=8644de88-42bb-11f1-bea3-9d65e0900500&pt=campaign&t=1777532460&s=1106ac34f85bfa9f49456127a0721dc5de49dcde3135c164ab272a08a51f553e) diff --git a/content/post/2026-05-chinese-glossary/index.md b/content/post/2026-05-chinese-glossary/index.md new file mode 100644 index 00000000000..98504d540f8 --- /dev/null +++ b/content/post/2026-05-chinese-glossary/index.md @@ -0,0 +1,12 @@ +--- +title: "Chinese-language Glossary of Open Scholarship terms" +date: 2026-05-31 +tags: [] +categories: + - Resource +authors: ["FORRT"] +--- + +FORRT's glossary of open scholarship terms is now available in Chinese, helping lower the barrier to understanding and participating in open science discussions for Chinese-speaking researchers and students. It joins the existing English, German, and Arabic versions. + +[Explore the glossary](/glossary/chinese/) diff --git a/content/post/2026-05-get-involved-page/index.md b/content/post/2026-05-get-involved-page/index.md new file mode 100644 index 00000000000..32ad6c0f54f --- /dev/null +++ b/content/post/2026-05-get-involved-page/index.md @@ -0,0 +1,12 @@ +--- +title: "New data-driven Get Involved page" +date: 2026-05-07 +tags: [] +categories: + - Resource +authors: ["FORRT"] +--- + +The Get Involved page has been rebuilt to draw its content directly from a Google Sheet, making it easier to keep opportunities to contribute to FORRT current and helping newcomers find ways to participate. + +[Get involved](/about/get-involved/) diff --git a/content/post/2026-05-just-os-chatbot/index.md b/content/post/2026-05-just-os-chatbot/index.md new file mode 100644 index 00000000000..09becfb7f4f --- /dev/null +++ b/content/post/2026-05-just-os-chatbot/index.md @@ -0,0 +1,12 @@ +--- +title: "JUST-OS chatbot launched to help navigate Open Science resources" +date: 2026-05-07 +tags: [] +categories: + - Resource +authors: ["FORRT"] +--- + +JUST-OS (Judicious User-friendly Support Tool for Open Science), an AI-based chatbot developed by researchers at the University of Groningen and FORRT, is now live. It provides user-friendly, tailored guidance to help researchers find relevant Open Science resources. + +[Try the chatbot](/just_os_chatbot/) diff --git a/content/post/2026-05-newsletter/index.md b/content/post/2026-05-newsletter/index.md new file mode 100644 index 00000000000..a20b2e17d34 --- /dev/null +++ b/content/post/2026-05-newsletter/index.md @@ -0,0 +1,12 @@ +--- +title: "FORRT Newsletter — May 2026" +date: 2026-05-28 +tags: [] +categories: + - Newsletter +authors: ["FORRT"] +--- + +Announces the Replication Hub Showcase (1 July 2026, online) and a 'CRediTing in BTS' hackathon at SIPS 2026 in Washington, DC, plus a call for validators for FLoRA, FORRT's replication database of over 2,000 study pairs. It also opens applications for the LMU Open Science Summer School 2026 (deadline 6 July). + +[Read the newsletter](https://eocampaign1.com/web-version?p=fc2dc0f2-5a02-11f1-acce-9d9105ec3473&pt=campaign&t=1779997339&s=3af80e5a532a00aab817156af2b3a85643ab7b668d1960d384ba6d9ee2072ddd) diff --git a/content/post/2026-05-nowhere-lab/index.md b/content/post/2026-05-nowhere-lab/index.md new file mode 100644 index 00000000000..16d82bfe0be --- /dev/null +++ b/content/post/2026-05-nowhere-lab/index.md @@ -0,0 +1,12 @@ +--- +title: "Nowhere Lab: an online community for those without a lab" +date: 2026-05-12 +tags: [] +categories: + - Resource +authors: ["FORRT"] +--- + +A new page introduces Nowhere Lab, an online lab community (a FORRT partner) for anyone without a lab who wants the lab-meeting experience, including new faculty, ex-academics, freelancers, and keen undergrads. The page features an interactive map of its 200+ members worldwide and a PhD Survival Guide. + +[Read more](/nowherelab/) diff --git a/content/post/2026-06-ai-metascience-call/index.md b/content/post/2026-06-ai-metascience-call/index.md new file mode 100644 index 00000000000..fe89162e0d4 --- /dev/null +++ b/content/post/2026-06-ai-metascience-call/index.md @@ -0,0 +1,12 @@ +--- +title: "FORRT AI in Metascience Online Conference: Call for Submissions" +date: 2026-06-14 +tags: [] +categories: + - Opportunity +authors: ["FORRT"] +--- + +FORRT is inviting submissions for a free online conference (28-30 September 2026) exploring how AI and large language models can help us understand and improve how science works. Talks, workshops, and hackathon proposals are welcome from all career stages, with a submission deadline of 31 July 2026. + +[Submit your proposal](/ai-metascience/) diff --git a/content/post/2026-06-peer-community-in-partner/index.md b/content/post/2026-06-peer-community-in-partner/index.md new file mode 100644 index 00000000000..180d672bc8f --- /dev/null +++ b/content/post/2026-06-peer-community-in-partner/index.md @@ -0,0 +1,12 @@ +--- +title: "Peer Community In joins FORRT's partners" +date: 2026-06-10 +tags: [] +categories: + - Milestone +authors: ["FORRT"] +--- + +FORRT has added Peer Community In (PCI) and the Peer Community Journal to its network of partners. PCI offers thematic platforms to review preprints, and PCJ is a multidisciplinary, indexed, diamond open-access journal where validated preprints can be published free of charge for authors. + +[See our partners](/about/partnerships/) diff --git a/content/post/_index.md b/content/post/_index.md new file mode 100644 index 00000000000..e6a13e3f34d --- /dev/null +++ b/content/post/_index.md @@ -0,0 +1,7 @@ +--- +title: "News & Announcements" +summary: "Newsletters, events, opportunities and new resources from across the FORRT community." +header: + caption: "" + image: "" +--- diff --git a/gs_announcement_hash.txt b/gs_announcement_hash.txt new file mode 100644 index 00000000000..845185ae893 --- /dev/null +++ b/gs_announcement_hash.txt @@ -0,0 +1 @@ +2138c9a98ec996ff2b2ff6cf3e4b76cc diff --git a/layouts/partials/announcement_card.html b/layouts/partials/announcement_card.html new file mode 100644 index 00000000000..1838d87f200 --- /dev/null +++ b/layouts/partials/announcement_card.html @@ -0,0 +1,20 @@ +{{/* Renders one announcement card. Context (.) is the post page. */}} +{{ $post := . }} +{{ $img := ($post.Resources.ByType "image").GetMatch "*featured*" }} +{{ $cat := "" }}{{ with $post.Params.categories }}{{ $cat = index . 0 }}{{ end }} + + {{ with $img }} +
+ +
+ {{ end }} +
+
+ {{ with $cat }}{{ . }}{{ end }} + {{ $post.Date.Format "Jan 2006" }} +
+

{{ $post.Title }}

+

{{ with $post.Params.summary }}{{ . }}{{ else }}{{ $post.Summary | plainify | truncate 120 }}{{ end }}

+ Read more › +
+
diff --git a/layouts/partials/chatbot.html b/layouts/partials/chatbot.html index 05ec6276884..cd23767cfa8 100644 --- a/layouts/partials/chatbot.html +++ b/layouts/partials/chatbot.html @@ -867,6 +867,20 @@ top: 80px; } + /* On mobile there's no room to the left of the seal, so drop the + "How can I help you?" bubble below it instead. */ + #just-os-bubble, + #just-os-widget.is-offline #just-os-bubble { + top: 92px; + right: 0; + left: auto; + transform: translateY(-8px); + } + #just-os-btn:hover #just-os-bubble, + .bubble-visible { + transform: translateY(0) !important; + } + #just-os-window { width: 100vw; } diff --git a/layouts/partials/widgets/about_welcome.html b/layouts/partials/widgets/about_welcome.html index a25a6b23437..c00818fd168 100644 --- a/layouts/partials/widgets/about_welcome.html +++ b/layouts/partials/widgets/about_welcome.html @@ -43,6 +43,13 @@

{{ end }} + {{ with $page.Params.video_id }} + + Play introduction video + + + {{ end }} +