diff --git a/components/community/Card.tsx b/components/community/Card.tsx deleted file mode 100644 index 00f4f0eb9ae8..000000000000 --- a/components/community/Card.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import Link from 'next/link'; -import React from 'react'; - -import { CardType } from '@/types/components/community/CardPropsType'; -import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; -import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; - -import IconArrowUp from '../icons/ArrowUp'; -import Heading from '../typography/Heading'; -import Paragraph from '../typography/Paragraph'; - -interface CardProps { - icon: string; - tagline: string; - taglineBg?: string; - type?: CardType; - heading: string; - description: string; - bg: string; - btnText?: string; - btnBg?: string; - link: string; -} - -/** - * @description This component displays Small Home Card. - * @param {string} props.icon - The icon for the card. - * @param {string} props.tagline - The tagline for the card. - * @param {string} props.taglineBg - The background color for the tagline. - * @param {CardType} props.type - The type of the card (either 'small' or 'large'). - * @param {string} props.heading - The heading for the card. - * @param {string} props.description - The description for the card. - * @param {string} props.bg - The background color for the card. - * @param {string} props.btnText - The text for the button. - * @param {string} props.btnBg - The background color for the button. - * @param {string} props.link - The link for the button. - */ -export default function Card({ - icon, - tagline, - taglineBg = '', - type = CardType.LARGE, - heading, - description, - bg, - btnText = '', - btnBg = '', - link -}: CardProps) { - if (type === CardType.SMALL) { - return ( - -
-
- {icon} {tagline} -
-
- - {heading} - -
-
- - {description} - -
-
- -
-
- - ); - } - - return ( -
-
- {icon} {tagline} -
- -
- - {heading} - -
-
- {description} -
-
- -
- {btnText} -
- -
-
- ); -} diff --git a/components/community/Header.tsx b/components/community/Header.tsx deleted file mode 100644 index f531ce17f174..000000000000 --- a/components/community/Header.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; - -import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; - -import Button from '../buttons/Button'; -import IconRocket from '../icons/Rocket'; -import Heading from '../typography/Heading'; - -interface HeaderProps { - className?: string; -} - -/** - * @description This component displays Header. - * @param {HeaderProps} props - The props for Header component. - * @param {string} props.className - Additional CSS classes for styling. - */ -export default function Header({ className = '' }: HeaderProps) { - return ( -
- - AsyncAPI Community - -
- - - Welcome to the -
AsyncAPI Community -
-
-
-
- - We're an OSS community that's passionate about AsyncAPI. Join us in building the future of Event - Driven APIs by asking questions, sharing ideas, and building connections. - -
-
-
-
- ); -} diff --git a/components/community/HomeCard.tsx b/components/community/HomeCard.tsx deleted file mode 100644 index de34b46cf42a..000000000000 --- a/components/community/HomeCard.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; - -import { ButtonSize } from '@/types/components/buttons/ButtonPropsType'; -import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; - -import Button from '../buttons/Button'; -import Heading from '../typography/Heading'; - -interface HomeCardProps { - headline: string; - title: string; - description: string; - btnText: string; - link: string; - className: string; -} - -/** - * @description This component displays Home Card. - * @param {HomeCardProps} props - The props for Home Card component. - * @param {string} props.headline - The headline for the home card. - * @param {string} props.title - The title for the home card. - * @param {string} props.description - The description for the home card. - * @param {string} props.btnText - The text for the button in the home card. - * @param {string} props.link - The link for the button in the home card. - * @param {string} props.className - Additional CSS classes for styling.. - */ -export default function HomeCards({ headline, title, description, btnText, link, className }: HomeCardProps) { - return ( -
-
-
- - {headline} - -
-
- - {title} - - - {description} - -
-
-
-
-
-
- ); -} diff --git a/markdown/blog/2024-marketing-report.md b/markdown/blog/2024-marketing-report.md new file mode 100644 index 000000000000..89347ac37741 --- /dev/null +++ b/markdown/blog/2024-marketing-report.md @@ -0,0 +1,121 @@ +--- +title: "2024 Marketing Report" +date: 2024-12-09T06:00:00+01:00 +type: Communication +tags: + - Project Status +cover: /img/posts/marketing-images/marketing-wg.webp +authors: + - name: Atinuke Oluwabamikemi Kayode + photo: /img/avatars/bami.webp + link: https://www.linkedin.com/in/atinuke-oluwabamikemi-kayode-5b838b1b7/ + byline: AsyncAPI Community Marketing Specialist +excerpt: '2024 Marketing Report' +featured: true +--- + + +Hello, everyone! I'm Bami, I’m the Community Marketing Specialist at the AsyncAPI Initiative, and I'm honored to serve as the Chair of the AsyncAPI Marketing Working Group. This role has given me a unique perspective on how we can connect and inspire our community, build awareness for AsyncAPI, and further enhance our presence in the ecosystem. Today, I’d like to share an overview of what we’ve accomplished, the initiatives currently underway, and our plans for the future. + +## Overview of the Marketing Working Group + +The Marketing Working Group (MWG) is the driving force behind the AsyncAPI Initiative’s external engagement, community growth, and brand awareness efforts. Our mission is to encourage an active, informed, and passionate community by promoting the tools, resources, and stories that make AsyncAPI unique. We aim to: + +- **Increase Awareness:** Develop and implement targeted campaigns to introduce AsyncAPI to a broader audience and create a clear understanding of our mission. + +- **Build Engagement:** Design strategies to strengthen our community’s connection, enhance involvement, and showcase the powerful contributions from our members. + +- **Highlight Impact:** Share stories, case studies, and successes from across the community to inspire and inform potential contributors, users, and partners. + +- **Drive Growth:** Attract new users, contributors, and partners through partnerships, events, and online activities that underscore AsyncAPI’s value in the tech landscape. +By aligning our goals with AsyncAPI’s mission, the Marketing WG seeks to empower both seasoned and new members to engage deeply with the initiative. Here’s a summary of what we’ve accomplished this year and our priorities moving forward. + +## Accomplishments and Milestones +For the last six months, we’ve focused on laying the groundwork for long-term growth and engagement. Our marketing initiatives have been designed to elevate AsyncAPI’s visibility, simplify our communication strategy, and ensure we’re prepared to grow alongside our community. Here’s a summary of what we’ve done so far: + +- Launched targeted campaigns for our programs and events. +- Held successful online events that engaged and informed over 350 community members and prospective contributors +- Implemented regular content updates on our platforms to keep followers informed and engaged +- Initiated the Student Ambassador Programs that will bring more attention to AsyncAPI’s mission and tools, further building our presence and strengthening community ties + +## Implementing Buffer for Social Media Management + +To improve the efficiency and security of our social media management, we’ve introduced a paid version of Buffer for posting content across our platforms. This change enables us to streamline content scheduling, ensuring consistent, professional updates without compromising security. Importantly, using Buffer restricts access to the main social media accounts, adding a layer of protection and allowing us to manage permissions efficiently. + +Here are some of the benefit of using the Buffer subscription + +- **Centralized Dashboard:** Manage all social media platforms from a single interface, making it easier to track and organize content. +- **Improved Security:** No need for multiple people to log into the actual social media accounts. This minimizes risks of unauthorized changes or breaches. +- **Better Analytics and Insights:** Access in-depth analytics to understand which posts perform and engagement metrics best and adjust strategies accordingly. +- **Content Approval Workflow:** Allow team members to draft posts for review, ensuring high-quality content that aligns with AsyncAPI’s voice. + + +Please note that I currently do not have direct access to AsyncAPI’s social media accounts. Buffer provides an effective solution for posting content, monitoring performance, and maintaining the high standards of AsyncAPI's public presence without broad access. + +As part of the benefit of using Buffer, we have access to our social media analytics. Below are the analytics for LinkedIn and X (formally Twitter) from May 20th to November 26th 2024. + + +![Linkedin Analytics](/img/posts/marketing-images/linkedin-analyze.png) + +![X Analytics](/img/posts/marketing-images/twitter-analyze.webp) + + +## Closing the Online Store + +One significant change is the closure of our online store. After reviewing our budget allocations, it was clear that the store was not generating sufficient activity to justify its expenses. This decision allows us to redirect funds towards initiatives that better serve the community and our core goals. We’re considering alternative ways to share AsyncAPI merchandise in the future that are more cost-effective and in line with our community needs. + +As of June 2024, the items in the store were 2363. The goal was to disburse all of the items by December 2024. + +![Merchandise in store as at June 2024](/img/posts/marketing-images/merchandise.webp) + + Below is the breakdown of the item distribution and what we have left in the store. + +- **Paris Conference:** 1518 items sent to Paris as part of conference giveaways, speakers package, and the rest to be given to the ambassadors to help them promote AsyncAPI in their communities. + +- **London Conference:** 335 items shared with attendees and speakers + +- **TSC Members:** 160 items packed for the TSC members to acknowledge their contributions to the community. + +- **Mentors and Mentees:** 60 items distributed to mentors and mentees as tokens of appreciation for their participation in the mentorship program + +- **Ambassadors:** 3 packages were sent to two new ambassadors, each containing 11 items. + +- **Community Events and Giveaways:** 25 items for various online and offline events throughout the year. + +So far, $8,264.37 has been spent on maintaining the store and logistics. As part of the benefit of closing the store, merchandise will be made locally at the event location, and others will be made as per request. **[Here](https://docs.google.com/spreadsheets/d/1K7xo-ihlHcVoSYRg1U6SsvQDreEF1S6z/r/edit/edit?gid=1275706868#gid=1275706868)** is the link to the distribution board. + +![Monthly Spend on The Store](/img/posts/marketing-images/store-report.webp) + +Check out our spend so far **[here](https://opencollective.com/asyncapi/expenses?type=INVOICE&period=2023-12-31T23%3A00%3A00.000Z%E2%86%92all&searchTerm=Pinnacle+Branding&offset=0&limit=10)** + + +## Marketing Strategy Document and Student Ambassador Program + +To guide our efforts, we’ve developed a comprehensive [Strategy Document](https://github.com/asyncapi/community/pull/1358) that outlines our objectives, priorities, and target initiatives. This document serves as a roadmap for our upcoming campaigns, events, and community engagement efforts. + +Additionally, we’re excited to introduce the [Student Ambassador Program](https://github.com/asyncapi/community/pull/1333), which aims to nurture future AsyncAPI advocates and contributors at the student level. The program will offer students guidance, resources, and community connections to help them grow within the AsyncAPI ecosystem. We believe this will strengthen our community and ensure that AsyncAPI remains a go-to resource for emerging talent. + +## Community Growth and Future Focus Areas + +Our community has continued to grow steadily, with increasing participation in events, discussions, and open-source contributions. This growth underscores the need for a well-coordinated strategy that both attracts new members and retains existing contributors. +Looking forward, we’ll focus on: + +- **Implementing the Strategy Document:** Utilizing our strategic roadmap to guide all our activities and initiatives + +- **Launching the Student Ambassador Program:** Engaging students worldwide to represent and support AsyncAPI within their schools and networks + +- **Promotions and Partnerships:** Expanding AsyncAPI’s reach through strategic partnerships and new promotional efforts + +- **Enhanced Engagement with the Community:** Creating more opportunities for community members to participate, share ideas, and grow their skills +With these focus areas, we’re confident that AsyncAPI will continue to expand its influence and provide valuable support to both seasoned and new community members. + +## Conclusion + +This report highlights the strides made by the AsyncAPI Marketing Working Group, including targeted campaigns, streamlined social media management with Buffer, impactful merchandise distribution, the introduction of a comprehensive strategy document, and the launch of the Student Ambassador Program. We've also made strategic decisions, such as closing the online store, to optimize our budget for initiatives that deliver greater value to the community. + +Looking ahead, our focus will be on implementing the strategy document, fostering community growth, launching the Student Ambassador Program, and driving impactful promotions and partnerships. These efforts aim to strengthen the AsyncAPI ecosystem and create meaningful opportunities for collaboration and engagement. + + +If you have any questions, suggestions, or ideas, please feel free to reach out to me on Slack @Bami. Here’s to another successful year of growth, collaboration, and impact. + + diff --git a/markdown/blog/gravitee-annoucement.md b/markdown/blog/gravitee-annoucement.md index 8fb4f4e30cd5..cba9f5d5c66c 100644 --- a/markdown/blog/gravitee-annoucement.md +++ b/markdown/blog/gravitee-annoucement.md @@ -38,3 +38,4 @@ We are profoundly grateful to Gravitee for their continued support and commitmen We're excited to have Gravitee.io on board as a Platinum Sponsor, and we look forward to continued collaboration in advancing the AsyncAPI ecosystem! For more information about Gravitee and their API management solutions, visit [Gravitee.io](https://www.gravitee.io/). To learn more about AsyncAPI and our mission, visit [AsyncAPI](https://www.asyncapi.com/en). + diff --git a/markdown/docs/community/_section.md b/markdown/docs/community/_section.md deleted file mode 100644 index 1ef99a267b1b..000000000000 --- a/markdown/docs/community/_section.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Community' -weight: 7 ---- diff --git a/pages/blog/asyncapi-student-ambassador-program b/pages/blog/asyncapi-student-ambassador-program new file mode 100644 index 000000000000..91f5df723481 --- /dev/null +++ b/pages/blog/asyncapi-student-ambassador-program @@ -0,0 +1,67 @@ +--- +title: "AsyncAPI Student Ambasador Program" +date: 2024-07-31T06:00:00+01:00 +type: Communication +tags: + - Student Ambassador Program +cover: /img/posts/ambassador-program/cover.webp +authors: + - name: Atinuke Oluwabamikemi Kayode + photo: /img/avatars/bami.webp + link: https://www.linkedin.com/in/atinuke-oluwabamikemi-kayode-5b838b1b7/ + byline: AsyncAPI Community Marketing Specialist +excerpt: Information about AsyncAPI Student Ambassador Program. +featured: true +--- + +The AsyncAPI community is the driving force behind the initiative. The individuals who dedicated their time to promoting AsyncAPI through talks, articles, workshops, and program direction. +Seeing the significant impact of our existing ambassador program, we are excited to extend this initiative to the student community. By introducing the AsyncAPI Student Ambassador Program, we aim to give back to the community and empower students to contribute to and benefit from the AsyncAPI ecosystem. + + +The program is, after all, a reaction to the natural impulse of the community. Thus, in this case, the ambassadors came before the Ambassadors Program itself. This proposal was born based on the recognition of the work of community members who invest their time in bringing AsyncAPI to the community and new potential users. + +AsyncAPI Ambassadors are passionate about open source. They are committed to making AsyncAPI an inclusive place for everyone and participate in leading and mentoring the community. + +Below are guidelines to be followed by anyone who wishes to become an ambassador: + +- Promote user cooperation and disseminate the tools needed for any specific user. + +- Engage with the project in some way, whether as a contributor, blogger, speaker, etc. + +- Speak at community events or write technical content (e.g., blog posts) that solves community needs. + +- Foster community growth and a welcoming environment to spread knowledge about the project. + +## Why create an ambassador program? + +As we know, everyone has a unique way of looking at things and a person's abilities differ. Following that line, each ambassador can offer a different approach. They bring part of their essence into the content or the program where they are involved and disseminate. This is what brings human value to the project, enriching the conception and possibilities. + +

+ heart&brain +

+ +The community is experiencing rapid growth. Over the past year, we started the Ambassadors Program and the AsyncAPI Mentorship program and participated in GSoD for the first time. As the community evolves, the initiative remains dynamic and open, driving new ideas and proposals. + +## How does the program work? + +The Ambassador Program is a transparent system, just like any other management issue related to the initiative. Its success relies on diversity, inclusiveness, and integration. The goal is to materialize these concepts within the program. + +

+ heart&brain +

+ +The process of recruiting ambassadors is completely open. If anyone meets the requirements, they only need to add themselves to this [document](https://github.com/asyncapi/community/blob/master/AMBASSADORS_MEMBERS.json), attaching their personal information along with their contributions. The TSC members will then approve the proposal. + +Subsequently, all ambassador information will be displayed on the AsyncAPI website once the PR has been merged. The process tries to be simple, collaborative, and transparent as possible. + +## More about AsyncAPI Ambassador Program + +The minimum enrollment period for ambassadors is one year with the option to renew annually. At the end of each period, the number of participants will be assessed and confirmed on a yearly basis. To qualify as an ambassador, individuals must make at least four contributions per year, which may include articles, talks, videos, podcasts, presentations, or driving initiatives, etc. + +Ambassadors are entrusted with some amount of responsibilities. As a token of appreciation for their work, we try to compensate them with certain perks, including exclusive swags and conference passes. + +Learn more about the [Ambassador Program here](https://github.com/asyncapi/community/blob/6c066e0eab6c778d1a37d1beebb1418a4bc700f6/AMBASSADOR_ORGANIZATION.md). + +We are waiting for you on board! 🚀 + +> Photo by Ian Schneider on Unsplash diff --git a/pages/community/ambassadors/[id].tsx b/pages/community/ambassadors/[id].tsx deleted file mode 100644 index 943f21912281..000000000000 --- a/pages/community/ambassadors/[id].tsx +++ /dev/null @@ -1,146 +0,0 @@ -import React from 'react'; - -import type { Ambassador } from '@/types/pages/community/Community'; -import { HeadingTypeStyle } from '@/types/typography/Heading'; - -import IconGithub from '../../../components/icons/Github'; -import IconLinkedIn from '../../../components/icons/LinkedIn'; -import IconTwitter from '../../../components/icons/Twitter'; -import GenericLayout from '../../../components/layout/GenericLayout'; -import Heading from '../../../components/typography/Heading'; -import ambassadors from '../../../config/AMBASSADORS_MEMBERS.json'; - -interface IndexProps { - contributor: Ambassador; -} - -/** - * @description This function gets the props for the static site generation. - * - * @param {params} params - The params of the page. - * @returns {Promise<{ props: { contributor: Ambassador } }>} An object containing the props of the page. - */ -export async function getStaticProps({ - params -}: { - params: { id: string }; -}): Promise<{ props: { contributor: Ambassador } }> { - const data = ambassadors.filter((p) => p.github === params.id); - - return { - props: { - contributor: data[0] - } - }; -} - -/** - * @description This function gets the paths for the static site generation. - * - * @returns {Promise<{ paths: { params: { id: string } }[], fallback: boolean }>} An object containing an array of paths and a fallback boolean. - */ -export async function getStaticPaths(): Promise<{ paths: { params: { id: string } }[]; fallback: boolean }> { - const paths = ambassadors.map((user) => ({ - params: { id: user.github } - })); - - return { - paths, - fallback: false - }; -} - -/** - * @description This is the page about the ambassador. - * - * @param {props} props - The props of the page. - * @param {Ambassador} props.contributor - The ambassador data. - */ -export default function Index({ contributor }: IndexProps) { - const image = '/img/social/website-card.png'; - - return ( - -
-
- - {contributor.name} - -
- {contributor.country} -
-
- {contributor.bio} -
-
- -
- -
-
- -
- -
-
- -
- -
-
-
-
-
- {contributor.name} -
-
-
- - Contributions - -
- {contributor.contributions.map((contribution) => { - return ( -
- -
- {contribution.title} -
-
{contribution.type}
{' '} -
- {contribution.date.month}-{contribution.date.year} -
-
-
-
-
- ); - })} -
- - ); -} diff --git a/pages/community/ambassadors/index.tsx b/pages/community/ambassadors/index.tsx deleted file mode 100644 index 6685b2d2286a..000000000000 --- a/pages/community/ambassadors/index.tsx +++ /dev/null @@ -1,226 +0,0 @@ -import { sortBy } from 'lodash'; -import Link from 'next/link'; -import React from 'react'; - -import type { Ambassador } from '@/types/pages/community/Community'; -import { HeadingTypeStyle } from '@/types/typography/Heading'; - -import Button from '../../../components/buttons/Button'; -import GenericLayout from '../../../components/layout/GenericLayout'; -import NewsletterSubscribe from '../../../components/NewsletterSubscribe'; -import Heading from '../../../components/typography/Heading'; -import ambassadorList from '../../../config/ambassador_lists.json'; -import ambassadors from '../../../config/AMBASSADORS_MEMBERS.json'; - -/** - * @description Add additional user information to the user object having ambassador data - * @param {Ambassador} user - The user object having ambassador data - */ -export function addAdditionalUserInfo(user: Ambassador) { - const userData: Ambassador = { - ...user - }; - - // add social links - if (userData.github) { - userData.githubUrl = `https://www.github.com/${userData.github}`; - } - if (userData.linkedin) { - userData.linkedinUrl = `https://www.linkedin.com/in/${userData.linkedin}`; - } - if (userData.twitter) { - userData.twitterUrl = `https://www.twitter.com/${userData.twitter}`; - } - - // add img url - // github redirects to avatar url using `https://www.github.com/.png` - userData.img = `${userData.githubUrl}.png`; - - return userData; -} - -/** - * @description The main page for the AsyncAPI Ambassador Program. - */ -export default function Index() { - const image = '/img/social/community-ambassadors.webp'; - const asyncapiAmbassadors = sortBy( - ambassadors.map((user) => addAdditionalUserInfo(user)), - ['name'] - ); - - return ( - -
-
-

- Teachers. Champions. Ambassadors! -

- - Passionate about event-driven architectures or message-driven APIs? Become an AsyncAPI Ambassador and help - the OSS community build the future of APIs. - -
-
-
-
- ambassador-cover -
-
-
-
- -
-
-
- AsyncAPI Ambassador Contributions - - AsyncAPI Ambassadors are passionate about APIs and AsyncAPI. They share their interest, expertise, and - excitement within their communities to help others build better software. - -
-
-
    - {ambassadorList.contents.map((link) => ( -
  • - {link.title} - - {link.title} - -

    {link.details}

    -
  • - ))} -
-
-
- Join these AsyncAPI Ambassadors - - Learn and share knowledge with community members - -
- {asyncapiAmbassadors.map((ambassador: Ambassador, index: number) => ( -
-
-
-
{ambassador.name}
-
{ambassador.country}
-
- -
-
- {ambassador.name} -
-
{ambassador.title}
-
- -
- -
- ))} -
-
-
-
-
- Tokens of our appreciation - - We appreciate your commitment and passion for sharing your knowledge with your communities. Let us support - you! - -
-
-
-
    - {ambassadorList.tokens.map((token) => ( -
  • -
    -
    - {token.emoji} -
    -
    -
    - {token.title} -

    {token.details}

    -
    -
  • - ))} -
-
-
-
-
- Become an AsyncAPI Ambassador - - The AsyncAPI Ambassador program is now open for applications! If you're selected, you'll join - AsyncAPI's mission of helping community members all over the world, build the future of - Event-Driven APIs. - -
-
-
-
-
-
- -
- ); -} diff --git a/pages/community/events/index.tsx b/pages/community/events/index.tsx deleted file mode 100644 index 8e2e966ca668..000000000000 --- a/pages/community/events/index.tsx +++ /dev/null @@ -1,190 +0,0 @@ -/* eslint-disable react/no-unescaped-entities */ -import { ArrowRightIcon } from '@heroicons/react/outline'; -import React, { useState } from 'react'; - -import type { Event } from '@/types/pages/community/Community'; -import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; -import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; - -import GoogleCalendarButton from '../../../components/buttons/GoogleCalendarButton'; -import ICSFileButton from '../../../components/buttons/ICSFileButton'; -import GenericLayout from '../../../components/layout/GenericLayout'; -import Meeting from '../../../components/Meeting'; -import EventFilter from '../../../components/navigation/EventFilter'; -import EventPostItem from '../../../components/navigation/EventPostItem'; -import NewsletterSubscribe from '../../../components/NewsletterSubscribe'; -import Heading from '../../../components/typography/Heading'; -import Paragraph from '../../../components/typography/Paragraph'; -import TextLink from '../../../components/typography/TextLink'; -import meetings from '../../../config/meetings.json'; -import { getEvents } from '../../../utils/staticHelpers'; - -/** - * @description This is the events page which displays all the events and meetings. - */ -export default function EventIndex() { - const image = '/img/social/community-events.webp'; - const [events, setEvents] = useState(getEvents(meetings)); - - return ( - -
-
-

- Join an AsyncAPI event from anywhere in the world. -

-
- - -
-
-
-
- - All events/meetings are live streamed to all AsyncAPI social media accounts. To learn more about meetings - setup and automation  - - read our FAQ - - . - -
-
-
-
-
-
- conf-logo -
- - Watch the AsyncAPI 2023 conference recordings from anywhere around the world for free - - -
- Watch now - -
-
-
-
-
-
-
- - All Events - -
- -
-
-
- {!events || events.length === 0 ? ( -
- - No Events. Check back later! - -
- ) : ( -
    - {events.map((event: Event, index: number) => { - return ; - })} -
- )} -
-
-
-
-
- - Event Types - - - Explore numerous AsyncAPI's livestreams, specifically curated - -
-
-
- -
-
- -
-
-
-
-
- -
-
- -
-
- -
-
-
-
- -
-
- ); -} diff --git a/pages/community/index.tsx b/pages/community/index.tsx deleted file mode 100644 index e8a68b23528f..000000000000 --- a/pages/community/index.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import type moment from 'moment'; -import React from 'react'; - -import { CardType } from '@/types/components/community/CardPropsType'; -import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; - -import Card from '../../components/community/Card'; -import Header from '../../components/community/Header'; -import Hero from '../../components/community/Hero'; -import HomeCards from '../../components/community/HomeCard'; -import GenericLayout from '../../components/layout/GenericLayout'; -import NewsletterSubscribe from '../../components/NewsletterSubscribe'; -import Heading from '../../components/typography/Heading'; -import eventsData from '../../config/meetings.json'; -import { getEvents } from '../../utils/staticHelpers'; - -interface Event { - title: string; - date: moment.Moment; - url: string; -} - -/** - * @description This component displays the Community Index Page. - */ -export default function CommunityIndexPage() { - const image = '/img/social/community.webp'; - - return ( - -
-
-
- -
- github-discussion -
-
- - Home of #CommunityOps - -
- - Join the conversation with over 10k+ developers from literally everywhere. - -
-
-
- -
-
-
- -
-
-
- -
-
- -
-
-
-
- -
- -
-
-
-
- -
-
- -
-
-
- -
-
-
- -
-
- -
-
-
- -
-
- ); -} diff --git a/public/img/posts/2024-blog-banner/google.png b/public/img/posts/2024-blog-banner/google.png new file mode 100644 index 000000000000..e702573064c4 Binary files /dev/null and b/public/img/posts/2024-blog-banner/google.png differ diff --git a/public/img/posts/marketing-images/linkedin-analyze.png b/public/img/posts/marketing-images/linkedin-analyze.png new file mode 100644 index 000000000000..b2b02fb60054 Binary files /dev/null and b/public/img/posts/marketing-images/linkedin-analyze.png differ diff --git a/public/img/posts/marketing-images/linkedin.webp b/public/img/posts/marketing-images/linkedin.webp new file mode 100644 index 000000000000..c64581f8b62b Binary files /dev/null and b/public/img/posts/marketing-images/linkedin.webp differ diff --git a/public/img/posts/marketing-images/marketing-wg.webp b/public/img/posts/marketing-images/marketing-wg.webp new file mode 100644 index 000000000000..03876304f619 Binary files /dev/null and b/public/img/posts/marketing-images/marketing-wg.webp differ diff --git a/public/img/posts/marketing-images/merchandise.webp b/public/img/posts/marketing-images/merchandise.webp new file mode 100644 index 000000000000..ee8c87f99cad Binary files /dev/null and b/public/img/posts/marketing-images/merchandise.webp differ diff --git a/public/img/posts/marketing-images/store-report.webp b/public/img/posts/marketing-images/store-report.webp new file mode 100644 index 000000000000..147f7981044f Binary files /dev/null and b/public/img/posts/marketing-images/store-report.webp differ diff --git a/public/img/posts/marketing-images/twitter-analyze.webp b/public/img/posts/marketing-images/twitter-analyze.webp new file mode 100644 index 000000000000..bc7d80b29f0a Binary files /dev/null and b/public/img/posts/marketing-images/twitter-analyze.webp differ