diff --git a/gatsby-node.js b/gatsby-node.js index c1b6f3806..7269d4d17 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -532,6 +532,26 @@ exports.createSchemaCustomization = ({actions}) => { url: String logo: String big_logo: String + } + type MarkdownRemarkFrontmatterUpcomingMeetupsMeetups { + background: File @fileByRelativePath + date: String + location: String + link: String + } + type MarkdownRemarkFrontmatterUpcomingMeetupsBannerButton { + text: String + url: String + } + type MarkdownRemarkFrontmatterUpcomingMeetupsBanner { + title: String + content: String + button: MarkdownRemarkFrontmatterUpcomingMeetupsBannerButton + } + type MarkdownRemarkFrontmatterUpcomingMeetups { + title: String + banner: MarkdownRemarkFrontmatterUpcomingMeetupsBanner + meetups: [MarkdownRemarkFrontmatterUpcomingMeetupsMeetups] } ` createTypes(typeDefs) diff --git a/src/cms/cms.js b/src/cms/cms.js index 757ba0576..d57e76d8f 100644 --- a/src/cms/cms.js +++ b/src/cms/cms.js @@ -25,6 +25,8 @@ import ElectionPagePreview from './preview-templates/ElectionPagePreview' import ContributorsPagePreview from './preview-templates/ContributorsPagePreview' import AnnualReportPagePreview from './preview-templates/AnnualReportPagePreview' import ProjectsContactPagePreview from './preview-templates/ProjectsContactPagePreview' +import SummitLandingPagePreview from './preview-templates/SummitLandingPagePreview' +import OpenInfraDaysPagePreview from './preview-templates/OpenInfraDaysPagePreview' CMS.registerPreviewStyle('style/styles.scss'); CMS.registerPreviewStyle('style/previews.css'); @@ -54,4 +56,6 @@ CMS.registerPreviewTemplate('hybrid-cloud-page', HybridCloudPagePreview) CMS.registerPreviewTemplate('electionPage', ElectionPagePreview) CMS.registerPreviewTemplate('contributors-pages', ContributorsPagePreview) CMS.registerPreviewTemplate('annual-report-pages', AnnualReportPagePreview) -CMS.registerPreviewTemplate('projects-contact', ProjectsContactPagePreview) \ No newline at end of file +CMS.registerPreviewTemplate('projects-contact', ProjectsContactPagePreview) +CMS.registerPreviewTemplate('summit-landing-page', SummitLandingPagePreview) +CMS.registerPreviewTemplate('openinfra-days', OpenInfraDaysPagePreview) \ No newline at end of file diff --git a/src/cms/preview-templates/IndexPagePreview.js b/src/cms/preview-templates/IndexPagePreview.js index 340d37bea..230444aa3 100644 --- a/src/cms/preview-templates/IndexPagePreview.js +++ b/src/cms/preview-templates/IndexPagePreview.js @@ -14,6 +14,7 @@ const IndexPagePreview = ({ entry, getAsset }) => { projects={data.projects || {}} people={data.people || {}} sponsor={data.sponsor || {}} + openInfraEvents={data.openInfraEvents || {}} content={data.content || {}} /> ) diff --git a/src/cms/preview-templates/OpenInfraDaysPagePreview.js b/src/cms/preview-templates/OpenInfraDaysPagePreview.js new file mode 100644 index 000000000..8ac7adec7 --- /dev/null +++ b/src/cms/preview-templates/OpenInfraDaysPagePreview.js @@ -0,0 +1,92 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { OpenInfraDaysPageTemplate } from '../../templates/open-infra-days-page' + +const OpenInfraDaysPagePreview = ({ entry }) => { + const data = entry.getIn(['data']).toJS() + + const upcomingDaysEventsArray = entry.getIn(['data', 'upcomingDaysEvents', 'events']) + const upcomingDaysEvents = upcomingDaysEventsArray ? upcomingDaysEventsArray.toJS() : [] + + const upcomingMeetupsArray = entry.getIn(['data', 'upcomingMeetups', 'meetups']) + const upcomingMeetups = upcomingMeetupsArray ? upcomingMeetupsArray.toJS() : [] + + const pastMeetupsArray = entry.getIn(['data', 'pastMeetups', 'meetups']) + const pastMeetups = pastMeetupsArray ? pastMeetupsArray.toJS() : [] + + const communityEventsArray = entry.getIn(['data', 'communityEvents', 'events']) + const communityEvents = communityEventsArray ? communityEventsArray.toJS() : [] + + if (data) { + return ( + ({ + ...meetup, + background: { + publicURL: meetup.background + } + })) + }} + pastMeetups={{ + title: entry.getIn(['data', 'pastMeetups', 'title']), + meetups: pastMeetups.map(meetup => ({ + ...meetup, + background: { + publicURL: meetup.background + } + })) + }} + communityEvents={{ + title: entry.getIn(['data', 'communityEvents', 'title']), + events: communityEvents + }} + bottomBanner={{ + background: { + publicURL: entry.getIn(['data', 'bottomBanner', 'background']) + }, + title: entry.getIn(['data', 'bottomBanner', 'title']), + button: { + link: entry.getIn(['data', 'bottomBanner', 'button', 'link']), + text: entry.getIn(['data', 'bottomBanner', 'button', 'text']) + } + }} + isLoggedUser={false} + /> + ) + } else { + return
Loading...
+ } +} + +OpenInfraDaysPagePreview.propTypes = { + entry: PropTypes.shape({ + getIn: PropTypes.func, + }), + getAsset: PropTypes.func, +} + +export default OpenInfraDaysPagePreview \ No newline at end of file diff --git a/src/cms/preview-templates/SummitLandingPagePreview.js b/src/cms/preview-templates/SummitLandingPagePreview.js new file mode 100644 index 000000000..6f68b6ac5 --- /dev/null +++ b/src/cms/preview-templates/SummitLandingPagePreview.js @@ -0,0 +1,112 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { SummitLandingPageTemplate } from '../../templates/summit-landing-page' + +const SummitLandingPagePreview = ({ entry }) => { + const data = entry.getIn(['data']).toJS() + + const pastSummitsArray = entry.getIn(['data', 'pastSummits', 'summits']) + const pastSummits = pastSummitsArray ? pastSummitsArray.toJS() : [] + + const middleBannerArray = entry.getIn(['data', 'middleBanner']) + const middleBanner = middleBannerArray ? middleBannerArray.toJS() : [] + + const previousSummitsArray = entry.getIn(['data', 'previousSummits', 'summits']) + const previousSummits = previousSummitsArray ? previousSummitsArray.toJS() : [] + + if (data) { + return ( + ({ + ...summit, + background: { + publicURL: summit.background + } + })) + }} + middleBanner={middleBanner.map(banner => ({ + ...banner, + image: { + publicURL: banner.image + } + }))} + previousSummits={{ + title: entry.getIn(['data', 'previousSummits', 'title']), + summits: previousSummits.map(summit => ({ + ...summit, + image: { + publicURL: summit.image + } + })) + }} + bottomBanner={{ + background: { + publicURL: entry.getIn(['data', 'bottomBanner', 'background']) + }, + title: entry.getIn(['data', 'bottomBanner', 'title']), + button: { + link: entry.getIn(['data', 'bottomBanner', 'button', 'link']), + text: entry.getIn(['data', 'bottomBanner', 'button', 'text']) + } + }} + isLoggedUser={false} + /> + ) + } else { + return
Loading...
+ } +} + +SummitLandingPagePreview.propTypes = { + entry: PropTypes.shape({ + getIn: PropTypes.func, + }), + getAsset: PropTypes.func, +} + +export default SummitLandingPagePreview \ No newline at end of file diff --git a/src/components/BottomBanner/index.jsx b/src/components/BottomBanner/index.jsx index f4b6a7fef..d9ba91a17 100644 --- a/src/components/BottomBanner/index.jsx +++ b/src/components/BottomBanner/index.jsx @@ -1,12 +1,11 @@ import React from 'react' -import background from '../../../static/img/summit-landing/subscribe/subscribe-banner-bg.png' import './styles.scss'; import RoundedButton from '../RoundedButton'; -const BottomBanner = ({ title, button }) => ( +const BottomBanner = ({ background, title, button }) => ( -
+
diff --git a/src/components/HeaderImage.js b/src/components/HeaderImage.js index 07a3f211a..b7d1f9e17 100644 --- a/src/components/HeaderImage.js +++ b/src/components/HeaderImage.js @@ -7,9 +7,9 @@ const HeaderImage = ({backgroundImage, overview, logo, caption}) => {
-

{overview}

+

{logo.alt} -

{caption}

+

diff --git a/src/components/HomeV2/OpenInfraEventsSection.js b/src/components/HomeV2/OpenInfraEventsSection.js index a08f367c5..70fff50e8 100644 --- a/src/components/HomeV2/OpenInfraEventsSection.js +++ b/src/components/HomeV2/OpenInfraEventsSection.js @@ -5,7 +5,7 @@ import RoundedButton from '../RoundedButton'; import calendarIcon from '../../../static/img/summit-landing/icons/calendar-icon.svg' import locationIcon from '../../../static/img/summit-landing/icons/location-icon.svg' -const OpenInfraEventsSection = () => { +const OpenInfraEventsSection = ({events}) => { const arrowIcon = (color) => { return ( @@ -17,42 +17,6 @@ const OpenInfraEventsSection = () => { ) } - const OpenInfraEventsData = [ - { - link: 'https://openinfraasia.org', - logo: '/img/homeV2/events-images/logo-asia.svg', - text: 'openinfraasia.org', - color: '#FFB325', - }, - { - link: 'https://openinfraeurope.org', - logo: '/img/homeV2/events-images/logo-europe.svg', - text: 'openinfraeurope.org', - color: '#2CB4E2', - } - ]; - - const UpcomingEventsData = [ - { - image: '/img/homeV2/events-images/openinfra-asia-img-2026.png', - date: "September 8-9, 2026", - location: "Shanghai International Convention Center Oriental Riverside Hotel", - button: { - link: 'https://www.lfasiallc.com/kubecon-cloudnativecon-openinfra-summit-china/', - text: 'LEARN MORE' - } - }, - { - image: '/img/homeV2/events-images/openinfra-europe-img-2025.png', - date: 'October 17-19, 2025', - location: 'École Polytechnique, Paris-Saclay, France', - button: { - link: 'https://www.youtube.com/playlist?list=PLKqaoAnDyfgr91wN_12nwY321504Ctw1s', - text: 'WATCH VIDEOS' - } - } - ] - return (
@@ -61,11 +25,11 @@ const OpenInfraEventsSection = () => {
OPEN SOURCE INFRASTRUCTURE
- {OpenInfraEventsData.map(event => { + {events.openInfraEventsData.map(event => { return (
- + {arrowIcon(event.color)} {event.text}
@@ -75,10 +39,10 @@ const OpenInfraEventsSection = () => {
OPENINFRA community events
- {UpcomingEventsData.map(event => { + {events.upcomingEvents.map(event => { return (
- + {event.date} @@ -96,4 +60,4 @@ const OpenInfraEventsSection = () => { ); } -export default OpenInfraEventsSection +export default OpenInfraEventsSection \ No newline at end of file diff --git a/src/components/MeetupBanner/index.jsx b/src/components/MeetupBanner/index.jsx index 2a4bdc60f..508f470cb 100644 --- a/src/components/MeetupBanner/index.jsx +++ b/src/components/MeetupBanner/index.jsx @@ -6,19 +6,15 @@ import RoundedButton from '../RoundedButton' import './styles.scss' -const MeetupBanner = () => { +const MeetupBanner = ({ background, logo, button, text }) => { return (
- +
- - - Interested in hosting a Meetup?
- Contact us at events@openinfra.dev -
+ +
diff --git a/src/components/MoreEventsSection/index.jsx b/src/components/MoreEventsSection/index.jsx index dd0f4897b..de27e2d63 100644 --- a/src/components/MoreEventsSection/index.jsx +++ b/src/components/MoreEventsSection/index.jsx @@ -9,39 +9,21 @@ const COLORS = [ "#28a4db" ]; -const EVENTS = [ - {name: "OpenStack 15th Birthday Celebrations!", link: "https://www.openstack.org/blog/celebrating-15-years-of-openstack/", date: "All Year Long", location: "All Around the Globe"}, - {name: "KubeCon + CloudNativeCon China", link: "https://events.linuxfoundation.org/kubecon-cloudnativecon-china/", date: "June 10-11, 2025", location: "Hong Kong"}, - {name: "Open Telco Cloud Summit", link: "https://open.telcocloud-summit.com/event/585d8b6f-6494-4698-bb78-840206d3d3fa/summary?rt=svQDGBmL7k24CyoTCtWc2Q", date: "June 12, 2025", location: "Virtual"}, - {name: "KubeCon + CloudNativeCon Japan", link: "https://events.linuxfoundation.org/kubecon-cloudnativecon-japan/", date: "June 16-17, 2025", location: "Tokyo, JP"}, - {name: "Open Source Summit NA", link: "https://events.linuxfoundation.org/open-source-summit-north-america/ ", date: "June 23-25, 2025", location: "Denver, CO"}, - {name: "OpenInfra Day Vietnam", link: "https://www.vietopeninfra.org/void2025 ", date: "June 28, 2025", location: "Ho Chi Minh, VN "}, - {name: "OpenInfra Day Korea", link: "https://2025.openinfradays.kr/", date: "August 26, 2025", location: "Seoul, KR"}, - {name: "Cloud Operator Days Tokyo", link: "https://cloudopsdays.com/", date: "July 3 - September 5, 2025", location: "Tokyo, JP"}, - {name: "OpenInfra Days Indonesia", link: "https://www.linkedin.com/posts/openinfraid_openinfra-oid2025-openinfraid-ugcPost-7319909725951643648-UeNl/?utm_source=share&utm_medium=member_desktop&rcm=ACoAACkFmC4BAjY_ZaQQLbuPSV1vjFRU6hVE5Pk", date: "July 19, 2025", location: "Yogyakarta, ID"}, - {name: "OpenInfra User Group Colombia at KCD", link: "https://www.meetup.com/colombia-openinfra-user-group/events/307096751/", date: "August 29, 2025", location: "Bogotá, CO"}, - {name: "OpenInfra Summit Europe 2025", link: "https://summit2025.openinfra.org/", date: "October 17-19, 2025", location: "Paris-Saclay, FR"}, - {name: "PyTorch Conference 2025", link: "https://events.linuxfoundation.org/pytorch-conference/?__hstc=132719121.0b101d54206edc20977df92c2e1046c4.1742517488370.1742517488370.1742517488370.1&__hssc=132719121.2.1742517488370&__hsfp=1219773955", date: "October 22-23, 2025", location: "San Francisco, CA"}, - {name: "KubeCon EU + CloudNativeCon NA", link: "https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/", date: "November 10-13", location: "Atlanta, GA"}, -]; - -const MoreEventsSection = () => { +const MoreEventsSection = ({ title, events }) => { return (
-

- More Open Source Community Events -

+

- {EVENTS.map((event, idx) => ( -
+ {events.map((event, idx) => ( +
{event.link ? <> {event.name} : - event.name} + event.name}
date @@ -60,4 +42,4 @@ const MoreEventsSection = () => { ) } -export default MoreEventsSection +export default MoreEventsSection \ No newline at end of file diff --git a/src/components/MoreEventsSection/styles.scss b/src/components/MoreEventsSection/styles.scss index 066c3c1fd..0c0db37f1 100644 --- a/src/components/MoreEventsSection/styles.scss +++ b/src/components/MoreEventsSection/styles.scss @@ -86,6 +86,8 @@ font-size: 12px; position: relative; padding-left: 36px; + display: flex; + align-items: center; @media (min-width: 720px) { font-size: 16px; diff --git a/src/components/OpeninfraDays/OpeninfraDaysCard/index.jsx b/src/components/OpeninfraDays/OpeninfraDaysCard/index.jsx index 288b253a2..acaa2acad 100644 --- a/src/components/OpeninfraDays/OpeninfraDaysCard/index.jsx +++ b/src/components/OpeninfraDays/OpeninfraDaysCard/index.jsx @@ -12,7 +12,7 @@ const OpenInfraDaysCard = ({background, name, date, location, coming_soon, link return (
-
+
{name && <> diff --git a/src/components/OpeninfraDays/index.jsx b/src/components/OpeninfraDays/index.jsx index 1dbe9f0de..b80807df0 100644 --- a/src/components/OpeninfraDays/index.jsx +++ b/src/components/OpeninfraDays/index.jsx @@ -3,13 +3,28 @@ import OpenInfraDaysCard from "./OpeninfraDaysCard"; import './styles.scss'; -const OpenInfraDays = ({ title, events }) => { +const OpenInfraDays = ({ title, events, banner }) => { return ( -
+

{title}

+ {banner && +
+
+
+
+

+ {banner.button?.text && + + {banner.button.text} + + } +

+
+
+ }
- {events.map(s => + {events?.map(s => )}
diff --git a/src/components/OpeninfraDays/styles.scss b/src/components/OpeninfraDays/styles.scss index a498fd6e8..92486714c 100644 --- a/src/components/OpeninfraDays/styles.scss +++ b/src/components/OpeninfraDays/styles.scss @@ -25,3 +25,97 @@ justify-content: center; } } + +/* ------------------------------------------------------------ *\ + Banner +\* ------------------------------------------------------------ */ + +.openinfra-days-banner { + margin-bottom: 40px; + .container { + background-color: #eeeeee; + border-radius: 16px; + height: 100%; + position: relative; + padding: 0; + overflow: hidden; + + .body { + margin: 55px 50px; + text-align: center; + font-size: 18px; + line-height: 150%; + font-family: "Roboto Flex", sans-serif; + display: flex; + flex-direction: column; + align-items: center; + color: #161616; + + .title { + text-transform: uppercase; + font-family: "Roboto Condensed", sans-serif; + font-weight: bold; + font-size: 44px; + line-height: 110%; + text-transform: uppercase; + margin: 30px 0; + + @media (max-width: 768px) { + font-size: 40px; + line-height: 50px; + } + } + + p { + max-width: 840px; + margin-bottom: 45px; + } + } + + .button { + background-color: #e61e24; + display: inline-flex; + color: #ffffff; + font-family: "Jura", sans-serif; + font-size: 18px; + line-height: 135%; + font-weight: 700; + border-radius: 40px; + letter-spacing: 0.9px; + height: 72px; + padding: 0 66px; + align-content: center; + flex-wrap: wrap; + justify-content: center; + text-transform: uppercase; + border: none; + margin-top: 22px; + .btn-arrow { + position: relative; + right: 15px; + &:after { + background-image: url("/img/homeV2/secondary-arrow-white.svg"); + position: absolute; + content: ""; + right: -30px; + height: 30px; + width: 30px; + top: -2px; + } + } + &:hover, + &:focus { + text-decoration: none; + color: #ffffff; + } + @media (max-width: 768px) { + height: auto; + width: auto; + padding: 15px 30px; + span { + font-size: 14px; + } + } + } + } +} diff --git a/src/components/OpeninfraDaysAgenda/index.jsx b/src/components/OpeninfraDaysAgenda/index.jsx index a3bb58581..ba259244c 100644 --- a/src/components/OpeninfraDaysAgenda/index.jsx +++ b/src/components/OpeninfraDaysAgenda/index.jsx @@ -1,51 +1,48 @@ import React from 'react' -import {StaticImage} from "gatsby-plugin-image"; +import { StaticImage } from "gatsby-plugin-image"; import './styles.scss'; import RoundedButton from '../RoundedButton'; -const OpeninfraDaysAgenda = ({title = "", items, learnMoreLink}) => { +const OpeninfraDaysAgenda = ({ title = "", items, headerImage, learnMoreLink }) => { return (
-

- {title} -

+

- + {headerImage.alt}
{items.map(day => (
-

{day.title}

+

{day.date &&

- date + date {day.date}

} {day.location &&

- location - + location +

} {day.registration &&

- registration - + registration +

} {day.sponsor &&

- sponsor - + sponsor +

} {day.coming_soon &&

- soon + soon More info coming soon

} @@ -54,11 +51,11 @@ const OpeninfraDaysAgenda = ({title = "", items, learnMoreLink}) => {

{learnMoreLink && - + }

) } -export default OpeninfraDaysAgenda +export default OpeninfraDaysAgenda \ No newline at end of file diff --git a/src/components/PastSummits/index.jsx b/src/components/PastSummits/index.jsx index 491c12f45..32641f2bb 100644 --- a/src/components/PastSummits/index.jsx +++ b/src/components/PastSummits/index.jsx @@ -4,51 +4,14 @@ import "./styles.scss"; import SummitCard from "../SummitCard"; -const PAST_SUMMITS = [ - { - key: "europe-25", - background: "/img/summit-landing/cards/summit-europe-25-2.png", - date: "October 17-19, 2025", - location: "École Polytechnique, Paris-Saclay, France", - notification: { - text: " ", - button: { - link: "https://summit2025.openinfra.org", - text: "Learn More", - }, - }, - }, - { - key: "asia-24", - background: "/img/summit-landing/cards/summit-asia.png", - date: "September 3 & 4, 2024", - location: "Suwon Convention Center, Suwon, South Korea", - notification: { - text: " ", - button: { - link: - "https://youtube.com/playlist?list=PLKqaoAnDyfgqjY-vzt45oayXLa4aLpMRU&feature=shared", - text: "Learn More", - }, - }, - }, - // { - // key: 'europe-25', - // background: '/img/summit-landing/cards/summit-europe25.png', - // date: '2025', - // location: 'Berlin, Germany', - // notification: null - // } -]; - -const PastSummits = ({ title }) => { +const PastSummits = ({ title, summits }) => { return (
{title &&
{title}
} - {PAST_SUMMITS.map((summit) => ( + {summits.map((summit) => ( ))} @@ -56,4 +19,4 @@ const PastSummits = ({ title }) => { ); }; -export default PastSummits; +export default PastSummits; \ No newline at end of file diff --git a/src/components/PreviousSummits/SummitCardLight/index.jsx b/src/components/PreviousSummits/SummitCardLight/index.jsx index 960eb6cae..429f753db 100644 --- a/src/components/PreviousSummits/SummitCardLight/index.jsx +++ b/src/components/PreviousSummits/SummitCardLight/index.jsx @@ -6,7 +6,7 @@ import RoundedButton from '../../RoundedButton'; const SummitCardLight = ({ summit }) => { return (
- {summit.name} + {summit.name}

{summit.name}

{summit.date}

diff --git a/src/components/PreviousSummits/index.jsx b/src/components/PreviousSummits/index.jsx index 8a51ec7fa..7e8f01e25 100644 --- a/src/components/PreviousSummits/index.jsx +++ b/src/components/PreviousSummits/index.jsx @@ -6,19 +6,11 @@ import './styles.scss'; import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick-theme.css"; -const PREVIOUS_SUMMITS = [ - {name: 'Suwon, South Korea', date: 'September 3-4, 2024', image: '/img/summit-landing/summits/suwon.png', link: 'https://youtube.com/playlist?list=PLKqaoAnDyfgqjY-vzt45oayXLa4aLpMRU&si=ABKwbAi-ZDTuAJPP '}, - {name: 'Vancouver, Canada', date: 'June 13-15, 2023', image: '/img/summit-landing/summits/vancouver.png', link: '/summit/vancouver-2023'}, - {name: 'Berlin, Germany', date: 'June 7-9, 2022', image: '/img/summit-landing/summits/berlin.png', link: '/summit/berlin-2022'}, - {name: 'Denver, Colorado', date: 'April 29 - May 1, 2019', image: '/img/summit-landing/summits/denver.png', link: 'https://www.openstack.org/summit/denver-2019'}, - {name: 'Shanghai, China', date: 'November 4-6, 2019', image: '/img/summit-landing/summits/shanghai.png', link: 'https://www.openstack.org/summit/shanghai-2019'} -]; - -const PreviousSummits = () => { +const PreviousSummits = ({title, summits}) => { return (
- - {PREVIOUS_SUMMITS.map(summit => + + {summits.map(summit => )} diff --git a/src/components/SponsorBanner.js b/src/components/SponsorBanner.js index 39e7ee8c2..8b106135f 100644 --- a/src/components/SponsorBanner.js +++ b/src/components/SponsorBanner.js @@ -1,20 +1,15 @@ import React from 'react' -import background from '../../static/img/summit-landing/sponsor-banner-bg.png'; import '../style/modules/_sponsor_banner.scss' import RoundedButton from './RoundedButton'; -const SponsorBanner = () => { +const SponsorBanner = ({ upperText, title, image, button }) => { return ( -
+
- Become a Sponsor - - Want to support
- the next decade of open
- infrastructure? -
- + {upperText} + +
) diff --git a/src/components/SubHeader.js b/src/components/SubHeader.js index 3eba1b701..ca2b2ad85 100644 --- a/src/components/SubHeader.js +++ b/src/components/SubHeader.js @@ -1,43 +1,28 @@ import React from 'react' -import {StaticImage} from "gatsby-plugin-image" import '../style/modules/_sub_header.scss' -const SubHeader = () => { +const SubHeader = ({ overview, title, text, badge, footer }) => { return (
-
A new summit format
-
- WHAT IS A COMMUNITY POWERED OPENINFRA SUMMIT? -
-

- The OpenInfra community, a global collaboration of 110,000 people across 187 countries, builds and operates - infrastructure powered by open source software. -

-

- For the past decade, the OpenInfra Summit has provided a - centralized opportunity for the global community to collaborate. To build the next decade of open - infrastructure, OpenInfra Summits will be developed by the community for the community. Community volunteers - will provide an opportunity to collaborate directly with the people building and running open source - infrastructure using Linux, OpenStack, Kubernetes and 30+ other technologies. Attendees typically represent - 60 countries and hundreds of organizations and participate in keynote presentations from industry leaders, - breakout presentations, Forum discussions with operators and developers, and a busy hallway track of open - source enthusiasts. -

- {overview}
+
+
+ powered community badge
-
) } -export default SubHeader +export default SubHeader \ No newline at end of file diff --git a/src/components/UpcomingSummits/index.jsx b/src/components/UpcomingSummits/index.jsx index f02e34611..3c6c81273 100644 --- a/src/components/UpcomingSummits/index.jsx +++ b/src/components/UpcomingSummits/index.jsx @@ -2,27 +2,11 @@ import React from "react"; import SummitCard from "../SummitCard"; import "./styles.scss"; -const UPCOMING_SUMMITS = [ - { - key: "asia-26", - background: "/img/summit-landing/cards/summit-asia-26.png", - date: "September 8-9, 2026", - location: "Shanghai International Convention Center Oriental Riverside Hotel", - notification: { - text: " ", - button: { - link: "https://www.lfasiallc.com/kubecon-cloudnativecon-openinfra-summit-china/", - text: "Learn More", - }, - }, - } -]; - -const UpcomingSummits = ({ title }) => { +const UpcomingSummits = ({ title, summits }) => { return (
{title &&
{title}
} - {UPCOMING_SUMMITS.map((summit) => ( + {summits.map((summit) => ( { ); }; -export default UpcomingSummits; +export default UpcomingSummits; \ No newline at end of file diff --git a/src/content/meetup-banner.json b/src/content/meetup-banner.json new file mode 100644 index 000000000..a43b1d75a --- /dev/null +++ b/src/content/meetup-banner.json @@ -0,0 +1,9 @@ +{ + "background": "/img/summit-landing/meetup/meetup-banner.png", + "logo": "/img/summit-landing/meetup/openinfra-usergroup.svg", + "button": { + "link": "https://www.meetup.com/pro/openinfradev/", + "text": "find your local meetup" + }, + "text": "Interested in hosting a Meetup?
Contact us at events@openinfra.dev" +} diff --git a/src/content/upcoming-summits.json b/src/content/upcoming-summits.json new file mode 100644 index 000000000..dd96913f2 --- /dev/null +++ b/src/content/upcoming-summits.json @@ -0,0 +1,18 @@ +{ + "title": "Upcoming OpenInfra Summit", + "summits": [ + { + "key": "china-26", + "background": "/img/summit-landing/cards/summit-asia-26.png", + "date": "September 8-9, 2026", + "location": "Shanghai International Convention Center Oriental Riverside Hotel", + "notification": { + "text": " ", + "button": { + "link": "https://www.lfasiallc.com/kubecon-cloudnativecon-openinfra-summit-china/", + "text": "Learn More" + } + } + } + ] +} diff --git a/src/pages/days/index.md b/src/pages/days/index.md index 99ad68719..c72175803 100644 --- a/src/pages/days/index.md +++ b/src/pages/days/index.md @@ -4,10 +4,108 @@ seo: description: >- A special event close to your city image: /img/OpenInfra-icon-white.jpg - title: 'OpenInfra Days' - twitterUsername: '@OpenInfraDev' - url: 'https://openinfra.dev/days' + title: "OpenInfra Days" + twitterUsername: "@OpenInfraDev" + url: "https://openinfra.dev/days" title: OpenInfra Days subTitle: by the community, for the community +headerImageUrl: /img/openinfra-days/Header.svg +upcomingDaysEvents: + isVisible: false + title: | + Upcoming
Openinfra Days + headerImage: + img: /img/openinfra-days/days-asia.png + alt: "asia-days" + events: + - title: | + OpenInfra Days Vietnam + date: "July 26, 2025" + location: "Hanoi, VN" + registration: | + The CFP closes June 15 + sponsor: | + Sponsor this event + - title: | + OpenInfra Days Indonesia + date: "July 19, 2025" + location: "Yogyakarta, ID" + registration: | + The CFP closes June 27 + sponsor: | + Sponsor this event + - title: | + OpenInfra Days Korea + date: "August 26th, 2025" + location: "Seoul, KR" + registration: | + The CFP closes June 15 + sponsor: | + Sponsor this event + - title: | + OpenInfra Days China + date: "November 15, 2025" + location: "Hangzhou, CN" + registration: | + 'The CFP closes September 21' + - title: | + Cloud Operator Days Tokyo + date: "July 2025 (Online Sessions Available), Sept 5, 2025 (Closing Ceremony)" + location: "Tokyo, JP" + registration: | + The CFP closes April 30 + sponsor: | + Sponsor this event +upcomingMeetups: + title: "Upcoming OpenInfra Days" + banner: + title: 2026 OPENINFRA DAYS COMING SOON + content: Sign up to get notified when the list of 2026 OpenInfra Days is released! + button: + text: SIGN UP TO BE NOTIFIED + url: https://openinfra.org/newsletter/ + meetups: +pastMeetups: + title: "Past Openinfra Days" + meetups: + - background: /img/openinfra-days/openinfra-days-cards/kenya_3.svg + date: "September 6, 2025" + location: "Nairobi, Kenya" + link: "https://www.meetup.com/kenya-openinfra-user-group/" + - background: /img/openinfra-days/openinfra-days-cards/sweden-meetup.svg + date: "May 22, 2025" + location: "Stockholm, Sweden" + link: "https://www.meetup.com/openinfra-user-group-sweden/events/306139678/" + - background: /img/openinfra-days/openinfra-days-cards/oid-pasadena.png + name: "North America" + date: "March 6 & 7, 2025" + location: "Pasadena, California" + link: "https://www.youtube.com/live/W9OmGdtJAAE?si=OO_WjYr7A6ktAv5A" +communityEvents: + title: "More Open Source Community Events" + events: + - name: FOSDEM + link: "https://fosdem.org/2026/" + date: "31 January & 1 February 2026" + location: "Brussels, BE" + - name: SCALE 23X + link: "https://www.socallinuxexpo.org/scale/23x" + date: "March 5-8, 2026" + location: "Pasadena, CA" + - name: KUBECON + CLOUDNATIVECON EUROPE + link: "https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" + date: "March 23–26, 2026" + location: "Amsterdam, NL" + - name: OPENINFRA SUMMIT ASIA + KUBECON + CLOUDNATIVECON CHINA + link: "https://www.lfasiallc.com/kubecon-cloudnativecon-openinfra-summit-china/" + date: "September 8-9, 2026" + location: "Shanghai, CN" +bottomBanner: + background: /img/summit-landing/subscribe/subscribe-banner-bg.png + title: | + Interested in becoming
a Community Organizer?
+ Contact us at events@openinfra.dev + button: + link: "mailto:events@openinfra.dev" + text: "Events Contact" --- - diff --git a/src/pages/index.md b/src/pages/index.md index 1fba7ad68..3aa04f3cb 100644 --- a/src/pages/index.md +++ b/src/pages/index.md @@ -179,4 +179,27 @@ sponsor: image: //img/companies/_New/Platinum/WNDRVR.png title: Platinum Members title: Companies supporting the OpenInfra Foundation ---- +openInfraEvents: + openInfraEventsData: + - link: 'https://openinfraasia.org' + logo: /img/homeV2/events-images/logo-asia.svg + text: 'openinfraasia.org' + color: '#FFB325' + - link: 'https://openinfraeurope.org' + logo: /img/homeV2/events-images/logo-europe.svg + text: 'openinfraeurope.org' + color: '#2CB4E2' + upcomingEvents: + - image: /img/homeV2/events-images/openinfra-asia-img-2026.png + date: "September 8-9, 2026" + location: "Shanghai International Convention Center Oriental Riverside Hotel" + button: + link: 'https://www.lfasiallc.com/kubecon-cloudnativecon-openinfra-summit-china/' + text: 'LEARN MORE' + - image: /img/homeV2/events-images/openinfra-europe-img-2025.png + date: 'October 17-19, 2025' + location: 'École Polytechnique, Paris-Saclay, France' + button: + link: 'https://www.youtube.com/playlist?list=PLKqaoAnDyfgr91wN_12nwY321504Ctw1s' + text: 'WATCH VIDEOS' +--- \ No newline at end of file diff --git a/src/pages/summit/index.md b/src/pages/summit/index.md index 6b53ddb10..bef15046b 100644 --- a/src/pages/summit/index.md +++ b/src/pages/summit/index.md @@ -9,5 +9,121 @@ seo: url: 'https://openinfra.dev/summit/' title: OpenInfra Summit subTitle: by the community, for the community +headerImage: + backgroundImage: /img/summit-landing/summit-landing-hero.png + overview: | + Rediscover
THE SUMMIT EXPERIENCE + caption: By the Community. For the Community. + logo: + src: /img/summit-landing/openinfra-logo.png + alt: Openinfra logo +subHeader: + overview: A new summit format + title: | + WHAT IS A COMMUNITY POWERED OPENINFRA SUMMIT? + text: | +

+ The OpenInfra community, a global collaboration of 110,000 people across 187 countries, builds and operates + infrastructure powered by open source software. +

+

+ For the past decade, the OpenInfra Summit has provided a + centralized opportunity for the global community to collaborate. To build the next decade of open + infrastructure, OpenInfra Summits will be developed by the community for the community. Community volunteers + will provide an opportunity to collaborate directly with the people building and running open source + infrastructure using Linux, OpenStack, Kubernetes and 30+ other technologies. Attendees typically represent + 60 countries and hundreds of organizations and participate in keynote presentations from industry leaders, + breakout presentations, Forum discussions with operators and developers, and a busy hallway track of open + source enthusiasts. +

+ badge: + src: /img/summit-landing/powered_community.png + alt: powered community badge + footer: + src: /img/summit-landing/community.png + alt: community +pastSummits: + title: Past OpenInfra Summits + summits: + - key: "europe-25" + background: /img/summit-landing/cards/summit-europe-25-2.png + date: "October 17-19, 2025" + location: "École Polytechnique, Paris-Saclay, France" + notification: + text: " " + button: + link: "https://summit2025.openinfra.org" + text: "Learn More" + - key: "asia-24" + background: /img/summit-landing/cards/summit-asia.png + date: "September 3 & 4, 2024" + location: "Suwon Convention Center, Suwon, South Korea" + notification: + text: " " + button: + link: "https://youtube.com/playlist?list=PLKqaoAnDyfgqjY-vzt45oayXLa4aLpMRU&feature=shared" + text: "Learn More" +middleBanner: + - title: inclusive. diverse. open + text: | + We are a diverse community of professionals, and the OpenInfra Summit organizers are dedicated to providing an + inclusive and safe Summit experience for everyone. View the OpenInfra Summit Code + of Conduct for more information.

The OpenInfra Foundation’s Travel Support Program facilitates the + participation of key contributors to OpenInfra events by covering the costs for their travel and accommodation. + If you are a key contributor to a project supported by the OpenInfra Foundation and your company does not cover + the costs of your travel and accommodation to the event, you can apply for the + Travel Support Program.

+ Want to support the OpenInfra Travel Support Program? Donations + made are directly used to fund active contributors to OpenInfra events around the world. + image: /img/summit-landing/middle-banner/middle-banner-1.png + imageFirst: false + - title: have questions? + text: Contact the Openinfra Foundation and OpenInfra Summit organizers. + button: + text: "Contact us" + link: "mailto:summit@openinfra.dev" + image: /img/summit-landing/middle-banner/middle-banner-2.png + imageFirst: true +sponsorBanner: + upperText: Become a Sponsor + image: /img/summit-landing/sponsor-banner-bg.png + title: | + Want to support
+ the next decade of open
+ infrastructure? + button: + text: More Info + link: "/events/sponsorship" +previousSummits: + title: Previous OpenInfra Summits + summits: + - name: 'Suwon, South Korea' + date: 'September 3-4, 2024' + image: /img/summit-landing/summits/suwon.png + link: 'https://youtube.com/playlist?list=PLKqaoAnDyfgqjY-vzt45oayXLa4aLpMRU&si=ABKwbAi-ZDTuAJPP ' + - name: 'Vancouver, Canada' + date: 'June 13-15, 2023' + image: /img/summit-landing/summits/vancouver.png + link: '/summit/vancouver-2023' + - name: 'Berlin, Germany' + date: 'June 7-9, 2022' + image: /img/summit-landing/summits/berlin.png + link: '/summit/berlin-2022' + - name: 'Denver, Colorado' + date: 'April 29 - May 1, 2019' + image: /img/summit-landing/summits/denver.png + link: 'https://www.openstack.org/summit/denver-2019' + - name: 'Shanghai, China' + date: 'November 4-6, 2019' + image: /img/summit-landing/summits/shanghai.png + link: 'https://www.openstack.org/summit/shanghai-2019' +bottomBanner: + background: /img/summit-landing/subscribe/subscribe-banner-bg.png + title: | + Subscribe to the OpenInfra newsletter
+ & keep up to date with the latest
+ OpenInfra Summit news + button: + link: "https://openinfra.dev/newsletter/" + text: "Sign Me Up" --- - diff --git a/src/style/modules/_sub_header.scss b/src/style/modules/_sub_header.scss index 5af8d920b..6749c18f9 100644 --- a/src/style/modules/_sub_header.scss +++ b/src/style/modules/_sub_header.scss @@ -93,6 +93,7 @@ background-color: transparent; padding: 0; margin: 0; + display: block; @media(min-width: 767px) { width: 150px; diff --git a/src/templates/index-page.js b/src/templates/index-page.js index 85cdeada4..e7ce0074b 100644 --- a/src/templates/index-page.js +++ b/src/templates/index-page.js @@ -20,7 +20,8 @@ import OpenInfraEventsSection from '../components/HomeV2/OpenInfraEventsSection' export const IndexPageTemplate = ({ isLoggedUser, - header + header, + openInfraEvents }) => (
@@ -46,7 +47,7 @@ export const IndexPageTemplate = ({
- +
@@ -79,6 +80,7 @@ const IndexPage = ({ isLoggedUser, data }) => { projects={frontmatter.projects} people={frontmatter.people} sponsor={frontmatter.sponsor} + openInfraEvents={frontmatter.openInfraEvents} /> ) @@ -233,6 +235,27 @@ export const pageQuery = graphql` } } } + openInfraEvents { + openInfraEventsData { + link + logo { + publicURL + } + text + color + } + upcomingEvents { + image { + publicURL + } + date + location + button { + link + text + } + } + } } } } diff --git a/src/templates/open-infra-days-page.js b/src/templates/open-infra-days-page.js index c71b7a32e..5bd0e2283 100644 --- a/src/templates/open-infra-days-page.js +++ b/src/templates/open-infra-days-page.js @@ -13,60 +13,24 @@ import SubHeaderDays from "../components/SubHeaderDays"; import MoreEventsSection from "../components/MoreEventsSection"; import OpeninfraDaysAgenda from "../components/OpeninfraDaysAgenda"; import OpenInfraDays from "../components/OpeninfraDays"; -import hero from '../../static/img/openinfra-days/OI-Days-1920x325.11.svg'; import UpcomingSummits from "../components/UpcomingSummits"; -const upcomingItemsAsia = [ - { title: OpenInfra Days Vietnam, - date: "July 26, 2025", - location: "Hanoi, VN", - registration: 'The CFP closes June 15', - sponsor: 'Sponsor this event' - }, - { - title: OpenInfra Days Indonesia, - date: "July 19, 2025", - location: "Yogyakarta, ID", - registration: 'The CFP closes June 27', - sponsor: 'Sponsor this event' - }, - { title: OpenInfra Days Korea, - date: "August 26th, 2025", - location: "Seoul, KR", - registration: 'The CFP closes June 15', - sponsor: 'Sponsor this event' - }, - { - title: OpenInfra Days China, - date: "November 15, 2025", - location: "Hangzhou, CN", - registration: 'The CFP closes September 21' - }, - { - title: Cloud Operator Days Tokyo, - date: "July 2025 (Online Sessions Available), Sept 5, 2025 (Closing Ceremony)", - location: "Tokyo, JP", - registration: 'The CFP closes April 30', - sponsor: 'Sponsor this event' - }, -]; - -const upcomingMeetups = [ - { background: '/img/openinfra-days/openinfra-days-cards/kenya_3.svg', date: 'September 6, 2025', location: 'Nairobi, Kenya', link: 'https://www.meetup.com/kenya-openinfra-user-group/'} -]; - -const pastMeetups = [ - { background: '/img/openinfra-days/openinfra-days-cards/sweden-meetup.svg', date: 'May 22, 2025', location: 'Stockholm, Sweden', link: 'https://www.meetup.com/openinfra-user-group-sweden/events/306139678/'}, - { background: '/img/openinfra-days/openinfra-days-cards/oid-pasadena.png', name: 'North America', date: 'March 6 & 7, 2025', location: 'Pasadena, California', link: 'https://www.youtube.com/live/W9OmGdtJAAE?si=OO_WjYr7A6ktAv5A '}, -] +import UpcomingSummitsData from "../content/upcoming-summits.json" +import MeetupBannerData from "../content/meetup-banner.json" export const OpenInfraDaysPageTemplate = ({ - isLoggedUser, - title, - subTitle, - content, - contentComponent - }) => { + isLoggedUser, + title, + subTitle, + content, + contentComponent, + headerImageUrl, + upcomingDaysEvents, + upcomingMeetups, + pastMeetups, + communityEvents, + bottomBanner +}) => { return (
@@ -74,21 +38,24 @@ export const OpenInfraDaysPageTemplate = ({
- - - Upcoming
Openinfra Days} - items={upcomingItemsAsia} - /> - - - - - + + + {upcomingDaysEvents.isVisible && + + } + + + + + a Community Organizer?
Contact us at events@openinfra.dev'} - button={{link: 'mailto:events@openinfra.dev', text: 'Events Contact'}} - /> + background={bottomBanner.background} + title={bottomBanner.title} + button={bottomBanner.button} />
@@ -107,6 +74,12 @@ const OpenInfraDaysPage = ({ isLoggedUser, data }) => { subTitle={post.frontmatter.subTitle} contentComponent={HTMLContent} content={post.html} + headerImageUrl={post.frontmatter.headerImageUrl.publicURL} + upcomingDaysEvents={post.frontmatter.upcomingDaysEvents} + upcomingMeetups={post.frontmatter.upcomingMeetups} + pastMeetups={post.frontmatter.pastMeetups} + communityEvents={post.frontmatter.communityEvents} + bottomBanner={post.frontmatter.bottomBanner} isLoggedUser={isLoggedUser} /> @@ -138,7 +111,77 @@ export const OpenInfraDaysPageQuery = graphql` } title subTitle + headerImageUrl { + publicURL + } + upcomingDaysEvents { + isVisible + title + headerImage { + img { + publicURL + } + alt + } + events { + title + date + location + registration + sponsor + } + } + upcomingMeetups { + title + banner { + title + content + button { + text + url + } + } + meetups { + background { + publicURL + } + date + location + link + } + } + pastMeetups { + title + meetups { + background { + publicURL + } + name + date + location + link + } + } + communityEvents { + title + events { + name + link + date + location + } + } + bottomBanner { + background { + publicURL + } + title + button { + link + text + } + } } - } + } } -` +` \ No newline at end of file diff --git a/src/templates/sponsorship-page.js b/src/templates/sponsorship-page.js index 6838a69c4..96255ca91 100644 --- a/src/templates/sponsorship-page.js +++ b/src/templates/sponsorship-page.js @@ -267,6 +267,7 @@ export const SponsorshipPageTemplate = ({ fullwidth={false} /> & keep up to date with the latest
News about the Summits." } diff --git a/src/templates/summit-landing-page.js b/src/templates/summit-landing-page.js index e15f78aab..2a323e489 100644 --- a/src/templates/summit-landing-page.js +++ b/src/templates/summit-landing-page.js @@ -15,8 +15,8 @@ import UpcomingSummits from "../components/UpcomingSummits"; import MeetupBanner from "../components/MeetupBanner"; import BottomBanner from "../components/BottomBanner"; import MiddleBanner from "../components/MiddleBanner"; -import hero from "../../static/img/summit-landing/summit-landing-hero.png"; -import logo from "../../static/img/summit-landing/openinfra-logo.png"; +import UpcomingSummitsData from "../content/upcoming-summits.json"; +import MeetupBannerData from "../content/meetup-banner.json" export const SummitLandingPageTemplate = ({ isLoggedUser, @@ -24,6 +24,13 @@ export const SummitLandingPageTemplate = ({ subTitle, content, contentComponent, + headerImage, + subHeader, + sponsorBanner, + pastSummits, + middleBanner, + previousSummits, + bottomBanner }) => { return (
@@ -31,56 +38,48 @@ export const SummitLandingPageTemplate = ({ - Rediscover
THE SUMMIT EXPERIENCE - - } - caption="By the Community. For the Community." - logo={{ src: logo, alt: "Openinfra logo" }} + backgroundImage={headerImage.backgroundImage.publicURL} + overview={headerImage.overview} + caption={headerImage.caption} + logo={{ src: headerImage.logo.src.publicURL, alt: headerImage.logo.alt }} /> - - - - OpenInfra Summit Code of Conduct for more information.

- The OpenInfra Foundation’s Travel Support Program facilitates the participation of key contributors to - OpenInfra events by covering the costs for their travel and accommodation. If you are a key contributor to - a project supported by the OpenInfra Foundation and your company does not cover the costs of your travel - and accommodation to the event, you can apply for the - Travel Support Program.

- Want to support the OpenInfra Travel Support Program? - Donations made are directly used to fund active - contributors to OpenInfra events around the world.` - } - image={"/img/summit-landing/middle-banner/middle-banner-1.png"} - imageFirst={false} + - - - - - - & keep up to date with the latest
- OpenInfra Summit news.`} - button={{ - link: "https://openinfra.dev/newsletter/", - text: "Sign Me Up", - }} + + {middleBanner.map((banner) => )} + + + +
@@ -101,6 +100,13 @@ const SummitLandingPage = ({ isLoggedUser, data }) => { subTitle={post.frontmatter.subTitle} contentComponent={HTMLContent} content={post.html} + headerImage={post.frontmatter.headerImage} + subHeader={post.frontmatter.subHeader} + sponsorBanner={post.frontmatter.sponsorBanner} + pastSummits={post.frontmatter.pastSummits} + middleBanner={post.frontmatter.middleBanner} + previousSummits={post.frontmatter.previousSummits} + bottomBanner={post.frontmatter.bottomBanner} isLoggedUser={isLoggedUser} /> @@ -135,7 +141,134 @@ export const SummitLandingPageQuery = graphql` } title subTitle + headerImage { + backgroundImage { + childImageSharp { + fluid(maxWidth: 2048, quality: 90) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + overview + caption + logo { + src { + childImageSharp { + fluid(maxWidth: 500, quality: 80) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + alt + } + } + subHeader { + overview + title + text + badge { + src { + childImageSharp { + fluid(maxWidth: 400, quality: 80) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + alt + } + footer { + src { + childImageSharp { + fluid(maxWidth: 1200, quality: 80) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + alt + } + } + sponsorBanner { + upperText + title + image { + publicURL + } + button { + text + link + } + } + pastSummits { + title + summits { + key + background { + childImageSharp { + fluid(maxWidth: 800, quality: 80) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + date + location + notification { + text + button { + link + text + } + } + } + } + middleBanner { + title + text + button { + text + link + } + image { + childImageSharp { + fluid(maxWidth: 1000, quality: 80) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + imageFirst + } + previousSummits { + title + summits { + name + date + image { + childImageSharp { + fluid(maxWidth: 600, quality: 80) { + ...GatsbyImageSharpFluid + } + } + publicURL + } + link + } + } + bottomBanner { + background { + publicURL + } + title + button { + link + text + } + } } } } -`; +`; \ No newline at end of file diff --git a/static/admin/config.yml b/static/admin/config.yml index af3387b2f..580defc2f 100644 --- a/static/admin/config.yml +++ b/static/admin/config.yml @@ -245,6 +245,23 @@ collections: ] }, ] } ] } + - { label: "OpenInfra Events", name: openInfraEvents, widget: object, fields: [ + { label: "Events Data", name: openInfraEventsData, widget: list, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Logo", name: logo, widget: image }, + { label: "Text", name: text, widget: string }, + { label: "Color", name: color, widget: string, hint: "Hex color code, e.g. #FFB325" } + ]}, + { label: "Upcoming Events", name: upcomingEvents, widget: list, fields: [ + { label: "Image", name: image, widget: image }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Text", name: text, widget: string } + ]} + ]} + ]} - name: "generic-about-pages" label: "About Pages" folder: "src/pages/about/" @@ -1284,3 +1301,201 @@ collections: ] } - { label: "Title", name: title, widget: string, required: true } - { label: "Body", name: body, widget: markdown, required: true } + - name: "openinfra-pages" + label: "OpenInfra Pages" + files: + - file: "src/content/upcoming-summits.json" + label: "Upcoming Summits (Shared)" + name: "upcoming-summits-shared" + editor: + preview: false + fields: + - { label: "Title", name: title, widget: string } + - { label: "Summits", name: summits, widget: list, fields: [ + { label: "Key", name: key, widget: string }, + { label: "Background", name: background, widget: image }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + { label: "Notification", name: notification, widget: object, fields: [ + { label: "Text", name: text, widget: string }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Text", name: text, widget: string } + ]} + ]} + ]} + - file: "src/content/meetup-banner.json" + label: "Meetup Banner (Shared)" + name: "meetup-banner-shared" + editor: + preview: false + fields: + - { label: "Background", name: "background", widget: "image" } + - { label: "Logo", name: "logo", widget: "image" } + - { label: "Button", name: button, widget: object, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Text", name: text, widget: string } + ]} + - { label: "Text", name: text, widget: text, hint: "You can use HTML tags like text" } + - file: "src/pages/summit/index.md" + label: "Summit Landing" + name: "summit-landing-page" + fields: + - { label: "Template Key", name: "templateKey", widget: "hidden", default: "summit-landing-page" } + - { label: SEO, name: seo, widget: object, fields: [ + { label: "Title", name: "title", widget: string }, + { label: "Description", name: "description", widget: string }, + { label: "Url", name: "url", widget: string }, + { label: "Image", name: "image", widget: image }, + { label: "Twitter Username", name: "twitterUsername", widget: string }, + ]} + - { label: "Title", name: title, widget: string } + - { label: "Sub Title", name: subTitle, widget: string } + - { label: "Header Image", name: headerImage, widget: object, fields: [ + { label: "Background Image", name: backgroundImage, widget: image }, + { label: "Overview", name: overview, widget: text, hint: "You can use HTML tags like text" }, + { label: "Caption", name: caption, widget: string }, + { label: "Logo", name: logo, widget: object, fields: [ + { label: "Image", name: src, widget: image }, + { label: "Alt Text", name: alt, widget: string } + ]} + ]} + - { label: "Sub Header", name: subHeader, widget: object, fields: [ + { label: "Overview", name: overview, widget: string }, + { label: "Title", name: title, widget: text, hint: "You can use HTML tags like text" }, + { label: "Text", name: text, widget: text, hint: "You can use HTML tags" }, + { label: "Badge", name: badge, widget: object, fields: [ + { label: "Image", name: src, widget: image }, + { label: "Alt Text", name: alt, widget: string } + ]}, + { label: "Footer Image", name: footer, widget: object, fields: [ + { label: "Image", name: src, widget: image }, + { label: "Alt Text", name: alt, widget: string } + ]} + ]} + - { label: "Sponsor Banner", name: sponsorBanner, widget: object, fields: [ + { label: "Upper Text", name: upperText, widget: string }, + { label: "Title", name: title, widget: text, hint: "You can use HTML tags like
" }, + { label: "Image", name: image, widget: image }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Text", name: text, widget: string }, + { label: "Link", name: link, widget: string } + ]} + ]} + - { label: "Past Summits", name: pastSummits, widget: object, fields: [ + { label: "Title", name: title, widget: string }, + { label: "Summits", name: summits, widget: list, fields: [ + { label: "Key", name: key, widget: string }, + { label: "Background Image", name: background, widget: image }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + { label: "Notification", name: notification, widget: object, fields: [ + { label: "Text", name: text, widget: string }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Text", name: text, widget: string } + ]} + ]} + ]} + ]} + - { label: "Middle Banner", name: middleBanner, widget: list, fields: [ + { label: "Title", name: title, widget: string }, + { label: "Text", name: text, widget: text, hint: "You can use HTML tags" }, + { label: "Button", name: button, widget: object, required: false, fields: [ + { label: "Text", name: text, widget: string }, + { label: "Link", name: link, widget: string } + ]}, + { label: "Image", name: image, widget: image }, + { label: "Image First", name: imageFirst, widget: boolean } + ]} + - { label: "Previous Summits", name: previousSummits, widget: object, fields: [ + { label: "Title", name: title, widget: string }, + { label: "Summits", name: summits, widget: list, fields: [ + { label: "Name", name: name, widget: string }, + { label: "Date", name: date, widget: string }, + { label: "Image", name: image, widget: image }, + { label: "Link", name: link, widget: string } + ]} + ]} + - { label: "Bottom banner", name: bottomBanner, widget: object, fields: [ + { label: "Background", name: "background", widget: "image" }, + { label: "Title", name: title, widget: text, hint: "You can use HTML tags like text" }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Text", name: text, widget: string } + ]} + ]} + - file: "src/pages/days/index.md" + label: "OpenInfra Days" + name: "openinfra-days" + fields: + - { label: "Template Key", name: "templateKey", widget: "hidden", default: "open-infra-days-page" } + - { label: SEO, name: seo, widget: object, fields: [ + { label: "Title", name: "title", widget: string }, + { label: "Description", name: "description", widget: string }, + { label: "Url", name: "url", widget: string }, + { label: "Image", name: "image", widget: image }, + { label: "Twitter Username", name: "twitterUsername", widget: string }, + ]} + - { label: "Title", name: title, widget: string } + - { label: "Sub Title", name: subTitle, widget: string } + - { label: "Header Image", name: headerImageUrl, widget: image } + - { label: "Upcoming Days Events", name: upcomingDaysEvents, widget: object, fields: [ + { label: "Is Visible", name: isVisible, widget: boolean, default: true }, + { label: "Title", name: title, widget: text, hint: "You can use HTML tags like
" }, + { label: "Header Image", name: headerImage, widget: object, fields: [ + { label: "Image", name: img, widget: image }, + { label: "Alt Text", name: alt, widget: string } + ]}, + { label: "Events", name: events, widget: list, fields: [ + { label: "Title", name: title, widget: text, hint: "You can use HTML tags like
" }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + { label: "Registration", name: registration, widget: text, hint: "You can use HTML tags like
" }, + { label: "Sponsor", name: sponsor, widget: text, hint: "You can use HTML tags like
", required: false }, + ]} + ]} + - { label: "Upcoming Meetups", name: upcomingMeetups, widget: object, fields: [ + { label: "Title", name: title, widget: string }, + { label: "Banner", name: banner, widget: object, required: false, fields: [ + { label: "Title", name: title, widget: string, hint: "You can use HTML tags like
" }, + { label: "Content", name: content, widget: text, hint: "You can use HTML tags like
" }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Text", name: text, widget: string }, + { label: "URL", name: url, widget: string } + ]} + ]}, + { label: "Meetups", name: meetups, widget: list, fields: [ + { label: "Background", name: background, widget: image }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + { label: "Link", name: link, widget: string }, + ]} + ]} + - { label: "Past Meetups", name: pastMeetups, widget: object, fields: [ + { label: "Title", name: title, widget: string }, + { label: "Meetups", name: meetups, widget: list, fields: [ + { label: "Background", name: background, widget: image }, + { label: "Name", name: name, widget: string, required: false }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + { label: "Link", name: link, widget: string }, + ]} + ]} + - { label: "Community Events", name: communityEvents, widget: object, fields: [ + { label: "Title", name: title, widget: string }, + { label: "Events", name: events, widget: list, fields: [ + { label: "Name", name: name, widget: string }, + { label: "Link", name: link, widget: string }, + { label: "Date", name: date, widget: string }, + { label: "Location", name: location, widget: string }, + ]} + ]} + - { label: "Bottom banner", name: bottomBanner, widget: object, fields: [ + { label: "Background", name: "background", widget: "image" }, + { label: "Title", name: title, widget: text, hint: "You can use HTML tags like text" }, + { label: "Button", name: button, widget: object, fields: [ + { label: "Link", name: link, widget: string }, + { label: "Text", name: text, widget: string } + ]} + ]} \ No newline at end of file diff --git a/static/img/openinfra-days/Header.svg b/static/img/openinfra-days/Header.svg new file mode 100644 index 000000000..4ea8412f3 --- /dev/null +++ b/static/img/openinfra-days/Header.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +