From d42070b14e23035e6568f4d0152597063c3cf76b Mon Sep 17 00:00:00 2001 From: egeakman Date: Thu, 27 Aug 2026 13:38:54 -0500 Subject: [PATCH 1/5] Emphasize the extended CFP deadline across the site The deadline moved from 25 August to 7 September, but nothing on the site said it had changed. Add a red strike-through treatment for the old date, call it out in the CFP section title, and give the homepage CFP section an actual submit button (it previously only linked to the full CFP page, with no direct path to the form). --- src/content/prose/cfp-details.mdx | 3 ++- src/content/prose/cfp.mdx | 2 +- src/pages/index.astro | 7 +++++-- src/styles/global.css | 6 ++++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/content/prose/cfp-details.mdx b/src/content/prose/cfp-details.mdx index 8068b09..81ae808 100644 --- a/src/content/prose/cfp-details.mdx +++ b/src/content/prose/cfp-details.mdx @@ -1,7 +1,8 @@ import { event } from "@data/event";
-

Submissions close {event.cfp.deadlineDisplay}.

+

Deadline extended!

+

Submissions now close 25 August 2026 {event.cfp.deadlineDisplay}.

Submit your talk β†’

diff --git a/src/content/prose/cfp.mdx b/src/content/prose/cfp.mdx index d53911e..99b756d 100644 --- a/src/content/prose/cfp.mdx +++ b/src/content/prose/cfp.mdx @@ -2,4 +2,4 @@ import { event } from "@data/event"; The CFP is open! Got a Python project, story, or hard-won lesson to share? We want to hear it - all experience levels welcome, first-time speakers especially. -Talks are 10 minutes, mostly in English, with a few Turkish slots for this first edition. Submissions close **{event.cfp.deadlineDisplay}**. +Talks are 10 minutes, mostly in English, with a few Turkish slots for this first edition. Submissions close 25 August 2026{" "}{event.cfp.deadlineDisplay}. diff --git a/src/pages/index.astro b/src/pages/index.astro index 64e20cc..c88ec4f 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -46,9 +46,12 @@ const twitter = socials.find((s) => s.handle);
-
+
- Read the full CFP β†’ +
+ Submit a talk! 🎀 + Read the full CFP β†’ +
diff --git a/src/styles/global.css b/src/styles/global.css index c3129bf..ef1ffe3 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -124,6 +124,12 @@ .prose-banner { @apply bg-primary text-white rounded-lg mb-8 p-6 text-center; } + .deadline-old { + color: color-mix(in srgb, var(--color-text) 55%, transparent); + text-decoration: line-through; + text-decoration-color: var(--color-primary); + text-decoration-thickness: 2px; + } /* Section heading (h2 anchors) and legal page title (h1) share this look */ .section-heading { From 91228aa8328212467d3b4295f47a6df17b354a80 Mon Sep 17 00:00:00 2001 From: egeakman Date: Thu, 27 Aug 2026 13:40:06 -0500 Subject: [PATCH 2/5] Refactor CTA logic into two independent CTAs Replace the single generic event.cta with an event.ctas array (CFP submission and ticket purchase), each carrying its own label, href, hero variant, and a floating flag for whether it also gets a floating button once scrolled past. The hero and the floating-cta script now render/bind off that array instead of hardcoded single-button wiring. Add an "inverted" button variant (white fill, primary-colored text) for the ticket CTA, since it needs to read differently from the CFP button without competing with it for attention. --- src/components/CtaButton.astro | 10 +++++++-- src/data/event.ts | 23 +++++++++++++++++--- src/pages/index.astro | 38 ++++++++++++++++++++-------------- src/sections/Hero.astro | 25 +++++++++------------- src/styles/global.css | 3 +++ 5 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/components/CtaButton.astro b/src/components/CtaButton.astro index 8785193..d85cd26 100644 --- a/src/components/CtaButton.astro +++ b/src/components/CtaButton.astro @@ -1,11 +1,17 @@ --- interface Props { href: string; - variant?: "solid" | "outline"; + variant?: "solid" | "outline" | "inverted"; class?: string; id?: string; } +const variantClass = { + solid: "btn-solid", + outline: "btn-outline", + inverted: "btn-inverted", +}; + const { href, variant = "solid", class: cls, id } = Astro.props; const external = href.startsWith("http"); --- @@ -15,7 +21,7 @@ const external = href.startsWith("http"); href={href} target={external ? "_blank" : undefined} rel={external ? "noopener noreferrer" : undefined} - class:list={["btn", variant === "outline" ? "btn-outline" : "btn-solid", cls]} + class:list={["btn", variantClass[variant], cls]} > diff --git a/src/data/event.ts b/src/data/event.ts index 49f0c7a..b398f2d 100644 --- a/src/data/event.ts +++ b/src/data/event.ts @@ -3,6 +3,8 @@ // to stand up a new edition. const cfpUrl = "https://forms.gle/41Zpwh2N2uS4P1RB8"; +const ticketsUrl = + "https://kommunity.com/pythonturkiye/events/python-pizza-istanbul-4fa122d9"; export const event = { name: "Python Pizza Istanbul", @@ -14,7 +16,7 @@ export const event = { startDate: "2026-11-14T11:00:00+03:00", endDate: "2026-11-14T18:00:00+03:00", contactEmail: "organizers@pythonturkiye.org", - ticketsUrl: "https://kommunity.com/pythonturkiye/events/python-pizza-istanbul-4fa122d9", + ticketsUrl: ticketsUrl, maxAttendees: 150, organizer: { name: "Python Türkiye", @@ -31,6 +33,21 @@ export const event = { url: cfpUrl, deadlineDisplay: "Monday, 7 September 2026, 23:59 AoE", }, - // whatever is most important right now - cta: { label: "Submit a talk! 🎀", href: cfpUrl }, + // shown together in the hero; ctas with floating: true also get a floating button once scrolled past + ctas: [ + { + id: "cfp", + label: "Submit a talk! 🎀", + href: cfpUrl, + variant: "outline" as const, + floating: true, + }, + { + id: "tickets", + label: "Get your ticket! 🎟️", + href: ticketsUrl, + variant: "inverted" as const, + floating: false, + }, + ], }; diff --git a/src/pages/index.astro b/src/pages/index.astro index c88ec4f..2263582 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -34,13 +34,17 @@ const twitter = socials.find((s) => s.handle);
- - {event.cta.label} - +
+ {event.ctas.filter((cta) => cta.floating).map((cta) => ( + + {cta.label} + + ))} +
@@ -63,17 +67,21 @@ const twitter = socials.find((s) => s.handle);