Skip to content

Add an intro box to Developer Meetings index - #2373

Open
JFWooten4 wants to merge 30 commits into
stellar:mainfrom
JFWooten4:2145-pt-4
Open

JFWooten4 wants to merge 30 commits into
stellar:mainfrom
JFWooten4:2145-pt-4

Conversation

@JFWooten4

Copy link
Copy Markdown
Contributor

Right now, visitors landing on the Dev Meetings page are initially hit with a feed of past meetings. They have no way to clearly filter by tags in a click, understand the context of what they're seeing, or understand how to participate in these discussions. I think more ecosystem participation in these chats would help for many reasons.1

Since adding a static intro meeting doesn't work with Docusaurus, this creates a new card component, which I then insert at the header of the base meetings directory. It's much smaller than the normal entry page, as intended, with smaller than 1em text. I think it is still very reasonably sized and readable on mobile, while balancing against not taking up too much space.

An alternative implementation would be to put a disclaimer like this at the bottom of every developer meeting. This could have the added benefit of "advertising" tag-specific information such as the existing meetings which reference the Community Fund. There could be a consistent section explaining where viewers can learn more, which could be informally updated throughout the component rather than ad hoc on all the individual pages. But I will leave that for now.

Lastly, in an effort to make the index more readable, this modifies src/css/custom.scss to provide a reasonable introductory clip-off of posts, rather than the entire meta description, which can get long for some existing meeting notes.

Footnotes

  1. For instance, more eyeballs on code could lead to better reviews of CAP implementations. The core team made known their intentions and implementations of the protocol: "use the 1-week grace period as a 'last call' in case some community members missed the discussion threads and protocol meeting and want to voice any concern." As someone who's helped avoid bugs through that process, I think it would help if new ecosystem members were more easily made aware of the process when browsing information about the network.

Copilot AI review requested due to automatic review settings April 22, 2026 16:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds a custom meetings landing-page intro card to the Docusaurus blog list for /meetings, and adjusts global styling to make meeting excerpts more scannable on the index.

Changes:

  • Overrides BlogListPage to conditionally render a new MeetingIndexCard on the meetings route.
  • Introduces MeetingIndexCard with participation links and a computed “next meeting” display string.
  • Adds CSS to clamp meeting excerpt length and hide <details> content on blog list pages.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

File Description
src/theme/BlogListPage/index.tsx Conditionally inserts the meetings intro card at the top of the /meetings blog list page.
src/components/MeetingIndexCard.tsx New intro card UI + timezone/next-meeting calculation helpers.
src/css/custom.scss Adds global blog list excerpt clamping and hides <details> blocks on blog list pages.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/components/MeetingsIntro/index.tsx
Comment thread src/components/MeetingIndexCard.tsx Outdated
Comment thread src/css/custom.scss Outdated
Comment thread src/components/MeetingIndexCard.tsx Outdated
Comment thread src/components/MeetingIndexCard.tsx Outdated
Update MeetingIndexCard to make the fallback schedule string independent of an arbitrary calendar date so it always displays the configured Thursday meeting weekday while still formatting the time and timezone label via Intl.

Adjust getNextMeetingDate to treat a meeting later on the current Thursday as the next upcoming meeting instead of always skipping to the following week.

Simplify the component state setup by computing fallbackMeetingTime directly and changing the effect dependency array to [] so the code reflects the values the effect actually uses.
Update MeetingIndexCard so the fallback meeting string reuses the shared meeting-time formatter instead of building a separate Intl formatter inline.

This keeps the fallback weekday fixed by configuration while centralizing the time and timezone display logic in the shared formatting path.
- The fallback string no longer derives the weekday from January 1 or `currentYear`, so it won’t drift off Thursday local.
- `getNextMeetingDate()` no longer skips a meeting later on the same Thursday.
- The `useEffect` dependency setup is cleaned up and no longer implies a dependency on fallbackMeetingTime.
Extract shared meeting schedule and time formatters in MeetingIndexCard and replace the inline fallback formatting logic with a named reference meeting date.

This also fixes the build regression where formatMeetingTimeFallback referenced a missing helper during static generation of /meetings.
Replace the event-specific discord.gg link in MeetingIndexCard with the stable discord.com/invite/stellardev URL while keeping the event query parameter.
@briwylde08
briwylde08 requested a review from ElliotFriend April 27, 2026 16:58
@JFWooten4

Copy link
Copy Markdown
Contributor Author

Funny enough re #2373 (comment), it looks like the official spec on the SDF site has this same problem:

blog

href

@ElliotFriend

Copy link
Copy Markdown
Contributor

Thanks for this — I like the direction, and a proper intro on the meetings index is worth having.

Some context on where my head is at before this lands: we already maintain five swizzled theme components in this repo, and each one adds re-verification work on every Docusaurus upgrade. So I'm being deliberately stingy about growing that surface. This one is a "wrap"-style swizzle, which is the supported kind, so it's not a dealbreaker — but I want to keep it as thin as possible.

Concretely, three asks:

  1. Keep the swizzle a minimal wrapper: render the intro card above the stock BlogListPage rather than reimplementing any of its internals.
  2. The Discord event URL and the schedule constants (Thu 1pm PT) are hardcoded — when the event or time changes, this card silently lies. Please pull them into a single config object at the top of the file (or a small config file) so future updates are a one-line edit.
  3. The wording/links need a quick internal pass on our side before this ships — that's on us, and I'll get it moving.

How does that sound?

JFWooten4 and others added 5 commits July 14, 2026 06:38
Co-authored-by: Codex <noreply@openai.com>
The stock BlogListPage owns the entire BlogLayout, so rendering the card before it places the card outside the meetings content area.

Wrapping BlogPostItems inserts the card directly above the meeting entries inside the existing main content column, while leaving the stock BlogListPage, metadata, sidebar, paginator, and structured data untouched.

Co-authored-by: Codex <noreply@openai.com>

@ElliotFriend ElliotFriend left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i'm gonna have a look at the code a little more thoroughly, but wanting to tag in @kaankacar to look over the actual verbiage.

Comment thread src/components/MeetingsIntro/index.tsx
Comment thread src/components/MeetingIndexCard.tsx Outdated
target="_blank"
rel="noreferrer noopener"
>
mailing list

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i'm not sure if the mailing list sends out reminders anymore?

@ElliotFriend
ElliotFriend requested a review from kaankacar July 14, 2026 20:15
@ElliotFriend

Copy link
Copy Markdown
Contributor

@JFWooten4 can you share a screenshot of what this intro box looks like on the page?

Co-authored-by: Codex <noreply@openai.com>
@JFWooten4

Copy link
Copy Markdown
Contributor Author
image image

Of course! I'll also take this space to reiterate concerns over meeting structure brought up elsewhere. The current interview style is fine and works well for spotlights like community project sessions. But I do not agree with the isolated hosting of protocol development meetings, especially when they relate to CAPs.

In the past, even events in Discord have been locked to SDF members and select related parties. Nobody else can speak to bring up points, which I did in the past to challenge the shipping of production bugs. Even in that historical example, I was only permitted a few minutes of airtime, while the remarks I brought up spurred discussion by others for the remainder of the meeting, which I had to complement using text chat.

I do understand the Foundation has had problems with people spamming the meetings, and this is completely reasonable for a server with 30,000 members. Who knows how many people could come up to talk in a forum like YouTube with a wider audience to spam? But I do hope we can get to a better place with the assignment of the Speaker role and associated permissions in the Discord, which we use as the venue for DAO meetings in our Association.

@kaankacar

Copy link
Copy Markdown
Contributor

Thanks @JFWooten4 for raising the participation point; it's a fair thing to bring up. To share how things work today: developer meetings are generally streamed on YouTube and X, while protocol discussions are intentionally hosted on Discord precisely because it's the easiest place for everyone to take part. In protocol discussions, anyone can request to speak, and we do our best to get everyone on stage. That said, if there's a specific topic or aspect of the process you'd like to see opened up further, I'd genuinely like to hear it. Happy to look into starting a dedicated discussion around it on Discord.

@kaankacar

Copy link
Copy Markdown
Contributor

On the PR itself: I pushed a small verbiage fix directly to your branch, swapped the mailing-list mention for follow links to @BuildOnStellar on X and our YouTube channel, both pulled into MEETINGS_INFO. With that, the wording looks good to me now. Thanks for the contribution!

@ElliotFriend

Copy link
Copy Markdown
Contributor

fyi, i've pulled in the newest changes from main and pushed those to your feature branch, so we're now working with /meetings directory in both places.

@ElliotFriend ElliotFriend left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks John — intro box is great and the copy's approved, so that's landing. 🙌

One change before merge: the timezone logic. The ~150 lines of hand-rolled TZ math is more than a one-line intro box needs — no date lib in the repo, two code paths building the same sentence, and the Intl-in-render fallback risks a hydration mismatch.

Can we swap it for a static string? The meeting's pinned to 20:00 UTC, so we can just state that — no DST math, correct year-round:

...archived discussions of open Stellar meetings, held Thursdays at 20:00 UTC. Anyone can attend...

(We can't hardcode Pacific instead — since it's UTC-anchored, Pacific drifts 1 PM PDT / 12 PM PST across DST. UTC is the only value that stays put.)

That drops schedule.ts to just the links and removes the useEffect.

Comment thread src/theme/BlogPostItems/index.tsx Outdated
Comment thread src/css/custom.scss Outdated
Comment thread src/components/MeetingsIntro/index.tsx Outdated
Comment thread src/components/MeetingIndexCard.tsx Outdated
JFWooten4 and others added 4 commits July 17, 2026 06:29
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Comment thread src/components/MeetingIndexCard.tsx Outdated
target="_blank"
rel="noreferrer noopener"
>
@BuildOnStellar

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

My regulators don't like Discord, though I agree this is a chat out of scope for this venue. Just to answer the question, I've had my hand up throughout the entirety of past meetings without being brought up to speak. This leaves most of the latest meetings as just a few SDF team members mimicking their developments and viewpoints, without outside community input.

Suggested change
@BuildOnStellar
BuildOnStellar

For the display, I think it'd be a little cleaner without the @ prefix. We already explicitly follow this with "on X"—plus, it's a direct hyperlink. So there's no need to messy the view with a symbol that won't even be needed to copy over and find this username on the platform.

@JFWooten4

Copy link
Copy Markdown
Contributor Author

Good catch on Pacific Time swaying by an hour; I didn't realize the time was actually anchored in UTC from your end. The script has been adjusted accordingly, and it's a lot simpler now that we have a stable reference to the anchor (no placeholder object, week simulation, etc). I for one am not great at mentally converting time zones on the spot, so displaying in the user's local time was one of my main objectives with this PR.

I've adjusted the element to only load once the user-side calculation completes, so there's no interim hydrated state to glitch around. It still falls back to the static reference, too. I've done that and the other changes; let me know if other improvements would help.

Co-authored-by: Elliot Voris <elliot@voris.me>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants