This is an automated email from the ASF dual-hosted git repository.

liuyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new b3ac2ed  [website][upgrade]feat: home page (#12383)
b3ac2ed is described below

commit b3ac2ed66a0c26927e4b02bbad1e097e2a4bfe60
Author: Li Li <[email protected]>
AuthorDate: Tue Oct 19 09:29:34 2021 +0800

    [website][upgrade]feat: home page (#12383)
    
    * feat: add tailwindcss supported
    
    Signed-off-by: LiLi <[email protected]>
    
    * feat: index page content
    
    Signed-off-by: LiLi <[email protected]>
    
    * feat: patch
    
    Signed-off-by: LiLi <[email protected]>
    
    * feat: add material design
    
    Signed-off-by: LiLi <[email protected]>
    
    * patch
    
    Signed-off-by: LiLi <[email protected]>
---
 site2/website-next/data/connectors.js              | 176 ++++
 site2/website-next/data/resources.js               | 909 +++++++++++++++++++++
 site2/website-next/data/team.js                    | 264 ++++++
 site2/website-next/data/users.js                   | 339 ++++++++
 site2/website-next/docusaurus.config.js            |  25 +-
 site2/website-next/package.json                    |  16 +
 site2/website-next/postcss-tailwind-loader.js      |  14 +
 .../src/components/HomepageFeatures.js             |  71 +-
 site2/website-next/src/components/Svg.js           |  24 +
 site2/website-next/src/css/custom.css              |  21 +-
 site2/website-next/src/pages/index.js              |  81 +-
 site2/website-next/src/theme/Root.js               |  14 +
 site2/website-next/src/theme/material-theme.js     |  11 +
 site2/website-next/src/utils/index.js              |  21 +
 site2/website-next/static/img/pulsar.svg           |   1 +
 site2/website-next/tailwind.config.js              |  46 ++
 16 files changed, 1974 insertions(+), 59 deletions(-)

diff --git a/site2/website-next/data/connectors.js 
b/site2/website-next/data/connectors.js
new file mode 100644
index 0000000..4182f2c
--- /dev/null
+++ b/site2/website-next/data/connectors.js
@@ -0,0 +1,176 @@
+module.exports = [
+    {
+        name: 'aerospike',
+        longName: 'Aerospike sink',
+        type: 'Sink',
+        link: 'https://www.aerospike.com/'
+    },
+    {
+        name: 'canal',
+        longName: 'Alibaba Canal CDC source',
+        type: 'Source',
+        link: 'https://github.com/alibaba/canal'
+    },
+    {
+        name: 'cassandra',
+        longName: 'Apache Cassandra source and sink',
+        type: 'Source and sink',
+        link: 'https://cassandra.apache.org'
+    },
+    {
+        name: 'kafka-connect-adaptor',
+        longName: 'Apache Kafka Connect Adaptor source and sink',
+        type: 'Source and sink',
+        link: 'http://kafka.apache.org/'
+    },
+    {
+        name: 'dynamodb',
+        longName: 'AWS DynamoDB source',
+        type: 'Source',
+        link: 'https://aws.amazon.com/dynamodb/'
+    },
+    {
+        name: 'kinesis',
+        longName: 'AWS Kinesis source and sink',
+        type: 'Source and sink',
+        link: 'https://aws.amazon.com/kinesis/'
+    },
+    {
+        name: 'debezium-mysql',
+        longName: 'Debezium MySQL CDC source',
+        type: 'Source',
+        link: 'https://debezium.io/'
+    },
+    {
+        name: 'debezium-postgres',
+        longName: 'Debezium PostgreSQL CDC source',
+        type: 'Source',
+        link: 'https://debezium.io/'
+    },
+    {
+        name: 'elastic-search',
+        longName: 'ElasticSearch source and sink',
+        type: 'Source and sink',
+        link: 'https://www.elastic.co/'
+    },
+    {
+        name: 'file',
+        longName: 'File source',
+        type: 'Source',
+        link: 'https://github.com/apache/pulsar/tree/master/pulsar-io/file'
+    },
+    {
+        name: 'flume',
+        longName: 'Flume source and sink',
+        type: 'Source and sink',
+        link: 'https://flume.apache.org/'
+    },
+    {
+        name: 'hbase',
+        longName: 'HBase sink',
+        type: 'Sink',
+        link: 'https://hbase.apache.org/'
+    },
+    {
+        name: 'hdfs2',
+        longName: 'HDFS2 sink',
+        type: 'Sink',
+        link: 'https://hadoop.apache.org/'
+    },
+    {
+        name: 'hdfs3',
+        longName: 'HDFS3 sink',
+        type: 'Sink',
+        link: 'https://hadoop.apache.org/'
+    },
+    {
+        name: 'influxdb',
+        longName: 'InfluxDB sink',
+        type: 'Sink',
+        link: 'https://www.influxdata.com/'
+    },
+    {
+        name: 'jdbc-clickhouse',
+        longName: 'JDBC ClickHouse sink',
+        type: 'Sink',
+        link: 'https://clickhouse.tech/'
+    },
+    {
+        name: 'jdbc-mariadb',
+        longName: 'JDBC MariaDB sink',
+        type: 'Sink',
+        link: 'https://mariadb.org/'
+    },
+    {
+        name: 'jdbc-postgres',
+        longName: 'JDBC PostgresSQL sink',
+        type: 'Sink',
+        link: 'https://www.postgresql.org/'
+    },
+    {
+        name: 'jdbc-sqlite',
+        longName: 'JDBC SQLite sink',
+        type: 'Sink',
+        link: 'https://www.sqlite.org/'
+    },
+    {
+        name: 'kafka',
+        longName: 'Kafka source and sink',
+        type: 'Source and sink',
+        link: 'https://kafka.apache.org/'
+    },
+    {
+        name: 'mongo',
+        longName: 'MongoDB sink',
+        type: 'Sink',
+        link: 'https://www.mongodb.com/'
+    },
+    {
+        name: 'netty',
+        longName: 'Netty source',
+        type: 'Source',
+        link: 'https://netty.io/'
+    },
+    {
+        name: 'nsq',
+        longName: 'NSQ source',
+        type: 'Source',
+        link: 'https://nsq.io/',
+    },
+    {
+        name: 'rabbitmq',
+        longName: 'RabbitMQ source and sink',
+        type: 'Source and sink',
+        link: 'https://www.rabbitmq.com/'
+    },
+    {
+        name: 'redis',
+        longName: 'Redis sink',
+        type: 'Sink',
+        link: 'https://redis.io/'
+    },
+    {
+        name: 'solr',
+        longName: 'Solr sink',
+        type: 'Sink',
+        link: 'https://lucene.apache.org/solr/'
+    },
+    {
+        name: 'netty',
+        longName: 'TCP/UDP with Netty source',
+        type: 'Source',
+        link: 'https://netty.io/'
+    },
+    {
+        name: 'data-generator',
+        longName: 'Test Data Generator source',
+        type: 'Source',
+        link: 
'https://github.com/apache/pulsar/tree/master/pulsar-io/data-generator'
+    },
+    {
+        name: 'twitter',
+        longName: 'Twitter Firehose source',
+        type: 'Source',
+        link: 'https://developer.twitter.com/en/docs'
+    }
+]
diff --git a/site2/website-next/data/resources.js 
b/site2/website-next/data/resources.js
new file mode 100644
index 0000000..44a392b
--- /dev/null
+++ b/site2/website-next/data/resources.js
@@ -0,0 +1,909 @@
+module.exports = {
+  articles: [
+    {
+      forum: 'RT Instights',
+      forum_link: 'https://www.rtinsights.com/',
+      date: 'Oct 2021',
+      title: "The Critical Role Streaming Plays in a Data Stack",
+      link: 
'https://www.rtinsights.com/the-critical-role-streaming-plays-in-a-data-stack/'
+    },
+    {
+      forum: 'Mikel\'s TechBlog',
+      forum_link: 'https://mikeldeltio.com/',
+      date: 'Sept 2021',
+      title: "Distributed Databases: Apache Pulsar (in ESP)",
+      link: 
'https://mikeldeltio.com/2021/09/20/distributed-databases-apache-pulsar/'
+    },
+    {
+      forum: 'Pandio Blog',
+      forum_link: 'https://pandio.com/blog/',
+      date: 'Sept 2021',
+      title: "Apache Pulsar vs. Google PubSub",
+      link: 
'https://pandio.com/blog/a-detailed-deep-dive-into-pulsar-and-google-pubsub-which-is-better-and-why'
+    },
+    {
+      forum: 'StreamNative Blog',
+      forum_link: 'https://streamnative.io/',
+      date: 'Aug 2021',
+      title: "Scalable Stream Processing with Pulsar’s Key_Shared 
Subscription",
+      link: 
'https://streamnative.io/en/blog/engineering/2021-08-25-scalable-stream-processing-with-pulsars-key-shared-subscription/'
+    },
+    {
+      forum: 'Pandio Blog',
+      forum_link: 'https://pandio.com/blog/',
+      date: 'July 2021',
+      title: "Pulsar vs. Kafka",
+      link: 'https://pandio.com/blog/pulsar-vs-kafka/'
+    },
+    {
+      forum: 'Building the Open Data Stack',
+      forum_link: 'https://medium.com/building-the-open-data-stack',
+      date: 'June 2021',
+      title: "5 More Reasons to Choose Apache Pulsar Over Apache Kafka",
+      link: 
'https://medium.com/building-the-open-data-stack/5-more-reasons-to-choose-apache-pulsar-over-apache-kafka-c09b259e3691'
+    },
+    {
+      forum: 'dattell',
+      forum_link: 'https://dattell.com/data-architecture-blog/',
+      date: 'Feb 2021',
+      title: "Apache Pulsar Subscription Types",
+      link: 
'https://dattell.com/data-architecture-blog/subscription-types-in-apache-pulsar/'
+    }
+    
+    ],
+
+  /******************************
+   * Presentations
+   * 
+   ******************************/ 
+  presentations: [
+   {
+      forum: 'Apache Pulsar Neighborhood YouTube',
+      forum_link: 'https://www.youtube.com/apachepulsarneighborhood',
+      presenter: 'Enrico Olivelli',
+      date: 'Sept 2021',
+      title: "Apache Pulsar Deep Dive- an End-to-end view of the Data Flow",
+      link: 'https://www.youtube.com/watch?v=oLXCCCGsrWM'
+    },
+    {
+      forum: 'Apache Pulsar Neighborhood YouTube',
+      forum_link: 'https://www.youtube.com/apachepulsarneighborhood',
+      presenter: 'Simba Khadder',
+      date: 'Sept 2021',
+      title: "Apache Pulsar and Machine Learning",
+      link: 'https://youtu.be/K2WXDwo1y0k'
+    },
+    {
+      forum: 'Apache Pulsar Neighborhood YouTube',
+      forum_link: 'https://www.youtube.com/apachepulsarneighborhood',
+      presenter: 'Enrico Olivelli',
+      date: 'Sept 2021',
+      title: "Leveraging Pulsar's Next Gen Streaming Capabilities from a 
JavaEE Application",
+      link: 'https://www.youtube.com/watch?v=0NA0BIvkQrs'
+    },
+   {
+      forum: 'Devin Bost\'s YouTube',
+      forum_link: 'https://www.youtube.com/channel/UCz_Y86AT4G15xU3IojhX2Kw',
+      presenter: 'Devin Bost',
+      date: 'Aug 2021',
+      title: "Streaming Patterns and Best Practices with Apache Pulsar for 
Enabling Machine Learning and Analytics",
+      link: 'https://www.youtube.com/watch?v=Fdqre_hTnUI'
+    },
+
+    {
+      forum: 'Pulsar Summit NA 2021',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: '',
+      date: 'June 2021',
+      title: "Pulsar Summit NA 2021 Playlist",
+      link: 
'https://www.youtube.com/watch?v=-Bm1h508oIQ&list=PLqRma1oIkcWjyezVodJHcp8GSypvGuc1C'
+    }
+  ],
+    /***************************
+     * Older Articles
+     * 
+     * 
+     * *************************/
+  older_articles: [
+    
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      date: 'July 2020',
+      title: "Pulsar vs Kafka - Part 1 - A More Accurate Perspective on 
Performance, Architecture, and Features",
+      link: 'https://streamnative.io/blog/tech/pulsar-vs-kafka-part-1',
+      title2: "Pulsar vs Kafka - Part 2 - Adoption, Use Cases, 
Differentiators, and Community",
+      link2: 'https://streamnative.io/blog/tech/pulsar-vs-kafka-part-2'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      date: 'June 2020',
+      title: "Taking messaging and data ingestion systems to the next level",
+      link: 'https://streamnative.io/blog/tech/2020-07-08-podcast'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      date: 'June 2020',
+      title: "Announcing AMQP-on-Pulsar: bring native AMQP protocol support to 
Apache Pulsar",
+      link: 
'https://streamnative.io/blog/tech/2020-06-15-announcing-aop-on-pulsar'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      date: 'June 2020',
+      title: "How to trace Pulsar messages with OpenTracing and Jaeger",
+      link: 
'https://streamnative.io/blog/tech/2020-06-11-opentracing-instrumentation-for-pulsar'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      date: 'May 2020',
+      title: "Introducing StreamNative Hub — Extend Pulsar Capabilities with 
Rich Integrations",
+      link: 'https://streamnative.io/blog/tech/2020-05-26-intro-to-hub'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "How to Build a Distributed Database with Apache BookKeeper — 
Part 1",
+      link: 
'https://streamnative.io/blog/tech/2020-02-04-how-to-build-database',
+      title2: "How to Build a Distributed Database with Apache BookKeeper — 
Part 2",
+      link2: 
'https://streamnative.io/blog/tech/2020-04-14-distributed-database-bk2',
+      title3: "How to Build a Distributed Database with Apache BookKeeper — 
Part 3",
+      link3: 
'https://streamnative.io/blog/tech/2020-05-12-distributed-database-bk3'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "How Apache Pulsar Helps Streamline Message System and Reduces 
O&M Costs at Tuya Smart",
+      link: 'https://streamnative.io/blog/tech/2020-05-08-tuya-tech-blog'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "Why Zhaopin Chooses Pulsar SQL for Search Log Analysis",
+      link: 'https://streamnative.io/blog/tech/2020-05-07-zhaopin-tech-blog'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "Why we moved from Apache Kafka to Apache Pulsar",
+      link: 
'https://streamnative.io/blog/tech/2020-04-21-from-apache-kafka-to-apache-pulsar'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "Announcing Kafka-on-Pulsar: bring native Kafka protocol support 
to Apache Pulsar",
+      link: 
'https://streamnative.io/blog/tech/2020-03-24-bring-native-kafka-protocol-support-to-apache-pulsar'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "Apache Pulsar® Helps Tencent Process Tens of Billions of 
Financial Transactions Efficiently with Virtually No Data Loss",
+      link: 'https://streamnative.io/blog/tech/2020-02-18-pulsar-help-tencent'
+    },
+    {
+      forum: 'Yahoo Engineering blog',
+      forum_link: 'https://yahooeng.tumblr.com/',
+      title: 'Open sourcing Pulsar, pub-sub messaging at scale',
+      link: 
'https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale'
+    },
+    {
+      forum: 'Streamlio blog',
+      forum_link: 'https://streaml.io/blog',
+      title: 'Introduction to Apache Pulsar',
+      link: 'https://streaml.io/blog/intro-to-pulsar/'
+    },
+    {
+      forum: 'Streamlio blog',
+      forum_link: 'https://streaml.io/blog',
+      title: 'Why Apache Pulsar? Part 1',
+      link: 'https://streaml.io/blog/why-apache-pulsar/',
+      title2: 'Why Apache Pulsar? Part 2',
+      link2: 'https://streaml.io/blog/why-apache-pulsar-part-2'
+    },
+    {
+      forum: "Jack Vanlightly's blog",
+      forum_link: 'https://jack-vanlightly.com',
+      title: 'Understanding How Apache Pulsar Works',
+      link: 
'https://jack-vanlightly.com/blog/2018/10/2/understanding-how-apache-pulsar-works'
+    },
+    {
+        forum: "Anuradha Prasanna's blog",
+        forum_link: 'https://medium.com/@anuradha.neo',
+        title: 'Kafka is not the best anymore - Meet Pulsar!',
+        link: 
'https://medium.com/@anuradha.neo/kafka-is-not-the-best-anymore-meet-pulsar-9eb435c9fc0b'
+    },
+    {
+        forum: 'Kafkaesque blog',
+        forum_link: 'https://kafkaesque.io/news/',
+        title: '7 Reasons We Choose Apache Pulsar over Apache Kafka',
+        link: 
'https://kafkaesque.io/7-reasons-we-choose-apache-pulsar-over-apache-kafka/'
+    },
+    {
+        forum: "Jack Vanlightly's blog",
+        forum_link: 'https://jack-vanlightly.com',
+        title: 'How to (not) lose messages on an Apache Pulsar Cluster',
+        link: 
'https://jack-vanlightly.com/blog/2018/10/21/how-to-not-lose-messages-on-an-apache-pulsar-cluster'
+    },
+    {
+      forum: 'StreamNative blog',
+      forum_link: 'https://streamnative.io/',
+      title: "How Orange Financial combats financial fraud in over 50M 
transactions a day using Apache Pulsar",
+      link: 
'https://streamnative.io/blog/tech/2019-11-11-how-orange-finaacial-combats-financial-fraud-over-50m-transactions-a-day-useing-apache-pulsar'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "Powering Tencent Billing Platform with Apache Pulsar",
+        link: 
'https://streamnative.io/blog/tech/2019-10-22-powering-tencent-billing-platform-with-apache-pulsar/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "Use Apache SkyWalking to Trace Apache Pulsar Messages",
+        link: 
'https://streamnative.io/blog/tech/2019-10-10-use-apache-skywalking-to-trace-apache-pulsar/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "StreamNative open sourced and contributed Apache Pulsar 
Manager to ASF",
+        link: 
'https://streamnative.io/blog/tech/2019-09-24-streamnative-opensourced-pulsar-manager/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "Apache Pulsar Adoption Story in ActorCloud (IoT Platform)",
+        link: 
'https://streamnative.io/blog/tech/2019-09-09-apache-pulsar-adoption-in-actorcloud/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "Apache Pulsar at Yahoo!JAPAN",
+        link: 
'https://streamnative.io/blog/tech/2019-09-06-pular-at-yahoo-japan/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "Build a Priority-based Push Notification System Using Apache 
Pulsar at GeTui",
+        link: 
'https://streamnative.io/blog/tech/2019-07-23-build-a-priority-based-push-notification-system-using-apache-pulsar-at-getui/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://streamnative.io/',
+        title: "Use Apache Pulsar as Streaming Table with 8 Lines of Code",
+        link: 
'https://streamnative.io/blog/tech/2019-08-28-use-apache-pulsar-as-streaming-table-with-8-lines-of-code/'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://medium.com/streamnative/',
+        title: 'Apache Pulsar as One Unified Storage System for Real Time and 
Historical Analysis',
+        link: 
'https://medium.com/streamnative/apache-pulsar-as-one-storage-455222c59017'
+    },
+    {
+        forum: 'StreamNative blog',
+        forum_link: 'https://medium.com/streamnative/',
+        title: "What’s New in Apache Pulsar 2.4.0",
+        link: 
'https://medium.com/streamnative/whats-new-in-apache-pulsar-2-4-0-d646f6727642'
+    },
+    {
+        forum: "Penghui Li's blog",
+        forum_link: 'https://medium.com/@codelipenghui',
+        title: "Simplifying Zhaopin's Event Center Using Apache Pulsar",
+        link: 
'https://medium.com/@codelipenghui/simplifying-zhaopins-event-center-with-apache-pulsar-9784b73bead1'
+    },
+    {
+        forum: "Jowanza Joseph's blog",
+        forum_link: "https://www.jowanza.com/blog";,
+        title: 'Efficient Stream Processing With Pulsar Functions',
+        link: 
'https://www.jowanza.com/blog/2019/3/9/efficient-stream-processing-with-pulsar-functions'
+    },
+    {
+        forum: "Jesse Anderson's blog",
+        forum_link: 'http://www.jesse-anderson.com/',
+        title: 'Creating Work Queues with Apache Kafka and Apache Pulsar',
+        link: 
'http://www.jesse-anderson.com/2018/08/creating-work-queues-with-apache-kafka-and-apache-pulsar/'
+    },
+    {
+        forum: 'Streamlio blog',
+        forum_link: 'https://streaml.io/blog',
+        title: 'Building Data Driven Applications at STICORP using Apache 
Pulsar',
+        link: 
'https://streaml.io/blog/building-data-driven-applications-with-apache-pulsar-at-sticorp'
+    },
+    {
+        forum: 'The Hut Group tech blog',
+        forum_link: 'https://medium.com/thg-tech-blog',
+        title: 'A feather in the caps',
+        link: 
'https://medium.com/thg-tech-blog/a-feather-in-their-caps-4c4083cf9f46'
+    },
+    {
+        forum: "Karthikeyan Palanivelu's blog",
+        forum_link: 'https://medium.com/@pckeyan',
+        title: 'Apache Pulsar — One Cluster for the entire enterprise using 
Multi-tenancy',
+        link: 
'https://medium.com/@pckeyan/apache-pulsar-one-cluster-for-the-entire-enterprise-using-multi-tenancy-c37e2ee350ef'
+    },
+    {
+        forum: "Capital One tech blog",
+        forum_link: "https://medium.com/capital-one-tech";,
+        title: 'Apache Pulsar — A Gentle Introduction to Apache’s Newest 
Pub-Sub Messaging Platform',
+        link: 
'https://medium.com/capital-one-tech/apache-pulsar-apaches-newest-pub-sub-messaging-platform-1c1ba1a6c673'
+    },
+    {
+        forum: "Karthikeyan Palanivelu's blog",
+        forum_link: 'https://medium.com/@pckeyan',
+        title: 'Apache Pulsar: Geo-replication',
+        link: 
'https://medium.com/@pckeyan/apache-pulsar-geo-replication-ad4f0ca3224b'
+    },
+    {
+        forum: "Karthikeyan Palanivelu's blog",
+        forum_link: 'https://medium.com/@pckeyan',
+        title: 'Apache Pulsar: Geo-replication — Synchronous Replication : 
Hybrid Deployment Model',
+        link: 
'https://medium.com/@pckeyan/apache-pulsar-geo-replication-synchronous-replication-hybrid-deployment-model-3282013e9ae5'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Pulsar topic compaction',
+        link: 'https://streaml.io/blog/pulsar-topic-compaction'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Tiered Storage in Apache Pulsar',
+        link: 'https://streaml.io/blog/tiered-storage-in-apache-pulsar'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Introducing Pulsar IO',
+        link: 'https://streaml.io/blog/introducing-pulsar-io'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Pulsar topic compaction',
+        link: 'https://streaml.io/blog/pulsar-topic-compaction'
+    },
+
+    {
+        forum: "Jesse Anderson's blog",
+        forum_link: 'https://www.jesse-anderson.com',
+        title: 'Reducing Operational Overhead with Pulsar Functions',
+        link: 
'https://www.jesse-anderson.com/2019/05/reducing-operational-overhead-with-pulsar-functions/'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Querying Data Streams with Apache Pulsar SQL',
+        link: 
'https://streaml.io/blog/querying-data-streams-with-apache-pulsar-sql'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Configuring Apache Pulsar Tiered Storage with Amazon S3',
+        link: 
'https://streaml.io/blog/configuring-apache-pulsar-tiered-storage-with-amazon-s3'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Comparing LogDevice and Apache Pulsar',
+        link: 'https://streaml.io/blog/comparing-logdevice-and-apache-pulsar'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Pulsar’s Multi-Layer System Architecture',
+        link: 
'https://streaml.io/blog/apache-pulsar-architecture-designing-for-streaming-performance-and-scalability'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Debugging Pulsar Functions in Java',
+        link: 'https://streaml.io/blog/debugging-pulsar-functions-in-java'
+    },
+    {
+        forum: "Streamlio blog",
+        forum_link: 'https://streaml.io/blog',
+        title: 'Sentiment Analysis of Tweets using Apache Pulsar',
+        link: 
'https://streaml.io/blog/sentiment-analysis-of-tweets-using-apache-pulsar'
+    },
+    {
+        forum: 'Apache Flink blog',
+        forum_link: 'https://flink.apache.org/blog/',
+        title: 'When Flink & Pulsar Come Together',
+        link: 'https://flink.apache.org/2019/05/03/pulsar-flink.html'
+    },
+    {
+        forum: 'Debezium blog',
+        forum_link: 'https://debezium.io/blog',
+        title: 'Tutorial for Using Debezium Connectors With Apache Pulsar',
+        link: 
'https://debezium.io/blog/2019/05/23/tutorial-using-debezium-connectors-with-apache-pulsar/'
+    },
+    {
+        forum: 'Pulsar in Action',
+        forum_link: 'https://www.manning.com/books/pulsar-in-action',
+        title: "Pulsar in Action",
+        link: 'https://www.manning.com/books/pulsar-in-action'
+     }
+  ],
+      /***************************
+     * Older Presentations
+     * 
+     * 
+     * *************************/
+  older_presentations: [
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Ludwig Pummer, Joe Francis',
+      date: 'June 2020',
+      title: "Five Years of Operating a Large Scale Globally Replicated Pulsar 
Installation",
+      link: 
'https://www.slideshare.net/streamnative/five-years-of-operating-a-large-scale-globally-replicated-pulsar-installation'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Alexandre Duval',
+      date: 'June 2020',
+      title: "Building a FaaS with Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/building-a-faas-with-pulsar'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Greg Methvin',
+      date: 'June 2020',
+      title: "Scaling customer engagement with Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/scaling-customer-engagement-with-apache-pulsar'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'William MaLane',
+      date: 'June 2020',
+      title: "Finding your pulse for a global enterprise communications 
nervous system",
+      link: 
'https://www.slideshare.net/streamnative/finding-your-pulse-for-a-global-enterprise-communications-nervous-systemwilliam-mclane'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'David Kjerrumgaard',
+      date: 'June 2020',
+      title: "Using Apache Pulsar to Provide Real-Time IoT Analytics on the 
Edge",
+      link: 
'https://www.slideshare.net/streamnative/using-apache-pulsar-to-provide-realtime-iot-analytics-on-the-edgedavid'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Neng Lv',
+      date: 'June 2020',
+      title: "Stream or segment: what is the best way to access your events in 
Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/stream-or-segment-what-is-the-best-way-to-access-your-events-in-pulsarneng'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Simba Khadder',
+      date: 'June 2020',
+      title: "Feature Stories: Building Machine Learning Infrastructure on 
Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/feature-stores-building-machine-learning-infrastructure-on-apache-pulsarsimba-khadder'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Sanjeev Kulkarni',
+      date: 'June 2020',
+      title: "Pulsar Functions Deep Dive",
+      link: 
'https://www.slideshare.net/streamnative/pulsar-functions-deep-divesanjeev-kulkarni'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Jesse Anderson',
+      date: 'June 2020',
+      title: "Pulsar for Kafka People",
+      link: 
'https://www.slideshare.net/streamnative/pulsar-for-kafka-peoplejesse-anderson'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Jerry Peng',
+      date: 'June 2020',
+      title: "Interactive querying of streams using Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/interactive-querying-of-streams-using-apache-pulsarjerry-peng'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Anup Ghatage, Ankit Jain',
+      date: 'June 2020',
+      title: "The first step to Multi AZ architecture for Apache BookKeeper",
+      link: 
'https://www.slideshare.net/streamnative/the-first-step-to-multi-az-architecture-for-apache-bookkeeperanup-ghatage'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Carolyn King, Matteo Merli, Sijie Guo',
+      date: 'June 2020',
+      title: "Messaging & Streaming Everywhere",
+      link: 
'https://www.slideshare.net/streamnative/open-keynotecarolynmatteosijie'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Joe Francis, Rajan Dhabalia',
+      date: 'June 2020',
+      title: "Pulsar Storage on BookKeeper - Seamless Evolution",
+      link: 
'https://www.slideshare.net/streamnative/pulsar-storage-on-bookkeeper-seamless-evolution'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Ningguo Chen',
+      date: 'June 2020',
+      title: "How Apache Pulsar Helps Tencent Process Tens of Billions of 
Transactions Efficiently",
+      link: 
'https://www.slideshare.net/streamnative/how-apache-pulsar-helps-tencent-process-tens-of-billions-of-transactions-efficientlyningguo-chen'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Vincent Xie, Jia Zhai',
+      date: 'June 2020',
+      title: "Unify Storage Backend for Batch and Streaming Computation with 
Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/unify-storage-backend-for-batch-and-streaming-computation-with-apache-pulsarvincent'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Seth Wiesman',
+      date: 'June 2020',
+      title: "Unified Data Processing with Apache Flink and Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/unified-data-processing-with-apache-flink-and-apache-pulsarseth-wiesman'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Paige Roberts',
+      date: 'June 2020',
+      title: "Architecting Production IoT Analytics",
+      link: 
'https://www.slideshare.net/streamnative/architecting-production-iot-analyticspaige-roberts'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Nozomi Kurihara',
+      date: 'June 2020',
+      title: "Large scale log pipeline using Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/large-scale-log-pipeline-using-apache-pulsarnozomi'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Robert van Mölken',
+      date: 'June 2020',
+      title: "Ten reasons to choose Apache Pulsar over Apache Kafka for Event 
Sourcing",
+      link: 
'https://www.slideshare.net/streamnative/ten-reasons-to-choose-apache-pulsar-over-apache-kafka-for-event-sourcingrobert-van-mlken'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Simon Crosby',
+      date: 'June 2020',
+      title: "Easily Build a Smart Pulsar Stream Processor",
+      link: 
'https://www.slideshare.net/streamnative/easily-build-a-smart-pulsar-stream-processorsimon-crosby'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Pranav Dharma',
+      date: 'June 2020',
+      title: "How Splunk Mission Control leverages various Pulsar subscription 
types",
+      link: 
'https://www.slideshare.net/streamnative/how-splunk-mission-control-leverages-various-pulsar-subscription-typespranav-dharma'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Caito Scherr',
+      date: 'June 2020',
+      title: "Streaming, Fast and Slow",
+      link: 
'https://www.slideshare.net/streamnative/streaming-fast-and-slowcaito-scherr'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Karthik Ramasamy',
+      date: 'June 2020',
+      title: "Why Splunk Chose Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/why-splunk-chose-pulsarkarthik-ramasamy'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Chris Kellogg',
+      date: 'June 2020',
+      title: "Securing your Pulsar Cluster with Vault",
+      link: 
'https://www.slideshare.net/streamnative/securing-your-pulsar-cluster-with-vaultchris-kellogg-236137352'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Enrico Olivelli',
+      date: 'June 2020',
+      title: "Introducing HerdDB - a distributed JVM embeddable database built 
upon Apache BookKeeper",
+      link: 
'https://www.slideshare.net/streamnative/introducing-herddb-a-distributed-jvm-embeddable-database-built-upon-apache-bookkeeperenrico-olivelli'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Pierre Zemb',
+      date: 'June 2020',
+      title: "Building a Messaging Solutions for OVHcloud with Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/building-a-messaging-solutions-for-ovhcloud-with-apache-pulsarpierre-zemb'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Devin Bost',
+      date: 'June 2020',
+      title: "Pulsar Architectural Patterns for CI/CD Automation and 
Self-Service",
+      link: 
'https://www.slideshare.net/streamnative/pulsar-architectural-patterns-for-cicd-automation-and-selfservicedevin-bost-236083234'
+    },
+    {
+      forum: 'Pulsar Summit 2020',
+      forum_link: 'https://pulsar-summit.org/',
+      presenter: 'Addison Higham',
+      date: 'June 2020',
+      title: "Getting Pulsar Spinning",
+      link: 
'https://www.slideshare.net/streamnative/getting-pulsar-spinningaddison-higham'
+    },
+    {
+      forum: 'StreamNative Academy',
+      forum_link: 'https://streamnative.io/academy',
+      presenter: 'Shivji Jha',
+      date: 'May 2020',
+      title: "Lessons from managing a Pulsar cluster (Nutanix)",
+      link: 
'https://www.slideshare.net/streamnative/lessons-from-managing-a-pulsar-cluster-nutanix'
+    },
+    {
+      forum: '',
+      forum_link: '',
+      presenter: 'Sijie Guo',
+      date: 'May 2020',
+      title: "Building event streaming pipelines using Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/building-event-streaming-pipelines-using-apache-pulsar'
+    },
+    {
+      forum: 'TGIPulsar',
+      forum_link: 'https://streamnative.io/resource#tgip',
+      presenter: 'Sijie Guo',
+      date: 'April 2020',
+      title: "Lifecycle of a Pulsar message",
+      link: 
'https://www.slideshare.net/streamnative/tgipulsar-ep-006-lifecycle-of-a-pulsar-message'
+    },
+    {
+      forum: '',
+      forum_link: '',
+      presenter: 'Sijie Guo, Pierre Zemb',
+      date: 'March 2020',
+      title: "Introducing Kafka-on-Pulsar: bring native Kafka protocol support 
to Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/introducing-kafkaonpulsar-bring-native-kafka-protocol-support-to-apache-pulsar'
+    },
+    {
+      forum: '2019 China Technical Communication Forum',
+      forum_link: 'http://www.tc-china.org/event/tcweekly/7454/',
+      presenter: 'Yu Liu',
+      date: 'December 2019',
+      title: "Code the docs",
+      link: 'https://www.slideshare.net/streamnative/code-the-docsyu-liu'
+    },
+    {
+      forum: 'Google DevFest 2019 in Beijing',
+      forum_link: 
'https://devfest.withgoogle.com/?utm_source=devsite&utm_medium=events&utm_campaign=past&utm_content=DevSite_HPP',
+      presenter: 'Xiaolong Ran',
+      date: 'December 2019',
+      title: "Serverless Event Streaming with Pulsar Functions",
+      link: 
'https://www.slideshare.net/streamnative/google-devfest-about-pulsar-by-xiaolong'
+    },
+    {
+      forum: 'Apache Pulsar Meetup x PingCAP Infra Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/7520647658000',
+      presenter: 'Xiaolong Ran',
+      date: 'December 2019',
+      title: "Apache Pulsar and GitHub",
+      link: 
'https://www.slideshare.net/streamnative/apache-pulsar-and-githubxiaolong'
+    },
+    {
+      forum: 'Apache Pulsar Meetup x PingCAP Infra Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/7520647658000',
+      presenter: 'Penghui Li, Yong Zhang',
+      date: 'December 2019',
+      title: "Transaction preview of Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/transaction-preview-of-apache-pulsar'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Shanghai',
+      forum_link: 'https://www.huodongxing.com/event/5515876233300',
+      presenter: 'Xiaolong Ran, Guangning E',
+      date: 'November 2019',
+      title: "Pulsarctl & Pulsar Manager",
+      link: 'https://www.slideshare.net/streamnative/pulsarctl-pulsar-manager'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Shanghai',
+      forum_link: 'https://www.huodongxing.com/event/5515876233300',
+      presenter: 'Jennifer Huang',
+      date: 'November 2019',
+      title: "Apache Pulsar Community",
+      link: 
'https://www.slideshare.net/streamnative/apache-pulsar-communityjennifer'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Shanghai',
+      forum_link: 'https://www.huodongxing.com/event/5515876233300',
+      presenter: 'Penghui Li, Bo Cong, Jia Zhai',
+      date: 'November 2019',
+      title: "Preview of Apache Pulsar 2.5.0",
+      link: 
'https://www.slideshare.net/streamnative/preview-of-apache-pulsar-250'
+    },
+    {
+      forum: 'COSCon\'19',
+      forum_link: 'https://kaiyuanshe.cn/activity/summit/coscon-2019/',
+      presenter: 'Jennifer Huang',
+      date: 'November, 2019',
+      title: "Apache Pulsar: A borderless community",
+      link: 
'https://www.slideshare.net/streamnative/apache-pulsaraborderlesscommunityjennifer'
+    },
+    {
+      forum: 'COSCon\'19',
+      forum_link: 'https://kaiyuanshe.cn/activity/summit/coscon-2019/',
+      presenter: 'Yu Liu',
+      date: 'November, 2019',
+      title: "Cos con19 about Pulsar",
+      link: 'https://www.slideshare.net/streamnative/cos-con19-pulsaryuliu'
+    },
+    {
+      forum: 'Flink Forward Europe',
+      forum_link: 'https://europe-2019.flink-forward.org/',
+      presenter: 'Sijie Guo',
+      date: 'October 2019',
+      title: "Query Pulsar Streams using Apache Flink",
+      link: 
'https://www.slideshare.net/streamnative/query-pulsar-streams-using-apache-flink'
+    },
+    {
+      forum: 'Strata Data Conference | New York',
+      forum_link: 'https://conferences.oreilly.com/strata/strata-ny',
+      presenter: 'Vincent Xie, Jia Zhai',
+      date: 'September 2019',
+      title: "How Orange Financial combat financial frauds over 50M 
transactions a day using Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/how-orange-financial-combat-financial-frauds-over-50m-transactions-a-day-using-apache-pulsar-176284080'
+    },
+    {
+      forum: 'ApacheCon NA 2019',
+      forum_link: 'https://www.apachecon.com/acna19/',
+      presenter: 'Xiaolong Ran',
+      date: 'September 2019',
+      title: "Serverless Event Streaming with Pulsar Functions",
+      link: 
'https://www.slideshare.net/streamnative/serverless-event-streaming-with-pulsar-functions-171597848'
+    },
+    {
+      forum: 'ApacheCon NA 2019',
+      forum_link: 'https://www.apachecon.com/acna19/',
+      presenter: 'Penghui Li, Jia Zhai',
+      date: 'September 2019',
+      title: "Building Zhaopin's enterprise event center on Apache Pulsar",
+      link: 
'https://www.slideshare.net/streamnative/building-zhaopins-enterprise-event-center-on-apache-pulsar'
+    },
+    {
+      forum: '',
+      forum_link: '',
+      presenter: 'Sijie Guo',
+      date: 'August 2019',
+      title: "When Apache Pulsar meets Apache Flink",
+      link: 
'https://www.slideshare.net/streamnative/when-apache-pulsar-meets-apache-flink'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/1502359221000',
+      presenter: 'Sijie Guo, Yong Zhang',
+      date: 'August 2019',
+      title: "Transaction Support in Pulsar 2.5.0",
+      link: 
'https://www.slideshare.net/streamnative/transaction-support-in-pulsar-250'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/1502359221000',
+      presenter: 'Yijie Shen',
+      date: 'August 2019',
+      title: "Integrating Apache Pulsar with Big Data Ecosystem",
+      link: 
'https://www.slideshare.net/streamnative/8-integrate-apachepulsarwithbigdataecosystem'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/1502359221000',
+      presenter: 'Penghui Li, Bo Cong',
+      date: 'August 2019',
+      title: "How Zhaopin contributes to Pulsar community",
+      link: 
'https://www.slideshare.net/streamnative/3-zhaopin-inpulsarcommunity-165096725'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/1502359221000',
+      presenter: 'Jia Zhai',
+      date: 'August 2019',
+      title: "Kafka on Pulsar(KOP)",
+      link: 'https://www.slideshare.net/streamnative/2-kafkaonpulsarjia'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Beijing',
+      forum_link: 'https://www.huodongxing.com/event/1502359221000',
+      presenter: 'Nozomi Kurihara',
+      date: 'August 2019',
+      title: "Apache Pulsar at Yahoo!JAPAN",
+      link: 
'https://www.slideshare.net/streamnative/1-apache-pulsaratyahoojapan-165095533'
+    },
+    {
+      forum: '',
+      forum_link: '',
+      presenter: 'Sijie Guo',
+      date: 'June 2019',
+      title: "What's new in apache pulsar 2.4.0",
+      link: 
'https://www.slideshare.net/streamnative/whats-new-in-apache-pulsar-240'
+    },
+    {
+      forum: 'Apache Pulsar Meetup | Shenzhen',
+      forum_link: 'https://www.huodongxing.com/event/9495713659500',
+      presenter: 'Yijie Shen',
+      date: 'June 2019',
+      title: 'A Unified Platform for Real-time Storage and Processing - Apache 
Pulsar as Stream Storage, Apache Spark for Processing as an example',
+      link: 
'https://www.slideshare.net/streamnative/a-unified-platform-for-realtime-storage-and-processing'
+    },
+    {
+      forum: 'Ray Forward Beijing Meetup',
+      forum_link: 'https://tech.antfin.com/community/activities/698',
+      presenter: 'Sijie Guo',
+      date: 'June 2019',
+      title: 'Serverless Event Streaming with Pulsar Functions',
+      link: 
'https://www.slideshare.net/streamnative/serverless-event-streaming-with-pulsar-functions'
+    },
+    {
+      forum: 'Flink Forward San Francisco 2019',
+      forum_link: 'https://sf-2019.flink-forward.org/',
+      presenter: 'Sijie Guo',
+      date: 'April 2019',
+      title: 'Elastic Data Processing with Apache Flink and Apache Pulsar',
+      link: 
'https://www.slideshare.net/streamnative/elastic-data-processing-with-apache-flink-and-apache-pulsar'
+    },
+    {
+      forum: 'Strata Data San Francisco 2019',
+      forum_link: '',
+      presenter: 'Penghui Li, Sijie Guo',
+      date: 'March 2019',
+      title: 'How Zhaopin built its Event Center using Apache Pulsar',
+      link: 
'https://www.slideshare.net/streamnative/how-zhaopin-built-its-event-center-using-apache-pulsar-152691364'
+    },
+    {
+      forum: 'Strata San Jose',
+      forum_link: 'https://conferences.oreilly.com/strata/strata-ca',
+      presenter: 'Matteo Merli',
+      date: 'March 2018',
+      title: 'Effectively-once semantics in Apache Pulsar',
+      link: 
'https://www.slideshare.net/merlimat/effectivelyonce-semantics-in-apache-pulsar'
+    },
+    {
+      forum: '',
+      forum_link: '',
+      presenter: 'Matteo Merli',
+      date: 'November 2016',
+      title: 'Pulsar: a distributed pub-sub platform',
+      link: 
'https://www.slideshare.net/merlimat/pulsar-distributed-pubsub-platform'
+    },
+    {
+      forum: 'Bay Area Hadoop Meetup',
+      forum_link: 'https://www.meetup.com/hadoop',
+      presenter: 'Matteo Merli',
+      date: 'October 2016',
+      title: 'Pulsar: a highly scalable, low-latency pub-sub messaging system',
+      link: 
'https://www.slideshare.net/ydn/october-2016-hug-pulsar-a-highly-scalable-low-latency-pubsub-messaging-system'
+    }
+  ]
+}
diff --git a/site2/website-next/data/team.js b/site2/website-next/data/team.js
new file mode 100644
index 0000000..2253e7c
--- /dev/null
+++ b/site2/website-next/data/team.js
@@ -0,0 +1,264 @@
+module.exports = {
+  committers: [
+    {
+      name: 'Ali Ahmed',
+      apacheId: 'aahmed',
+      roles: 'Committer'
+    },
+    {
+      name: 'Addison Higham',
+      apacheId: 'addisonj',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Bo Cong',
+      apacheId: 'bogong',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Boyang Jerry Peng',
+      apacheId: 'jerrypeng',
+      org: 'Streamlio',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Brad McMillen',
+      apacheId: 'bradtm',
+      org: 'Yahoo',
+      roles: 'Committer, PMC',
+    },
+    {
+      name: 'Chris Kellogg',
+      apacheId: 'cckellogg',
+      org: 'Splunk',
+      roles: 'Committer'
+    },
+    {
+      name: 'Daniel Blankensteiner',
+      apacheId: 'blankensteiner',
+      roles: 'Committer'
+    },
+    {
+      name: 'David Fisher',
+      apacheId: 'wave',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Enrico Olivelli',
+      apacheId: 'eolivelli',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Fangbin Sun',
+      apacheId: 'sunfangbin',
+      roles: 'Committer'
+    },
+    {
+      name: 'Francis Christopher Liu',
+      apacheId: 'toffer',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Guangning E',
+      apacheId: 'guangning',
+      roles: 'Committer'
+    },
+    {
+      name: 'Hang Chen',
+      apacheId: 'chenhang',
+      org: 'BIGO Technology',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Hiroyuki Sakai',
+      apacheId: 'hrsakai',
+      org: 'Yahoo Japan Corporation',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Huanli Meng',
+      apacheId: 'huanlimeng',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Ivan Brendan Kelly',
+      apacheId: 'ivank',
+      org: 'Streamlio',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Jai Asher',
+      apacheId: 'jai1',
+      org: 'Yahoo',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Jennifer Huang',
+      apacheId: 'hjf',
+      org: 'StreamNative',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Jia Zhai',
+      apacheId: 'zhaijia',
+      org: 'StreamNative',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Jim Jagielski',
+      apacheId: 'jim',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Joe Francis',
+      apacheId: 'joef',
+      org: 'Yahoo',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Lari Hotari',
+      apacheId: 'lhotari',
+      org: 'DataStax',
+      roles: 'Committer'
+    },
+    {
+      name: 'Lin Lin',
+      apacheId: 'linlin',
+      org: 'Tencent',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Ludwig Pummer',
+      apacheId: 'ludwigp',
+      org: 'Yahoo',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Masahiro Sakamoto',
+      apacheId: 'massakam',
+      org: 'Yahoo Japan Corporation',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Masakazu Kitajo',
+      apacheId: 'maskit',
+      org: '',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Matteo Merli',
+      apacheId: 'mmerli',
+      org: 'Streamlio',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Nozomi Kurihara',
+      apacheId: 'nkurihar',
+      org: 'Yahoo Japan Corporation',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'P. Taylor Goetz',
+      apacheId: 'ptgoetz',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Penghui Li',
+      apacheId: 'penghui',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Rajan Dhabalia',
+      apacheId: 'rdhabalia',
+      org: 'Yahoo',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Ran Gao',
+      apacheId: 'rgao',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Rui Fu',
+      apacheId: 'rfu',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Sahaya Andrews',
+      apacheId: 'andrews',
+      org: 'Yahoo',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Sanjeev Kulkarni',
+      apacheId: 'sanjeevrk',
+      org: 'Streamlio',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Sebastián Schepens',
+      apacheId: 'sschepens',
+      org: 'MercadoLibre',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Siddharth Boobna',
+      apacheId: 'sboobna',
+      org: 'Salesforce',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Sijie Guo',
+      apacheId: 'sijie',
+      org: 'StreamNative',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Xiaolong Ran',
+      apacheId: 'rxl',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Yijie Shen',
+      apacheId: 'yjshen',
+      org: 'KUAISHOU',
+      roles: 'Committer'
+    },
+    {
+      name: 'Yu Liu',
+      apacheId: 'liuyu',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Yuki Shiga',
+      apacheId: 'yushiga',
+      org: 'Yahoo Japan Corporation',
+      roles: 'Committer, PMC'
+    },
+    {
+      name: 'Yunze Xu',
+      apacheId: 'xyz',
+      org: 'StreamNative',
+      roles: 'Committer'
+    },
+    {
+      name: 'Yuto Furuta',
+      apacheId: 'k2la',
+      org: 'Yahoo Japan Corporation',
+      roles: 'Committer'
+    },
+    {
+      name: 'Yong Zhang',
+      apacheId: 'yong',
+      org: 'StreamNative',
+      roles: 'Committer'
+    }
+  ]
+}
diff --git a/site2/website-next/data/users.js b/site2/website-next/data/users.js
new file mode 100644
index 0000000..da1f2c2
--- /dev/null
+++ b/site2/website-next/data/users.js
@@ -0,0 +1,339 @@
+module.exports = [
+    {
+        name: 'Kingsoft Cloud',
+        url: 'https://www.ksyun.com/',
+        logo: 'https://fe.ksyun.com/header/images/pc/logo.png?a048d39f',
+        logo_white: true
+    },
+    {
+        name: 'Narvar',
+        url: 'https://corp.narvar.com/',
+        logo: 
'https://assets-global.website-files.com/5d278e4646ba9e55d6c67475/5d49ce69c03a64b2d8466816_Logo%20-%20Colored.svg',
+    },
+    {
+        name: 'Giggso',
+        url: 'https://giggso.com/',
+        logo: 
'https://www.giggso.com/wp-content/uploads/2021/06/logo-giggs.png',
+    },
+    {
+        name: 'STICorp',
+        url: 'https://www.sticorp.com.br/',
+        logo: 
'https://sticorp.com.br/wp-content/uploads/2021/02/logo-sticorp.png',
+    },
+    {
+        name: 'Verizon Media',
+        url: 'https://www.verizonmedia.com/',
+        logo: 
'https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Verizon_Media_2019_logo.svg/1200px-Verizon_Media_2019_logo.svg.png',
+        featured: 1
+    },
+    {
+        name: 'Yahoo! JAPAN',
+        url: 'https://www.yahoo.co.jp/',
+        logo: 'https://s.yimg.jp/images/top/sp2/cmn/logo-170307.png',
+        featured: 2
+    },
+    {
+        name: 'Zhaopin',
+        url: 'https://www.zhaopin.com/',
+        logo: 
'https://fecdn5.zhaopin.cn/www/assets/zhaopin.4659478df1ec9a2e6ed76997a64884f6.png'
+    },
+    {
+        name: 'Onde',
+        url: 'https://onde.app/',
+        logo: 
'https://pbs.twimg.com/profile_images/1142024893229346818/JlCmThRZ_200x200.png',
+    },
+    {
+        name: 'Overstock',
+        url: 'https://www.overstock.com/',
+        logo: 'https://ak1.ostkcdn.com/img/mxc/OSTK_MAIN_LOGO_20181127KCH.jpg'
+    },
+    {
+        name: 'Ndustrial.io',
+        url: 'https://www.ndustrial.io/',
+        logo: 
'https://images.squarespace-cdn.com/content/v1/56df41f2f699bb94c7a2c6fc/1552657060081-WX86GJXHX7UK81RGE6YU/ke17ZwdGBToddI8pDm48kKCofG1A85AnHnyK5g0bGkJZw-zPPgdn4jUwVcJE1ZvWQUxwkmyExglNqGp0IvTJZUJFbgE-7XRK3dMEBRBhUpzRPjxD400fzchYtVcY_asIzZyz67rHxPkx39rBmDbrxrXjNbFEDrPRRKbjQDhrWWQ/ndustrial.png'
+    },
+    {
+        name: 'Nutanix',
+        url: 'https://www.nutanix.com/',
+        logo: 'https://www.zuora.com/wp-content/uploads/2017/05/nutanix.png',
+        featured: 4
+    },
+    {
+        name: 'The Hut Group',
+        url: 'https://www.thg.com',
+        logo: 
'https://1000logos.net/wp-content/uploads/2020/09/THG-Logo-1024x640.png'
+    },
+    {
+        name: 'Turtlequeue',
+        url: 'https://turtlequeue.com',
+        logo: 'https://turtlequeue.com/logo_black.png'
+    },
+    {
+        name: 'ProxyClick',
+        url: 'https://www.proxyclick.com/',
+        logo: 
'https://www.proxyclick.com/hubfs/assets/images/logo-positive.svg'
+    },
+    {
+        name: 'Toast',
+        url: 'https://toasttab.com',
+        logo: 'https://cdn2.hubspot.net/hubfs/412971/toast-restaurant-pos.png'
+    },
+    {
+        name: 'Quantel AI',
+        url: 'http://quantel.ai/',
+        logo: 
'https://static.wixstatic.com/media/7c19eb_41a090c255c94d19bc37cca9777c1d90~mv2.jpg/v1/fill/w_314,h_270,al_c,q_80,usm_0.66_1.00_0.01/Quantel-final%20white%20bg.webp'
+    },
+    {
+        name: 'Splunk',
+        url: 'https://splunk.com/',
+        logo: 
'https://www.splunk.com/content/dam/splunk-blogs/images/2017/02/splunk-logo.png',
+        featured: 5
+    },
+    {
+        name: 'StreamNative',
+        url: 'https://streamnative.io/',
+        logo: 
'https://streamnative.io/assets/static/sn-logo-vertical-dark.c516648.a34f97839dee38e7499aa0c21d0b2255.png',
+    },
+    {
+        name: 'EMQ',
+        url: 'https://www.emqx.io/',
+        logo: 'https://www.emqx.io/images/logo.png',
+    },
+    {
+        name: 'Tencent',
+        url: 'https://www.tencent.com',
+        logo: 
'http://pluspng.com/img-png/tencent-png-tencent-logo-logotype-emblem-2-7537.png',
+        featured: 3
+    },
+    {
+        name: 'Comcast',
+        url: 'https://corporate.comcast.com/',
+        logo: 
'https://corporate.comcast.com/resources/corporate/assets/images/svg/logo-desktop.svg'
+    },
+    {
+        name: 'China Mobile',
+        url: 'https://www.chinamobileltd.com/',
+        logo: 'https://www.chinamobileltd.com/en/images/global/logo.svg'
+    },
+    {
+        name: 'VipKid',
+        url: 'https://t.vipkid.com.cn/',
+        logo: 
'https://s.vipkidstatic.com/fe-static/teacher/mkt-pc/img/e74f189.svg'
+    },
+    {
+        name: 'Vivy',
+        url: 'https://www.vivy.com/de/startseite/',
+        logo: 'https://www.vivy.com/fileadmin/vivy-startpage/vivy_logo.svg'
+    },
+    {
+        name: 'IoTium',
+        url: 'https://www.iotium.io/',
+        logo: 
'https://www.iotium.io/site/wp-content/uploads/2018/04/IoTium-logo.jpg'
+    },
+    {
+        name: 'One Click Retail',
+        url: 'https://oneclickretail.com/',
+        logo: 
'https://www.ascentialedge.com/themes/contrib/custom/images/edge-by-ascential.svg',
+        logo_white: true
+    },
+    {
+        name: 'Tuya',
+        url: 'https://en.tuya.com/',
+        logo: 'https://static1.tuyaus.com/static/portal_intl/img/e25eefa.png'
+    },
+    {
+        name: 'China Telecom',
+        url: 'https://www.chinatelecom-h.com/',
+        logo: 'https://www.chinatelecom-h.com/en/images/global/logo.png'
+    },
+    {
+        name: 'Kafkaesque',
+        url: 'https://kafkaesque.io/',
+        logo: 
'https://kafkaesque.io/wp-content/uploads/2019/04/color_logo_with_background.svg'
+    },
+    {
+        name: 'OKCoin',
+        url: 'https://www.okcoin.com/',
+        logo: 
'https://i0.wp.com/blog.okcoin.com/wp-content/uploads/2019/08/OKCoin-Logo-Spring2019-250x60px-01.png?fit=251%2C62&ssl=1',
+    },
+    {
+        name: 'BestPay',
+        url: 'https://www.bestpay.com.cn/',
+        logo: 'https://www.bestpay.com.cn/global/oig/images/logo.png'
+    },
+    {
+        name: '360',
+        url: 'https://www.360.cn/',
+        logo: 'http://p2.ssl.qhimg.com/t01d91636862957f76e.png'
+    },
+    {
+        name: 'Lakala',
+        url: 'http://www.lakala.com/',
+        logo: 'http://www.lakala.com/templets/default/image/temp/logo.png'
+    },
+    {
+        name: 'Huya',
+        url: 'https://www.huya.com/',
+        logo: 'https://a.msstatic.com/huya/main/img/logo2.png',
+        logo_white: true
+    },
+    {
+        name: 'CTWing',
+        url: 'https://www.ctwing.cn/',
+        logo: 'https://www.ctwing.cn/r/cms/www/default/images/public/logo.png'
+    },
+    {
+        name: 'Globalegrow E-Commerce',
+        url: 'https://www.globalegrow.com/',
+        logo: 'https://static.globalegrow.com/dist/images/domeimg/ch/logo.jpg'
+    },
+    {
+        name: 'YunZhiHuLian',
+        url: 'https://www.weihudashi.com',
+        logo: 'https://www.weihudashi.com/image/header-logo.png'
+    },
+    {
+        name: 'XiaoDuoAI',
+        url: 'https://www.xiaoduoai.com/',
+        logo: 
'https://cdn.xiaoduoai.com/official-site/dist/assets/img/indexPage/xiaoduo_logo_en_white.843927.png',
+        logo_white: true
+    },
+    {
+        name: 'Shihong',
+        url: 'https://shihong.net.cn',
+        logo: 'https://www.shihong.net.cn/website/static/src/img/shihong1.png'
+    },
+    {
+        name: 'CleverCloud',
+        url: 'https://www.clever-cloud.com/en/',
+        logo: 
'https://www.clever-cloud.com/images/brand-assets/logos/v2/logo_on_white.svg'
+    },
+    {
+        name: 'OVHcloud',
+        url: 'https://www.ovhcloud.com/',
+        logo: 'https://www.ovh.com/world/images/logo/ovhLogoColor.svg'
+    },
+    {
+        name: 'BrandsEye',
+        url: 'https://www.brandseye.com/',
+        logo: 'https://www.brandseye.com/theme-images/brandseye-logo-v2.png'
+    },
+    {
+        name: 'Max Kelsen',
+        url: 'https://maxkelsen.com/',
+        logo: 'https://maxkelsen.com/imgs/logo/Max-Kelsen-logo-black.png'
+    },
+    {
+        name: 'HSL Developer Community of Helsinki Regional Transport 
Authority',
+        url: 'https://dev.hsl.fi/',
+        logo: 
'https://pbs.twimg.com/profile_images/2507371771/9toyr6r5ngcozfwg42zv_400x400.png'
+    },
+    // {
+    //     name: 'Ottoo',
+    //     url: 'https://ottoo.com',
+    //     logo: 'https://ottoo.com/assets/images/ottoo-logo.svg'
+    // },
+    {
+        name: 'MercadoLibre',
+        url: 'https://www.mercadolibre.com/',
+        logo: 
'https://d1.awsstatic.com/case-studies/LATAM/mercadolibre.1d9d3766bb06e60948f1c5ce8851ce0eac63b349.png'
+    },
+    {
+        name: 'BIGO',
+        url: 'https://www.bigo.sg/',
+        logo: 
'https://static-web.bigolive.tv/as/bigo-static/official_website/pc/img/about/logo-blue-big.png',
+    },
+    {
+        name: 'Keytop',
+        url: 'https://www.ikeytop.com/',
+        logo: 
'https://static.wixstatic.com/media/ecbdea_434ae22f85ed4e93ba3fdc39c7141c3f~mv2.png/v1/fill/w_424,h_116,al_c,usm_0.66_1.00_0.01/Keytop_logo.png',
+    },
+    {
+        name: 'Zhihu',
+        url: 'https://www.zhihu.com/',
+        logo: 
'https://pic4.zhimg.com/80/v2-a47051e92cf74930bedd7469978e6c08_hd.png',
+    },
+    {
+        name: 'Newland',
+        url: 'http://www.nlsoft.com.cn/',
+        logo: 'http://www.nlsoft.com.cn/images/common/logo.png',
+    },
+    {
+        name: 'PalFish',
+        url: 'https://www.ipalfish.com/',
+        logo: 'https://s04.cdn.ipalfish.com/kid/img/logo.ad4731cb.png',
+    },
+    {
+        name: 'Dada Group',
+        url: 'https://about.imdada.cn',
+        logo: 
'https://fe.imdada.cn/alaskan/static/logo_color-aaed10c6738b703ad2b54c17f4c3f114.png',
+    },
+    {
+        name: 'Huawei Cloud',
+        url: 'https://www.huaweicloud.com',
+        logo: 
'https://res.hc-cdn.com/cnpm-common-resource/2.0.2/base/header/components/images/logo.png',
+    },
+    {
+        name: 'Su Ning',
+        url: 'https://www.suning.com',
+        logo: 'https://image1.suning.cn/uimg/cms/img/159642507148437980.png',
+    },
+    {
+        name: 'Pingan Securites',
+        url: 'https://stock.pingan.com',
+        logo: 
'https://stock.pingan.com/static/uploads/softdowm/2018-10-9/upload_c9ac4929e293f5109623b541740618ba.png',
+    },
+    {
+        name: 'Ge Tui',
+        url: 'https://www.getui.com',
+        logo: 'https://gt-static.getui.com/getui_pc/client/img/e33ecd9.svg',
+        logo_white: true
+    },
+    {
+        name: 'DataStax',
+        url: 'https://datastax.com',
+        logo: 
'https://www.datastax.com/sites/default/files/inline-images/datastax-logotype-negative.png',
+        logo_white: false
+    },
+    {
+        name: 'KAISA',
+        url: 'https://www.kaisafin.com',
+        logo: 'https://www.kaisafin.com/images/logo.svg',
+    },
+    {
+        name: 'Bairong.Inc',
+        url: 'http://www.brgroup.com',
+        logo: 'http://www.brgroup.com/_nuxt/img/d2a976e.png',
+          logo_white: true
+    },
+    {
+        name: 'Itcast.cn',
+        url: 'http://www.itcast.cn',
+        logo: 'http://www.itcast.cn/2018czgw/images/logo2.png',
+    },
+    {
+        name: 'Appen',
+        url: 'https://www.appen.com.cn/',
+        logo: 
'https://resources.appen.com/wp-content/uploads/2020/03/no-tagline.svg',
+    },
+    {
+        name: 'Pandio',
+        url: 'https://pandio.com',
+        logo: 
'https://pandio-public-assets.s3-us-west-2.amazonaws.com/pandio_225-05.png',
+    },
+    {
+        name: 'Deposit-Solutions',
+        url: 'https://www.deposit-solutions.com/',
+        logo: 
'https://media-exp1.licdn.com/dms/image/C4E0BAQGWAAW9iYFSwA/company-logo_200_200/0/1625219600895?e=1638403200&v=beta&t=iGNhEWlAFQDJOHAScjumctjY5M2eSU4fL4X-9kgpR2M'
+    },
+    {
+        name: 'Macrometa',
+        url: 'https://macrometa.com',
+        logo: 
'https://uploads-ssl.webflow.com/5fa9e94bc848ae335afdd627/602ae50ae801b44f15185683_logo-moc-blue.png',
+    },
+    {
+        name: 'Softtech',
+        url: 'https://softtech.com.tr/en/homepage/',
+        logo: 
'https://softtech.com.tr/wp-content/uploads/2017/12/SOFTTECH-LOGO.png',
+    }
+].sort((a, b) => (a.name > b.name) ? 1 : -1);
diff --git a/site2/website-next/docusaurus.config.js 
b/site2/website-next/docusaurus.config.js
index f0b9863..36b40b7 100644
--- a/site2/website-next/docusaurus.config.js
+++ b/site2/website-next/docusaurus.config.js
@@ -98,6 +98,9 @@ module.exports = {
   favicon: "img/favicon.ico",
   organizationName: "apache",
   projectName: "pulsar",
+  customFields: {
+    githubUrl,
+  },
   themeConfig: {
     navbar: {
       title: "",
@@ -145,26 +148,7 @@ module.exports = {
     },
     footer: {
       style: "dark",
-      links: [
-        {
-          title: "More",
-          items: [
-            {
-              label: "Docs",
-              to: "/docs",
-            },
-            {
-              label: "Blog",
-              to: "/blog",
-            },
-            {
-              label: "GitHub",
-              href: "https://github.com/apache/pulsar";,
-            },
-          ],
-        },
-      ],
-      copyright: `Copyright © ${new Date().getFullYear()} Apache Pulsar, Inc.`,
+      copyright: `Inc.Copyright © ${new Date().getFullYear()} The Apache 
Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache 
feather logo are trademarks of The Apache Software Foundation.`,
     },
     prism: {
       // theme: lightCodeTheme,
@@ -210,5 +194,6 @@ module.exports = {
         fromExtensions: ["md"],
       },
     ],
+    "./postcss-tailwind-loader",
   ],
 };
diff --git a/site2/website-next/package.json b/site2/website-next/package.json
index 833240c..dfe0459 100644
--- a/site2/website-next/package.json
+++ b/site2/website-next/package.json
@@ -17,13 +17,20 @@
     "@docusaurus/core": "2.0.0-beta.6",
     "@docusaurus/plugin-client-redirects": "^2.0.0-beta.6",
     "@docusaurus/preset-classic": "2.0.0-beta.6",
+    "@emotion/react": "^11.5.0",
+    "@emotion/styled": "^11.3.0",
     "@mdx-js/react": "^1.6.22",
+    "@mui/material": "^5.0.4",
     "@svgr/webpack": "^5.5.0",
     "clsx": "^1.1.1",
     "file-loader": "^6.2.0",
+    "install": "^0.13.0",
+    "npm": "^8.1.0",
     "prism-react-renderer": "^1.2.1",
     "react": "^17.0.2",
     "react-dom": "^17.0.2",
+    "react-markdown": "^7.0.1",
+    "react-svg": "^14.0.15",
     "remark-linkify-regex": "^1.0.0",
     "replace-in-file": "^6.2.0",
     "url-loader": "^4.1.1"
@@ -39,5 +46,14 @@
       "last 1 firefox version",
       "last 1 safari version"
     ]
+  },
+  "devDependencies": {
+    "autoprefixer": "^10.3.7",
+    "postcss": "^8.3.9",
+    "postcss-cli": "^9.0.1",
+    "postcss-import": "^14.0.2",
+    "postcss-nested": "^5.0.6",
+    "postcss-preset-env": "^6.7.0",
+    "tailwindcss": "^2.2.17"
   }
 }
diff --git a/site2/website-next/postcss-tailwind-loader.js 
b/site2/website-next/postcss-tailwind-loader.js
new file mode 100644
index 0000000..9cce0d4
--- /dev/null
+++ b/site2/website-next/postcss-tailwind-loader.js
@@ -0,0 +1,14 @@
+module.exports = function (context, options) {
+  return {
+    name: "postcss-tailwindcss-loader",
+    configurePostCss(postcssOptions) {
+      postcssOptions.plugins.push(
+        require("postcss-import"),
+        require("tailwindcss"),
+        require("postcss-nested"),
+        require("autoprefixer")
+      );
+      return postcssOptions;
+    },
+  };
+};
diff --git a/site2/website-next/src/components/HomepageFeatures.js 
b/site2/website-next/src/components/HomepageFeatures.js
index 68ac525..c2497cc 100644
--- a/site2/website-next/src/components/HomepageFeatures.js
+++ b/site2/website-next/src/components/HomepageFeatures.js
@@ -1,12 +1,15 @@
 import React from "react";
 import clsx from "clsx";
 import styles from "./HomepageFeatures.module.css";
+import ReactMarkdown from "react-markdown";
+import { docUrl } from "../utils/index";
 
-const FeatureList = [
+const FeatureList = (language) => [
   {
-    title: "Pulsar Functions",
+    // title: "Pulsar Functions",
+    title: `[Pulsar Functions](${docUrl("functions-overview", language)})`,
     // Svg: require("../../static/img/undraw_docusaurus_mountain.svg").default,
-    description: (
+    content: (
       <>
         Easy to deploy, lightweight compute process, developer-friendly APIs, 
no
         need to run your own stream processing engine.
@@ -14,9 +17,12 @@ const FeatureList = [
     ),
   },
   {
-    title: "Proven in production",
+    title: `[Proven in production](${docUrl(
+      "concepts-architecture-overview",
+      language
+    )})`,
     // Svg: require("../../static/img/undraw_docusaurus_tree.svg").default,
-    description: (
+    content: (
       <>
         Run in production at Yahoo! scale for over 5 years, with millions of
         messages per second across millions of topics.
@@ -24,32 +30,71 @@ const FeatureList = [
     ),
   },
   {
-    title: "Horizontally scalable",
+    title: `[Horizontally scalable](${docUrl(
+      "concepts-architecture-overview",
+      language
+    )})`,
     // Svg: require("../../static/img/undraw_docusaurus_react.svg").default,
-    description: <>Expand capacity seamlessly to hundreds of nodes.</>,
+    content: <>Expand capacity seamlessly to hundreds of nodes.</>,
+  },
+  {
+    content:
+      "Low publish latency (< 5ms) at scale with strong durability 
guarantees.",
+    title: `[Low latency with durability](${docUrl(
+      "concepts-architecture-overview",
+      language
+    )})`,
+  },
+  {
+    content:
+      "Configurable replication between data centers across multiple 
geographic regions.",
+    title: `[Geo-replication](${docUrl("administration-geo", language)})`,
+  },
+  {
+    content:
+      "Built from the ground up as a multi-tenant system. Supports isolation, 
authentication, authorization and quotas.",
+    title: `[Multi-tenancy](${docUrl("concepts-multi-tenancy", language)})`,
+  },
+  {
+    content:
+      "Persistent message storage based on Apache BookKeeper. IO-level 
isolation between write and read operations.",
+    title: `[Persistent storage](${docUrl(
+      "concepts-architecture-overview#persistent-storage",
+      language
+    )})`,
+  },
+  {
+    content:
+      "Flexible messaging models with high-level APIs for Java, Go, Python, 
C++, Node.js, WebSocket and C#.",
+    title: `[Client libraries](${docUrl("client-libraries", language)})`,
+  },
+  {
+    content:
+      "REST Admin API for provisioning, administration, tools and monitoring. 
Can be deployed on bare metal, Kubernetes, Amazon Web Services(AWS), and 
DataCenter Operating System(DC/OS).",
+    title: `[Operability](${docUrl("admin-api-overview", language)})`,
   },
 ];
 
-function Feature({ Svg, title, description }) {
+function Feature({ Svg, title, content }) {
   return (
-    <div className={clsx("col col--4")}>
+    <div className={clsx("col col--4 mb-24")}>
       {/* <div className="text--center">
         <Svg className={styles.featureSvg} alt={title} />
       </div> */}
       <div className="text--center padding-horiz--md">
-        <h3>{title}</h3>
-        <p>{description}</p>
+        <ReactMarkdown children={title} className="text-2xl font-bold 
text-primary" />
+        <p className="mt-6 text-xl">{content}</p>
       </div>
     </div>
   );
 }
 
-export default function HomepageFeatures() {
+export default function HomepageFeatures(props) {
   return (
     <section className={styles.features}>
       <div className="container">
         <div className="row">
-          {FeatureList.map((props, idx) => (
+          {FeatureList(props.language || "").map((props, idx) => (
             <Feature key={idx} {...props} />
           ))}
         </div>
diff --git a/site2/website-next/src/components/Svg.js 
b/site2/website-next/src/components/Svg.js
new file mode 100644
index 0000000..3d3b1a2
--- /dev/null
+++ b/site2/website-next/src/components/Svg.js
@@ -0,0 +1,24 @@
+import React from "react";
+import { ReactSVG } from "react-svg";
+import useBaseUrl from "@docusaurus/useBaseUrl";
+
+export default function Svg(props) {
+  return (
+    <ReactSVG
+      src={useBaseUrl(props.src)}
+      beforeInjection={(svg) => {
+        svg.setAttribute(
+          "style",
+          "" +
+            (!isNaN(parseFloat(props.width))
+              ? "width: " + props.width + ";"
+              : "") +
+            (!isNaN(parseFloat(props.height))
+              ? "height: " + props.height + ";"
+              : "")
+        );
+        svg.setAttribute("class", props.className);
+      }}
+    />
+  );
+}
diff --git a/site2/website-next/src/css/custom.css 
b/site2/website-next/src/css/custom.css
index ff2d075..a15083b 100644
--- a/site2/website-next/src/css/custom.css
+++ b/site2/website-next/src/css/custom.css
@@ -5,7 +5,22 @@
  * work well for content-centric websites.
  */
 
-/* You can override the default Infima variables here. */
+.tailwind {
+  @tailwind base;
+  @tailwind components;
+  @tailwind utilities;
+  @tailwind screens;
+}
+
+/* .section {
+  @apply max-w-screen-xl xl:max-w-screen-xl px-8 container;
+} */
+
+svg {
+  width: inherit;
+  height: inherit;
+}
+
 :root {
   --ifm-color-primary: #198fff;
   --ifm-color-primary-dark: rgb(33, 175, 144);
@@ -15,6 +30,8 @@
   --ifm-color-primary-lighter: rgb(102, 212, 189);
   --ifm-color-primary-lightest: rgb(146, 224, 208);
   --ifm-code-font-size: 95%;
+  --ifm-container-width: 1280px;
+  --ifm-container-width-xl: 1536px;
 }
 
 .docusaurus-highlight-code-line {
@@ -24,6 +41,6 @@
   padding: 0 var(--ifm-pre-padding);
 }
 
-html[data-theme='dark'] .docusaurus-highlight-code-line {
+html[data-theme="dark"] .docusaurus-highlight-code-line {
   background-color: rgba(0, 0, 0, 0.3);
 }
diff --git a/site2/website-next/src/pages/index.js 
b/site2/website-next/src/pages/index.js
index 61d476d..a412a18 100644
--- a/site2/website-next/src/pages/index.js
+++ b/site2/website-next/src/pages/index.js
@@ -1,40 +1,73 @@
-import React from 'react';
-import clsx from 'clsx';
-import Layout from '@theme/Layout';
-import Link from '@docusaurus/Link';
-import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
-import styles from './index.module.css';
-import HomepageFeatures from '../components/HomepageFeatures';
+import React from "react";
+import clsx from "clsx";
+import Layout from "@theme/Layout";
+import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
+import styles from "./index.module.css";
+import HomepageFeatures from "../components/HomepageFeatures";
+import Svg from "../components/Svg";
+import { docUrl, githubUrl } from "../utils/index";
+import Stack from "@mui/material/Stack";
+import Button from "@mui/material/Button";
 
-function HomepageHeader() {
-  const {siteConfig} = useDocusaurusContext();
+function HomepageHeader(props) {
+  const { siteConfig } = useDocusaurusContext();
   return (
-    <header className={clsx('hero hero--primary', styles.heroBanner)}>
-      <div className="container">
-        <h1 className="hero__title">{siteConfig.title}</h1>
-        <p className="hero__subtitle">{siteConfig.tagline}</p>
-        <div className={styles.buttons}>
-          <Link
-            className="button button--secondary button--lg"
-            to="/docs">
-            Read️ the Docs
-          </Link>
-        </div>
+    <header className={clsx("tailwind hero", styles.heroBanner)}>
+      <div className="flex flex-col items-center container mt-24">
+        <Svg src="/img/pulsar.svg" className="h-36" />
+        <h3 className="mt-12 font-medium mb-12">{siteConfig.tagline}</h3>
+        <Stack spacing={2} direction="row">
+          <Button
+            variant="contained"
+            size="large"
+            href={docUrl("", props.language)}
+            className="text-white"
+          >
+            READ THE DOCS
+          </Button>
+          <Button
+            variant="outlined"
+            size="large"
+            href={githubUrl()}
+            className="text-primary"
+          >
+            GITHUB
+          </Button>
+        </Stack>
       </div>
     </header>
   );
 }
 
 export default function Home() {
-  const {siteConfig} = useDocusaurusContext();
+  const { siteConfig } = useDocusaurusContext();
   return (
     <Layout
       title={`Hello from ${siteConfig.title}`}
-      description="Description will go into a meta tag in <head />">
+      description="Description will go into a meta tag in <head />"
+    >
       <HomepageHeader />
-      <main>
-        <HomepageFeatures />
+      <main className="tailwind">
+        <div className="mt-8">
+          <HomepageFeatures />
+        </div>
       </main>
+      <p align="center">
+        <small style={{ color: "black", fontSize: "1.7rem" }}>
+          <a className="hover:no-underline" href="/powered-by">
+            Companies Powered by Pulsar
+          </a>
+        </small>
+      </p>
+      <div style={{ textAlign: "center" }}>
+        <p>
+          Apache Pulsar is available under the{" "}
+          <a href="https://www.apache.org/licenses";>
+            Apache License, version 2.0
+          </a>
+          .
+        </p>
+      </div>
     </Layout>
   );
 }
diff --git a/site2/website-next/src/theme/Root.js 
b/site2/website-next/src/theme/Root.js
new file mode 100644
index 0000000..2d27da6
--- /dev/null
+++ b/site2/website-next/src/theme/Root.js
@@ -0,0 +1,14 @@
+import React from "react";
+import { ThemeProvider } from "@mui/material/styles";
+import theme from "./material-theme";
+
+// Default implementation, that you can customize
+function Root({ children }) {
+  return (
+    <>
+      <ThemeProvider theme={theme}>{children}</ThemeProvider>
+    </>
+  );
+}
+
+export default Root;
diff --git a/site2/website-next/src/theme/material-theme.js 
b/site2/website-next/src/theme/material-theme.js
new file mode 100644
index 0000000..20c9ce2
--- /dev/null
+++ b/site2/website-next/src/theme/material-theme.js
@@ -0,0 +1,11 @@
+import { createTheme } from "@mui/material/styles";
+
+export default createTheme({
+  palette: {
+    primary: {
+      light: "#198fff",
+      main: "#198fff",
+      dark: "#198fff",
+    },
+  },
+});
diff --git a/site2/website-next/src/utils/index.js 
b/site2/website-next/src/utils/index.js
new file mode 100644
index 0000000..adbdf80
--- /dev/null
+++ b/site2/website-next/src/utils/index.js
@@ -0,0 +1,21 @@
+const users = require(`../../data/users.js`);
+const featuredUsers = users.filter((x) => x.hasOwnProperty("featured"));
+featuredUsers.sort((a, b) => (a.featured > b.featured ? 1 : -1));
+
+const siteConfig = require(`../../docusaurus.config.js`);
+
+export function imgUrl(img) {
+  return siteConfig.baseUrl + "img/" + img;
+}
+
+export function docUrl(doc, language) {
+  return siteConfig.baseUrl + "docs/" + (language ? language + "/" : "") + doc;
+}
+
+export function pageUrl(page, language) {
+  return siteConfig.baseUrl + (language ? language + "/" : "") + page;
+}
+
+export function githubUrl() {
+  return siteConfig.customFields.githubUrl;
+}
diff --git a/site2/website-next/static/img/pulsar.svg 
b/site2/website-next/static/img/pulsar.svg
new file mode 100644
index 0000000..bd063c7
--- /dev/null
+++ b/site2/website-next/static/img/pulsar.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 223.44 
43.08"><defs><style>.cls-1{fill:#188fff;}.cls-2{fill:#464e56;}</style></defs><title>Asset
 2</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" 
data-name="Layer 1"><path class="cls-1" 
d="M61,13.73H46.09C42.06,6,37.8,0,32,0c-7.55,0-11.1,6.59-14.53,13l-.3.56H0v3.81H10c3.53,0,4.25,1.19,4.25,1.19-2.77,4.3-6.1,8.55-11.65,8.55H0v4H2.62c10.76,0,15.46-8.73,19.23-15.74C25.31,8.91,27.72,5,32,5c4.44,0,9.11,9.66,13.22,18.19.6,1.24,
 [...]
\ No newline at end of file
diff --git a/site2/website-next/tailwind.config.js 
b/site2/website-next/tailwind.config.js
new file mode 100644
index 0000000..60fdd35
--- /dev/null
+++ b/site2/website-next/tailwind.config.js
@@ -0,0 +1,46 @@
+const plugin = require("tailwindcss/plugin");
+const colors = require("tailwindcss/colors");
+
+module.exports = {
+  purge: ["./src/**/*.html", "./src/**/*.js", "./src/**/*.tsx"],
+  darkMode: false,
+  theme: {
+    colors: {
+      ...colors,
+      primary: "#198fff",
+    },
+  },
+  variants: {
+    extend: {},
+  },
+  plugins: [
+    plugin(function ({ addBase, config }) {
+      addBase({
+        h1: {
+          fontSize: config("theme.fontSize.6xl"),
+          fontWeight: config("theme.fontWeight.bold"),
+        },
+        h2: {
+          fontSize: config("theme.fontSize.5xl"),
+          fontWeight: config("theme.fontWeight.bold"),
+        },
+        h3: {
+          fontSize: config("theme.fontSize.4xl"),
+          fontWeight: config("theme.fontWeight.bold"),
+        },
+        h4: {
+          fontSize: config("theme.fontSize.3xl"),
+          fontWeight: config("theme.fontWeight.bold"),
+        },
+        h5: {
+          fontSize: config("theme.fontSize.2xl"),
+          fontWeight: config("theme.fontWeight.bold"),
+        },
+        h6: {
+          fontSize: config("theme.fontSize.xl"),
+          fontWeight: config("theme.fontWeight.bold"),
+        },
+      });
+    }),
+  ],
+};

Reply via email to