Skip to content

[meetup] Attach speaker profiles on Pro network events - #3

Merged
duxi90 merged 1 commit into
mainfrom
feat/meetup-speaker-profiles
Aug 18, 2026
Merged

duxi90 merged 1 commit into
mainfrom
feat/meetup-speaker-profiles

Conversation

@duxi90

@duxi90 duxi90 commented Aug 18, 2026

Copy link
Copy Markdown
Member

Description

Depends on #2.

  • NormalizedEvent.speaker now reaches Meetup as speakerDetails: name and bio, plus
    social links classified into Meetup's service enum by URL host, with OTHER for
    personal sites.
  • NormalizedSpeaker.socialUrls is added to core as plain URLs — classification is
    @coopkit/meetup's job, so core stays platform-neutral.
  • Opt-in per group (speakerDetails: true | string[]) and resolved onto GroupTarget,
    so one multi-group run sends it to the Pro groups and omits it elsewhere. Groups
    outside a Pro network reject the field.
  • A speaker with no bio is skipped with a warning rather than half-filled; the API
    requires a non-empty description and an empty one publishes a hollow profile.

photoId is left unsupported: it needs a prior photo upload, and the mutation for a
speaker photo (as opposed to an event photo) is not something I could verify.

Motivation

Speaker profiles are the visible half of a Pro event, and NormalizedEvent.speaker
already existed but went nowhere.

Testing

Tested locally. Full CI chain green, 108 tests — 23 new across speaker.test.ts and
payload.test.ts, covering anchored host matching (notlinkedin.com and
linkedin.com.evil.test do not pass as LINKEDIN, de.linkedin.com does), non-URL
inputs, and the no-bio skip. A --groups all --dry-run run confirms speakerDetails
rides on the two configured Pro groups and is omitted for the third.

Checkup list

  • Labeled
  • Assigned to a project
  • Linked issue(s) (to close or track progress)
  • Documentation updated
  • Test coverage

@duxi90 duxi90 added documentation Improvements or additions to documentation enhancement New feature or request labels Aug 18, 2026
Base automatically changed from feat/meetup-multi-group to main August 18, 2026 09:29
Meetup Pro events carry a speaker profile, and NormalizedEvent already had
a `speaker` that went nowhere. It now maps to CreateEventInput's
speakerDetails: name and bioMarkdown to the API's required name and
description, plus social links.

speakerDetails is Pro-only and other groups reject it, so it is opt-in and
resolved per group, matching how a network is configured in practice:
`true` for every group, or a list of the urlnames that are in the network.
GroupTarget carries the decision, so a multi-group run can send it to the
Pro groups and omit it elsewhere in the same pass.

A speaker with no bio is skipped rather than half-filled. The API requires
a non-empty description, and an empty string would publish a hollow
profile; the run logs a warning naming the reason instead.

NormalizedSpeaker gains `socialUrls` as plain URLs to keep core
platform-neutral, and @coopkit/meetup classifies them by host into
Meetup's fixed service enum, with OTHER for personal sites. Host matching
is anchored, so notlinkedin.com and linkedin.com.evil.test do not pass as
LINKEDIN while de.linkedin.com does. Non-URLs are dropped, not guessed.

The whole URL is kept as `identifier`. Meetup's field name suggests a bare
handle, but the per-service shape is undocumented and a URL is
unambiguous and lossless for every service including OTHER.

photoId is left unsupported: it needs a prior photo upload, and the
mutation for a speaker photo (as opposed to an event photo) is not
something I could verify, so guessing at it had no place here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@duxi90
duxi90 force-pushed the feat/meetup-speaker-profiles branch from 9bdd756 to 5d668e4 Compare August 18, 2026 09:30
@duxi90
duxi90 merged commit 2cd2033 into main Aug 18, 2026
2 checks passed
@duxi90
duxi90 deleted the feat/meetup-speaker-profiles branch August 18, 2026 09:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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.

1 participant