|
| 1 | +"use client" |
| 2 | +import clsx from "clsx" |
| 3 | + |
| 4 | +import { useState, useEffect, ReactNode } from "react" |
| 5 | +import Link from "next/link" |
| 6 | + |
| 7 | +function TabHeading({ |
| 8 | + children, |
| 9 | + className, |
| 10 | +}: { |
| 11 | + children: ReactNode |
| 12 | + className?: string |
| 13 | +}) { |
| 14 | + return ( |
| 15 | + <h2 className={clsx("mb-4 text-2xl font-semibold", className)}> |
| 16 | + {children} |
| 17 | + </h2> |
| 18 | + ) |
| 19 | +} |
| 20 | + |
| 21 | +function DatesTab() { |
| 22 | + return ( |
| 23 | + <> |
| 24 | + <TabHeading>Dates to Remember</TabHeading> |
| 25 | + <ul className="list-disc space-y-2 pl-6"> |
| 26 | + <li>CFP Opens: Tuesday, 4 February</li> |
| 27 | + <li>CFP Close: Sunday, 4 May at 23:59 CEST (UTC+2)</li> |
| 28 | + <li>CFP Notifications: Monday, 9 June</li> |
| 29 | + <li>Schedule Announced: Wednesday, 11 June</li> |
| 30 | + <li>Slides due date: Friday, 5 September</li> |
| 31 | + <li> |
| 32 | + Event Dates: Monday, 8 September - Wednesday, 10 September, 2024 |
| 33 | + </li> |
| 34 | + </ul> |
| 35 | + </> |
| 36 | + ) |
| 37 | +} |
| 38 | + |
| 39 | +function TopicsTab() { |
| 40 | + return ( |
| 41 | + <> |
| 42 | + <TabHeading>Suggested Topics</TabHeading> |
| 43 | + <ul className="list-disc space-y-2 pl-6"> |
| 44 | + <li>GraphQL Working Group</li> |
| 45 | + <ul className="list-disc space-y-2 pl-6"> |
| 46 | + <li> |
| 47 | + GraphQL Specification (including incremental delivery, nullability) |
| 48 | + </li> |
| 49 | + <li>GraphQL-over-HTTP specification</li> |
| 50 | + <li>Federation specification</li> |
| 51 | + <li> |
| 52 | + Reference software (GraphQL.js, graphql-http, GraphiQL and LSP) |
| 53 | + </li> |
| 54 | + </ul> |
| 55 | + <li>GraphQL in Production</li> |
| 56 | + <ul className="list-disc space-y-2 pl-6"> |
| 57 | + <li>Case studies</li> |
| 58 | + <li>Federation and Distributed Systems</li> |
| 59 | + <li> |
| 60 | + Schema evolution (including backwards compatibility and versioning) |
| 61 | + </li> |
| 62 | + <li>Security</li> |
| 63 | + <li>Scaling</li> |
| 64 | + <li>Observability, telemetry and tracing</li> |
| 65 | + </ul> |
| 66 | + <li>Developer Experience</li> |
| 67 | + <ul className="list-disc space-y-2 pl-6"> |
| 68 | + <li>Frontend</li> |
| 69 | + <li>Backend</li> |
| 70 | + <li>Patterns and community trends</li> |
| 71 | + <li>Testing</li> |
| 72 | + <li>Documentation</li> |
| 73 | + </ul> |
| 74 | + </ul> |
| 75 | + </> |
| 76 | + ) |
| 77 | +} |
| 78 | + |
| 79 | +function NotesTab() { |
| 80 | + return ( |
| 81 | + <> |
| 82 | + <TabHeading>Important Notes</TabHeading> |
| 83 | + <ul className="list-disc space-y-2 pl-6"> |
| 84 | + <li> |
| 85 | + All speakers are required to adhere to our{" "} |
| 86 | + <Link |
| 87 | + className="underline hover:text-primary" |
| 88 | + href="/conf/2025/resources/#code-of-conduct" |
| 89 | + > |
| 90 | + Code of Conduct |
| 91 | + </Link> |
| 92 | + . We also highly recommend that speakers take our online{" "} |
| 93 | + <a |
| 94 | + className="underline hover:text-primary" |
| 95 | + target="_blank" |
| 96 | + href="https://training.linuxfoundation.org/linux-courses/open-source-compliance-courses/inclusive-speaker-orientation" |
| 97 | + > |
| 98 | + Inclusive Speaker Orientation Course |
| 99 | + </a> |
| 100 | + . |
| 101 | + </li> |
| 102 | + <li> |
| 103 | + Panel submissions must include the names of all participants in the |
| 104 | + initial submission to be considered. In an effort to promote speaker |
| 105 | + diversity, The Linux Foundation does not accept submissions with |
| 106 | + all-male panels, and speakers must not all be from the same company. |
| 107 | + </li> |
| 108 | + <li> |
| 109 | + Complimentary Passes For Speakers – One complimentary pass for the |
| 110 | + event will be provided for each accepted speaker. |
| 111 | + </li> |
| 112 | + <li> |
| 113 | + Avoid sales pitches and discussing unlicensed or potentially |
| 114 | + closed-source technologies when preparing your proposal; these talks |
| 115 | + are almost always rejected due to the fact that they take away from |
| 116 | + the integrity of our events, and are rarely well-received by |
| 117 | + conference attendees. |
| 118 | + </li> |
| 119 | + <li> |
| 120 | + All accepted speakers are required to submit their slides prior to the |
| 121 | + event. |
| 122 | + </li> |
| 123 | + </ul> |
| 124 | + <TabHeading className="mt-6"> |
| 125 | + Preparing to Submit Your Proposal |
| 126 | + </TabHeading> |
| 127 | + <p className="mb-4"> |
| 128 | + While it is not our intention to provide you with strict instructions on |
| 129 | + how to prepare your proposal, we hope you will take a moment to review |
| 130 | + the following guidelines that we have put together to help you prepare |
| 131 | + the best submission possible. To get started, here are three things that |
| 132 | + you should consider before submitting your proposal: |
| 133 | + </p> |
| 134 | + <ul className="mb-4 list-disc space-y-2 pl-6"> |
| 135 | + <li>What are you hoping to get from your presentation?</li> |
| 136 | + <li>What do you expect the audience to gain from your presentation?</li> |
| 137 | + <li>How will your presentation help better the ecosystem?</li> |
| 138 | + </ul> |
| 139 | + <p> |
| 140 | + There are plenty of ways to give a presentation about projects and |
| 141 | + technologies without focusing on company-specific efforts. Remember the |
| 142 | + things to consider that we mentioned above when writing your proposal |
| 143 | + and think of ways to make it interesting for attendees while still |
| 144 | + letting you share your experiences, educate the community about an |
| 145 | + issue, or generate interest in a project. |
| 146 | + </p> |
| 147 | + <TabHeading className="mt-6">How to Give a Great Talk</TabHeading> |
| 148 | + <p> |
| 149 | + We want to make sure submitters receive resources to help put together a |
| 150 | + great submission and if accepted, give the best presentation possible. |
| 151 | + To help with this, we recommend viewing seasoned speaker Dawn Foster's |
| 152 | + in-depth talk:{" "} |
| 153 | + <a |
| 154 | + href="https://youtu.be/2I5fYBLCfUA" |
| 155 | + target="_blank" |
| 156 | + className="underline hover:text-primary" |
| 157 | + > |
| 158 | + Getting Over Your Imposter Syndrome to Become a Conference Speaker – |
| 159 | + Dawn Foster, VMware |
| 160 | + </a> |
| 161 | + . |
| 162 | + </p> |
| 163 | + <TabHeading className="mt-6"> |
| 164 | + Have More Questions? First Time Submitting? Don't Feel Intimidated |
| 165 | + </TabHeading> |
| 166 | + <p> |
| 167 | + Linux Foundation events are an excellent way to get to know the |
| 168 | + community and share your ideas and the work that you are doing and we |
| 169 | + strongly encourage first-time speakers to submit talks for our events. |
| 170 | + In the instance that you aren't sure about your abstract,{" "} |
| 171 | + <a |
| 172 | + className="underline hover:text-primary" |
| 173 | + |
| 174 | + > |
| 175 | + reach out to us |
| 176 | + </a>{" "} |
| 177 | + and we will be more than happy to work with you on your proposal. |
| 178 | + </p> |
| 179 | + </> |
| 180 | + ) |
| 181 | +} |
| 182 | + |
| 183 | +function TypesTab() { |
| 184 | + return ( |
| 185 | + <> |
| 186 | + <TabHeading>Submission Types</TabHeading> |
| 187 | + <ul className="list-disc space-y-2 pl-6"> |
| 188 | + <li> |
| 189 | + Session Presentation: Typically 30 minutes in length, 1-2 speakers |
| 190 | + presenting on a topic |
| 191 | + </li> |
| 192 | + <li> |
| 193 | + Panel Discussion: Typically 30 minutes in length, 3-4 speakers |
| 194 | + presenting on a topic |
| 195 | + </li> |
| 196 | + <li>Birds of a Feather: Typically 45 minutes to 1 hour in length</li> |
| 197 | + <li>Lightning Talk: Typically 5-10 minutes in length</li> |
| 198 | + <li>Workshop: Typically 1-2 hours in length</li> |
| 199 | + </ul> |
| 200 | + </> |
| 201 | + ) |
| 202 | +} |
| 203 | +export function Speakers() { |
| 204 | + const [buttonText, setButtonText] = useState("Submit a Proposal") |
| 205 | + const [isDisabled, setIsDisabled] = useState(false) |
| 206 | + const [activeTab, setActiveTab] = useState("dates") |
| 207 | + |
| 208 | + useEffect(() => { |
| 209 | + const checkDate = () => { |
| 210 | + const currentDate = new Date() |
| 211 | + const closingDate = new Date("2025-05-12T00:00:00Z") |
| 212 | + if (currentDate >= closingDate) { |
| 213 | + setButtonText("CFP Closed") |
| 214 | + setIsDisabled(true) |
| 215 | + } |
| 216 | + } |
| 217 | + |
| 218 | + checkDate() |
| 219 | + const timer = setInterval(checkDate, 60000) // Check every minute |
| 220 | + |
| 221 | + return () => clearInterval(timer) |
| 222 | + }, []) |
| 223 | + |
| 224 | + const tabContent = { |
| 225 | + dates: <DatesTab />, |
| 226 | + topics: <TopicsTab />, |
| 227 | + types: <TypesTab />, |
| 228 | + notes: <NotesTab />, |
| 229 | + } |
| 230 | + |
| 231 | + return ( |
| 232 | + <section id="speakers" className=""> |
| 233 | + <h1 className="conf-heading">Call for Proposals</h1> |
| 234 | + <p className="mb-4"> |
| 235 | + Putting on an amazing conference depends on great content, which is |
| 236 | + where you come in! Join other GraphQL leaders and community members as a |
| 237 | + presenter by submitting to our Call for Proposals (CFP) and sharing your |
| 238 | + experience across a wide range of topics. Please click through all of |
| 239 | + the tabs below before submitting a proposal. |
| 240 | + </p> |
| 241 | + <p className="mb-4"> |
| 242 | + For any questions regarding the CFP process, please email{" "} |
| 243 | + <a |
| 244 | + |
| 245 | + className="underline hover:text-primary" |
| 246 | + > |
| 247 | + |
| 248 | + </a> |
| 249 | + . |
| 250 | + </p> |
| 251 | + <button |
| 252 | + disabled={isDisabled} |
| 253 | + onClick={() => |
| 254 | + window.open( |
| 255 | + "https://sessionize.com/graphqlconf-2025?utm_medium=website&utm_campaign=speaker_section", |
| 256 | + "_blank", |
| 257 | + ) |
| 258 | + } |
| 259 | + className={clsx( |
| 260 | + "px-20 py-4 text-center text-3xl font-semibold transition-colors md:px-28", |
| 261 | + isDisabled |
| 262 | + ? "cursor-not-allowed bg-gray-400" |
| 263 | + : "bg-primary/85 hover:bg-primary/100", |
| 264 | + )} |
| 265 | + > |
| 266 | + {buttonText} |
| 267 | + </button> |
| 268 | + <p className="mb-8 mt-6"> |
| 269 | + Please be aware that the Linux Foundation uses Sessionize for CFP |
| 270 | + submissions. Sessionize is a cloud-based event content management |
| 271 | + software designed to be intuitive and user-friendly. If you need |
| 272 | + guidance, please review{" "} |
| 273 | + <a |
| 274 | + className="underline hover:text-primary" |
| 275 | + target="_blank" |
| 276 | + href="https://sessionize.com/playbook/submit-your-session-for-an-event" |
| 277 | + > |
| 278 | + how to submit your session |
| 279 | + </a>{" "} |
| 280 | + for an event to see step-by-step instructions and helpful screenshots. |
| 281 | + </p> |
| 282 | + <div className="mb-6"> |
| 283 | + <div className="flex border-b"> |
| 284 | + {["dates", "topics", "types", "notes"].map(tab => ( |
| 285 | + <button |
| 286 | + key={tab} |
| 287 | + className={`px-4 py-2 font-semibold ${ |
| 288 | + activeTab === tab |
| 289 | + ? "border-b-2 border-primary text-white" |
| 290 | + : "text-gray-400 hover:text-primary" |
| 291 | + }`} |
| 292 | + onClick={() => setActiveTab(tab)} |
| 293 | + > |
| 294 | + {tab.charAt(0).toUpperCase() + tab.slice(1)} |
| 295 | + </button> |
| 296 | + ))} |
| 297 | + </div> |
| 298 | + {/* @ts-ignore - fine code */} |
| 299 | + <div className="mt-6">{tabContent[activeTab]}</div> |
| 300 | + </div> |
| 301 | + </section> |
| 302 | + ) |
| 303 | +} |
0 commit comments