Skip to content

Meetup-Übersicht: Teaser aus intro, kommende Termine chronologisch - #255

Merged
denbec merged 4 commits into
mainfrom
fix/meetup-card-intro-and-upcoming-order
Aug 31, 2026
Merged

Meetup-Übersicht: Teaser aus intro, kommende Termine chronologisch#255
denbec merged 4 commits into
mainfrom
fix/meetup-card-intro-and-upcoming-order

Conversation

@claude

@claude claude Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Requested by Dennis Becker · Slack thread

Before: Wer die Meetup-Übersicht öffnet, sieht auf jeder Karte denselben Text. Der Anreißer stammt aus description, und dort steht seit einiger Zeit der immer gleiche Aufruf für Lightning-Talk-Speaker samt Agenda – jede Karte beginnt also mit „Lightning Talk / Mit unserem ‚Lightning Talk‘-Format …", statt zu verraten, worum es beim jeweiligen Meetup geht. Dazu stehen die kommenden Termine in der falschen Richtung: oben der Termin, der am weitesten in der Zukunft liegt, unten der nächste. Wer wissen will, wann das nächste Meetup ist, muss bis zum Ende der Liste scrollen.

After: Jede Karte zeigt den Teaser des jeweiligen Meetups, also den Text, den die Redaktion dafür geschrieben hat – die Karten unterscheiden sich wieder voneinander. Ältere Meetups, deren Text noch im Beschreibungsfeld liegt, zeigen weiterhin diesen Text, bleiben also unverändert lesbar. Und die kommenden Termine sind chronologisch sortiert: der nächste steht oben, auf der Meetup-Seite wie auch auf der Startseite. Die vergangenen Meetups bleiben wie gehabt mit dem jüngsten zuerst.

How: getMeetups lädt zusätzlich das Feld intro; die Meetup-Karte zeigt intro und greift auf description zurück, wenn intro leer ist. Beide Felder sind Rich Text und laufen durch denselben getPlainText-Helper, der Markup entfernt und Entities dekodiert – ein intro, das leer oder nur leeres Markup ist, wird dadurch zum leeren String und löst den Fallback aus. Für die Reihenfolge werden die kommenden Meetups nach dem Filtern aufsteigend nach start_on sortiert; die Abfrage selbst bleibt unverändert absteigend, weil die Liste der vergangenen Meetups genau das braucht.

Geprüft mit npm run prettier:check, npm run lint, npm test (100 Tests), npm run typecheck:ratchet (unverändert 263, Baseline 263) und npm run build – alles grün.

Der Wunsch kam aus dem Team.


Generated by Claude Code

Die Karten der Meetup-Übersicht haben ihren Anreißer aus `description`
gelesen. Dort steht inzwischen der immer gleiche Aufruf für
Lightning-Talk-Speaker samt Agenda, sodass auf jeder Karte derselbe Text
stand. Der eigentliche Teaser liegt in `intro`, das `getMeetups` bisher
gar nicht abgefragt hat.

`intro` wird jetzt mitgeladen und auf der Karte gezeigt; ist es leer –
bei älteren Meetups, die ihren Text noch in `description` haben – wird
weiterhin `description` verwendet. Beide Felder sind Rich Text und
laufen durch `getPlainText`.

Außerdem waren die kommenden Meetups nach der Sortierung der Abfrage
absteigend, also mit dem am weitesten entfernten Termin oben. Sie werden
nun aufsteigend sortiert, damit der nächste Termin zuerst steht; die
vergangenen Meetups bleiben wie bisher absteigend.

Der Wunsch kam aus dem Team.
Copilot AI lite review requested due to automatic review settings August 31, 2026 15:09
@vercel

vercel Bot commented Aug 31, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
programmierbar-website Ready Ready Preview Aug 31, 2026 3:30pm

Request Review

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

Updates the Nuxt meetup overview and homepage meetup section so meetup cards show a per-meetup teaser (from Directus intro, with fallback to description) and upcoming meetups are displayed in chronological order (next meetup first).

Changes:

  • Fetch intro for meetups from Directus and use it as the primary card excerpt with a description fallback.
  • Sort upcoming meetups ascending by start_on on both the meetup overview page and the homepage.
  • Update component prop typings to include the new intro field.

Reviewed changes

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

Show a summary per file
File Description
nuxt-app/pages/meetup/index.vue Sorts upcoming meetups chronologically while keeping past meetups newest-first.
nuxt-app/pages/index.vue Sorts upcoming meetups chronologically for the homepage section.
nuxt-app/composables/useDirectus.ts Adds intro to the meetups field selection.
nuxt-app/components/MeetupSection.vue Extends meetup item prop shape to include intro.
nuxt-app/components/MeetupCard.vue Renders an excerpt derived from intro with fallback to description via getPlainText.
Suppressed comments (1)

nuxt-app/pages/index.vue:130

  • The upcoming-meetup filtering/sorting logic is duplicated here and in pages/meetup/index.vue (and now includes a sort as well). Consider extracting a small helper (e.g. getUpcomingMeetups(meetups)), so the ordering rules can't drift between the home page and the meetup overview.
    const upcomingMeetups = meetups
        .filter((meetup) => {
            const now = new Date()
            return new Date(meetup.start_on) > now
        })
        .sort((a, b) => new Date(a.start_on).getTime() - new Date(b.start_on).getTime())

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread nuxt-app/pages/index.vue Outdated
Comment thread nuxt-app/pages/meetup/index.vue Outdated
Comment thread nuxt-app/components/MeetupSection.vue
…mmen

Der `meetups`-Prop von `MeetupSection` listete `id` und `slug` nicht auf,
obwohl das Template `item.id` als Key nutzt und `MeetupCard` `slug` für
den Link braucht. Der Typ war damit irreführend und hätte künftige
Abweichungen in der Datenform verdeckt; beide Felder sind jetzt Teil des
`Pick<>`.

Außerdem wurde `new Date()` in den Filter-Callbacks pro Meetup neu
gebildet. Der Zeitpunkt wird nun einmal vor den Filtern bestimmt, sodass
vergangene und kommende Termine gegen dieselbe Referenzzeit verglichen
werden.

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

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

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d5510ed75a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread nuxt-app/pages/meetup/index.vue Outdated
Die Auswahl und Sortierung der kommenden Meetups stand wortgleich auf der
Meetup-Übersicht und auf der Startseite. AGENTS.md verlangt, ein Muster,
das an mehr als einer Stelle auftaucht, in eine gemeinsame Abstraktion zu
ziehen — genau das war hier nicht der Fall.

`helpers/meetupSchedule.ts` enthält jetzt `getUpcomingMeetups` (filtert
auf Termine in der Zukunft und sortiert aufsteigend, damit der nächste
Termin oben steht) und `getPastMeetups` (behält die Reihenfolge der
Abfrage, die bereits absteigend sortiert). Beide bekommen die
Referenzzeit als Argument, statt selbst die Uhr zu lesen, damit eine
Seite mit beiden Listen alle Meetups gegen denselben Zeitpunkt
vergleicht.

Die Startseite blendet weiterhin selbst das hervorgehobene Element aus —
das ist ihr eigenes Anliegen und gehört nicht in den Helper.

Dazu ein Unit-Test, der die Sortierung, die Grenzfälle und das saubere
Aufteilen in vergangen/kommend abdeckt.

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

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comment thread nuxt-app/helpers/meetupSchedule.ts Outdated
Comment thread nuxt-app/test/meetupSchedule.test.ts
`getUpcomingMeetups` verglich strikt mit `>`, `getPastMeetups` strikt mit
`<`. Ein Meetup, dessen `start_on` genau dem Referenzzeitpunkt
entspricht, fiel damit aus beiden Listen heraus und war für diesen
Moment auf keiner der beiden Seiten zu sehen — genau das, was die
gemeinsame Referenzzeit verhindern sollte.

Die Grenze gehört nun zur kommenden Seite: ein Meetup, das exakt jetzt
beginnt, hat noch nicht stattgefunden. Damit teilen die beiden
Auswahlen die Meetups vollständig auf. Die gewählte Grenze steht
ausdrücklich im Docblock, statt sich nur aus dem Operator zu ergeben.

Der Test deckt den Gleichheitsfall jetzt in beiden Auswahlen und in der
Aufteilungsprüfung ab; ohne die Änderung schlagen die beiden neuen Fälle
auf der kommenden Seite fehl.

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

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@denbec
denbec merged commit f6080ce into main Aug 31, 2026
6 checks passed
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.

3 participants