Skip to content
This repository was archived by the owner on Apr 23, 2026. It is now read-only.

IRWA website redesign#9

Open
whostacking wants to merge 545 commits into
mainfrom
patch-1
Open

IRWA website redesign#9
whostacking wants to merge 545 commits into
mainfrom
patch-1

Conversation

@whostacking

@whostacking whostacking commented Mar 18, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features

    • Completely redesigned members directory with interactive modal interface for viewing detailed information.
    • New table of contents feature for easier navigation on longer pages.
    • Redesigned homepage with updated layout and member showcase.
  • Documentation

    • Added comprehensive onboarding guides and joining criteria documentation.
  • Style

    • Major visual overhaul with new typography, color system, and layout improvements.
    • Updated header and footer with improved navigation and partnership information.
  • Chores

    • Added MIT License to repository.
    • Updated site configuration and build workflows.

@coderabbitai

coderabbitai Bot commented Mar 18, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: aa334247-78c0-42c8-a31a-9176fd48f27b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • ✅ Review completed - (🔄 Check again to review again)
📝 Walkthrough

Walkthrough

Site-wide template, content, CSS/LESS, and asset changes: added gitignore patterns; updated member data and members UI/logic; replaced local font preloads with Google Fonts; removed global CSS and oneko.js; introduced new LESS-based styling, modal/members styles, theme toggle and theme script; adjusted header/footer, layouts, and various page markups.

Changes

Cohort / File(s) Summary
Ignore rules
/.gitignore
Added *.log and /home/jules/verification/ ignore patterns.
Member data
_data/members.yml
Advanced many joined dates, revised team lists, normalized social URLs and name casing, and updated some descriptions.
Members templates & logic
members/index.html, assets/css/members.css, assets/css/members.less
Modal CTA renamed/rewired (game_linklink), btn-game-linkbtn-site-link, modal description switched to innerHTML, social link icon handling changed; members CSS refactored/rewritten (visual tokens, modal interactions, accessibility states).
Global stylesheet migration
assets/css/main.css, assets/css/editor.css, assets/css/style.less, assets/css/mixins.less
Removed/emptied legacy main.css and editor.css; added new style.less (comprehensive site styles) and mixins.less (overlay/button mixins).
Head, fonts & header
_includes/head.html, _includes/header.html
Replaced local Raleway preloads with Google Fonts preconnects and Instrument Sans/Material Symbols; added a header theme-toggle button (#themeToggle, #themeIcon).
Theme script
assets/js/scripts.js
Added IIFE handling persisted theme toggle (localStorage) and DOM class/icon updates.
Layout & page templates
_layouts/default.html, _includes/footer.html, about/index.html, index.html, projects/index.html
Removed some body/container utility classes and a visibility-title script; adjusted footer label and added Security.TXT link; reworked About layout/CTAs; updated hero CTA(s), project headings/icons and action links.
Deleted playful script
oneko.js
Removed the oneko mouse-chasing sprite script (file deleted).
Assets / SVGs & images
assets/svg/..., /media/promofiles/..., assets/svg/mediawiki.svg
Swapped some inline SVGs for image assets, changed image sources for hero and project figure, and updated action link icons/documentation link.
Small markup & behaviour tweaks
members/index.html, index.html, projects/index.html
Minor CTA text/icon changes, commented-out legacy markup, and adjusted link targets/rel attributes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • whostacking/irwa-website#1 — Overlapping edits to _data/members.yml, header/head/footer and several templates (fonts and template adjustments).

Poem

🐰 I hopped through templates and font delights,
I nudged the members, polished modal lights,
I swapped the styles and hid a playful cat,
A toggle button hums — dark or light — just tap,
My whiskers twitch: the site has fresh new sights.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'IRWA website redesign' accurately captures the primary objective of this comprehensive pull request, which involves restructuring CSS, updating HTML layouts, and refreshing the site's visual design across multiple components.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch patch-1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (6)
members/index.html (1)

130-133: Update stale inline comment to match behavior.

The comment says “Always add Wiki link first,” but this block now appends a Game link from member.game_link.

Proposed tweak
-    // Always add Wiki link first
+    // Add game link first (when available)
     if (member.game_link) {
         socials.appendChild(createSocialLink(member.game_link, 'Game'));
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@members/index.html` around lines 130 - 133, The inline comment above the
socials.appendChild call is stale — it says “Always add Wiki link first” but the
code appends member.game_link as a Game link; update the comment to reflect the
actual behavior (e.g., “Always add Game link first” or a neutral comment like
“Add primary social link first”) near the
socials.appendChild(createSocialLink(member.game_link, 'Game')) call and ensure
any neighboring comments for Wiki links are accurate as well.
index.html (1)

11-14: Hide decorative CTA icon from screen readers.

The arrow_forward glyph is decorative here; adding aria-hidden="true" prevents it from being announced as text.

Proposed tweak
-    <span class="material-symbols-outlined">arrow_forward</span>
+    <span class="material-symbols-outlined" aria-hidden="true">arrow_forward</span>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@index.html` around lines 11 - 14, The decorative icon inside the CTA anchor
(the <span class="material-symbols-outlined">arrow_forward</span> within the
element using class "btn") should be hidden from assistive tech; update that
span to include aria-hidden="true" so screen readers ignore it (and keep the
visual glyph intact), ensuring no change to the anchor text or structure.
_includes/head.html (1)

19-21: Avoid double-loading Instrument Sans.

Instrument Sans is now loaded in the head and also imported in assets/css/style.css (@import at assets/css/style.css:1-22). Keeping both can cause redundant requests and slower first paint.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@_includes/head.html` around lines 19 - 21, The page currently double-loads
Instrument Sans via the head <link
href="https://fonts.googleapis.com/...Instrument+Sans"> and an `@import` of the
same font in assets/css/style.css; remove the redundant source by deleting the
`@import` that pulls Instrument Sans from the top of assets/css/style.css so the
head preconnect and <link> remain the single font provider, ensuring only one
network request and faster first paint.
_includes/footer.html (1)

8-8: Keep footer link styling consistent.

The new Security.TXT anchor doesn’t include the invert class used by adjacent footer links, so it may render inconsistently.

Proposed tweak
-      <li><a href="{{ "/security.txt" | relative_url }}">Security.TXT</a></li>
+      <li><a href="{{ "/security.txt" | relative_url }}" class="invert">Security.TXT</a></li>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@_includes/footer.html` at line 8, The footer link for "Security.TXT" is
missing the CSS class used by adjacent links; update the anchor element
containing "{{ "/security.txt" | relative_url }}" to include class="invert" so
it matches the styling of its siblings (same pattern as other <a> elements in
the footer).
assets/css/members.css (2)

84-84: Use overflow: auto instead of overflow: scroll.

overflow: scroll always displays scrollbars regardless of whether content overflows. This can be visually distracting when the modal content fits within the viewport. Using overflow: auto shows scrollbars only when needed.

♻️ Suggested fix
-    overflow: scroll;
+    overflow: auto;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/css/members.css` at line 84, Replace the CSS declaration that sets
"overflow: scroll" with "overflow: auto" so scrollbars appear only when content
actually overflows; locate the rule containing the "overflow: scroll"
declaration in the stylesheet and change it to "overflow: auto" (preserving any
other properties in the same selector).

225-237: Consider adding text-decoration: none and reviewing !important usage.

If .btn-site-link is applied to anchor elements, consider adding text-decoration: none to prevent underlines. The !important on color (also used on line 14) suggests potential specificity conflicts—consider addressing root causes rather than using !important as a workaround.

♻️ Suggested addition
 .btn-site-link {
     background: var(--neutral-9);
     color: var(--white) !important;
     padding: 8px 16px;
     border-radius: var(--border-radius);
     font-size: 0.85rem;
     font-weight: bold;
+    text-decoration: none;
     transition: transform 0.2s;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/css/members.css` around lines 225 - 237, The .btn-site-link rule
should explicitly suppress underlines for anchor usage and avoid using
!important on color; add text-decoration: none to .btn-site-link and remove the
!important from the color declaration, then resolve the underlying specificity
conflict by either increasing selector specificity (e.g., target a.btn-site-link
or .nav .btn-site-link) or adjusting the source of competing rules/variables so
the color value from var(--white) applies without !important; confirm the change
still applies on hover (the &:hover transform can remain unchanged).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@_data/members.yml`:
- Line 111: Trim trailing whitespace from the affected team member name entries:
remove the trailing space characters from the "name" values currently listed as
"Fsh " and "bee " in the members data so they become "Fsh" and "bee"; update the
_data/members.yml entries (the name fields) to trim any other trailing spaces as
well to prevent display/matching issues.

In @.gitignore:
- Line 7: The .gitignore entry "/home/jules/verification/" is a machine-specific
absolute-looking path and should be replaced with a portable rule (e.g.,
"verification/" or "verification/**" or "verification/*") so it matches the
intended local folder across clones; update the entry that currently reads
"/home/jules/verification/" to a repo-relative pattern, or if this ignore is
only for a single developer, remove it from .gitignore and add it to that
developer's .git/info/exclude instead.

In `@about/index.html`:
- Line 34: Update the Discord invite anchor in about/index.html so the href uses
HTTPS instead of HTTP: locate the <a> tag with class "btn" and href
"http://discord.com/invite/74qrU7qBqx" and change the URL to
"https://discord.com/invite/74qrU7qBqx" to ensure a secure link for the Discord
server button.

In `@projects/index.html`:
- Line 10: The promo image inside the <figure class="post__image--right">
currently has alt="" which is ambiguous; decide whether it's decorative or
informative and update accordingly: if the image conveys project context,
replace the empty alt with a concise descriptive string (e.g., describing the
project's name and visual) so screen readers get meaningful text; if it is
purely decorative, keep alt="" but add aria-hidden="true" to the <img> element
to explicitly hide it from assistive tech. Make the change on the <img
loading="lazy" src="{{ "/media/promofiles/utg-robloxapi.png" | relative_url }}"
...> element.

---

Nitpick comments:
In `@_includes/footer.html`:
- Line 8: The footer link for "Security.TXT" is missing the CSS class used by
adjacent links; update the anchor element containing "{{ "/security.txt" |
relative_url }}" to include class="invert" so it matches the styling of its
siblings (same pattern as other <a> elements in the footer).

In `@_includes/head.html`:
- Around line 19-21: The page currently double-loads Instrument Sans via the
head <link href="https://fonts.googleapis.com/...Instrument+Sans"> and an
`@import` of the same font in assets/css/style.css; remove the redundant source by
deleting the `@import` that pulls Instrument Sans from the top of
assets/css/style.css so the head preconnect and <link> remain the single font
provider, ensuring only one network request and faster first paint.

In `@assets/css/members.css`:
- Line 84: Replace the CSS declaration that sets "overflow: scroll" with
"overflow: auto" so scrollbars appear only when content actually overflows;
locate the rule containing the "overflow: scroll" declaration in the stylesheet
and change it to "overflow: auto" (preserving any other properties in the same
selector).
- Around line 225-237: The .btn-site-link rule should explicitly suppress
underlines for anchor usage and avoid using !important on color; add
text-decoration: none to .btn-site-link and remove the !important from the color
declaration, then resolve the underlying specificity conflict by either
increasing selector specificity (e.g., target a.btn-site-link or .nav
.btn-site-link) or adjusting the source of competing rules/variables so the
color value from var(--white) applies without !important; confirm the change
still applies on hover (the &:hover transform can remain unchanged).

In `@index.html`:
- Around line 11-14: The decorative icon inside the CTA anchor (the <span
class="material-symbols-outlined">arrow_forward</span> within the element using
class "btn") should be hidden from assistive tech; update that span to include
aria-hidden="true" so screen readers ignore it (and keep the visual glyph
intact), ensuring no change to the anchor text or structure.

In `@members/index.html`:
- Around line 130-133: The inline comment above the socials.appendChild call is
stale — it says “Always add Wiki link first” but the code appends
member.game_link as a Game link; update the comment to reflect the actual
behavior (e.g., “Always add Game link first” or a neutral comment like “Add
primary social link first”) near the
socials.appendChild(createSocialLink(member.game_link, 'Game')) call and ensure
any neighboring comments for Wiki links are accurate as well.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9587f930-55ed-4fa5-9858-1d7bfe19cd67

📥 Commits

Reviewing files that changed from the base of the PR and between 7645b83 and 8306fe0.

⛔ Files ignored due to path filters (6)
  • assets/dynamic/fonts/raleway/raleway-italic.woff2 is excluded by !**/*.woff2
  • assets/dynamic/fonts/raleway/raleway.woff2 is excluded by !**/*.woff2
  • assets/svg/github.svg is excluded by !**/*.svg
  • assets/svg/mediawiki.svg is excluded by !**/*.svg
  • media/promofiles/utg-robloxapi.png is excluded by !**/*.png
  • oneko.gif is excluded by !**/*.gif
📒 Files selected for processing (14)
  • .gitignore
  • _data/members.yml
  • _includes/footer.html
  • _includes/head.html
  • _layouts/default.html
  • about/index.html
  • assets/css/editor.css
  • assets/css/main.css
  • assets/css/members.css
  • assets/css/style.css
  • index.html
  • members/index.html
  • oneko.js
  • projects/index.html
💤 Files with no reviewable changes (3)
  • assets/css/main.css
  • assets/css/editor.css
  • oneko.js

Comment thread _data/members.yml Outdated
Comment thread .gitignore
Comment thread about/index.html Outdated
Comment thread projects/index.html Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
projects/index.html (1)

10-10: ⚠️ Potential issue | 🟡 Minor

Clarify decorative vs informative intent for the promo image.

Line 10 keeps alt=""; if this image is informational, add descriptive alt text. If decorative, keep empty alt and add aria-hidden="true" explicitly.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@projects/index.html` at line 10, The img element inside the figure (the promo
image) currently has alt="" which is ambiguous; decide whether it is decorative
or informative: if informative, replace alt="" with a concise descriptive text
(e.g., alt="UTG Roblox API promotional banner") conveying the image's content;
if purely decorative, keep alt="" but add aria-hidden="true" to the img (or the
figure) so assistive tech ignores it. Update the <img> tag accordingly in the
figure element to reflect the chosen intent.
about/index.html (1)

38-38: ⚠️ Potential issue | 🟠 Major

Switch the Discord CTA to HTTPS.

Line 38 still uses plaintext HTTP for a primary contact CTA.

Proposed fix
-  <a href="http://discord.com/invite/74qrU7qBqx" class="btn">Discord server</a>
+  <a href="https://discord.com/invite/74qrU7qBqx" class="btn">Discord server</a>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@about/index.html` at line 38, Update the Discord CTA anchor to use HTTPS
instead of HTTP: locate the anchor element with class "btn" whose href is
"http://discord.com/invite/74qrU7qBqx" in about/index.html and change the href
to "https://discord.com/invite/74qrU7qBqx" (also scan for other identical
anchors to update any duplicates).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@projects/index.html`:
- Line 19: The GitHub anchor tag with href
"https://github.com/Roblox-Indie-Wikis/mediawiki-extensions-RobloxAPI" is
missing the noreferrer value in its rel attribute; update that <a> element to
use rel="noopener noreferrer" (matching the pattern used on the other buttons)
so the link includes both noopener and noreferrer for consistency and privacy.

---

Duplicate comments:
In `@about/index.html`:
- Line 38: Update the Discord CTA anchor to use HTTPS instead of HTTP: locate
the anchor element with class "btn" whose href is
"http://discord.com/invite/74qrU7qBqx" in about/index.html and change the href
to "https://discord.com/invite/74qrU7qBqx" (also scan for other identical
anchors to update any duplicates).

In `@projects/index.html`:
- Line 10: The img element inside the figure (the promo image) currently has
alt="" which is ambiguous; decide whether it is decorative or informative: if
informative, replace alt="" with a concise descriptive text (e.g., alt="UTG
Roblox API promotional banner") conveying the image's content; if purely
decorative, keep alt="" but add aria-hidden="true" to the img (or the figure) so
assistive tech ignores it. Update the <img> tag accordingly in the figure
element to reflect the chosen intent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1cd0dafc-c0f2-405a-b71a-f795b59c6d9e

📥 Commits

Reviewing files that changed from the base of the PR and between 8306fe0 and ab40225.

⛔ Files ignored due to path filters (1)
  • media/promofiles/utg-robloxapi.png is excluded by !**/*.png
📒 Files selected for processing (4)
  • _includes/footer.html
  • about/index.html
  • assets/css/style.css
  • projects/index.html

Comment thread projects/index.html Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
about/index.html (1)

40-40: Remove stale commented-out CTA markup.

Line 40 leaves dead UI code in-page; prefer deleting it and tracking reintroduction in an issue/PR note.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@about/index.html` at line 40, Remove the stale commented-out CTA markup <!--
<a href="{{ "/joining/" | relative_url }}" class="btn">Join Us</a> --> from the
HTML; delete that commented anchor entirely and, if desired, add a short note to
the PR description or issue tracker to record that the "Join Us" CTA (the <a
href="{{ "/joining/" | relative_url }}" class="btn">Join Us</a> element) was
intentionally removed and can be reintroduced via a future change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@about/index.html`:
- Line 17: Change the second page-level heading "<h1>Our approach</h1>" (the
heading introduced on line with text "Our approach") to an "<h2>" to preserve a
single top-level <h1> on the page; locate the element containing the exact text
"Our approach" and replace the tag from h1 to h2 so the document maintains
correct heading hierarchy.

In `@projects/index.html`:
- Around line 20-29: The decorative icons next to visible link text are read
redundantly by screen readers; update the three decorative elements (the <img>
tags with class "li img-invert" used for GitHub and MediaWiki and the <span
class="material-symbols-outlined"> developer_guide </span> used for
Documentation) to be ignored by assistive tech by making them non‑semantic: set
the <img> elements to have empty alt attributes (alt="") and add
aria-hidden="true", and add aria-hidden="true" (and optionally
focusable="false") to the <span class="material-symbols-outlined"> so screen
readers only announce the visible link text.

---

Nitpick comments:
In `@about/index.html`:
- Line 40: Remove the stale commented-out CTA markup <!-- <a href="{{
"/joining/" | relative_url }}" class="btn">Join Us</a> --> from the HTML; delete
that commented anchor entirely and, if desired, add a short note to the PR
description or issue tracker to record that the "Join Us" CTA (the <a href="{{
"/joining/" | relative_url }}" class="btn">Join Us</a> element) was
intentionally removed and can be reintroduced via a future change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0e344c8b-7be3-4a03-9b2b-53268cfce38c

📥 Commits

Reviewing files that changed from the base of the PR and between ab40225 and dbeb9f2.

📒 Files selected for processing (5)
  • _data/members.yml
  • about/index.html
  • assets/css/members.css
  • assets/css/style.css
  • projects/index.html
🚧 Files skipped from review as they are similar to previous changes (2)
  • _data/members.yml
  • assets/css/members.css

Comment thread about/index.html Outdated
Comment thread projects/index.html Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@index.html`:
- Line 54: The image inside <figure class="post__image"> currently has an empty
alt attribute; replace alt="" on the <img> element with a concise, descriptive
string (for example: "Screenshot of the SEWH website displayed on a MacBook") so
screen readers get meaningful content while leaving loading="lazy" and the src
unchanged; update the alt on the <img> tag that uses "{{
"/media/promofiles/SEWH_on_macbook.png" | relative_url }}" as the src.
- Around line 59-62: Update the Discord invite anchor so it uses HTTPS rather
than HTTP: locate the <a> element with text "Discord Server" and href
"http://discord.com/invite/74qrU7qBqx" and change the URL scheme to
"https://discord.com/invite/74qrU7qBqx" (keep the class="btn" and other
attributes unchanged).

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9472e549-79c5-4cd7-bcb0-480f7ca3eb38

📥 Commits

Reviewing files that changed from the base of the PR and between dbeb9f2 and 8ed488d.

⛔ Files ignored due to path filters (1)
  • media/promofiles/SEWH_on_macbook.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • index.html

Comment thread index.html Outdated
Comment thread index.html Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@_layouts/default.html`:
- Line 24: The page currently defers /assets/js/scripts.js which applies the
dark-mode class too late; add a small inline bootstrap snippet before the
deferred bundle that reads the saved theme (e.g., from localStorage or
prefers-color-scheme) and synchronously applies or removes the "dark-mode" class
on document.documentElement so the initial paint uses the correct theme, then
leave the existing <script src="/assets/js/scripts.js" defer> unchanged to run
later; reference the "dark-mode" CSS class and the external "scripts.js" bundle
when making the change.

In `@assets/css/members.css`:
- Around line 9-31: The compiled CSS in assets/css/members.css contains
duplicate declarations (display, gap, padding, color, transition) causing
Stylelint failures; remove the redundant entries so each property appears once
with the intended value (e.g., keep display: flex, gap: 10px, padding: 1.5rem,
transition: all 0.2s ease-out, color: var(--white) !important) and ensure the
final rule is consistent. If this file is generated from
assets/css/members.less, regenerate the compiled CSS from members.less or stop
committing the generated asset (add to .gitignore) to prevent source/drift;
update the source in members.less if the intended values differ so future builds
produce a lint-clean members.css.

In `@assets/css/style.less`:
- Around line 182-188: The carousel overshoots because box-sizing:border-box
makes each .logo-slide 150px wide but the carousel math still uses 230px per
item; update the travel calculation used for translating the carousel (the code
that computes step/translateX and the loop reset) to compute per-item width
dynamically instead of using the hardcoded 230 value — e.g., measure a
.logo-slide element with element.getBoundingClientRect().width (and add parsed
margin-right from getComputedStyle if spacing is included) and use that computed
width for the translate step and loop reset logic so the animation matches the
actual .logo-slide size.
- Around line 1170-1180: The .container rule currently sets overflow: hidden
which clips full-bleed elements; remove overflow: hidden from the .container
block so full-width selectors (e.g., .featured-image, .post-image,
.gallery-wrapper) can extend to the viewport edges, and if needed move any
intended clipping to a more specific wrapper or set overflow: hidden on that
specific child rather than on .container to preserve layout isolation without
blocking full-bleed elements.

In `@assets/js/scripts.js`:
- Around line 431-456: The theme toggle button must keep its aria-pressed state
in sync: ensure the markup for the toggle sets aria-pressed="false" initially,
and update aria-pressed on page load and on click inside the IIFE by using the
existing themeToggle element; when applying the saved theme (currentTheme ===
'dark') set themeToggle.setAttribute('aria-pressed','true') and when toggling in
the themeToggle.click handler set aria-pressed to 'true' if
body.classList.contains('dark-mode') else 'false' (use the same themeToggle,
themeIcon and body variables already in the function).

In `@members/index.html`:
- Around line 111-115: The hidden CTA (`#modalSiteLink`) still has an href when
member.link is falsy, so trapFocus() picks it up via [href] and creates a
non-focusable tab stop; when member.link is absent, remove or neutralize the
link target and exclude it from focus by removing the href attribute
(link.removeAttribute('href')) and/or setting tabindex="-1" and
aria-hidden="true" in the else branch (instead of only
link.style.display='none'), keeping the existing members rendering logic
(member.link, link.href, link.style.display) but ensuring the element cannot be
reached by keyboard focus.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 87074acd-4331-4d96-bbfa-75ff4610a755

📥 Commits

Reviewing files that changed from the base of the PR and between 8ed488d and 14e060b.

⛔ Files ignored due to path filters (3)
  • assets/svg/discord.svg is excluded by !**/*.svg
  • assets/svg/twitter.svg is excluded by !**/*.svg
  • assets/svg/website.svg is excluded by !**/*.svg
📒 Files selected for processing (9)
  • _includes/header.html
  • _layouts/default.html
  • assets/css/members.css
  • assets/css/members.less
  • assets/css/mixins.less
  • assets/css/style.css
  • assets/css/style.less
  • assets/js/scripts.js
  • members/index.html
✅ Files skipped from review due to trivial changes (1)
  • assets/css/mixins.less

Comment thread assets/css/members.css Outdated
Comment thread assets/css/style.less
Comment thread assets/css/style.less
Comment thread assets/js/scripts.js Outdated
Comment thread members/index.html Outdated
whostacking and others added 18 commits April 21, 2026 23:40
* finalising images

* upd 2

* add image

* style: minify scripts.js (#9)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* finalising images

* upd 2

* add image

* style: minify scripts.js (#9)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* updating

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* finalising images

* upd 2

* add image

* style: minify scripts.js (#9)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* updating

* testing

* upd

* upd

* upd

* test

* changing width

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

♻️ Duplicate comments (4)
.github/workflows/compile-less.yml (1)

56-60: ⚠️ Potential issue | 🔴 Critical

--admin flag still present — auto-merge will fail with GITHUB_TOKEN.

The workflow only grants contents: write and pull-requests: write, neither of which confers admin privileges. gh pr merge --admin requires admin rights to bypass branch protections and will error out when invoked with the default GITHUB_TOKEN, preventing the auto-merge step from succeeding.

🔧 Proposed fix
       - name: Auto-merge PR
         if: steps.cpr.outputs.pull-request-operation == 'created'
-        run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --squash --admin
+        run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --squash --delete-branch
         env:
           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

If bypassing branch protection is actually required, switch to a PAT or GitHub App token with the necessary admin permissions rather than GITHUB_TOKEN.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/compile-less.yml around lines 56 - 60, The workflow uses
gh pr merge with the --admin flag which requires admin privileges not granted to
the default GITHUB_TOKEN; remove the --admin flag from the gh pr merge
invocation (the command that uses steps.cpr.outputs.pull-request-number) so the
merge runs with the existing token, or replace the GITHUB_TOKEN env used by that
run with a Personal Access Token or GitHub App token that has
admin/branch-protection bypass rights if bypass is actually required.
.github/workflows/deploy.yml (1)

3-6: ⚠️ Potential issue | 🟠 Major

Deployment will not run after this PR merges to main.

Line 5 restricts push-triggered deploys to patch-1, but this PR targets main. After merge, pushes to main will not trigger the Pages deployment.

#!/bin/bash
# Verify the deploy workflow push branch filter.
rg -n -C3 'branches:\s*\["patch-1"\]' .github/workflows/deploy.yml
🔧 Proposed fix
 on:
   push:
-    branches: ["patch-1"]
+    branches: ["main"]
   workflow_dispatch:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/deploy.yml around lines 3 - 6, The push trigger in the
GitHub Actions workflow is restricted to branches: ["patch-1"], so deployments
won't run when this PR merges to main; update the deploy workflow's push branch
filter (the on: push: branches: setting in .github/workflows/deploy.yml) to
include "main" (or remove the branches filter to trigger on all pushes) so
pushes to main will run the Pages deployment; ensure the change updates the
branches array used by the workflow's push trigger.
.github/workflows/sync-docs.yml (1)

67-71: ⚠️ Potential issue | 🟠 Major

Auto-merge still uses --admin with the default workflow token.

Line 69 still requires admin/bypass authority, but Line 71 authenticates gh with ${{ secrets.GITHUB_TOKEN }}. This is likely to fail unless replaced with an admin-capable PAT or GitHub App token.

#!/bin/bash
# Verify the auto-merge command still combines --admin with the default GITHUB_TOKEN.
rg -n -C3 'gh pr merge .*--admin|GH_TOKEN:\s*\$\{\{\s*secrets\.GITHUB_TOKEN\s*\}\}' .github/workflows/sync-docs.yml
🔧 Proposed fix
       - name: Auto-merge PR
         if: steps.cpr.outputs.pull-request-operation == 'created'
         run: gh pr merge "${{ steps.cpr.outputs.pull-request-number }}" --squash --admin
         env:
-          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          GH_TOKEN: ${{ secrets.ADMIN_GH_TOKEN }}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/sync-docs.yml around lines 67 - 71, The workflow step that
runs the command `gh pr merge "${{ steps.cpr.outputs.pull-request-number }}"
--squash --admin` is authenticating `gh` with `GH_TOKEN: ${{
secrets.GITHUB_TOKEN }}` which lacks admin/bypass permissions; either remove the
`--admin` flag from the `gh pr merge` invocation or replace the `GH_TOKEN` env
to use an admin-capable token (e.g., a repository-level PAT or GitHub App token)
so the `--admin` option will succeed; update the `Auto-merge PR` step to use the
chosen approach and ensure the `GH_TOKEN` environment variable reference matches
the new secret name if you switch to a PAT/GitHub App token.
_data/members.yml (1)

17-17: ⚠️ Potential issue | 🟡 Minor

Polish the remaining visible copy typos.

Line 17 is missing an article, and Line 93 has mid-sentence capitalization.

Copy fix
-  description: "The official wiki of <b><i>Guts & Blackpowder</i></b>, housing comprehensive database for information regarding the game, such as Game Mechanics, Equipment, Maps, and much more. Created and maintained by the Developers, Game Staff, and Wiki Team."
+  description: "The official wiki of <b><i>Guts & Blackpowder</i></b>, housing a comprehensive database for information regarding the game, such as Game Mechanics, Equipment, Maps, and much more. Created and maintained by the Developers, Game Staff, and Wiki Team."
@@
-  description: "The official database for <b><i>3D Planets Simulator</i></b>, A space-themed colonization and industry game based on Roblox. Join now and explore the Blue Galaxy!"
+  description: "The official database for <b><i>3D Planets Simulator</i></b>, a space-themed colonization and industry game based on Roblox. Join now and explore the Blue Galaxy!"

Also applies to: 93-93

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@_data/members.yml` at line 17, Update the description string in members.yml
by inserting the missing article so it reads "housing a comprehensive database"
(fix the value for the description key) and also locate the other sentence with
mid-sentence capitalization (the text at the second noted occurrence) and change
the improperly capitalized word to lowercase so it flows as a normal
mid-sentence word.
🧹 Nitpick comments (8)
.github/workflows/compile-less.yml (1)

42-54: Consider guarding PR creation when there are no CSS changes.

peter-evans/create-pull-request will no-op if the working tree is clean, but the step still runs on every **/*.less push even when the compiled output is unchanged (e.g., whitespace-only LESS edits that minify identically). Not a correctness issue, just noise in Actions history — optionally add a git diff --quiet check before this step to skip early.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/compile-less.yml around lines 42 - 54, The "Create Pull
Request" step (id: cpr, uses: peter-evans/create-pull-request@v6) runs even when
the compiled CSS hasn't changed; add a guard to skip PR creation when there are
no CSS diffs by first running a short check (e.g., a preceding step that runs
git diff --quiet <target-files> or compares the compiled CSS output and sets an
output like changed=true/false) and then add an if condition on the cpr step
(if: steps.<check-step>.outputs.changed == 'true' or similar) so the PR step is
skipped when there are no changes to commit.
_includes/header.html (1)

8-8: Remove the commented-out Home menu item if it’s intentionally retired.

Keeping old Liquid/HTML inside comments adds template noise and can still be emitted into generated HTML as a comment.

Cleanup
-      <!-- <li{% if page.url == "/" %} class="active"{% endif %}><a href="{{ "/" | relative_url }}">Home</a></li> -->
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@_includes/header.html` at line 8, Remove the commented-out Home menu item in
_includes/header.html by deleting the entire commented line that contains the
Liquid snippet "<li{% if page.url == "/" %} class="active"{% endif %}><a
href="{{ "/" | relative_url }}">Home</a></li>" so the template no longer emits
or stores that obsolete HTML comment; if the Home link must be restored later,
keep the code in version control history instead of an inline comment.
assets/css/_mixins.less (2)

26-26: Mixed indentation (tab vs spaces).

Line 26 uses a tab while the rest of .button-mixin uses spaces. Likely a Stylelint/formatter nit.

♻️ Proposed fix
-	font: normal 600 0.8888888889rem var(--font-body);
+    font: normal 600 0.8888888889rem var(--font-body);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/css/_mixins.less` at line 26, The line inside the .button-mixin uses a
tab for indentation while the rest uses spaces; replace the tab before "font:
normal 600 0.8888888889rem var(--font-body);" with the project's standard spaces
so the .button-mixin indentation is consistent with surrounding lines and
satisfies Stylelint/formatter rules.

11-13: Consider @supports fallbacks for @starting-style.

The @starting-style at-rule is currently supported in Chrome/Edge 117+, Firefox 129+, and Safari 17.5+ (Web Platform Baseline "Newly available"), which covers >95% of modern browsers. On older clients, the starting state simply won't apply and the overlay appears without the blur-in transition — acceptable as progressive enhancement. For broader compatibility, wrap the rule in @supports (selector(::view-transition-old(root))) or feature-detect at runtime if your support baseline requires coverage below these versions.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/css/_mixins.less` around lines 11 - 13, The `@starting-style` rule
currently sets backdrop-filter: blur(0px) which won't apply on older browsers;
update the CSS so the `@starting-style` block is wrapped in a feature-detection
fallback using `@supports` (selector(::view-transition-old(root))) or a runtime
feature check — i.e., keep the existing `@starting-style` { backdrop-filter:
blur(0px); } but add a fallback branch that only applies when the
view-transition/start styles are supported (using `@supports`(...) or equivalent
runtime check) so older clients gracefully skip the blur-in transition while
modern browsers retain it.
.github/workflows/js-minify.yml (1)

2-10: Workflow will recursively retrigger itself.

This workflow runs on push when assets/js/scripts.js changes, opens a PR, and auto-merges it using GITHUB_TOKEN. Merges authored by GITHUB_TOKEN normally don't retrigger other workflows — but the merge commit to main here doesn't touch scripts.js (only scripts.min.js), so in the common case you're fine. However, if a future change modifies the paths filter to include scripts.min.js, or if a contributor edits both files and this workflow pushes back, a loop becomes possible. Consider adding a guard:

if: github.actor != 'github-actions[bot]'

on the job to be safe.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/js-minify.yml around lines 2 - 10, The workflow can
self-retrigger when the action's bot merges changes; to prevent loops, add a
job-level guard such as if: github.actor != 'github-actions[bot]' to the job(s)
that create the PR / auto-merge (the job that uses GITHUB_TOKEN to open/merge
the PR and/or any jobs that push commits), placing the if condition at the top
of the job definition so the job is skipped when the actor is the GitHub Actions
bot.
_layouts/default.html (1)

25-34: Consider conditionally loading page-specific JS.

entity-modal.js is only used by /members/ and /partners/, and the TOC scripts only matter on toc-enabled pages. Loading all eight deferred scripts on every page adds a noticeable number of HTTP requests for pages that don't need them. Gating via {% if page.url contains '/members/' or page.url contains '/partners/' %} (or via a page.scripts list front-matter key) would reduce per-page payload. Defer order will still be preserved within the subset that is emitted.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@_layouts/default.html` around lines 25 - 34, The layout currently
unconditionally emits all eight scripts (entity-modal.js, overflow-*.js,
toc-*.js), causing unnecessary requests; change _layouts/default.html to
conditionally include these assets by checking page metadata or URL — e.g., only
emit entity-modal.js when page.url contains '/members/' or '/partners/' (or when
a page.scripts front-matter list includes "entity-modal"), only emit
toc-wrapper.js/toc-sticky.js/toc-init.js when the page has a TOC flag (e.g.,
page.toc_enabled or page.scripts contains "toc"), and only emit overflow-*.js
when the page requires the table overflow feature; keep defer and relative_url
logic the same so load order is preserved within each conditional block.
assets/js/toc-sticky.js (1)

53-55: Consider throttling/debouncing resize.

handleResize runs setInitialState on every resize event, which fires many times during a window drag. Since setInitialState is a no-op when the mobile/desktop state doesn't change, the impact is small, but a simple requestAnimationFrame guard or debounce would smooth things out.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/js/toc-sticky.js` around lines 53 - 55, The resize handler
handleResize currently calls setInitialState on every resize event; wrap or
guard it to avoid frequent calls during continuous resizes by adding a
requestAnimationFrame or debounce/throttle so setInitialState only runs once per
animation frame or after a short delay. Locate the handleResize method and add a
RAF guard (e.g., track a pending animation frame id and only call
setInitialState when none pending) or a short debounce around setInitialState to
coalesce rapid events.
assets/js/entity-modal.js (1)

38-50: Minor: guard logo.src against undefined and dedupe the lookup.

window.getCurrentLogo(element) returns element.dataset.logo, which is undefined when no data-logo was set. Assigning that to logo.src results in the string "undefined" being resolved to a URL and triggering a 404 fetch; onload never fires so the <img> stays hidden (visually fine, but noisy in the network panel). The helper is also called twice here.

🧹 Proposed tweak
-    logo.hidden = true;
-    logo.onload = () => logo.hidden = false;
-    logo.src = window.getCurrentLogo(element);
-    logo.alt = `${entity.name || 'Entity'} logo`;
-
-    const logoUrl = window.getCurrentLogo(element);
     const modalLeft = modal.querySelector('.modal-left');
+    const logoUrl = window.getCurrentLogo(element);
+    logo.hidden = true;
+    logo.alt = `${entity.name || 'Entity'} logo`;
+    if (logoUrl) {
+        logo.onload = () => { logo.hidden = false; };
+        logo.src = logoUrl;
+    } else {
+        logo.removeAttribute('src');
+    }
     if (logoUrl) {
         const safeLogoUrl = logoUrl.replace(/["\\]/g, '\\$&');
         modalLeft.style.setProperty('--logo-url', `url("${safeLogoUrl}")`);
     } else {
         modalLeft.style.removeProperty('--logo-url');
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/js/entity-modal.js` around lines 38 - 50,
window.getCurrentLogo(element) is called twice and its undefined result is
assigned to logo.src causing a request for "undefined"; first capture the result
once (e.g., const logoUrl = window.getCurrentLogo(element)) and use that for
both setting logo.src and the CSS --logo-url; before assigning to logo.src only
set it when logoUrl is truthy (guarding logo.src against undefined) and keep the
existing logo.hidden / logo.onload logic, and continue to sanitize logoUrl when
applying modalLeft.style.setProperty('--logo-url', ...) to avoid injection.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@_config.yml`:
- Around line 4-9: Update the site URL and base path in _config.yml so generated
canonical URLs use the production domain: change the url key from
"https://whostacking.github.io" to "https://indierobloxwikis.org" and set
baseurl to an empty string (baseurl: "") instead of "/irwa-website"; verify the
url and baseurl entries are the only ones referencing the staging domain so
jekyll-seo-tag and social metadata will point at the production site.

In `@assets/css/style.less`:
- Around line 443-463: The td border colors are using var(--black) which is
low-contrast on the dark background; update the table cell borders in the table
selector (the nested & td rules) to use var(--neutral-2) (same as the outer
table border) for border-top and border-left so cell separators remain readable
in dark mode, keeping the existing padding and other properties unchanged;
verify the & th rule remains as-is.

In `@assets/css/syntax-highlighting.less`:
- Around line 2-14: The .highlight block lacks horizontal overflow handling
causing long code lines to break layout; update the .highlight and its nested
pre rules (refer to the .highlight selector and its nested & pre block) to
enable horizontal scrolling by adding overflow-x: auto (or overflow: auto) on
the .highlight container and ensure the pre keeps code spacing (set white-space
to a non-wrapping value like pre) so long lines scroll instead of overflowing
the page.

In `@assets/js/scripts.js`:
- Around line 699-713: The code calls localStorage.setItem inside setRowsLayout
(and similarly in the grid layout handler) which can throw and prevent
resetIsotopeLayout() from running; move or duplicate the call to
resetIsotopeLayout() so it always executes, and wrap
localStorage.setItem('persona-theme-selected-layout', ...) in a try/catch that
swallows/storage-unavailable errors. Concretely, in setRowsLayout (and the
corresponding setGridLayout/setColumnsLayout function referenced around lines
729-742), after mutating DOM/classes and before/after calling
resetIsotopeLayout(), surround the localStorage.setItem call with try { ... }
catch (e) { /* ignore or optional debug log */ } so the layout reset
(resetIsotopeLayout) is not skipped when storage is unavailable.

In `@index.html`:
- Around line 32-37: The "12 members" value in the landing-stats block is
hard-coded and must be derived from the data source; replace the static text
inside the landing-stats div (the element showing "12 members") with a computed
count from site.data.members (e.g., site.data.members | size) so it always
reflects members.yml, and reconcile the carousel's limit: 12 (the code that
iterates site.data.members limit: 12) by either removing the fixed limit or
setting it to match the computed count so the UI and carousel remain consistent.

In `@pages/joining.html`:
- Around line 72-75: The decorative arrow <img> inside the "Join our Discord"
link (the <a> with class "btn btn-external") is missing an empty alt attribute;
add alt="" to that <img src=".../arrow_forward.svg" (which already has
aria-hidden="true" and class "img-invert material-symbols") so screen readers
skip the decorative image and don't announce the filename.

In `@pages/legal.html`:
- Around line 10-12: Update the legal copy to use “affiliated with” instead of
“affiliated by” in the Miraheze sentence (the second <p> block shown) and remove
any trailing spaces just before the closing </p> tags in the affected paragraphs
so there are no visible source trailing spaces; ensure the corrected sentence
reads: "We work with certain volunteers from Miraheze to ensure our best
interests are met. However, we are not endorsed, sponsored or affiliated with
Miraheze or WikiTide Foundation."

In `@pages/onboarding.html`:
- Line 14: The hero image currently uses an empty alt and aria-hidden which
hides meaningful content from assistive tech; update the <figure
class="post__image align-center"> <img> tag (the one with src
"/assets/promofiles/OnboardingMainThumbnail.png") to remove the aria-hidden
attribute and supply a concise descriptive alt (e.g., "Onboarding illustration
showing app onboarding flow and features") that accurately describes the image
purpose for screen readers and Open Graph consumers.
- Line 109: The image tag loading from assets.st-note.com should be replaced
with a locally hosted asset to avoid privacy/reliability issues: download the
referenced image(s) into your static assets folder (e.g. /assets/promofiles/),
update the <img> src attributes in pages/onboarding.html (the existing <img
src="https://assets.st-note.com/..."> occurrences) to use the local relative URL
(use the site's relative_url helper pattern used elsewhere), keep the alt and
class values, and optionally add loading="lazy" and explicit width/height
attributes; apply the same replacement for the other hotlinked images noted
(lines 116-118 and 226).

In `@pages/projects.html`:
- Line 27: The pages/projects.html hardcodes a different fallback text ("400+
wikis") for the robloxapi stat than the homepage, causing inconsistent display
when extensionstats.js replaces only the span text; update the span with class
"extension-usage" and data-extension="robloxapi" in pages/projects.html to match
the homepage fallback ("500+ wikis") so both pages show the same initial text
and the JS replacement yields consistent formatting, and verify
extensionstats.js still targets span.extension-usage[data-extension="robloxapi"]
correctly.

---

Duplicate comments:
In `@_data/members.yml`:
- Line 17: Update the description string in members.yml by inserting the missing
article so it reads "housing a comprehensive database" (fix the value for the
description key) and also locate the other sentence with mid-sentence
capitalization (the text at the second noted occurrence) and change the
improperly capitalized word to lowercase so it flows as a normal mid-sentence
word.

In @.github/workflows/compile-less.yml:
- Around line 56-60: The workflow uses gh pr merge with the --admin flag which
requires admin privileges not granted to the default GITHUB_TOKEN; remove the
--admin flag from the gh pr merge invocation (the command that uses
steps.cpr.outputs.pull-request-number) so the merge runs with the existing
token, or replace the GITHUB_TOKEN env used by that run with a Personal Access
Token or GitHub App token that has admin/branch-protection bypass rights if
bypass is actually required.

In @.github/workflows/deploy.yml:
- Around line 3-6: The push trigger in the GitHub Actions workflow is restricted
to branches: ["patch-1"], so deployments won't run when this PR merges to main;
update the deploy workflow's push branch filter (the on: push: branches: setting
in .github/workflows/deploy.yml) to include "main" (or remove the branches
filter to trigger on all pushes) so pushes to main will run the Pages
deployment; ensure the change updates the branches array used by the workflow's
push trigger.

In @.github/workflows/sync-docs.yml:
- Around line 67-71: The workflow step that runs the command `gh pr merge "${{
steps.cpr.outputs.pull-request-number }}" --squash --admin` is authenticating
`gh` with `GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}` which lacks admin/bypass
permissions; either remove the `--admin` flag from the `gh pr merge` invocation
or replace the `GH_TOKEN` env to use an admin-capable token (e.g., a
repository-level PAT or GitHub App token) so the `--admin` option will succeed;
update the `Auto-merge PR` step to use the chosen approach and ensure the
`GH_TOKEN` environment variable reference matches the new secret name if you
switch to a PAT/GitHub App token.

---

Nitpick comments:
In `@_includes/header.html`:
- Line 8: Remove the commented-out Home menu item in _includes/header.html by
deleting the entire commented line that contains the Liquid snippet "<li{% if
page.url == "/" %} class="active"{% endif %}><a href="{{ "/" | relative_url
}}">Home</a></li>" so the template no longer emits or stores that obsolete HTML
comment; if the Home link must be restored later, keep the code in version
control history instead of an inline comment.

In `@_layouts/default.html`:
- Around line 25-34: The layout currently unconditionally emits all eight
scripts (entity-modal.js, overflow-*.js, toc-*.js), causing unnecessary
requests; change _layouts/default.html to conditionally include these assets by
checking page metadata or URL — e.g., only emit entity-modal.js when page.url
contains '/members/' or '/partners/' (or when a page.scripts front-matter list
includes "entity-modal"), only emit toc-wrapper.js/toc-sticky.js/toc-init.js
when the page has a TOC flag (e.g., page.toc_enabled or page.scripts contains
"toc"), and only emit overflow-*.js when the page requires the table overflow
feature; keep defer and relative_url logic the same so load order is preserved
within each conditional block.

In @.github/workflows/compile-less.yml:
- Around line 42-54: The "Create Pull Request" step (id: cpr, uses:
peter-evans/create-pull-request@v6) runs even when the compiled CSS hasn't
changed; add a guard to skip PR creation when there are no CSS diffs by first
running a short check (e.g., a preceding step that runs git diff --quiet
<target-files> or compares the compiled CSS output and sets an output like
changed=true/false) and then add an if condition on the cpr step (if:
steps.<check-step>.outputs.changed == 'true' or similar) so the PR step is
skipped when there are no changes to commit.

In @.github/workflows/js-minify.yml:
- Around line 2-10: The workflow can self-retrigger when the action's bot merges
changes; to prevent loops, add a job-level guard such as if: github.actor !=
'github-actions[bot]' to the job(s) that create the PR / auto-merge (the job
that uses GITHUB_TOKEN to open/merge the PR and/or any jobs that push commits),
placing the if condition at the top of the job definition so the job is skipped
when the actor is the GitHub Actions bot.

In `@assets/css/_mixins.less`:
- Line 26: The line inside the .button-mixin uses a tab for indentation while
the rest uses spaces; replace the tab before "font: normal 600 0.8888888889rem
var(--font-body);" with the project's standard spaces so the .button-mixin
indentation is consistent with surrounding lines and satisfies
Stylelint/formatter rules.
- Around line 11-13: The `@starting-style` rule currently sets backdrop-filter:
blur(0px) which won't apply on older browsers; update the CSS so the
`@starting-style` block is wrapped in a feature-detection fallback using `@supports`
(selector(::view-transition-old(root))) or a runtime feature check — i.e., keep
the existing `@starting-style` { backdrop-filter: blur(0px); } but add a fallback
branch that only applies when the view-transition/start styles are supported
(using `@supports`(...) or equivalent runtime check) so older clients gracefully
skip the blur-in transition while modern browsers retain it.

In `@assets/js/entity-modal.js`:
- Around line 38-50: window.getCurrentLogo(element) is called twice and its
undefined result is assigned to logo.src causing a request for "undefined";
first capture the result once (e.g., const logoUrl =
window.getCurrentLogo(element)) and use that for both setting logo.src and the
CSS --logo-url; before assigning to logo.src only set it when logoUrl is truthy
(guarding logo.src against undefined) and keep the existing logo.hidden /
logo.onload logic, and continue to sanitize logoUrl when applying
modalLeft.style.setProperty('--logo-url', ...) to avoid injection.

In `@assets/js/toc-sticky.js`:
- Around line 53-55: The resize handler handleResize currently calls
setInitialState on every resize event; wrap or guard it to avoid frequent calls
during continuous resizes by adding a requestAnimationFrame or debounce/throttle
so setInitialState only runs once per animation frame or after a short delay.
Locate the handleResize method and add a RAF guard (e.g., track a pending
animation frame id and only call setInitialState when none pending) or a short
debounce around setInitialState to coalesce rapid events.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d36ca821-5fe5-418c-972f-cb1e131e4d0a

📥 Commits

Reviewing files that changed from the base of the PR and between 8ed488d and d287ee9.

⛔ Files ignored due to path filters (91)
  • Gemfile.lock is excluded by !**/*.lock
  • assets/backgrounds/3PS_Dirt_Thing.png is excluded by !**/*.png
  • assets/backgrounds/3PS_Nature.png is excluded by !**/*.png
  • assets/backgrounds/3PS_Sun.png is excluded by !**/*.png
  • assets/backgrounds/Anime_Vanguards_BG.png is excluded by !**/*.png
  • assets/backgrounds/D-DAY_Omaha_Beach.png is excluded by !**/*.png
  • assets/backgrounds/Dovedale_Central.png is excluded by !**/*.png
  • assets/backgrounds/Dovedale_Sunset.png is excluded by !**/*.png
  • assets/backgrounds/Dovedale_Tunnel.png is excluded by !**/*.png
  • assets/backgrounds/Fisch_Ancient_Isle.png is excluded by !**/*.png
  • assets/backgrounds/Fisch_Toxic_Grove.png is excluded by !**/*.png
  • assets/backgrounds/Fisch_Trade_Plaza.png is excluded by !**/*.png
  • assets/backgrounds/GBP_London.png is excluded by !**/*.png
  • assets/backgrounds/GBP_San_Sebastian.png is excluded by !**/*.png
  • assets/backgrounds/PHIGHTING_Crossroads_v2.png is excluded by !**/*.png
  • assets/backgrounds/PHIGHTING_Crossroads_v2_2.png is excluded by !**/*.png
  • assets/backgrounds/PHIGHTING_Crossroads_v2_3.png is excluded by !**/*.png
  • assets/backgrounds/Parkour_Reborn_Fragment.png is excluded by !**/*.png
  • assets/backgrounds/Parkour_Reborn_Stack.png is excluded by !**/*.png
  • assets/backgrounds/Restaurant_Tycoon_3_Farm.png is excluded by !**/*.png
  • assets/backgrounds/Restaurant_Tycoon_3_Restaurant.png is excluded by !**/*.png
  • assets/backgrounds/SEWH_Mountain_Lodge.png is excluded by !**/*.png
  • assets/backgrounds/SEWH_Ravenrock_Island.png is excluded by !**/*.png
  • assets/backgrounds/SEWH_Town.png is excluded by !**/*.png
  • assets/backgrounds/UTG_Raven_Ranch.png is excluded by !**/*.png
  • assets/backgrounds/UTG_Skylands.png is excluded by !**/*.png
  • assets/backgrounds/UTG_Tokyo_Town.png is excluded by !**/*.png
  • assets/backgrounds/day-sky.png is excluded by !**/*.png
  • assets/backgrounds/frosted-texture.png is excluded by !**/*.png
  • assets/backgrounds/futuristic-city.png is excluded by !**/*.png
  • assets/dynamic/fonts/lora/lora-italic.woff2 is excluded by !**/*.woff2
  • assets/dynamic/fonts/lora/lora.woff2 is excluded by !**/*.woff2
  • assets/fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf is excluded by !**/*.ttf
  • assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf is excluded by !**/*.ttf
  • assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf is excluded by !**/*.ttf
  • assets/fonts/Instrument_Sans/InstrumentSans-Italic-VariableFont_wdth,wght.ttf is excluded by !**/*.ttf
  • assets/fonts/Instrument_Sans/InstrumentSans-VariableFont_wdth,wght.ttf is excluded by !**/*.ttf
  • assets/icons/arrow_forward.svg is excluded by !**/*.svg
  • assets/icons/dark_mode.svg is excluded by !**/*.svg
  • assets/icons/developer_guide.svg is excluded by !**/*.svg
  • assets/icons/light_mode.svg is excluded by !**/*.svg
  • assets/icons/mail.svg is excluded by !**/*.svg
  • assets/icons/scroll_chevron.svg is excluded by !**/*.svg
  • assets/js/scripts.min.js is excluded by !**/*.min.js
  • assets/plugins/pagePrefetching/quicklink.umd.min.js is excluded by !**/*.min.js
  • assets/promofiles/Different Wikis Illust.png is excluded by !**/*.png
  • assets/promofiles/ExampleImgDDInUse.png is excluded by !**/*.png
  • assets/promofiles/OnboardingMainThumbnail.png is excluded by !**/*.png
  • assets/promofiles/Pressure_and_GBP_on_ipad.png is excluded by !**/*.png
  • assets/promofiles/SEWH_on_macbook.png is excluded by !**/*.png
  • assets/promofiles/irwa-messages.png is excluded by !**/*.png
  • assets/promofiles/sewh-robloxapi.png is excluded by !**/*.png
  • assets/promofiles/utg-robloxapi.png is excluded by !**/*.png
  • assets/svg/discord.svg is excluded by !**/*.svg
  • assets/svg/kofi.svg is excluded by !**/*.svg
  • assets/svg/roblox.svg is excluded by !**/*.svg
  • assets/svg/twitter.svg is excluded by !**/*.svg
  • assets/svg/website.svg is excluded by !**/*.svg
  • assets/website/IRWA-Logo1-dynamic.svg is excluded by !**/*.svg
  • assets/website/IRWA-Logo1-white.svg is excluded by !**/*.svg
  • assets/website/IRWA-Logo1.svg is excluded by !**/*.svg
  • assets/wiki-logos/3DPS.svg is excluded by !**/*.svg
  • assets/wiki-logos/AnimeVanguards_White.svg is excluded by !**/*.svg
  • assets/wiki-logos/D-DAY.png is excluded by !**/*.png
  • assets/wiki-logos/Dovedale_White.svg is excluded by !**/*.svg
  • assets/wiki-logos/Fisch.png is excluded by !**/*.png
  • assets/wiki-logos/HybridCafe_White.svg is excluded by !**/*.svg
  • assets/wiki-logos/IWF Logo.png is excluded by !**/*.png
  • assets/wiki-logos/PHIGHTING.png is excluded by !**/*.png
  • assets/wiki-logos/ParkourReborn.png is excluded by !**/*.png
  • assets/wiki-logos/RT3.png is excluded by !**/*.png
  • assets/wiki-logos/SEWH.png is excluded by !**/*.png
  • assets/wiki-logos/UTG.png is excluded by !**/*.png
  • media/files/3DPS.png is excluded by !**/*.png
  • media/files/CombatInitiation.png is excluded by !**/*.png
  • media/files/Dovedale.png is excluded by !**/*.png
  • media/files/JBCStudios.png is excluded by !**/*.png
  • media/files/Pressure.png is excluded by !**/*.png
  • media/plugins/lucideIcons/lucide-sprite.svg is excluded by !**/*.svg
  • media/plugins/simpleLightboxGallery/venobox.min.js is excluded by !**/*.min.js
  • media/plugins/syntaxHighlighter/clipboard.min.js is excluded by !**/*.min.js
  • media/plugins/syntaxHighlighter/prism-autolinker.min.js is excluded by !**/*.min.js
  • media/plugins/syntaxHighlighter/prism-copy-to-clipboard.min.js is excluded by !**/*.min.js
  • media/plugins/syntaxHighlighter/prism-inline-color.min.js is excluded by !**/*.min.js
  • media/plugins/syntaxHighlighter/prism-line-numbers.min.js is excluded by !**/*.min.js
  • media/plugins/syntaxHighlighter/prism-show-invisibles.min.js is excluded by !**/*.min.js
  • media/posts/3/1737445656507-hyper-nize-2.png is excluded by !**/*.png
  • media/posts/7/1737385567463-nizenberg.png is excluded by !**/*.png
  • media/posts/7/1737385719733-mega-nize.png is excluded by !**/*.png
  • media/posts/7/1737386088521-ultra-nize.png is excluded by !**/*.png
  • media/website/IRWA-Logo1.ico is excluded by !**/*.ico
📒 Files selected for processing (94)
  • .github/ISSUE_TEMPLATE/request-wiki-addition.yml
  • .github/workflows/compile-less.yml
  • .github/workflows/deploy.yml
  • .github/workflows/js-minify.yml
  • .github/workflows/sync-docs.yml
  • .vscode/settings.json
  • .well-known/security.txt
  • 404.html
  • Gemfile
  • LICENSE
  • Link Select.cur
  • Normal Select.cur
  • README.md
  • _config.yml
  • _data/members.yml
  • _data/partners.yml
  • _includes/entity-modal.html
  • _includes/footer.html
  • _includes/head.html
  • _includes/header.html
  • _layouts/default.html
  • _layouts/page.html
  • about/index.html
  • alliance-partners/index.html
  • assets/css/_mixins.less
  • assets/css/members.css
  • assets/css/members.less
  • assets/css/overflow.css
  • assets/css/overflow.less
  • assets/css/style.css
  • assets/css/style.less
  • assets/css/syntax-highlighting.css
  • assets/css/syntax-highlighting.less
  • assets/css/toc.css
  • assets/css/toc.less
  • assets/js/entity-modal.js
  • assets/js/extensionstats.js
  • assets/js/overflow-element.js
  • assets/js/overflow-init.js
  • assets/js/overflow-state.js
  • assets/js/overflow-wrapper.js
  • assets/js/scripts.js
  • assets/js/toc-init.js
  • assets/js/toc-sticky.js
  • assets/js/toc-wrapper.js
  • assets/js/wiki-name-tooltip.js
  • assets/plugins/pagePrefetching/quicklink.umd.js
  • assets/wiki-logos/GBP.webp
  • assets/wiki-logos/RobloxFandomInterwiki.webp
  • extensionstats.js
  • index.html
  • joining/index.html
  • legal/index.html
  • media/plugins/simpleLightboxGallery/venobox.min.css
  • media/plugins/syntaxHighlighter/prism-beige.css
  • media/plugins/syntaxHighlighter/prism-black.css
  • media/plugins/syntaxHighlighter/prism-brown.css
  • media/plugins/syntaxHighlighter/prism-gray.css
  • media/plugins/syntaxHighlighter/prism-inline-color.css
  • media/plugins/syntaxHighlighter/prism-violet.css
  • media/plugins/syntaxHighlighter/prism-white.css
  • media/plugins/syntaxHighlighter/prism.js
  • media/posts/3/responsive/1737445656507-hyper-nize-2-lg.webp
  • media/posts/3/responsive/1737445656507-hyper-nize-2-md.webp
  • media/posts/3/responsive/1737445656507-hyper-nize-2-sm.webp
  • media/posts/3/responsive/1737445656507-hyper-nize-2-xl.webp
  • media/posts/3/responsive/1737445656507-hyper-nize-2-xs.webp
  • media/posts/7/responsive/1737385567463-nizenberg-lg.webp
  • media/posts/7/responsive/1737385567463-nizenberg-md.webp
  • media/posts/7/responsive/1737385567463-nizenberg-sm.webp
  • media/posts/7/responsive/1737385567463-nizenberg-xl.webp
  • media/posts/7/responsive/1737385567463-nizenberg-xs.webp
  • media/posts/7/responsive/1737385719733-mega-nize-lg.webp
  • media/posts/7/responsive/1737385719733-mega-nize-md.webp
  • media/posts/7/responsive/1737385719733-mega-nize-sm.webp
  • media/posts/7/responsive/1737385719733-mega-nize-xl.webp
  • media/posts/7/responsive/1737385719733-mega-nize-xs.webp
  • media/posts/7/responsive/1737386088521-ultra-nize-lg.webp
  • media/posts/7/responsive/1737386088521-ultra-nize-md.webp
  • media/posts/7/responsive/1737386088521-ultra-nize-sm.webp
  • media/posts/7/responsive/1737386088521-ultra-nize-xl.webp
  • media/posts/7/responsive/1737386088521-ultra-nize-xs.webp
  • members/index.html
  • pages/about.html
  • pages/joining.html
  • pages/legal.html
  • pages/members.html
  • pages/onboarding.html
  • pages/partners.html
  • pages/privacy.html
  • pages/projects.html
  • pages/robloxapi.md
  • privacy/index.html
  • projects/index.html
💤 Files with no reviewable changes (17)
  • privacy/index.html
  • media/plugins/syntaxHighlighter/prism-violet.css
  • _layouts/page.html
  • media/plugins/syntaxHighlighter/prism-inline-color.css
  • extensionstats.js
  • joining/index.html
  • media/plugins/syntaxHighlighter/prism-beige.css
  • legal/index.html
  • media/plugins/simpleLightboxGallery/venobox.min.css
  • media/plugins/syntaxHighlighter/prism-brown.css
  • media/plugins/syntaxHighlighter/prism-white.css
  • media/plugins/syntaxHighlighter/prism-black.css
  • media/plugins/syntaxHighlighter/prism-gray.css
  • alliance-partners/index.html
  • about/index.html
  • members/index.html
  • projects/index.html
✅ Files skipped from review due to trivial changes (10)
  • .vscode/settings.json
  • .well-known/security.txt
  • pages/robloxapi.md
  • LICENSE
  • .github/ISSUE_TEMPLATE/request-wiki-addition.yml
  • 404.html
  • assets/css/syntax-highlighting.css
  • assets/css/toc.less
  • README.md
  • _data/partners.yml

Comment thread _config.yml Outdated
Comment on lines 4 to 9
# Change to indierobloxwikis.org if the thing goes through
url: "https://whostacking.github.io"
# baseurl: ""
# Set baseurl to the subpath of the GitHub Pages URL if hosting on a subpath.
# Currently set to "/irwa-website" for testing at https://whostacking.github.io/irwa-website/
baseurl: "/irwa-website"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify deploy-target metadata used by Jekyll SEO output.
set -euo pipefail

sed -n '1,12p' _config.yml

printf '\nCNAME files, if any:\n'
fd -a '^CNAME$' . -x sh -c 'echo "--- $1"; cat "$1"' sh {}

Repository: whostacking/irwa-website

Length of output: 656


Update url and baseurl to match the production domain.

The CNAME file exists pointing to indierobloxwikis.org, but _config.yml still references the GitHub Pages staging domain. This causes jekyll-seo-tag to generate canonical URLs and social metadata pointing to https://whostacking.github.io/irwa-website instead of the production site.

Required fix
-url: "https://whostacking.github.io"
+url: "https://indierobloxwikis.org"
-baseurl: "/irwa-website"
+baseurl: ""
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Change to indierobloxwikis.org if the thing goes through
url: "https://whostacking.github.io"
# baseurl: ""
# Set baseurl to the subpath of the GitHub Pages URL if hosting on a subpath.
# Currently set to "/irwa-website" for testing at https://whostacking.github.io/irwa-website/
baseurl: "/irwa-website"
# Change to indierobloxwikis.org if the thing goes through
url: "https://indierobloxwikis.org"
# baseurl: ""
# Set baseurl to the subpath of the GitHub Pages URL if hosting on a subpath.
# Currently set to "/irwa-website" for testing at https://whostacking.github.io/irwa-website/
baseurl: ""
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@_config.yml` around lines 4 - 9, Update the site URL and base path in
_config.yml so generated canonical URLs use the production domain: change the
url key from "https://whostacking.github.io" to "https://indierobloxwikis.org"
and set baseurl to an empty string (baseurl: "") instead of "/irwa-website";
verify the url and baseurl entries are the only ones referencing the staging
domain so jekyll-seo-tag and social metadata will point at the production site.

Comment thread assets/css/style.less
Comment on lines +443 to +463
table {
border: 1px solid var(--neutral-2);
border-left: none;
border-collapse: collapse;
border-spacing: 0;
vertical-align: top;
text-align: left;
width: 100%;
overflow-wrap: normal;

& th {
font-variation-settings: "wght" var(--font-weight-bold);
padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
}

& td {
border-top: 1px solid var(--black);
border-left: 1px solid var(--black);
padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Low-contrast table cell borders.

var(--black) is #000000 and the page sits on --neutral-base (#1C1C1A), so td borders are nearly invisible in dark mode. Consider var(--neutral-2) (matching the outer table border on Line 444) for a readable separator.

🎨 Proposed fix
 	& td {
-		border-top: 1px solid var(--black);
-		border-left: 1px solid var(--black);
+		border-top: 1px solid var(--neutral-2);
+		border-left: 1px solid var(--neutral-2);
 		padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
 	}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
table {
border: 1px solid var(--neutral-2);
border-left: none;
border-collapse: collapse;
border-spacing: 0;
vertical-align: top;
text-align: left;
width: 100%;
overflow-wrap: normal;
& th {
font-variation-settings: "wght" var(--font-weight-bold);
padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
}
& td {
border-top: 1px solid var(--black);
border-left: 1px solid var(--black);
padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
}
}
table {
border: 1px solid var(--neutral-2);
border-left: none;
border-collapse: collapse;
border-spacing: 0;
vertical-align: top;
text-align: left;
width: 100%;
overflow-wrap: normal;
& th {
font-variation-settings: "wght" var(--font-weight-bold);
padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
}
& td {
border-top: 1px solid var(--neutral-2);
border-left: 1px solid var(--neutral-2);
padding: calc(var(--baseline) * 2.5) calc(var(--baseline) * 4)
}
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/css/style.less` around lines 443 - 463, The td border colors are using
var(--black) which is low-contrast on the dark background; update the table cell
borders in the table selector (the nested & td rules) to use var(--neutral-2)
(same as the outer table border) for border-top and border-left so cell
separators remain readable in dark mode, keeping the existing padding and other
properties unchanged; verify the & th rule remains as-is.

Comment on lines +2 to +14
.highlight {
background: var(--neutral-1);
border-radius: var(--border-radius);
padding: calc(var(--baseline) * 6);

& pre {
background: transparent;
padding: 0;
margin: 0;
border-radius: 0;
font-size: 1rem;
line-height: 1.4;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Prevent long code lines from breaking the page width.

.highlight needs horizontal overflow handling; otherwise long Rouge-highlighted lines can force layout overflow on smaller screens.

CSS fix
 .highlight {
 	background: var(--neutral-1);
 	border-radius: var(--border-radius);
 	padding: calc(var(--baseline) * 6);
+	overflow-x: auto;
 
 	& pre {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
.highlight {
background: var(--neutral-1);
border-radius: var(--border-radius);
padding: calc(var(--baseline) * 6);
& pre {
background: transparent;
padding: 0;
margin: 0;
border-radius: 0;
font-size: 1rem;
line-height: 1.4;
}
.highlight {
background: var(--neutral-1);
border-radius: var(--border-radius);
padding: calc(var(--baseline) * 6);
overflow-x: auto;
& pre {
background: transparent;
padding: 0;
margin: 0;
border-radius: 0;
font-size: 1rem;
line-height: 1.4;
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/css/syntax-highlighting.less` around lines 2 - 14, The .highlight
block lacks horizontal overflow handling causing long code lines to break
layout; update the .highlight and its nested pre rules (refer to the .highlight
selector and its nested & pre block) to enable horizontal scrolling by adding
overflow-x: auto (or overflow: auto) on the .highlight container and ensure the
pre keeps code spacing (set white-space to a non-wrapping value like pre) so
long lines scroll instead of overflowing the page.

Comment thread assets/js/scripts.js
Comment on lines +699 to +713
localStorage.setItem('persona-theme-selected-layout', 'grid');
resetIsotopeLayout();
}

function setRowsLayout() {
gridBtn.classList.remove('is-active');
rowsBtn.classList.add('is-active');
contentWrapper.classList.add('l-grid--1');
articles = contentWrapper.querySelectorAll('.c-card');

for (let i = 0; i < articles.length; i++) {
articles[i].classList.add('c-card--rows');
}

localStorage.setItem('persona-theme-selected-layout', 'rows');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Guard layout preference storage access too.

localStorage can throw when storage is disabled. Here that can skip resetIsotopeLayout() after changing the layout, leaving the grid stale.

Proposed fix
+	function getSavedLayout() {
+		try {
+			return localStorage.getItem('persona-theme-selected-layout');
+		} catch (e) {
+			return null;
+		}
+	}
+
+	function saveLayout(layout) {
+		try {
+			localStorage.setItem('persona-theme-selected-layout', layout);
+		} catch (e) {
+			// Persistence unavailable; keep layout switching functional.
+		}
+	}
+
 	function setGridLayout() {
 		gridBtn.classList.add('is-active');
 		rowsBtn.classList.remove('is-active');
 		contentWrapper.classList.remove('l-grid--1');
 		articles = contentWrapper.querySelectorAll('.c-card');
 
 		for (let i = 0; i < articles.length; i++) {
 			articles[i].classList.remove('c-card--rows');
 		}
 
-		localStorage.setItem('persona-theme-selected-layout', 'grid');
+		saveLayout('grid');
 		resetIsotopeLayout();
 	}
 
 	function setRowsLayout() {
 		gridBtn.classList.remove('is-active');
 		rowsBtn.classList.add('is-active');
 		contentWrapper.classList.add('l-grid--1');
 		articles = contentWrapper.querySelectorAll('.c-card');
 
 		for (let i = 0; i < articles.length; i++) {
 			articles[i].classList.add('c-card--rows');
 		}
 
-		localStorage.setItem('persona-theme-selected-layout', 'rows');
+		saveLayout('rows');
 		resetIsotopeLayout();
 	}
@@
 	window.addEventListener("DOMContentLoaded", function () {
 		setTimeout(() => {
-			if (localStorage.getItem('persona-theme-selected-layout')) {
-				let savedLayout = localStorage.getItem('persona-theme-selected-layout');
+			let savedLayout = getSavedLayout();
+			if (savedLayout) {
 
 				if (savedLayout === 'grid') {
 					setGridLayout();
 				}

Also applies to: 729-742

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@assets/js/scripts.js` around lines 699 - 713, The code calls
localStorage.setItem inside setRowsLayout (and similarly in the grid layout
handler) which can throw and prevent resetIsotopeLayout() from running; move or
duplicate the call to resetIsotopeLayout() so it always executes, and wrap
localStorage.setItem('persona-theme-selected-layout', ...) in a try/catch that
swallows/storage-unavailable errors. Concretely, in setRowsLayout (and the
corresponding setGridLayout/setColumnsLayout function referenced around lines
729-742), after mutating DOM/classes and before/after calling
resetIsotopeLayout(), surround the localStorage.setItem call with try { ... }
catch (e) { /* ignore or optional debug log */ } so the layout reset
(resetIsotopeLayout) is not skipped when storage is unavailable.

Comment thread index.html
Comment thread pages/joining.html
Comment thread pages/legal.html Outdated
Comment thread pages/onboarding.html

<h1>IRWA Onboarding Guide</h1>

<figure class="post__image align-center"><img loading="lazy" src="{{ "/assets/promofiles/OnboardingMainThumbnail.png" | relative_url }}" alt="" aria-hidden="true" width="800" class="img-rounded aspect-ratio-169 size-cover"></figure>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Empty alt on the page hero thumbnail.

This is the onboarding page's main illustrative image (also used as the Open Graph image). Treating it as purely decorative with alt="" + aria-hidden="true" hides meaningful context from screen reader users. Provide a short descriptive alt (and drop aria-hidden) unless the figure is genuinely decorative.

🧰 Tools
🪛 HTMLHint (1.9.2)

[error] 14-14: Special characters must be escaped : [ < ].

(spec-char-escape)


[error] 14-14: Special characters must be escaped : [ > ].

(spec-char-escape)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pages/onboarding.html` at line 14, The hero image currently uses an empty alt
and aria-hidden which hides meaningful content from assistive tech; update the
<figure class="post__image align-center"> <img> tag (the one with src
"/assets/promofiles/OnboardingMainThumbnail.png") to remove the aria-hidden
attribute and supply a concise descriptive alt (e.g., "Onboarding illustration
showing app onboarding flow and features") that accurately describes the image
purpose for screen readers and Open Graph consumers.

Comment thread pages/onboarding.html
<h2>Joining Wiki Procedures</h2>
<p>You are required to complete a few forms and send us a few details upon being accepted into the alliance.</p>

<img src="https://assets.st-note.com/img/1776491660-spIXlTNAV6EYcBb7takmOKLh.png" alt="Joining procedures" class="img-rounded">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Hotlinked images from assets.st-note.com create reliability and privacy risks.

The inline images on these lines are loaded directly from assets.st-note.com, a third-party CDN outside this site's control.

  • Reliability: if note.com reorganizes or removes the asset, onboarding content silently breaks.
  • Privacy: every visitor's IP / User-Agent is sent to note.com on page load, which conflicts with the self-hosting privacy posture discussed in prior reviews of _includes/head.html (Google Fonts).
  • Performance: you can't control caching, dimensions, or lazy-loading hints on a remote host.

Recommend downloading these assets into /assets/promofiles/ (or similar) and referencing them via relative_url like the rest of the page.

Also applies to: 116-118, 226-226

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pages/onboarding.html` at line 109, The image tag loading from
assets.st-note.com should be replaced with a locally hosted asset to avoid
privacy/reliability issues: download the referenced image(s) into your static
assets folder (e.g. /assets/promofiles/), update the <img> src attributes in
pages/onboarding.html (the existing <img src="https://assets.st-note.com/...">
occurrences) to use the local relative URL (use the site's relative_url helper
pattern used elsewhere), keep the alt and class values, and optionally add
loading="lazy" and explicit width/height attributes; apply the same replacement
for the other hotlinked images noted (lines 116-118 and 226).

Comment thread pages/projects.html Outdated
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants