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
174 changes: 174 additions & 0 deletions src/components/Speaker.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
---
import type { Speaker } from "../lib/content";

interface Props {
content: Speaker[];
}

const { content } = Astro.props;
---

<!-- Speakers Grid -->
<section class="speakers-section">
<div class="speakers-container">
<h2 class="section-heading">
<span class="heading-prefix">All </span>
Speakers
</h2>
<div class="speakers-grid">
{
content.map((speaker) => (
<div class="speaker-card">
<div class="speaker-image">
<img src={speaker.image} alt={speaker.speakername} />
</div>
<div class="speaker-info">
<h3 class="speaker-name">{speaker.speakername}</h3>
<p class="speaker-title">{speaker.title}</p>
<p class="speaker-company">{speaker.company}</p>
<p class="speaker-topic">{speaker.topic}</p>
</div>
</div>
))
}
</div>
</div>
</section>

<style>
.speakers-section {
padding: 4rem 1.5rem;
}

.speakers-container {
max-width: 1200px;
margin: 0 auto;
}

.speakers-grid {
display: grid;
grid-template-columns: 1fr;
gap: 2rem;
}

.speaker-card {
background: rgba(61, 120, 171, 0.1);
border: 1px solid rgba(61, 120, 171, 0.2);
border-radius: 1rem;
padding: 2rem;
text-align: center;
transition:
transform 0.2s,
border-color 0.2s;
}

.speaker-card:hover {
transform: translateY(-4px);
border-color: rgba(61, 120, 171, 0.4);
}

.speaker-image {
width: 150px;
height: 150px;
margin: 0 auto 1.5rem;
border-radius: 50%;
overflow: hidden;
border: 3px solid rgb(251, 113, 133);
}

.speaker-image img {
width: 100%;
height: 100%;
object-fit: cover;
}

.speaker-info {
text-align: center;
}

.speaker-name {
font-family: "Squada One", system-ui, sans-serif;
font-size: 1.5rem;
margin: 0 0 0.5rem 0;
color: white;
}

.speaker-title {
font-size: 1rem;
margin: 0 0 0.25rem 0;
font-weight: 600;
color: rgb(251, 113, 133);
}

.speaker-company {
font-size: 0.875rem;
margin: 0 0 0.75rem 0;
opacity: 0.8;
}

.speaker-topic {
font-size: 0.875rem;
margin: 0;
opacity: 0.7;
font-style: italic;
}
/* Desktop Styles */
@media (min-width: 769px) {
.speakers-hero {
padding: 8rem 2rem 6rem;
}

.hero-title {
font-size: 4.5rem;
}

.hero-subtitle {
font-size: 2rem;
}

.hero-description {
font-size: 1.25rem;
}

.speakers-section {
padding: 6rem 2rem;
}

.section-heading {
font-size: 4rem;
}

.speakers-grid {
grid-template-columns: repeat(3, 1fr);
gap: 3rem;
}

.speaker-image {
width: 180px;
height: 180px;
}

.cfs-section {
padding: 6rem 2rem;
}

.cfs-dates {
grid-template-columns: repeat(2, 1fr);
max-width: 700px;
}

.cfs-benefits {
grid-template-columns: repeat(2, 1fr);
gap: 3rem;
}

.opportunities-section {
padding: 6rem 2rem;
}

.opportunities-grid {
grid-template-columns: repeat(2, 1fr);
gap: 3rem;
}
}
</style>
57 changes: 55 additions & 2 deletions src/lib/content.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { Group } from "lucide-astro";

export interface CitySpecificContent {
cityName: string;
venue: string;
Expand Down Expand Up @@ -54,6 +52,14 @@ interface Sponsors {
logo: string;
}

export interface Speaker {
speakername: string;
title: string;
company: string;
topic: string;
image: string;
}

export type City = "vancouver" | "toronto";

export const defaultCity: City = 'vancouver';
Expand Down Expand Up @@ -500,6 +506,52 @@ export const newsletterContent = {
ctaHref: 'https://tally.so/r/mR6RBl',
};


export const speakerContent: Speaker[] = [
{
speakername: "Matt Biilmann",
title: "CEO and Co-Founder",
company: "Netlify",
topic: "AX and Why It Matters",
image: "/images/previous-speakers/matt-biilmann.png",
},
{
speakername: "Eric Johnson",
title: "Principal Developer Advocate",
company: "Amazon Web Services (AWS)",
topic: "Taking GenAI from Paper to Production with Serverless",
image: "/images/previous-speakers/eric-johnson.png",
},
{
speakername: "Ahmad Awais",
title: "CEO",
company: "Langbase",
topic: "Why the Best AI Agents Are Built Without Frameworks",
image: "/images/previous-speakers/ahmad-awais.jpg",
},
{
speakername: "Luca Maraschi",
title: "Co-Founder & CEO",
company: "Platformatic",
topic: "Scaling Node.js in Kubernetes: Metrics, Memory, and Mastery",
image: "/images/previous-speakers/luca-maraschi.png",
},
{
speakername: "Denis Astahov",
title: "Solutions Architect",
company: "OpsGuru",
topic: "How to become Cloud/DevOps Engineer from Zero",
image: "/images/previous-speakers/denis-astahov.png",
},
{
speakername: "Aiman Parvaiz",
title: "Director of DevOps",
company: "NimbusStack",
topic: "Driving Cloud Cost Efficiency: Multi-Cloud Strategies",
image: "/images/previous-speakers/aiman-parvaiz.png",
},
];

export const communityPartners: CommunityPartners[] = [
{
name: 'AWS',
Expand Down Expand Up @@ -535,3 +587,4 @@ export const sponsors: Sponsors[] = [
logo: '../../public/images/sponsors/Fortinet_Logo.png'
}
]

97 changes: 64 additions & 33 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
---

import Navigation from '../components/Navigation.astro';
import Hero from '../components/Hero.astro';
import CityModal from '../components/CityModal.astro';
Expand All @@ -19,6 +19,7 @@ import { heroContent, navigationContent, aboutCPCAContent, whatIsCloudSummitCont
import Sponsors from '../components/Sponsors.astro';
import CommunityPartners from '../components/CommunityPartners.astro';


import VenueLogisticsSectionSecondVersion from '../components/VenueLogisticsSectionSecondVersion.astro';
import { heroContent, navigationContent, aboutCPCAContent, whatIsCloudSummitContent, cloudSummitActivitiesContent, eventHighlightsContent, tickerContent, eventMapContent, pastSponsorsContent, newsletterContent, footerContent, defaultCity,venueLogisticsContentNewVersion } from '../lib/content';
import Schedule from '../components/Schedule.astro';
Expand Down Expand Up @@ -250,41 +251,71 @@ const torontoDescription =
</html>

<style is:global>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}

html {
font-family: 'Noto Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
line-height: 1.6;
color: #1a1a1a;
}
html {
font-family:
"Noto Sans",
system-ui,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
Oxygen,
Ubuntu,
Cantarell,
sans-serif;
line-height: 1.6;
color: #1a1a1a;
}

h1, h2, h3, h4, h5, h6,
.nav-logo,
.hero-title,
.modal-title,
.city-name {
font-family: 'Squada One', system-ui, sans-serif;
font-weight: 400;
letter-spacing: 0.02em;
}
h1,
h2,
h3,
h4,
h5,
h6,
.nav-logo,
.hero-title,
.modal-title,
.city-name {
font-family: "Squada One", system-ui, sans-serif;
font-weight: 400;
letter-spacing: 0.02em;
}

p, span, a, li, div, body {
font-family: 'Noto Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
}
p,
span,
a,
li,
div,
body {
font-family:
"Noto Sans",
system-ui,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
Oxygen,
Ubuntu,
Cantarell,
sans-serif;
}

@media (prefers-color-scheme: dark) {
html {
color: #e0e0e0;
background: #0a0a0a;
}
}
@media (prefers-color-scheme: dark) {
html {
color: #e0e0e0;
background: #0a0a0a;
}
}

body {
min-height: 100vh;
background: black;
}
body {
min-height: 100vh;
background: black;
}
</style>