Skip to content

Fix past speakers to follow public event appearances - #27

Merged
esthor merged 2 commits into
mainfrom
esthor/public-speaker-directory
Sep 21, 2026
Merged

esthor merged 2 commits into
mainfrom
esthor/public-speaker-directory

Conversation

@esthor

@esthor esthor commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

The past-speaker directory now derives speakers and talk links from the same published, completed events. This includes organizers who gave talks, excludes draft or unlinked talks, and preserves repeat appearances and co-speakers.

Validation: three PGlite integration tests cover publication and time boundaries, organizer participation, co-speakers, repeated talks, and an empty directory; TypeScript and formatting checks. No database migration.

Summary by CodeRabbit

  • New Features

    • Added a speaker directory that lists speakers and their talks from public, completed events.
    • Preserved co-speaker appearances and repeat talks without duplicate entries.
    • Improved speaker talk filtering across events.
  • Bug Fixes

    • Excluded talks from draft, upcoming, active, or unattached events.
    • Prevented incorrect speaker-to-talk associations.

@vercel

vercel Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
allthingsweb Ready Ready Preview Sep 21, 2026 8:12pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Understand this PR’s impact

Explore downstream dependencies and potential security impact with Blast Radius.

View blast radius →

Warning

Review limit reached

Next included review available in 56 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

This review ran on the open-source allowance, not this organization's plan, because the pull request author doesn't have an assigned seat. Waiting won't change this — ask an organization admin to assign them a seat, or add seats in Billing if every seat is already assigned, then retry.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: allthingsweb-dev/allthingsweb/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 069316db-5cf7-4808-8561-0367ab492b4a

📥 Commits

Reviewing files that changed from the base of the PR and between 63d2ade and 2218077.

📒 Files selected for processing (2)
  • app/src/lib/speaker-directory.ts
  • app/tests/speaker-directory.test.ts

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: allthingsweb-dev/allthingsweb/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 4781d8c5-9b10-4b3f-adfd-3f5ff8238a4f

📥 Commits

Reviewing files that changed from the base of the PR and between 51cfd70 and 63d2ade.

📒 Files selected for processing (4)
  • app/src/app/speakers/page.tsx
  • app/src/lib/speaker-directory.ts
  • app/src/lib/speakers.ts
  • app/tests/speaker-directory.test.ts

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: 🧪 Tests
🧰 Additional context used
📓 Path-based instructions (6)
Use bun test and write tests using bun:test (import { test, expect } from "bun:test")

📄 CodeRabbit inference engine (.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc)

Files:

  • app/tests/speaker-directory.test.ts
Do not use Bun-specific APIs in production code; ensure compatibility with Node.js runtime

📄 CodeRabbit inference engine (.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc)

Files:

  • app/src/app/speakers/page.tsx
  • app/src/lib/speaker-directory.ts
  • app/tests/speaker-directory.test.ts
  • app/src/lib/speakers.ts
Use pre-built Stack UI components (e.g., , , ) when building auth UI In Client Components, retrieve the current user via useUser(); use useUser({ or: "redirect" }) for protected pages In Server Components, use...

📄 CodeRabbit inference engine (.cursor/rules/neon-auth.mdc)

Files:

  • app/src/app/speakers/page.tsx
  • app/src/lib/speaker-directory.ts
  • app/tests/speaker-directory.test.ts
  • app/src/lib/speakers.ts
Define TanStack DB collections using createCollection with the appropriate options creator (e.g., queryCollectionOptions, electricCollectionOptions, localOnlyCollectionOptions, liveQueryCollectionOptions) rather than ad-hoc stores Always pr...

📄 CodeRabbit inference engine (.cursor/rules/electric-sql-tanstack-db.mdc)

Files:

  • app/src/app/speakers/page.tsx
  • app/src/lib/speaker-directory.ts
  • app/tests/speaker-directory.test.ts
  • app/src/lib/speakers.ts
In mutationFn implementations, ensure server writes have synced back before returning (e.g., await collection.refetch() or equivalent) so optimistic state can be safely discarded When creating a collection, prefer supplying a Standard Schem...

📄 CodeRabbit inference engine (.cursor/rules/tanstack-db.mdc)

Files:

  • app/src/app/speakers/page.tsx
  • app/src/lib/speaker-directory.ts
  • app/tests/speaker-directory.test.ts
  • app/src/lib/speakers.ts
In React components, use the useLiveQuery hook to bind live query results to component state

📄 CodeRabbit inference engine (.cursor/rules/tanstack-db.mdc)

Files:

  • app/src/app/speakers/page.tsx
🪛 OpenGrep (1.29.0)
app/tests/speaker-directory.test.ts

[ERROR] 17-17: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)

🔇 Additional comments (4)
app/src/lib/speaker-directory.ts (1)

1-95: LGTM!

app/tests/speaker-directory.test.ts (1)

1-127: LGTM!

app/src/lib/speakers.ts (1)

2-8: LGTM!

Also applies to: 15-38

app/src/app/speakers/page.tsx (1)

62-62: LGTM!

Also applies to: 91-91


📝 Walkthrough

Walkthrough

The change adds a shared speaker directory query, updates speaker data loading to use it, adds database-backed tests, and changes speaker-page filtering to use speakerIds membership.

Changes

Speaker directory flow

Layer / File(s) Summary
Directory query and validation
app/src/lib/speaker-directory.ts, app/tests/speaker-directory.test.ts
getSpeakerDirectory joins speaker, talk, event, and image data. It filters out draft, future, active, and unattached talks. Tests cover ordering, repeat appearances, co-speakers, and empty results.
Speaker data integration
app/src/lib/speakers.ts
getSpeakersWithTalks uses getSpeakerDirectory. TalkWithEventCtx derives from the directory result. Image fallback and signing remain in place.
Speaker page filtering
app/src/app/speakers/page.tsx
Talk filtering checks speakerIds. Talk list keys now include the event ID.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant SpeakersPage
  participant getSpeakersWithTalks
  participant getSpeakerDirectory
  participant Database
  SpeakersPage->>getSpeakersWithTalks: load speakers and talks
  getSpeakersWithTalks->>getSpeakerDirectory: query directory
  getSpeakerDirectory->>Database: select published past-event data
  Database-->>getSpeakerDirectory: joined rows
  getSpeakerDirectory-->>getSpeakersWithTalks: grouped speakers and talks
  getSpeakersWithTalks-->>SpeakersPage: mapped speaker data
  SpeakersPage->>SpeakersPage: filter talks by speakerIds
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 4 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: updating past speakers to reflect public event appearances. It is concise and specific.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
✨ Simplify code
  • Commit to this branch
  • Create a new PR

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

@esthor

esthor commented Sep 21, 2026

Copy link
Copy Markdown
Contributor Author

CodeRabbit CLI completed a fresh review of final head 22180772acda1130f58142326883dff6c69007d0 with 0 issues across all four changed files. This includes the co-speaker chronological ordering correction and its regression test. The earlier GitHub approval covered an older head; this completed CLI review supplies final-head evidence.

Local TypeScript, formatting and 23 tests passed. GitHub CI and Vercel preview build passed at the same head; there are no unresolved review threads. Production verification follows the guarded merge.

@esthor
esthor merged commit 1b07d53 into main Sep 21, 2026
4 checks passed
@esthor

esthor commented Sep 21, 2026

Copy link
Copy Markdown
Contributor Author

Production verified for merge 1b07d5305b71084992dcea2548ffe11065cf9729: deployment 6578375228 and post-merge CI succeeded. The live directory now contains 40 speakers, including Andre and Erik with linked talks. Andre and Dan Goosewin appearances render newest first. All 35 public event records retain their historical fields.

This branch was successfully deployed

1 active deployment
Preview — 22180772 Deployed Sep 21, 2026 by vercel[bot]
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.

1 participant