diff --git a/_data/participants.yml b/_data/participants.yml
index c99c515d..35ed381d 100644
--- a/_data/participants.yml
+++ b/_data/participants.yml
@@ -2,6 +2,7 @@
link: https://www.percona.com/valkey-redis/support/
image:
path: /img/percona.svg
+ strip: /img/percona-horizontal.svg
alt: Percona Logo
company: >
Percona is an open source database software, support, and services company that believes organizations should have full control over their data infrastructure.
@@ -73,6 +74,7 @@
link: https://www.ericsson.com/
image:
path: /img/ericsson.svg
+ strip: /img/ericsson-horizontal.svg
alt: Ericsson logo
company: >
Founded in 1876, Ericsson is a Swedish communication technology and services provider. The company offers software, services, and infrastructure for information and communications technology used by telecommunications operators, including traditional telecommunications, Internet Protocol networking equipment and business support solutions. Ericsson is headquartered in Stockholm, Sweden.
@@ -91,6 +93,7 @@
link: https://www.instaclustr.com/platform/
image:
path: /img/netapp_instaclustr.svg
+ strip: /img/netapp_instaclustr-trimmed.svg
alt: NetApp Instaclustr logo
company: >
The [Instaclustr Platform](https://www.instaclustr.com/platform/) offers a unified approach to optimizing every facet of your data infrastructure, streamlining the process and enhancing your data ecosystem using open source software.
@@ -165,6 +168,7 @@
Run it [self-hosted](https://hub.docker.com/r/betterdb/monitor), including fully air-gapped, or as [managed cloud](https://betterdb.com/login).
image:
path: /img/betterdb.svg
+ strip: /img/betterdb-trimmed.svg
alt: BetterDB Logo
- name: anynines
@@ -204,6 +208,7 @@
link: https://www.freshworks.com
image:
path: /img/freshworks.png
+ strip: /img/freshworks-horizontal.png
alt: Freshworks Logo
company: >
Freshworks (NASDAQ: FRSH) is a leading provider of uncomplicated, AI-powered software that delivers exceptional employee and customer experiences. Its service, IT, and CRM solutions are designed to be quick to deploy and easy to use, and are trusted by organizations of all sizes worldwide.
@@ -226,6 +231,7 @@
link: 'https://solanica.io/'
image:
path: /img/solanica.svg
+ strip: /img/solanica-trimmed.svg
alt: 'Solanica Logo'
company: >
Solanica is a core contributor to the OpenEverest project and a pioneer in cloud-native data platform automation. The Solanica Platform delivers seamless deployment, observability, and expert support for teams. Designed for AI, analytics, and modern workloads, Solanica helps organizations unlock the full potential of their database infrastructure.
diff --git a/content/community/_index.md b/content/community/_index.md
index f2b4b8e4..98ec29cc 100644
--- a/content/community/_index.md
+++ b/content/community/_index.md
@@ -1,34 +1,72 @@
+++
title = "Community"
-description = "Join the Valkey community"
-template = "community.html"
+description = "Join the Valkey community: contribute code, docs, and content, speak at events, and connect with other Valkey users."
+template = "community-home.html"
page_template = "community.html"
[extra]
+hero = { title = "Unlock. Contribute. Repeat.", subtitle = "Every key contributor started somewhere: a bug report, a talk, a line of code. This community is built one key at a time. Yours starts here.", image = "/img/community/hero-community.jpg" }
+
+connect = { title = "Connect with us", description = "Ask questions, share ideas, and meet the Valkey community.", links = [
+ { url = "/slack", text = "Join Slack" },
+ { url = "https://github.com/orgs/valkey-io/discussions", text = "GitHub Discussions" }
+] }
+
+photos = [
+ { src = "/img/community/community-photo-01.jpg", alt = "Two Valkey speakers presenting on a conference stage" },
+ { src = "/img/community/community-photo-02.jpg", alt = "Valkey maintainers at the KeySpace Beijing community meetup" },
+ { src = "/img/community/community-photo-08.jpg", alt = "Valkey China community members at the Tencent Cloud booth" },
+ { src = "/img/community/community-photo-12.jpg", alt = "A speaker presenting at PyCon AU with Valkey as a sponsor", position = "center 25%" },
+ { src = "/img/community/community-photo-03.jpg", alt = "Community members celebrating Valkey's second birthday" },
+ { src = "/img/community/community-photo-07.jpg", alt = "Contributors posing with a wooden Valkey logo at the birthday celebration" },
+ { src = "/img/community/community-photo-05.jpg", alt = "Valkey team members greeting visitors at a conference booth" },
+ { src = "/img/community/community-photo-06.jpg", alt = "Two speakers on stage during a Valkey conference talk" },
+ { src = "/img/community/community-photo-13.jpg", alt = "Valkey community members at the SCaLE conference booth" },
+ { src = "/img/community/community-photo-09.jpg", alt = "Panel discussion at the KeySpace Beijing community event" },
+ { src = "/img/community/community-photo-10.jpg", alt = "Valkey community members at the Unlocked Conference photo booth" },
+ { src = "/img/community/community-photo-11.jpg", alt = "Student contributors wearing Valkey shirts at a community event" },
+ { src = "/img/community/community-photo-04.jpg", alt = "React Hyderabad and Valkey community members at a meetup hosted at Amazon" }
+]
+
cards = [
- { icon = "icon-question.svg", title = "Ask Questions", description = "If you have any inquiries about Valkey, feel free to join the conversation on our GitHub discussions or chat with us on Slack.", links = [
- { url = "https://github.com/orgs/valkey-io/discussions", text = "GitHub Repository" },
- { url = "https://valkey.io/slack", text = "Slack" }
+ { icon = "icon-code.svg", title = "Contribute to Core", description = "Help build the Valkey engine itself. Browse open issues, read the contributing guide, and submit a pull request to the core repository.", links = [
+ { url = "https://github.com/valkey-io/valkey", text = "GitHub Repository" },
+ { url = "https://github.com/valkey-io/valkey/blob/unstable/CONTRIBUTING.md", text = "Contributing Guide" }
] },
- { icon = "icon-bug.svg", title = "Report Bugs", description = "If you encounter any issues while using Valkey, please help us improve the project by filing a bug report at our GitHub repository.", links = [
- { url = "https://github.com/valkey-io/valkey/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=%5BBUG%5D", text = "GitHub Repository" }
+ { icon = "icon-modules.svg", title = "Contribute to Modules", description = "Extend Valkey's capabilities by contributing to modules such as Valkey Search, Valkey Bloom, Valkey JSON, or the Rust module SDK (valkeymodule-rs).", links = [
+ { url = "https://github.com/orgs/valkey-io/repositories", text = "Valkey Modules on GitHub" }
] },
- { icon = "icon-users.svg", title = "Connect on Social Media", description = "Stay updated and connect with us on our social media platforms.", links = [
- { url = "https://www.linkedin.com/company/valkey/", text = "LinkedIn" },
- { url = "https://bsky.app/profile/valkeyio.bsky.social/", text = "Bluesky" },
- { url = "https://twitter.com/valkey_io", text = "Twitter" }
+ { icon = "icon-bug.svg", title = "Submit a Bug / Security Vulnerability", description = "If you encounter an issue while using Valkey, please help us improve the project by filing a bug report. For potential security issues, please follow our security policy instead of opening a public issue.", links = [
+ { url = "https://github.com/valkey-io/valkey/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=%5BBUG%5D", text = "Report a Bug" },
+ { url = "https://github.com/valkey-io/valkey/blob/unstable/SECURITY.md", text = "Security Policy" }
] },
- { icon = "icon-bulb.svg", title = "Suggest Features", description = "We value your ideas! If you have a suggestion for a new feature, please submit a feature request on our GitHub.", links = [
- { url = "https://github.com/valkey-io/valkey/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=%5BNEW%5D", text = "GitHub" }
+ { icon = "icon-book.svg", title = "Contribute to Documentation", description = "Help make Valkey easier to learn and use. Documentation content, tutorials, and topic guides live in the valkey-doc repository and welcome pull requests.", links = [
+ { url = "https://github.com/valkey-io/valkey-doc", text = "valkey-doc Repository" }
] },
- { icon = "icon-sheild.svg", title = "Security Concerns", description = "For any potential security issues, please refer to our Security Policy.", links = [
- { url = "https://github.com/valkey-io/valkey/blob/unstable/SECURITY.md", text = "Learn more" }
+ { icon = "icon-bulb.svg", title = "Feature Requests", description = "We value your ideas! If you have a suggestion for a new feature, submit a feature request on GitHub and help shape the roadmap.", links = [
+ { url = "https://github.com/valkey-io/valkey/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=%5BNEW%5D", text = "Submit a Feature Request" }
] },
- { icon = "icon-book.svg", title = "Community Conduct", description = "If you experience any issues with community members behavior, kindly check our Code of Conduct for guidance.", links = [
- { url = "/code_of_conduct", text = "Learn more" }
+ { icon = "icon-content.svg", title = "Content: Blogs / Videos", description = "Share your Valkey story. Write a blog post, record a demo, or contribute a tutorial video to help others learn from your experience.", links = [
+ { url = "https://github.com/valkey-io/community/blob/main/1.%20Community%20Blog%20Guidelines.md", text = "Blog Guidelines" },
+ { url = "https://github.com/valkey-io/community/blob/main/2.%20Youtube-video-guideline.md", text = "Video Guidelines" }
+ ] },
+ { icon = "icon-mic.svg", title = "Speak", description = "Speaking at a conference? Let us know. Looking for speaking opportunities? CFPs are also listed in the Slack channel.", links = [
+ { url = "https://valkey-oss-developer.slack.com/archives/C0B8XC9A30Q", text = "#valkey-speakers" }
+ ] },
+ { icon = "icon-users.svg", title = "Meetups / Events", description = "Join or organize a Valkey meetup near you, and attend an upcoming event.", links = [
+ { url = "/community/meetup-groups/", text = "Meetup Groups & Charter" },
+ { url = "https://github.com/valkey-io/valkey-io.github.io/issues/new?template=new-meetup-group.md", text = "Start a New Meetup Group" },
+ { url = "/events/", text = "Upcoming Events" }
+ ] },
+ { icon = "icon-news.svg", title = "Get the Latest News", description = "Stay updated and connect with us on our social media platforms and newsletter.", links = [
+ { url = "https://www.linkedin.com/company/valkey/", text = "LinkedIn" },
+ { url = "https://bsky.app/profile/valkeyio.bsky.social", text = "Bluesky" },
+ { url = "https://x.com/valkey_io", text = "X" },
+ { url = "#email-signup", text = "Newsletter" }
] }
]
+
+conduct = { title = "Community Conduct", description = "Help keep the Valkey community welcoming, inclusive, and respectful for everyone.", link = { url = "/code_of_conduct", text = "Read the Code of Conduct" } }
+++
-# Community
-## How to Contribute with us?
-We welcome your involvement in the Valkey community! Here are several ways you can contribute:
+## Ways to contribute
+Pick the path that matches how you want to help.
diff --git a/sass/_community.scss b/sass/_community.scss
new file mode 100644
index 00000000..0ac71188
--- /dev/null
+++ b/sass/_community.scss
@@ -0,0 +1,454 @@
+// Community landing page (templates/community-home.html)
+//
+// The "Ways to contribute" tiles reuse the shared .community-card styles
+// from _valkey.scss. Everything here is specific to the landing page:
+// participant logo strip, photo hero, connect bar, photo carousel, and the
+// Code of Conduct block.
+
+$community-purple-900: #2d2471;
+$community-purple-800: #35247e;
+$community-blue-500: #5b6fff;
+$community-ink: #072150;
+
+// Shared pieces --------------------------------------------------------------
+
+.community-home-kicker {
+ display: inline-block;
+ margin: 0;
+ color: $community-blue-500;
+ font-size: 1.1rem;
+ font-weight: 800;
+ letter-spacing: 0.16em;
+ text-transform: uppercase;
+ text-decoration: none;
+
+ &:hover {
+ color: $community-purple-800;
+ }
+}
+
+.community-home-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0.8rem 1.3rem;
+ border: 1px solid $community-ink;
+ border-radius: 24px;
+ background: #fff;
+ color: $community-ink;
+ font-size: 1.3rem;
+ font-weight: 700;
+ line-height: 1.2;
+ text-decoration: none;
+ white-space: nowrap;
+ transition: background 0.15s, color 0.15s, border 0.15s;
+
+ &:hover {
+ background: $community-ink;
+ color: #fff;
+ }
+
+ &-light {
+ border-color: #fff;
+ background: #fff;
+ color: $community-purple-900;
+
+ &:hover {
+ background: transparent;
+ color: #fff;
+ }
+ }
+}
+
+// Participant logo strip ----------------------------------------------------
+
+.community-logo-band {
+ padding: 1.7rem 2rem 1.6rem;
+ background: #fff;
+ border-bottom: 1px solid #e9ebf4;
+}
+
+.community-logo-band-inner {
+ max-width: 1280px;
+ margin: 0 auto;
+
+ .community-home-kicker {
+ margin-bottom: 1.1rem;
+ }
+}
+
+.community-logo-row {
+ position: relative;
+ overflow: hidden;
+ white-space: nowrap;
+ mask-image: linear-gradient(to right, transparent 0%, #000 5%, #000 95%, transparent 100%);
+ -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 5%, #000 95%, transparent 100%);
+}
+
+.community-logo-track {
+ display: flex;
+ align-items: center;
+ width: max-content;
+ animation: community-logo-marquee 55s linear infinite;
+ will-change: transform;
+}
+
+// Pause only for keyboard users tabbing through the logos; a hover pause
+// made the strip feel stalled whenever the cursor rested on it.
+.community-logo-row:focus-within .community-logo-track {
+ animation-play-state: paused;
+}
+
+.community-logo-set {
+ display: flex;
+ flex-shrink: 0;
+ align-items: center;
+ gap: 3.4rem;
+ padding-right: 3.4rem;
+}
+
+// Each cell is the same height so the row stays level; the image inside is
+// sized per logo (--logo-height, set at build time from the image's aspect
+// ratio) so square marks and long wordmarks carry similar visual weight.
+.community-logo-cell {
+ display: flex;
+ flex: 0 0 auto;
+ align-items: center;
+ justify-content: center;
+ height: 48px;
+
+ img {
+ display: block;
+ width: auto;
+ height: var(--logo-height, 24px);
+ max-width: 160px;
+ max-height: var(--logo-height, 24px);
+ object-fit: contain;
+ }
+}
+
+@keyframes community-logo-marquee {
+ from { transform: translateX(0); }
+ to { transform: translateX(-50%); }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .community-logo-row {
+ overflow-x: auto;
+ mask-image: none;
+ -webkit-mask-image: none;
+ }
+
+ .community-logo-track {
+ animation: none;
+ transform: none;
+ }
+
+ .community-logo-set[aria-hidden="true"] {
+ display: none;
+ }
+}
+
+// Hero -----------------------------------------------------------------------
+
+.community-home-hero {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 320px;
+ padding: 6rem 2rem;
+ overflow: hidden;
+ background-color: #30186e;
+ background-position: center;
+ background-size: cover;
+ color: #fff;
+ text-align: center;
+
+ @include respond-min(768px) {
+ min-height: 420px;
+ }
+}
+
+.community-home-hero-copy {
+ position: relative;
+ z-index: 1;
+ max-width: 900px;
+
+ h1 {
+ margin: 0 0 2rem;
+ color: #fff;
+ font-size: 3.6rem;
+ font-weight: 700;
+ line-height: 1.05;
+ letter-spacing: -0.03em;
+
+ @include respond-min(480px) {
+ font-size: 4rem;
+ letter-spacing: -0.04em;
+ }
+
+ @include respond-min(768px) {
+ font-size: 6.1rem;
+ line-height: 1.02;
+ }
+ }
+
+ p {
+ max-width: 760px;
+ margin: 0 auto;
+ color: rgba(255, 255, 255, 0.92);
+ font-size: 1.8rem;
+ line-height: 1.55;
+
+ @include respond-min(768px) {
+ font-size: 2rem;
+ }
+ }
+}
+
+// Connect with us and photo carousel sit on a faint blue canvas so the white
+// Connect card and its shadow read against the page.
+.community-home-canvas {
+ padding: 0.1px 0; // keeps child margins inside the tinted area
+ background: #f8faff;
+}
+
+// Connect with us -----------------------------------------------------------
+
+.community-home-connect {
+ display: flex;
+ flex-direction: column;
+ gap: 2rem;
+ max-width: 1160px;
+ margin: 3.4rem auto;
+ padding: 2.7rem 3.4rem;
+ background: #fff;
+ border-radius: 18px;
+ box-shadow: 0 10px 28px rgba(60, 60, 130, 0.08);
+
+ @include respond-min(900px) {
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ @media (max-width: 1200px) {
+ margin-left: 2rem;
+ margin-right: 2rem;
+ }
+
+ h2 {
+ margin: 0 0 0.6rem;
+ color: $community-purple-800;
+ font-size: 3rem;
+ font-weight: 700;
+ }
+
+ p {
+ margin: 0;
+ color: #47506b;
+ font-size: 1.6rem;
+ }
+}
+
+.community-home-connect-actions {
+ display: flex;
+ flex-wrap: wrap;
+ flex-shrink: 0;
+ gap: 1.1rem;
+}
+
+// Photo carousel ------------------------------------------------------------
+
+.community-home-photos {
+ max-width: 1160px;
+ margin: 4.4rem auto 4.8rem;
+
+ @media (max-width: 1200px) {
+ margin-left: 2rem;
+ margin-right: 2rem;
+ }
+}
+
+.community-home-section-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 1.2rem;
+}
+
+.community-home-carousel-controls {
+ display: flex;
+ align-items: center;
+ gap: 0.9rem;
+}
+
+.community-home-carousel-button {
+ width: 34px;
+ height: 34px;
+ padding: 0;
+ border: 1px solid #bfc6dd;
+ border-radius: 50%;
+ background: #fff;
+ color: $community-purple-800;
+ font-size: 1.9rem;
+ line-height: 1;
+ cursor: pointer;
+
+ &:hover:not(:disabled) {
+ border-color: $community-purple-800;
+ }
+
+ &:disabled {
+ opacity: 0.38;
+ cursor: default;
+ }
+}
+
+.community-home-carousel-status {
+ min-width: 34px;
+ color: #606985;
+ font-size: 1.1rem;
+ font-weight: 700;
+ text-align: center;
+}
+
+.community-home-photo-viewport {
+ overflow: hidden;
+ border-radius: 16px;
+}
+
+.community-home-photo-track {
+ display: flex;
+ gap: 18px;
+ transition: transform 0.45s ease;
+ will-change: transform;
+
+ figure {
+ position: relative;
+ flex: 0 0 calc((100% - 36px) / 3);
+ margin: 0;
+ aspect-ratio: 3 / 2;
+ overflow: hidden;
+ border-radius: 16px;
+ box-shadow: 0 10px 28px rgba(47, 36, 113, 0.13);
+
+ @media (max-width: 1024px) {
+ flex-basis: calc((100% - 18px) / 2);
+ }
+
+ @media (max-width: 640px) {
+ flex-basis: 100%;
+ }
+ }
+
+ img {
+ display: block;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .community-home-photo-track {
+ transition: none;
+ }
+}
+
+// Ways to contribute --------------------------------------------------------
+
+// Section band colour and heading rhythm match the mockup; the shared
+// .community-section used by event subpages keeps its own colour.
+.community-section-home {
+ background: #edf2ff;
+ padding-bottom: 6rem; // band continues below the last row of tiles, as in the mockup
+
+ .community-header {
+ padding: 5.2rem 2rem 0;
+
+ h2 {
+ margin: 0 0 0.8rem;
+ color: $community-purple-800;
+ font-size: 3.6rem;
+ }
+
+ p {
+ color: #576077;
+ font-size: 1.6rem;
+ }
+ }
+}
+
+// The landing page centres tile copy like the mockup and uses the mockup's
+// lighter type; the shared card style used elsewhere keeps left-aligned
+// text. All nine tiles share one height so the grid reads as a clean 3x3.
+.community-card-grid-centered {
+ grid-auto-rows: 1fr;
+ margin-top: 2.8rem;
+
+ @media (max-width: 1100px) {
+ padding: 0 2rem;
+ }
+
+ @media (max-width: 1024px) {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ @media (max-width: 600px) {
+ grid-template-columns: 1fr;
+ }
+
+ .community-card {
+ padding: 3rem 2.6rem;
+
+ h3 {
+ margin-bottom: 1rem;
+ font-size: 1.9rem;
+ }
+
+ p {
+ color: #53586b;
+ font-size: 1.5rem;
+ line-height: 1.48;
+ text-align: center;
+ }
+
+ .btn {
+ padding: 0.6rem 1.1rem;
+ font-size: 1.3rem;
+ }
+ }
+}
+
+// Code of Conduct -----------------------------------------------------------
+
+.community-home-conduct {
+ max-width: 1100px;
+ margin: 4.8rem auto;
+ padding: 4.2rem 3rem;
+ border-radius: 18px;
+ background: linear-gradient(110deg, #332079, #5668e8);
+ color: #fff;
+ text-align: center;
+
+ @media (max-width: 1100px) {
+ margin-left: 2rem;
+ margin-right: 2rem;
+ }
+
+ h2 {
+ margin: 0 0 1rem;
+ color: #fff;
+ font-size: 3.2rem;
+ font-weight: 700;
+ }
+
+ p {
+ max-width: 680px;
+ margin: 0 auto 1.9rem;
+ color: rgba(255, 255, 255, 0.88);
+ font-size: 1.6rem;
+ }
+}
diff --git a/sass/css/styles.scss b/sass/css/styles.scss
index 8f7c1389..41154fc5 100755
--- a/sass/css/styles.scss
+++ b/sass/css/styles.scss
@@ -8,6 +8,7 @@
@import '../pygments';
@import '../valkey';
@import '../email-form';
+@import '../community';
/* Styling for Markdown Tables */
table {
diff --git a/static/assets/js/community.js b/static/assets/js/community.js
new file mode 100644
index 00000000..fc9d0a0f
--- /dev/null
+++ b/static/assets/js/community.js
@@ -0,0 +1,75 @@
+/**
+ * Community page photo carousel
+ *
+ * Pages through the "Community in action" photos three at a time on
+ * desktop, two on tablet, and one on mobile. Prev/next buttons and a
+ * "current / total" status are the only controls; there is no auto-scroll.
+ */
+
+(function () {
+ 'use strict';
+
+ function init() {
+ var track = document.getElementById('communityPhotoTrack');
+ var prev = document.getElementById('communityPhotoPrev');
+ var next = document.getElementById('communityPhotoNext');
+ var status = document.getElementById('communityPhotoStatus');
+ if (!track || !prev || !next || !status) return;
+
+ var viewport = track.parentElement;
+ var photos = track.querySelectorAll('figure');
+ var total = photos.length;
+ var page = 0;
+
+ function perPage() {
+ var width = window.innerWidth;
+ if (width <= 640) return 1;
+ if (width <= 1024) return 2;
+ return 3;
+ }
+
+ function gap() {
+ var value = window.getComputedStyle(track).columnGap || window.getComputedStyle(track).gap;
+ var parsed = parseFloat(value);
+ return isNaN(parsed) ? 0 : parsed;
+ }
+
+ function pageCount() {
+ return Math.max(1, Math.ceil(total / perPage()));
+ }
+
+ function update() {
+ var n = perPage();
+ var pages = pageCount();
+ if (page > pages - 1) page = pages - 1;
+ if (page < 0) page = 0;
+
+ var g = gap();
+ var cardWidth = (viewport.clientWidth - g * (n - 1)) / n;
+ // Never scroll past the last photo: the final page may be partial.
+ var startIndex = Math.min(page * n, Math.max(0, total - n));
+ track.style.transform = 'translateX(-' + (startIndex * (cardWidth + g)) + 'px)';
+
+ status.textContent = (page + 1) + ' / ' + pages;
+ prev.disabled = page === 0;
+ next.disabled = page === pages - 1;
+ }
+
+ prev.addEventListener('click', function () { page -= 1; update(); });
+ next.addEventListener('click', function () { page += 1; update(); });
+
+ var resizeTimeout;
+ window.addEventListener('resize', function () {
+ clearTimeout(resizeTimeout);
+ resizeTimeout = setTimeout(update, 100);
+ });
+
+ update();
+ }
+
+ if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', init);
+ } else {
+ init();
+ }
+})();
diff --git a/static/img/betterdb-trimmed.svg b/static/img/betterdb-trimmed.svg
new file mode 100644
index 00000000..45e8ac99
--- /dev/null
+++ b/static/img/betterdb-trimmed.svg
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/static/img/community/community-photo-01.jpg b/static/img/community/community-photo-01.jpg
new file mode 100644
index 00000000..3e25065b
Binary files /dev/null and b/static/img/community/community-photo-01.jpg differ
diff --git a/static/img/community/community-photo-02.jpg b/static/img/community/community-photo-02.jpg
new file mode 100644
index 00000000..35163d60
Binary files /dev/null and b/static/img/community/community-photo-02.jpg differ
diff --git a/static/img/community/community-photo-03.jpg b/static/img/community/community-photo-03.jpg
new file mode 100644
index 00000000..49029815
Binary files /dev/null and b/static/img/community/community-photo-03.jpg differ
diff --git a/static/img/community/community-photo-04.jpg b/static/img/community/community-photo-04.jpg
new file mode 100644
index 00000000..f1a47b8e
Binary files /dev/null and b/static/img/community/community-photo-04.jpg differ
diff --git a/static/img/community/community-photo-05.jpg b/static/img/community/community-photo-05.jpg
new file mode 100644
index 00000000..cb0dd0c8
Binary files /dev/null and b/static/img/community/community-photo-05.jpg differ
diff --git a/static/img/community/community-photo-06.jpg b/static/img/community/community-photo-06.jpg
new file mode 100644
index 00000000..27d8c0ae
Binary files /dev/null and b/static/img/community/community-photo-06.jpg differ
diff --git a/static/img/community/community-photo-07.jpg b/static/img/community/community-photo-07.jpg
new file mode 100644
index 00000000..a4e887af
Binary files /dev/null and b/static/img/community/community-photo-07.jpg differ
diff --git a/static/img/community/community-photo-08.jpg b/static/img/community/community-photo-08.jpg
new file mode 100644
index 00000000..6fc8a21c
Binary files /dev/null and b/static/img/community/community-photo-08.jpg differ
diff --git a/static/img/community/community-photo-09.jpg b/static/img/community/community-photo-09.jpg
new file mode 100644
index 00000000..7b3b8613
Binary files /dev/null and b/static/img/community/community-photo-09.jpg differ
diff --git a/static/img/community/community-photo-10.jpg b/static/img/community/community-photo-10.jpg
new file mode 100644
index 00000000..c77e22e1
Binary files /dev/null and b/static/img/community/community-photo-10.jpg differ
diff --git a/static/img/community/community-photo-11.jpg b/static/img/community/community-photo-11.jpg
new file mode 100644
index 00000000..7606cb97
Binary files /dev/null and b/static/img/community/community-photo-11.jpg differ
diff --git a/static/img/community/community-photo-12.jpg b/static/img/community/community-photo-12.jpg
new file mode 100644
index 00000000..885bae91
Binary files /dev/null and b/static/img/community/community-photo-12.jpg differ
diff --git a/static/img/community/community-photo-13.jpg b/static/img/community/community-photo-13.jpg
new file mode 100644
index 00000000..f08cf53d
Binary files /dev/null and b/static/img/community/community-photo-13.jpg differ
diff --git a/static/img/community/hero-community.jpg b/static/img/community/hero-community.jpg
new file mode 100644
index 00000000..c7ade20e
Binary files /dev/null and b/static/img/community/hero-community.jpg differ
diff --git a/static/img/ericsson-horizontal.svg b/static/img/ericsson-horizontal.svg
new file mode 100644
index 00000000..47451442
--- /dev/null
+++ b/static/img/ericsson-horizontal.svg
@@ -0,0 +1,32 @@
+
+
diff --git a/static/img/freshworks-horizontal.png b/static/img/freshworks-horizontal.png
new file mode 100644
index 00000000..31925fa6
Binary files /dev/null and b/static/img/freshworks-horizontal.png differ
diff --git a/static/img/icon-code.svg b/static/img/icon-code.svg
new file mode 100644
index 00000000..aa4e933d
--- /dev/null
+++ b/static/img/icon-code.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/img/icon-content.svg b/static/img/icon-content.svg
new file mode 100644
index 00000000..2c865c83
--- /dev/null
+++ b/static/img/icon-content.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/img/icon-mic.svg b/static/img/icon-mic.svg
new file mode 100644
index 00000000..9ca88813
--- /dev/null
+++ b/static/img/icon-mic.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/img/icon-modules.svg b/static/img/icon-modules.svg
new file mode 100644
index 00000000..d46ef7a1
--- /dev/null
+++ b/static/img/icon-modules.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/img/icon-news.svg b/static/img/icon-news.svg
new file mode 100644
index 00000000..9dcc52e0
--- /dev/null
+++ b/static/img/icon-news.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/img/netapp_instaclustr-trimmed.svg b/static/img/netapp_instaclustr-trimmed.svg
new file mode 100644
index 00000000..b40b0b26
--- /dev/null
+++ b/static/img/netapp_instaclustr-trimmed.svg
@@ -0,0 +1,143 @@
+
+
+
+
diff --git a/static/img/percona-horizontal.svg b/static/img/percona-horizontal.svg
new file mode 100644
index 00000000..b035f020
--- /dev/null
+++ b/static/img/percona-horizontal.svg
@@ -0,0 +1,27 @@
+
+
diff --git a/static/img/solanica-trimmed.svg b/static/img/solanica-trimmed.svg
new file mode 100644
index 00000000..db234434
--- /dev/null
+++ b/static/img/solanica-trimmed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/templates/community-home.html b/templates/community-home.html
new file mode 100644
index 00000000..c2dde899
--- /dev/null
+++ b/templates/community-home.html
@@ -0,0 +1,107 @@
+{% extends "default.html" %}
+{% import "macros/community.html" as community %}
+
+{% block content %}
+{% set extra = section.extra %}
+{# Same order as the Participants page #}
+{% set participants = load_data(path="_data/participants.yml") | sort(attribute="name") %}
+
+{# Participant logo strip #}
+{% if participants and participants | length > 0 %}
+ {{ extra.hero.subtitle }}{{ extra.hero.title }}
+
{{ extra.connect.description }}
+{{ card.description }}
+{{ extra.conduct.description }}
+ {{ extra.conduct.link.text }} +