diff --git a/generate-videos-mappings.py b/generate-videos-mappings.py index 923bf496b..fbdde5e56 100644 --- a/generate-videos-mappings.py +++ b/generate-videos-mappings.py @@ -67,7 +67,7 @@ def get_channel_id(channel_name): videos = get_videos(channel_id) - with open('src/templates/videos.ts', 'w') as f: + with open('videos.ts', 'w') as f: f.write('export const videos = [\n') for video in videos: f.write(f" {{ id: '{video['id']}', title: `{video['title']}` }},\n") diff --git a/src/app/conf/2024/_videos.ts b/src/app/conf/2024/_videos.ts new file mode 100644 index 000000000..d3e8054d0 --- /dev/null +++ b/src/app/conf/2024/_videos.ts @@ -0,0 +1,279 @@ +export const videos = [ + { + id: "fA81OFu9BVY", + title: `Top 10 GraphQL Security Checks for Every Developer - Ankita Gupta, Ankush Jain - Akto.io`, + }, + { + id: "e-xoP7srEyU", + title: `GraphQL as a Data Mesh Access Layer in Global Banking - Kenneth Stott, Hasura Inc.`, + }, + { + id: "B0FMx6zsZdU", + title: `Keynote: GraphQL In The House - Andrew Doyle, US House of Representatives`, + }, + { + id: "b-tMCkrcivg", + title: `Workshop: Cross-Platform GraphQL & State Management with React Native - Yassin Eldeeb, The Guild`, + }, + { + id: "F5jZtsK_Qkk", + title: `Identity and GraphQL: More Than You Want to Think About IDs - Matt Mahoney, Meta`, + }, + { + id: "MPVhxKNozBI", + title: `Spec Agnostic Executor for Federated GraphQL - Denis Badurina, The Guild`, + }, + { + id: "f5I2SvYEhWg", + title: `GraphQL in the Era of React Server Components - Roy Derks, IBM`, + }, + { id: "cnVdO7_5Rbs", title: `Keynote: Closing Remarks - Sasha Solomon` }, + { + id: "TSmSuyBoEjI", + title: `GraphQL & Newcomers: How an API Can Transform Technical & Functionnal Onboarding - Vincent Desmares`, + }, + { + id: "FnVQnacrFnI", + title: `GraphQL Pagination at Meta - Sabrina Wasserman, Meta`, + }, + { + id: "bl5rhCb7PG4", + title: `Revolutionizing Data Access Using GraphQL in the Oracle Database - Shashank Gugnani, Oracle`, + }, + { + id: "sWBiaJewUNw", + title: `6 Years of Distributed GraphQL in Production - Andreas Marek, Atlassian`, + }, + { + id: "pJ_HuGDgHT8", + title: `Schema-Driven UI Components: Innovating Headless ERP - Seiya Izumi, Masanori Uehara - Tailor, Inc.`, + }, + { + id: "hiIxdPATNYs", + title: `GraphQL Field Discovery & Query Generation with Generative AI - Rachit Sengupta, Siva Thiru - Intuit`, + }, + { + id: "H9gqXrh6tV8", + title: `GraphQL at the Edge with WebAssembly - Ramnivas Laddad, Exograph Inc`, + }, + { + id: "97mqZvnsdf4", + title: `The Power of Strongly Coupled GraphQL Queries for Internal APIs - Mary Briskin, Tutored by Teacher`, + }, + { + id: "Q60ONgmv7nY", + title: `Keynote: GraphQL Clients in 2024 - Jeff Auriemma, Apollo GraphQL`, + }, + { + id: "eVFdTYXSoB4", + title: `GraphQL Technical Steering Committee Panel at GraphQL Conf 2024`, + }, + { + id: "TCp3P5gAacA", + title: `Schema-Driven Testing with Mock Service Worker - Alessia Bellisario, Apollo`, + }, + { + id: "V-GHcf5gZOM", + title: `Workshop: Scaling and Securing API Development with a GraphQL Platform- Laurin Quast & Kamil Kisiela`, + }, + { + id: "IeeOXuA_Vdo", + title: `Converging Paramount EPG Architectures with GraphQL - Giacomo Simmi & Satish Chitnis w/Paramount`, + }, + { + id: "DiqX_PfZ7yM", + title: `UNSET Fields: Contrasting Null and Purposeful Omissions in Server Response - Janette Cheng, Meta`, + }, + { + id: "QZZb6Ah4u60", + title: `Build Confidently: How @Catch and Error Handling Pave Way in Field Nullability - Itamar Kestenbaum`, + }, + { + id: "4OVAjJx8tno", + title: `Consuming GraphQL in TypeSafe Languages - Anthony Miller, Apollo GraphQL`, + }, + { + id: "kWe_v6YVj8U", + title: `GraphQL Docs: Beyond the Schema - Sarah Sanders - Highnote`, + }, + { + id: "z8rwkQZMzz4", + title: `Incrementally Adopting GraphQL and Relay at Pinterest - Mauricio Montalvo, Pinterest`, + }, + { + id: "SweBCEI1pno", + title: `Not Your Regular Rate Limiting GraphQL - Pooja Mistry, Postman`, + }, + { + id: "3kvE3NVmYtM", + title: `Sponsored Keynote: GraphQL, BFFs and AI - Anant Jhingran, IBM`, + }, + { + id: "bCBZTNib0mA", + title: `Keynote - You're Our Universe: GraphQL Community Update 2024 - Benjie Gillam, Graphile`, + }, + { + id: "m3JzkY9yOr8", + title: `Dynamically Serving a GraphQL API with Custom Types at Runtime - Emily Li Benchling`, + }, + { + id: "dauoM79LSz8", + title: `GraphQL Is for Client Developers Not Client Applications - Michael Bleigh, Google`, + }, + { + id: "sBHkhAHOL1g", + title: `Performing Impossible Feats with Isograph - Robert Balicki, Pinterest`, + }, + { + id: "G61ONGUl5jM", + title: `Keynote: Empathy Driven Development - Sarah Sanders, Highnote`, + }, + { + id: "49Y8P9LXduk", + title: `Keynote: Apollo's Journey with GraphQL: Transforming Enterprise APIs for the Future- Matt DeBergalis`, + }, + { + id: "Jgc4liT0-Ww", + title: `Comparing API Protocols - One Feature at a Time - Uri Goldshtein, The Guild`, + }, + { + id: "ff3nNpkwXFs", + title: `Blueprints of Successful GraphQL Architectures - Pascal Senn, ChilliCream`, + }, + { + id: "yKMPtfWsRrU", + title: `GraphQL Federation in the Wild - Stefan Avram, Wundergraph`, + }, + { + id: "RVBxFi88H1o", + title: `Lessons from Scaling GraphQL to Half a Billion Requests per Minute - Tushar Mathur, Tailcall`, + }, + { + id: "rW8FB1NGF_Y", + title: `Schema First, Code First, or Both? Adopting Schema First Development - Dan Adajian, Expedia Group`, + }, + { + id: "Ytt1_ZIlYdg", + title: `Techniques to Protect Your GraphQL API - Benjie Gillam, Graphile`, + }, + { + id: "PDFiZlgPxNQ", + title: `How to Not Break Your GraphQL Clients - Pascal Senn, ChilliCream`, + }, + { + id: "b7JEDgyVg-c", + title: `What if ... How to Achieve GraphQL Domination - Andreas Marek, Atlassian`, + }, + { + id: "XU2KCpldNOE", + title: `Schema Scoring: Ensuring Schema Excellence in GraphQL - Christian Ernst - Booking.com`, + }, + { + id: "eeey6nUQDaE", + title: `GraphQL Subscriptions in Production Is Easy Isnt It? - Laurin Quast,The Guild`, + }, + { + id: "U40j33EDwhM", + title: `Keynote: Closing Remarks - Lee Byron, GraphQL Foundation`, + }, + { + id: "kK5RorHOuHs", + title: `The Intersection of GraphQL & Design Systems in Product Dev. - Ruben Cagnie & Alan Quigley - Toast`, + }, + { + id: "LEyDeNoobT0", + title: `State of @Defer and @Stream - Rob Richard, 1stDibs`, + }, + { + id: "E7j5_lkrooQ", + title: `Design Principles of Federated GraphQL - Martijn Walraven - Apollo`, + }, + { + id: "3h8wD7GUtqM", + title: `Sponsored Session: GraphQLs Future is Rooted in Governance - Adam Malone, Hasura`, + }, + { + id: "yXPQmjMxBco", + title: `Sponsored Session: Championing GraphQL Client in a Modern Platform - Jeff Auriemma, Apollo GraphQL`, + }, + { + id: "zIslTi2WQYs", + title: `In-House Schema Registry - The Good the Bad and the Ugly - Kamil Kisiela, The Guild`, + }, + { + id: "ROzRhJlM5pg", + title: `Why You Should Use Implementation-First to Build Your GraphQL Schema Erik Wrede fulfillmenttools`, + }, + { + id: "lNBp3VGxwPc", + title: `Workshop: Getting Data Ready for AI - With Unified GraphQL &SQL Endpoints - Anushrut Gupta, Hasura`, + }, + { + id: "Vtxj6hDLSEs", + title: `In Memory of Travails - Gabriel Schulhof, Auction.com`, + }, + { + id: "zMxGgY1PJO0", + title: `What Could Go Wrong with a GraphQL Query & Can OpenTelemetry Help? Budha Bhattacharya, Tyk`, + }, + { + id: "iG5lhqRxCuE", + title: `Unlocking Blockchain Data with GraphQL - Saihajpreet Singh, The Guild`, + }, + { + id: "4IS-3MPwTD4", + title: `Keynote: Welcome Back & Opening Remarks - Sasha Solomon`, + }, + { + id: "efdh4QS5DMs", + title: `Ahead-of-Time (AOT) Techniques Help You Write GraphQL Libraries! - Mike Solomon`, + }, + { + id: "b0VBLRjhDR8", + title: `200 Is Not OK: Strategies for Tracing Partial Responses w/ GraphQL - Aditi Rajawat, Rama Palaniappan`, + }, + { + id: "tb3kb5QShS0", + title: `Improve Application Performance and User Engagement with Advanced GraphQL Features - Kewei Qu, Meta`, + }, + { + id: "cmvMIorzLLU", + title: `Keynote: The State of Distributed GraphQL - Michael Staib, ChilliCream Inc`, + }, + { + id: "CZTJou9Pq-c", + title: `A Wild GraphQL Rollercoaster Ride a Federated GraphQL Adoption Story - Lars de Bruijn & An Ngo, bol`, + }, + { + id: "-BS8tP7Z368", + title: `Building a Serverless GraphQL Subscription Gateway - Christian Stan & Kenneth Wußmann w/MOIA GmbH`, + }, + { + id: "RwHdt46W1PI", + title: `The Guild Acquires Stellate and Announces Hive Gateway v1 and GraphQL Federation`, + }, + { + id: "mpmaJIZPlsA", + title: `Sponsored Session: From Prototype to Production: Building Custom GraphQL APIs - Kevin Brown, Exogee`, + }, + { + id: "V5U45e_QaD8", + title: `Panel: The Composite Schemas Working Group - The Guild, ChilliCream & Apollo`, + }, + { + id: "ZJHSCyZCup4", + title: `Welcome - Opening Remarks - Lee Byron, GraphQL Foundation`, + }, + { + id: "pqZ5-O8hjC8", + title: `Workshop: Demand-Driven Schema Design - Michael Watson, Apollo GraphQL`, + }, + { + id: "1snK4dcN1rw", + title: `The Billion D∅Llar Panel - Nullability... S. Spalding, A. Reilly, J. Cheng & J. Eldredge, B. Gillam`, + }, + { + id: "WeB_J23Up0Y", + title: `Evolving GraphQL Schemas - Andrei Bocan, Atlassian`, + }, +] diff --git a/src/app/conf/2024/about.tsx b/src/app/conf/2024/about.tsx index 798f72bd3..41df9f177 100644 --- a/src/app/conf/2024/about.tsx +++ b/src/app/conf/2024/about.tsx @@ -1,6 +1,6 @@ import { ComponentProps } from "react" -import ConfImage from "../2023/gallery/images/8.jpg" -import ConfImage2 from "../2023/gallery/images/9.jpg" +import ConfImage from "./gallery/images/hero1.jpg" +import ConfImage2 from "./gallery/images/hero2.jpg" import NextImage from "next-image-export-optimizer" const list = [ diff --git a/src/app/conf/2024/faq/faq.mdx b/src/app/conf/2024/faq/faq.mdx index 7df6f9edd..e8c5adee3 100644 --- a/src/app/conf/2024/faq/faq.mdx +++ b/src/app/conf/2024/faq/faq.mdx @@ -173,145 +173,6 @@ To request a Certificate of Attendance, please submit a request [here](https://d Certificate of Attendance letters are sent out after the event is completed. -## Emergency Resources - -{

Taxi

} - -[Yellow Cab of San Francisco](https://yellowcabsf.com/) -415-333-3333 - -{

Closest Police Station

} - -SFPD Tenderloin Station - -415-345-7300 - -Dial 911 for Emergencies - -10-minute walk, 4-minute drive (0.4 miles from venue) - -{

24-Hour Hospital

} - -[UCSF Medical Center at Mount Zion](https://www.ucsfhealth.org/locations/mount-zion) - -415-567-6600 - -Dial 911 for Emergencies - -39-minute walk, 10-minute drive (1.7 miles from venue) - -{

Urgent Care

} - -[Dignity Health - GoHealth Urgent Care](https://www.gohealthuc.com/dignity/locations/market-street?utm_source=gmb&utm_medium=organic&utm_content=dignity-marketst) - -415-746-1812 - -29-minute walk, 10-minute drive (1.3 miles from venue) - -{

Pharmacy

} - -[Walgreens Pharmacy](https://www.walgreens.com/locator/walgreens-459+powell+st-san+francisco-ca-94102/id=7043) - -415-984-0793 - -3-minute walk, 4-minute drive (0.1 miles from venue) - -{

24 Hour Rape Crisis Line

} - -[Division of Trauma Recovery Services](https://divisionoftraumarecoveryservices.org/rtc-casarc/help-now-2) - -San Francisco Women Against Rape 24-Hour Crisis Line: 415-647-RAPE -(7272) - -## Onsite Resources [#onsite-resources] - -{

Nursing Room

} - -A private nursing room will be available at the event to aid in the -comfort and accessibility for our nursing attendees. The room will be -available all days of the event and will be located onsite. For -location information, please check with registration or information -desk staff onsite. - -{

Venue Accessibility

} - -If you need any assistance locating an elevator, or have other -questions about accessibility onsite, please speak to a member of the -LF event staff at any of the registration or information desks onsite. -If you have questions prior to the event, please email graphql_events@linuxfoundation.org. - -{

Wheelchair & Medical Equipment Rental

} - -If you need a wheelchair or scooter, you can rent them from -[Bay City Medical Supplies](http://baycitymedicalsupplies.com). -Please contact them directly for rates and availability. - -{

Zen Zone

} - -All attendees are invited to use the Zen Zone as needed for sensory -relaxation, meditation, and worship. It is a physical space where -conversation and interaction are not allowed, where attendees can go -if, for any reason, they can’t interact with other attendees at that -time. - -{

Communication Stickers

} - -At Registration, attendees can pick up communication stickers to add -to their badges. Communication stickers indicate an attendee’s -requested level of interaction with both other attendees and press -(including photographers and videographers). - -- Green = Open to communicate. -- Yellow = Only if you know me, please. -- Red = I’m not interested in communicating (or being videotaped or photographed) at this time. - -Please be respectful of attendee communication preferences. - -{

Share your Pronouns

} - -Pick up a pronoun sticker from registration to share your pronouns -with other conference attendees. Please be respectful of attendees’ -pronouns. - -{

First Aid/Medical Assistance

} - -If you require first aid or medical assistance, please visit our -registration desk or the venue front desk. For emergencies, please -dial 911. - -{

How to Handle a Harassment Report

} - -If you are being harassed, notice that someone else is being harassed, -or have any other concerns, please contact a member of the event staff -immediately. Event staff can be identified by staff badges and/or -shirts onsite and can be found at the event registration counter at -any time. Our staff has had incident response training, responds to -harassments reports and does so in accordance with the process -recommended by the Ada Initiative, which can be found on -[the Geek Feminism Wiki](https://geekfeminism.wikia.org/wiki/Conference_anti-harassment/Responding_to_reports). - -Conference staff will be happy to help participants contact -hotel/venue security or local law enforcement, provide escorts, or -otherwise assist those experiencing harassment to feel safe for the -duration of the conference. - -If you are planning to attend and have concerns regarding another -individual who may be present, please reach out to us pre-event. -Precautions will be taken to ensure a victim’s comfort and safety, -including, but not limited to providing an escort, prepping onsite -event staff, keeping victim and harasser from attending the same -talks/social events and providing onsite contact cell phone numbers -for immediate contact. - -{

All-Gender Restrooms

} - -We will designate specific restrooms as all-gender for attendees who feel more comfortable using those facilities. - -{

The Linux Foundation Contacts:

} - -- Emily Ruf, Event Director (eruf@linuxfoundation.org) - -- Angela Brown, SVP & General Manager of Events (+1-575-694-2263; angela@linuxfoundation.org) ## Refund Policy @@ -327,8 +188,3 @@ Refunds will only be issued for cancellations received two weeks prior to the ev If you are unable to attend, you may substitute another attendee in lieu of cancellation. To substitute an attendee, select the Transfer Registration button above. You will be required to provide the attendee's first name, last name, and email address for the registration. -## Visa Letter Request - -If you need a visa letter to attend the event, you must first be registered to attend GraphQLConf 2024. - -**Please note:** it can take up to an hour for our registration system and visa letter system to sync. [Visa Letter Request](https://events.linuxfoundation.org/about/visa-request). diff --git a/src/app/conf/2024/gallery/images/hero1.jpg b/src/app/conf/2024/gallery/images/hero1.jpg new file mode 100644 index 000000000..832894bb6 Binary files /dev/null and b/src/app/conf/2024/gallery/images/hero1.jpg differ diff --git a/src/app/conf/2024/gallery/images/hero2.jpg b/src/app/conf/2024/gallery/images/hero2.jpg new file mode 100644 index 000000000..be5e1d8e8 Binary files /dev/null and b/src/app/conf/2024/gallery/images/hero2.jpg differ diff --git a/src/app/conf/2024/gallery/images/lee.png b/src/app/conf/2024/gallery/images/lee.png new file mode 100644 index 000000000..ff6e3bc05 Binary files /dev/null and b/src/app/conf/2024/gallery/images/lee.png differ diff --git a/src/app/conf/2024/gallery/page.tsx b/src/app/conf/2024/gallery/page.tsx deleted file mode 100644 index b91902be7..000000000 --- a/src/app/conf/2024/gallery/page.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from "react" -import { Metadata } from "next" -import { images } from "../../2023/gallery/_conf-images" -import NextImage from "next-image-export-optimizer" -import { Zoom } from "../../_components/zoom" - -export const metadata: Metadata = { - title: "Gallery", -} - -function chunk(arr: T[], len: number): T[][] { - const chunks: T[][] = [] - let i = 0 - - while (i < arr.length) { - chunks.push(arr.slice(i, i + len)) - i += len - } - - return chunks -} - -export default function GalleryPage() { - const currentImages = chunk(images, 6) - - return ( -
-
- {currentImages.map((c, i) => { - function getCard(index: number) { - return ( - c[index] && ( - - - - ) - ) - } - - return ( -
-
-
- {getCard(0)} - {getCard(1)} -
- {getCard(2)} -
-
- {getCard(3)} -
- {getCard(4)} - {getCard(5)} -
-
-
- ) - })} -
-
- ) -} diff --git a/src/app/conf/2024/layout.tsx b/src/app/conf/2024/layout.tsx index 5b89db753..011f624ca 100644 --- a/src/app/conf/2024/layout.tsx +++ b/src/app/conf/2024/layout.tsx @@ -44,8 +44,6 @@ export default function Layout({ { children: "Schedule", href: "/conf/2024/schedule" }, { children: "Speakers", href: "/conf/2024/speakers" }, { children: "FAQ", href: "/conf/2024/faq" }, - { children: "Register", href: "/conf/2024#attend" }, - { children: "Partner", href: "/conf/2024/partner" }, { children: "Gallery", href: "/conf/2024/gallery" }, ]} /> @@ -64,9 +62,6 @@ export default function Layout({ [ { children: "Schedule", href: "/conf/2024/schedule" }, { children: "Speakers", href: "/conf/2024/speakers" }, - { children: "Register", href: "https://cvent.me/gk2dRw" }, - { children: "Sponsor", href: "/conf/2024/partner" }, - { children: "Partner", href: "/conf/2024/partner#program" }, { children: "Gallery", href: "/conf/2024/gallery" }, { children: "Speakers", href: "/conf/2024/speakers" }, { children: "GraphQLConf 2023", href: "/conf/2023" }, diff --git a/src/app/conf/2024/page.tsx b/src/app/conf/2024/page.tsx index 50fdcc6fd..7aca6d7b3 100644 --- a/src/app/conf/2024/page.tsx +++ b/src/app/conf/2024/page.tsx @@ -2,7 +2,6 @@ import { Metadata } from "next" import { HostedByGraphQLFoundation } from "@/icons" import { Sponsors } from "./sponsors" import { About } from "./about" -import { Pricing } from "./pricing" import { Venue } from "./venue" import { Button } from "@/app/conf/_components/button" import clsx from "clsx" @@ -11,6 +10,8 @@ import { schedule, speakers } from "./_data" import { SessionList } from "../_components/schedule/session-list" import { filterCategories2024 } from "../_components/schedule/filter-categories" import { eventsColors } from "./utils" +import NextImage from "next-image-export-optimizer" +import leeImage from "./gallery/images/lee.png" function shuffle(array: T): T { let currentIndex = array.length @@ -53,7 +54,7 @@ export default function Page() {
- +
- - - Join as a Sponsor - - - Join as a Partner - + +
+ + + +
+
+
+

Thank you for Attending!

+

+ Thank you to all who joined us for GraphQLConf 2024! We look + forward to seeing you at future events. To experience the best of + this year's event, be sure to watch session recordings and slides + from speakers, available on the event schedule for each talk. +

+
+ {/* this div is really necessary otherwise img will appear outside from div */} +
+
@@ -156,9 +167,7 @@ export default function Page() { - - ) diff --git a/src/app/conf/2024/schedule/[id]/page.tsx b/src/app/conf/2024/schedule/[id]/page.tsx index afe6ecc2f..5c8192773 100644 --- a/src/app/conf/2024/schedule/[id]/page.tsx +++ b/src/app/conf/2024/schedule/[id]/page.tsx @@ -11,6 +11,8 @@ import { speakers, schedule } from "@/app/conf/2024/_data" import { metadata as layoutMetadata } from "@/app/conf/2023/layout" import { ScheduleSession } from "../../../2023/types" import { format, parseISO } from "date-fns" +import { videos } from "../../_videos" +import { findBestMatch } from "string-similarity" function getEventTitle(event: ScheduleSession, speakers: string[]): string { let { name } = event @@ -93,6 +95,11 @@ export default function SessionPage({ params }: SessionProps) { event.speakers!.map(s => s.name), ) + const recordingTitle = findBestMatch( + `${eventTitle} ${event.speakers!.map(e => e.name).join(" ")}`, + videos.map(e => e.title), + ).bestMatch + return (
@@ -101,6 +108,18 @@ export default function SessionPage({ params }: SessionProps) {
+ {recordingTitle.rating > 0.5 && ( +