Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion biome.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://biomejs.dev/schemas/2.5.1/schema.json",
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
"files": { "ignoreUnknown": false, "includes": ["**"] },
"files": { "ignoreUnknown": false, "includes": ["**", "!**/*.svg"] },
"formatter": { "enabled": true, "indentStyle": "space" },
"assist": { "actions": { "source": { "organizeImports": "on" } } },
"linter": {
Expand Down
95 changes: 95 additions & 0 deletions public/sponsors/startgate.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/venue/startgate-amfi-lobby.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/venue/startgate-amfi-tiers.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/venue/startgate-amfi-wide.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/venue/startgate-front.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/venue/startgate-terrace-night.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/venue/startgate-terrace-view.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 30 additions & 1 deletion src/components/EventJsonLd.astro
Original file line number Diff line number Diff line change
@@ -1,12 +1,41 @@
---
import { getCollection } from "astro:content";
import { event } from "@data/event";

const sponsors = await getCollection("sponsors");

const schema = {
"@context": "https://schema.org",
"@type": "ConferenceEvent",
name: event.name,
description: event.description,
startDate: event.startDate,
endDate: event.endDate,
eventStatus: "https://schema.org/EventScheduled",
eventAttendanceMode: "https://schema.org/OfflineEventAttendanceMode",
maximumAttendeeCapacity: event.maxAttendees,
url: Astro.site?.href,
image: new URL("/social-image.jpg", Astro.site).href,
organizer: {
"@type": "Organization",
name: event.organizer.name,
},
sponsor: sponsors.map((s) => ({
"@type": "Organization",
name: s.data.name,
url: s.data.link,
})),
location: {
"@type": "Place",
name: event.venue.name,
address: {
"@type": "PostalAddress",
streetAddress: event.venue.addressLine,
addressLocality: "Sarıyer",
addressRegion: "İstanbul",
addressCountry: "TR",
},
},
offers: {
"@type": "Offer",
name: "Tickets",
Expand All @@ -15,7 +44,7 @@ const schema = {
hasSponsorshipOffer: {
"@type": "Offer",
name: "Sponsor Packages",
url: new URL("#sponsors", Astro.site).href,
url: new URL("/sponsors", Astro.site).href,
},
};
---
Expand Down
10 changes: 6 additions & 4 deletions src/content/prose/venue.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { event } from "@data/event";
**Getting there Ⓜ️**

📍 **Venue details will be announced soon.**

We're finalizing the location for {event.name} - check back here for the address and how to get there.
- Metro **M2 (Yenikapı-Hacıosman)** to **İTÜ-Ayazağa**, a 3-minute walk to the venue.
- From **Istanbul Airport (IST)**: take the M11 to Gayrettepe, transfer to the M2 northbound, and get off at İTÜ-Ayazağa.
- From **Sabiha Gökçen (SAW)**: take the M4 to Ayrılık Çeşmesi, the Marmaray to Yenikapı, then the M2 northbound to İTÜ-Ayazağa.
- From **Taksim / Şişhane**: M2 northbound, direct to İTÜ-Ayazağa.
- For live routing, use the Google Maps link above.
4 changes: 4 additions & 0 deletions src/content/sponsors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@
name: EuroPython Society
image: /sponsors/eps-text.png
link: https://www.europython-society.org/
- id: startgate
name: StartGate
image: /sponsors/startgate.svg
link: https://www.startgate.com/
17 changes: 15 additions & 2 deletions src/data/event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,24 @@ export const event = {
city: "Istanbul",
description:
"Python Pizza Istanbul - a one-day Python micro-conference on Saturday, 14 November 2026",
subHeading: "Venue announcement coming soon 👀",
subHeading: "StartGate, Maslak, Istanbul",
whenDisplay: "Saturday, 14 November 2026",
startDate: "2026-11-14",
startDate: "2026-11-14T11:00:00+03:00",
endDate: "2026-11-14T18:00:00+03:00",
contactEmail: "organizers@pythonturkiye.org",
ticketsUrl: "#",
maxAttendees: 150,
organizer: {
name: "Python Türkiye",
},
venue: {
name: "StartGate Istanbul",
addressLine: "Maslak Mah. Eski Büyükdere Cad. No:21",
district: "Sarıyer / İstanbul",
url: "https://www.startgate.com/",
mapsUrl:
"https://maps.google.com/?q=StartGate+Maslak+Eski+Büyükdere+Caddesi+21",
},
cfp: {
url: cfpUrl,
deadlineDisplay: "Tuesday, 25 August 2026, 23:59 AoE",
Expand Down
2 changes: 1 addition & 1 deletion src/data/navigation.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
export const menuItems = [
{ href: "/#about", label: "About 🍕" },
{ href: "/#cfp", label: "CFP 🙋🏻‍♀️" },
{ href: "/#venue", label: "Venue 🏰" },
{ href: "/#sponsors", label: "Sponsors 💛" },
// { href: "/#schedule", label: "Program 📅" },
// { href: "/compact-agenda/", label: "Compact agenda 🔗" },
{ href: "/#organizers", label: "Organizers 👩🏻" },
// { href: "/#venue", label: "Venue 🏰" },
{ href: "/#coc", label: "CoC 💂" },
];
1 change: 1 addition & 0 deletions src/layouts/Base.astro
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const { title, description, ogImage, noindex = false } = Astro.props;
{ogImage && <meta property="og:image" content={ogImage} />}
<slot name="head" />
<script
is:inline
data-goatcounter="https://pythonpizzaistanbul.goatcounter.com/count"
async
src="//gc.zgo.at/count.js">
Expand Down
4 changes: 2 additions & 2 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Hero from "@sections/Hero.astro";
import Sponsors from "@sections/Sponsors.astro";
// import Schedule from "@sections/Schedule.astro";
import Organizers from "@sections/Organizers.astro";
// import Venue from "@sections/Venue.astro";
import Venue from "@sections/Venue.astro";
import AboutContent from "@prose/about.mdx";
import CfpContent from "@prose/cfp.mdx";
import CocContent from "@prose/coc.mdx";
Expand Down Expand Up @@ -50,10 +50,10 @@ const twitter = socials.find((s) => s.handle);
<Prose><CfpContent /></Prose>
<CtaButton href="/cfp/" class="mt-8">Read the full CFP →</CtaButton>
</Section>
<Venue />
<Sponsors />
{/* <Schedule /> */}
<Organizers />
{/* <Venue /> */}
<Section id="coc" title="Code of Conduct">
<Prose class="text-left [&_ul]:list-none [&_ul]:pl-0"><CocContent /></Prose>
</Section>
Expand Down
2 changes: 1 addition & 1 deletion src/sections/Sponsors.astro
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const sponsors = await getCollection("sponsors");
<img
src={s.data.image}
alt={s.data.name}
class="w-full h-auto object-contain"
class="w-full h-auto max-h-24 object-contain"
/>
</a>
))}
Expand Down
47 changes: 46 additions & 1 deletion src/sections/Venue.astro
Original file line number Diff line number Diff line change
@@ -1,11 +1,56 @@
---
import { Image } from "astro:assets";
import Section from "@components/Section.astro";
import Prose from "@components/Prose.astro";
import CtaButton from "@components/CtaButton.astro";
import VenueContent from "@prose/venue.mdx";
import { event } from "@data/event";
import front from "@assets/venue/startgate-front.jpeg";
import amfiWide from "@assets/venue/startgate-amfi-wide.jpeg";
import amfiTiers from "@assets/venue/startgate-amfi-tiers.jpeg";
import amfiLobby from "@assets/venue/startgate-amfi-lobby.jpeg";
import terraceView from "@assets/venue/startgate-terrace-view.jpeg";
import terraceNight from "@assets/venue/startgate-terrace-night.jpeg";

const venuePhotos = [
{ src: front, alt: "The StartGate building entrance" },
{ src: amfiWide, alt: "The StartGate amphitheatre, seen from the entrance" },
{ src: amfiTiers, alt: "The amphitheatre's tiered seating and stage" },
{ src: amfiLobby, alt: "The lobby area next to the amphitheatre" },
{ src: terraceView, alt: "View over the Maslak skyline from the terrace" },
{ src: terraceNight, alt: "StartGate's outdoor terrace in the evening" },
];
---

<Section id="venue" title="Venue">
<Prose class="text-left [&_ul]:mt-2 [&_ul]:mb-6">
<div class="prose-banner">
<p class="font-mono font-medium text-lg md:text-xl">{event.venue.name}</p>
<p class="text-lg md:text-xl">{event.venue.addressLine}<br />{event.venue.district}</p>
<CtaButton href={event.venue.mapsUrl} variant="outline" class="mt-6">
📍 Open in Google Maps
</CtaButton>
</div>

<Prose class="prose-callout text-left [&_ul]:mt-2 [&_ul]:mb-0">
<VenueContent />
</Prose>

{/* Mobile: swipeable scroll-snap carousel, peeking edge hints it scrolls */}
<div class="flex overflow-x-auto snap-x snap-mandatory gap-4 mt-12 sm:grid sm:grid-cols-2">
{venuePhotos.map((photo) => (
<figure class="relative flex-none w-5/6 snap-start sm:w-full">
{/* alt is empty: photo.alt is rendered once below as the visible figcaption, so it's not read twice by screen readers */}
<Image
src={photo.src}
alt=""
width={800}
format="avif"
class="w-full block rounded-lg object-cover aspect-4/3"
/>
<figcaption class="absolute inset-x-0 bottom-0 rounded-b-lg bg-linear-to-t from-black/70 to-transparent px-4 pt-10 pb-3 text-left font-mono text-xs md:text-sm text-white">
{photo.alt}
</figcaption>
</figure>
))}
</div>
</Section>
Loading