diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dae246d9..bff2bf68 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,7 +2,7 @@ name: Deploy Hugo site to Pages on: push: - branches: ["main"] + branches: ["main", "collaboration-network"] permissions: diff --git a/archetypes/community-resources.md b/archetypes/community-resources.md new file mode 100644 index 00000000..734f907b --- /dev/null +++ b/archetypes/community-resources.md @@ -0,0 +1,36 @@ +--- +title: "{{ replace .Name "-" " " | title }}" # Resource Title, e.g., "Neuromorphic Engineering Blog" +date: {{ .Date }} +# Meta Description for SEO (120-160 characters): +# Briefly describe the resource and its value to the neuromorphic community. +description: "A description of this valuable community resource." +image: "resource-logo.png" # Main logo or banner for the resource (place in this folder) +draft: true +type: "community-resources" # Do not change +video: "" # Optional: YouTube video ID for an introductory video. + +# --- Resource Details --- +# The primary type of the resource. E.g., "YouTube Channel", "Blog", "Podcast", "Community Website" +resource_type: "Website" +# The main URL to access the resource +website: "https://example.com" +# Optional: List of authors/creators. Match with contributor profiles if they exist. +author: + - "Creator Name" +# Set to true if this resource is part of our foundational supporter network. +is_supporter: false + +# --- Resource Log --- +# Add entries here to log updates, new content, or milestones related to the resource. +# Newest entries should be at the top. +resource_log: + - date: "YYYY-MM-DD" + title: "First Log Entry" + description: "Briefly describe the update, e.g., 'Launched a new video series on SNNs'." + # Optional link to the specific update/content + # link: "https://example.com/update" +--- + +Provide a more detailed overview of the resource here. This content will appear on its dedicated page. +Explain what the community can find here, who it's for, and why it's a valuable resource. +Use code with caution. \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js index 02b65418..9a6bd1a7 100755 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -1,3 +1,4 @@ +// assets/js/main.js // main script (function () { "use strict"; @@ -52,6 +53,8 @@ bubblePool.push(bubble); } let activeBubbles = new Map(); + let recentlyHidden = new Set(); + const COOLDOWN_PERIOD = BUBBLE_INTERVAL; const updateBubblePositions = () => { activeBubbles.forEach((bubble, partner) => { @@ -65,20 +68,38 @@ }; requestAnimationFrame(updateBubblePositions); + const setBubbleContent = (partner) => { + const name = partner.dataset.projectName || ''; + const description = partner.dataset.projectDescription || ''; + const contributions = partner.dataset.contributions; + + return ` +
+

${name}

+

${description}

+ ${contributions ? `
${contributions}
` : ''} +
+ `; + } + const showBubble = (partner) => { const bubble = bubblePool.find(b => b.dataset.busy === 'false'); if (!bubble) return; + partner.classList.add('is-highlighted'); bubble.dataset.busy = 'true'; activeBubbles.set(partner, bubble); - bubble.innerHTML = partner.dataset.contributions; + bubble.innerHTML = setBubbleContent(partner); bubble.classList.add('visible'); setTimeout(() => hideBubble(partner, bubble), BUBBLE_LIFETIME); }; const hideBubble = (partner, bubble) => { + partner.classList.remove('is-highlighted'); bubble.classList.remove('visible'); activeBubbles.delete(partner); - setTimeout(() => { bubble.dataset.busy = 'false'; }, 300); + recentlyHidden.add(partner); + setTimeout(() => { bubble.dataset.busy = 'false'; }, 400); + setTimeout(() => { recentlyHidden.delete(partner); }, COOLDOWN_PERIOD); }; // --- NEW: Hover-triggered bubble logic --- @@ -93,7 +114,7 @@ // Hide any random bubbles that might be showing activeBubbles.forEach((bubble, p) => hideBubble(p, bubble)); - hoverBubble.innerHTML = partner.dataset.contributions; + hoverBubble.innerHTML = setBubbleContent(partner); // Position calculation must happen *after* content is set const partnerRect = partner.getBoundingClientRect(); @@ -121,7 +142,7 @@ if (isInView) { const availablePartners = partnersWithContributions.filter(p => { - if (activeBubbles.has(p)) return false; + if (activeBubbles.has(p) || recentlyHidden.has(p)) return false; const r = p.getBoundingClientRect(); return r.left > 50 && r.right < window.innerWidth - 50; }); diff --git a/assets/scss/_typography-custom.scss b/assets/scss/_typography-custom.scss index 3b1db032..130c0de9 100644 --- a/assets/scss/_typography-custom.scss +++ b/assets/scss/_typography-custom.scss @@ -1,4 +1,5 @@ // assets/scss/_typography-custom.scss +// assets/scss/_typography-custom.scss // Define link colors as variables $link-color: var(--color-primary-new); @@ -124,6 +125,7 @@ a { // REFACTORED: Centralized Link Styling .styled-link, +.byline-link, .content :is(:where(a):not(:where([class~="not-prose"], [class~="not-prose"] *, .btn))), section a:not(.breadcrumb-link-parent, .social-link-container, .btn, .hardware-card-wide-link, .social-icon, .no-style), section a.social-link-container .social-link-text, diff --git a/assets/scss/components/_community-partners.scss b/assets/scss/components/_community-partners.scss index 65fed52a..db775d43 100644 --- a/assets/scss/components/_community-partners.scss +++ b/assets/scss/components/_community-partners.scss @@ -1,5 +1,42 @@ // assets/scss/components/_community-partners.scss .community-partners-section { + position: relative; + overflow: hidden; + background-color: #ffffff; + + > * { + position: relative; + z-index: 2; + } + + &::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; + background-image: + linear-gradient(45deg, theme('colors.body') 25%, transparent 105%), + linear-gradient(-45deg, theme('colors.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.body') 75%); + background-size: 10px 10px; + } + + .dark & { + background-color: theme('colors.darkmode.theme-dark'); + + &::after { + background-image: + linear-gradient(45deg, theme('colors.darkmode.body') 25%, transparent 105%), + linear-gradient(-45deg, theme('colors.darkmode.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.darkmode.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.darkmode.body') 75%); + } + } + .partners-slider-wrapper { overflow: hidden; -webkit-mask-image: linear-gradient(to right, transparent, black 20%, black 80%, transparent); @@ -7,10 +44,12 @@ } .partners-track { + @apply bg-white dark:bg-black; animation: scroll 40s linear infinite; &:hover { animation-play-state: paused; } + padding-bottom: 30px; } .partner-logo { @@ -19,7 +58,8 @@ transition: all 0.3s ease-in-out; } - .partner-logo-link:hover .partner-logo { + .partner-logo-link:hover .partner-logo, + .partner-logo-link.is-highlighted .partner-logo { filter: grayscale(0%); opacity: 1; transform: scale(1.05); @@ -42,9 +82,15 @@ } .contribution-bubble { - @apply absolute top-0 left-0 bg-dark dark:bg-darkmode-theme-dark text-white dark:text-darkmode-text text-xs font-semibold p-2 rounded-lg shadow-lg z-20 dark:border-2 dark:border-darkmode-border; - @apply opacity-0 invisible transition-opacity duration-300 ease-in-out; + @apply absolute top-0 left-0 dark:bg-darkmode-theme-dark text-white dark:text-darkmode-text rounded-lg shadow-lg z-40 dark:border-2 dark:border-darkmode-border; + background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary-new) 40%, black) 0%, color-mix(in srgb, var(--color-secondary-new) 40%, black) 100%); + @apply opacity-0 invisible transition-opacity ease-in-out; + transition-duration: 300ms; will-change: opacity, transform; + max-width: 280px; + padding: 0.75rem; + text-align: left; + font-weight: 400; &.visible { @apply opacity-100; @@ -56,10 +102,31 @@ content: ''; @apply absolute top-full left-1/2 -translate-x-1/2; @apply w-0 h-0 border-x-8 border-x-transparent border-t-8; - border-top-color: theme('colors.dark'); + border-top-color: color-mix(in srgb, var(--color-secondary-new) 40%, black); } } +.bubble-title { + @apply font-bold text-sm mb-1 text-white; +} + +.bubble-description { + @apply text-xs text-gray-300 dark:text-white leading-snug; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.bubble-separator { + @apply h-px bg-gray-600 dark:bg-gray-500 my-2; +} + +.bubble-contributions { + @apply text-xs font-semibold; +} + + // Dark mode styles for the bubble's tail to add a border .dark .contribution-bubble { // Border for the tail @@ -78,3 +145,45 @@ margin-top: -2px; } } + +.byline-paragraph { + @apply inline-flex items-center rounded-bl-lg rounded-br-lg px-4 py-2; + + &::before, &::after { + content: ''; + display: inline-block; + width: 30px; + height: 16px; + flex-shrink: 0; + background-size: 8px 8px; + background-color: var(--color-secondary-new); + } + + &::before { + margin-right: 0.75rem; + background-image: + linear-gradient(45deg, theme('colors.body') 25%, transparent 25%), + linear-gradient(-45deg, theme('colors.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.body') 75%); + } + &::after { + margin-left: 0.75rem; + background-image: + linear-gradient(45deg, theme('colors.body') 25%, transparent 25%), + linear-gradient(-45deg, theme('colors.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.body') 75%); + } + + .dark & { + &::before, &::after { + background-color: var(--color-primary-new); + background-image: + linear-gradient(45deg, theme('colors.darkmode.body') 25%, transparent 25%), + linear-gradient(-45deg, theme('colors.darkmode.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.darkmode.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.darkmode.body') 75%); + } + } +} diff --git a/assets/scss/custom.scss b/assets/scss/custom.scss index 8d7364e0..12ced183 100755 --- a/assets/scss/custom.scss +++ b/assets/scss/custom.scss @@ -10,6 +10,50 @@ --shadow-md-new: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } +// Hero section background with fading checkerboard +.hero-section { + position: relative; + overflow: hidden; + background-color: #ffffff; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; + background-image: + linear-gradient(45deg, theme('colors.body') 25%, transparent 100%), + linear-gradient(-45deg, theme('colors.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.body') 75%); + background-size: 10px 10px; + mask-image: linear-gradient(to bottom, black 0%, transparent 40%, transparent 60%, black 100%); + -webkit-mask-image: linear-gradient(to bottom, black 0%, transparent 40%, transparent 60%, black 100%); + } + + // Ensure content is above the pattern + > .container { + position: relative; + z-index: 1; + } +} + +.dark .hero-section { + background-color: theme('colors.darkmode.theme-dark'); + + &::before { + background-image: + linear-gradient(45deg, theme('colors.darkmode.body') 25%, transparent 100%), + linear-gradient(-45deg, theme('colors.darkmode.body') 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, theme('colors.darkmode.body') 75%), + linear-gradient(-45deg, transparent 75%, theme('colors.darkmode.body') 75%); + } +} + + .nav-dropdown.active .nav-dropdown-list { @apply lg:bg-white dark:lg:bg-darkmode-theme-dark; } diff --git a/config/_default/menus.en.toml b/config/_default/menus.en.toml index b0fc040c..5bee0003 100755 --- a/config/_default/menus.en.toml +++ b/config/_default/menus.en.toml @@ -16,8 +16,8 @@ name = "Computing Hub" url = "/neuromorphic-computing/" weight = 1 [main.params] - icon = "fas fa-brain" - description = "Your central guide to the world of neuromorphic computing." +icon = "fas fa-brain" +description = "Your central guide to the world of neuromorphic computing." [[main]] parent = "explore-resources" # Match the identifier @@ -25,8 +25,8 @@ name = "Hardware Guide" url = "/neuromorphic-computing/hardware/" weight = 2 [main.params] - icon = "fas fa-microchip" - description = "Explore specs and papers for cutting-edge neuromorphic hardware." +icon = "fas fa-microchip" +description = "Explore specs and papers for cutting-edge neuromorphic hardware." [[main]] parent = "explore-resources" # Match the identifier @@ -34,55 +34,55 @@ name = "Software Guide" url = "/neuromorphic-computing/software/" weight = 3 [main.params] - icon = "fas fa-code" - description = "Discover SNN frameworks and event-based data tools." +icon = "fas fa-code" +description = "Discover SNN frameworks and event-based data tools." [[main]] -parent = "explore-resources" # Match the identifier -name = "ONM Initiatives" -url = "/neuromorphic-computing/initiatives/" -weight = 4 +parent = "explore-resources" +name = "Community Resources" +url = "/neuromorphic-computing/community-resources/" +weight = 5 [main.params] -icon = "fas fa-rocket" -description = "Discover community-driven projects and how to get involved." +icon = "fas fa-share-nodes" +description = "A curated list of community-led blogs, channels, and projects." [[main]] parent = "explore-resources" # Match the identifier name = "Hacking Hours" url = "/neuromorphic-computing/software/hacking-hours/" -weight = 5 +weight = 6 [main.params] - icon = "fas fa-terminal" - description = "Live coding sessions exploring neuromorphic software." +icon = "fas fa-terminal" +description = "Live coding sessions exploring neuromorphic software." [[main]] parent = "explore-resources" # Match the identifier name = "Student Talks" url = "/neuromorphic-computing/student-talks/" -weight = 6 +weight = 7 [main.params] - icon = "fas fa-graduation-cap" - description = "Presentations by students and early-career researchers." +icon = "fas fa-graduation-cap" +description = "Presentations by students and early-career researchers." [[main]] parent = "explore-resources" # Match the identifier name = "Workshops" url = "/workshops/" -weight = 7 +weight = 8 [main.params] - icon = "fas fa-chalkboard-user" - description = "Expert-led workshops on key neuromorphic topics." +icon = "fas fa-chalkboard-user" +description = "Expert-led workshops on key neuromorphic topics." [[main]] parent = "explore-resources" # Add this new entry name = "Contributors" url = "/contributors/" -weight = 8 +weight = 9 [main.params] - icon = "fas fa-user-group" - description = "Meet the people building the Open Neuromorphic community." +icon = "fas fa-user-group" +description = "Meet the people building the Open Neuromorphic community." [[main]] name = "Blog" @@ -118,71 +118,77 @@ name = "Supporters" url = "/supporters/" weight = 4 +[[main]] +parent = "About" +name = "ONM Initiatives" +url = "/neuromorphic-computing/initiatives/" +weight = 5 + # --- New Footer Menus (replace the old [[footer]], [[footer_explore]], [[footer_legal]]) --- # Explore Column [[footer_explore_new]] - name = "Neuromorphic Computing Hub" - url = "/neuromorphic-computing/" - weight = 1 # Set to 1 +name = "Neuromorphic Computing Hub" +url = "/neuromorphic-computing/" +weight = 1 # Set to 1 [[footer_explore_new]] - name = "Hardware Guide" - url = "/neuromorphic-computing/hardware/" - weight = 2 # Incremented from 1 +name = "Hardware Guide" +url = "/neuromorphic-computing/hardware/" +weight = 2 # Incremented from 1 [[footer_explore_new]] - name = "Software Guide" - url = "/neuromorphic-computing/software/" - weight = 3 # Incremented from 2 +name = "Software Guide" +url = "/neuromorphic-computing/software/" +weight = 3 # Incremented from 2 [[footer_explore_new]] - name = "ONM Blog" - url = "/blog/" - weight = 4 # Incremented from 3 +name = "ONM Blog" +url = "/blog/" +weight = 4 # Incremented from 3 [[footer_explore_new]] - name = "ONM Initiatives" - url = "/neuromorphic-computing/initiatives/" - weight = 5 # Incremented from 4 +name = "ONM Initiatives" +url = "/neuromorphic-computing/initiatives/" +weight = 5 # Incremented from 4 # Community Column [[footer_community]] - name = "Get Involved" - url = "/getting-involved/" - weight = 1 +name = "Get Involved" +url = "/getting-involved/" +weight = 1 [[footer_community]] - name = "Workshops" - url = "/workshops/" - weight = 2 +name = "Workshops" +url = "/workshops/" +weight = 2 [[footer_community]] - name = "Student Talks" - url = "/neuromorphic-computing/student-talks/" - weight = 3 +name = "Student Talks" +url = "/neuromorphic-computing/student-talks/" +weight = 3 [[footer_community]] - name = "Hacking Hours" - url = "/neuromorphic-computing/software/hacking-hours/" - weight = 4 +name = "Hacking Hours" +url = "/neuromorphic-computing/software/hacking-hours/" +weight = 4 [[footer_community]] - name = "Contributors" - url = "/contributors/" - weight = 5 +name = "Contributors" +url = "/contributors/" +weight = 5 [[footer_community]] - name = "Join Our Discord" - url = "https://discord.gg/hUygPUdD8E" - weight = 6 +name = "Join Our Discord" +url = "https://discord.gg/hUygPUdD8E" +weight = 6 # About & Legal Column [[footer_legal_new]] - name = "About Open Neuromorphic" - url = "/about/" - weight = 1 +name = "About Open Neuromorphic" +url = "/about/" +weight = 1 [[footer_legal_new]] - name = "Code of Conduct" - url = "/code-of-conduct/" - weight = 2 +name = "Code of Conduct" +url = "/code-of-conduct/" +weight = 2 [[footer_legal_new]] - name = "Privacy Policy" - url = "/privacy/" - weight = 3 +name = "Privacy Policy" +url = "/privacy/" +weight = 3 [[footer_legal_new]] - name = "Terms & Conditions" - url = "/terms-conditions/" - weight = 4 +name = "Terms & Conditions" +url = "/terms-conditions/" +weight = 4 diff --git a/content/about/_index.md b/content/about/_index.md index d032bfb5..b7782ca0 100644 --- a/content/about/_index.md +++ b/content/about/_index.md @@ -39,16 +39,17 @@ ONM is dedicated to providing a comprehensive ecosystem for the neuromorphic com * **The Neuromorphic Hub:** Our curated guides to [Neuromorphic Hardware](/neuromorphic-computing/hardware/) and [Software](/neuromorphic-computing/software/) are designed to help you navigate the landscape and find the tools and platforms you need. * **Educational Content & Events:** - * Engaging **[Blog Posts](/blog/)** featuring insights, tutorials, and deep dives into neuromorphic topics. - * Interactive **[Workshops](/workshops/)** and **[Student Talks](/neuromorphic-computing/student-talks/)** sessions with experts from academia and industry. - * Live **[Hacking Hours](/neuromorphic-computing/software/hacking-hours/)** exploring software, tackling coding challenges, and discussing the latest developments. + * Engaging **[Blog Posts](/blog/)** featuring insights, tutorials, and deep dives into neuromorphic topics. + * Interactive **[Workshops](/workshops/)** and **[Student Talks](/neuromorphic-computing/student-talks/)** sessions with experts from academia and industry. + * Live **[Hacking Hours](/neuromorphic-computing/software/hacking-hours/)** exploring software, tackling coding challenges, and discussing the latest developments. * **A Collaborative Platform:** - * Our **[GitHub organization](https://github.com/open-neuromorphic)** serves as a platform for open-source neuromorphic projects. We welcome new contributions and can help migrate existing projects. - * A thriving **[Discord community](https://discord.gg/hUygPUdD8E)** for discussions, Q&A, networking, and real-time collaboration. -* **Clear Project Focus:** We concentrate on projects and resources related to: - * [Spiking Neural Networks (SNNs)](/neuromorphic-computing/software/snn-frameworks/) for training, inference, Machine Learning, and neuroscience applications. - * Event-based sensor data handling and processing. - * Digital and mixed-signal neuromorphic hardware designs and concepts. + * Our **[GitHub organization](https://github.com/open-neuromorphic)** serves as a platform for open-source neuromorphic projects. We welcome new contributions and can help migrate existing projects. + * A thriving **[Discord community](https://discord.gg/hUygPUdD8E)** for discussions, Q&A, networking, and real-time collaboration. +* **A Broad and Inclusive Scope:** Our community embraces the full spectrum of neuromorphic engineering. We welcome projects and discussions spanning from computational neuroscience and biologically plausible models to performance-driven machine learning and hardware co-design. Our focus is on fostering collaboration across diverse areas, including: + * Spiking Neural Network (SNN) frameworks for simulation, training, and inference. + * Event-based sensor technology and data processing tools. + * Digital, analog, and mixed-signal neuromorphic hardware. + * Efforts to improve interoperability and create a more unified open-source ecosystem. ## Our Governance: The Executive Committee diff --git a/content/blog/diverse-and-united-neuromorphic-collaboration-network/image.jpg b/content/blog/diverse-and-united-neuromorphic-collaboration-network/image.jpg new file mode 100644 index 00000000..e6d32b3e Binary files /dev/null and b/content/blog/diverse-and-united-neuromorphic-collaboration-network/image.jpg differ diff --git a/content/blog/diverse-and-united-neuromorphic-collaboration-network/index.md b/content/blog/diverse-and-united-neuromorphic-collaboration-network/index.md new file mode 100644 index 00000000..4526b579 --- /dev/null +++ b/content/blog/diverse-and-united-neuromorphic-collaboration-network/index.md @@ -0,0 +1,61 @@ +--- +title: "Diverse and United: Neuromorphic Open Source Leaders Form ONM Collaboration Network" +date: 2025-08-03 +description: "Following a landmark panel, leading projects like BindsNET, Brian, GeNN, and snnTorch unite to form the inaugural Open Neuromorphic Collaboration Network, putting our strategic vision into action." +image: "image.jpg" +draft: false +image_attribution: + text: "Photo by" + author: "tarry_not" + url: "https://pixabay.com/illustrations/network-points-technology-6088549/" +author: + - "Jens E. Pedersen" + - "Justin Riddiough" + - "Danny Rosen" +tags: ["community", "open-source", "collaboration", "supporters", "infrastructure", "strategic-vision"] +software_tags: ["bindsnet", "brian", "genn", "faery", "neuromorphic-intermediate-representation", "nirtorch", "aestream", "snntorch"] +show_author_bios: true +--- + +Our recent community panel, "[Open-Source Neuromorphic Research Infrastructure](/workshops/open-source-neuromorphic-infrastructure/)," was a tremendous success. Organized by ONM Chair Jens E Pedersen and brilliantly hosted by Giulia D'Angelo, the event brought together the maintainers of the most critical tools in our field for a much-needed discussion on building a more unified, competitive, and accessible ecosystem. + +The energy and shared purpose from that discussion were too valuable to let fade. It became the catalyst for something new: the official launch of the **Open Neuromorphic Collaboration Network**. + +### A Strategic Vision in Action + +This initiative is a direct answer to the call for a more collaborative and open ecosystem that we outlined in our [**Strategic Vision for Open Neuromorphic**](/blog/strategic-vision-open-neuromorphic/). By uniting these essential projects, we are creating a shared space for the exchange of ideas, acting as an ambassador to help newcomers find their bearings and veterans discover new collaborators. This is a concrete step towards reducing fragmentation, improving interoperability, and making neuromorphic technology more accessible and reproducible for everyone—core tenets of our vision. + +We are honored to announce the founding members of this new network, featuring the leading open-source projects in our field: + +- **AEStream**: A high-performance library for streaming event-based data. +- **BindsNET**: A key PyTorch-based framework for simulating biologically plausible SNNs. +- **Brian**: One of the most established and flexible simulators, renowned for its equation-based approach to neuron modeling. +- **Faery**: A modern, high-performance library for processing event-based camera data. +- **GeNN**: A powerful, GPU-accelerated simulator for large-scale, high-performance SNNs. +- **Neuromorphic Intermediate Representation (NIR)**: A community-driven standard for model interoperability. +- **NIRTorch**: The essential PyTorch integration for the NIR standard. +- **snnTorch**: A popular framework for gradient-based training of SNNs in PyTorch. +- **Sottosoglia Podcast**: An insightful podcast exploring the human side of neuromorphic science. + +### Diverse and United + +A theme that resonated throughout the panel was the idea of being "Diverse and United." Our field is broad, spanning everything from deeply bio-inspired computational neuroscience to performance-driven machine learning. This diversity is our strength, and by uniting, we amplify it. + +The goal of the Collaboration Network is to celebrate the diverse contributions of each project. It's about fostering a culture of sharing and signaling that the lines of communication between these foundational tools are wide open. We believe this shared commitment to openness sets the groundwork for the deeper collaborations needed to propel the entire field forward. + +### A New Chapter: Announcing Supporter Tiers + +The launch of our Collaboration Network marks a new chapter for Open Neuromorphic. The incredible projects listed above form the bedrock of our **Foundational Supporters** tier. + +To build on this momentum, we are now introducing **Platinum** and **Gold** supporter tiers for organizations, companies, and institutions who wish to financially support our mission. Funding will be directed toward improving our shared infrastructure, supporting open-source development, and creating more educational resources and events. + +If your organization believes in the power of an open and collaborative neuromorphic future, we invite you to become a supporter. + +### What's Next? + +This is just the beginning. The formation of this network is a testament to what we can achieve when we work together. We want to extend a heartfelt thank you to all the founding members for their commitment to this shared vision. + +We invite everyone to: +- **Explore the founding members** on our [Supporters Page](/supporters/). +- **Learn more about becoming a supporter** by contacting us at [contact@open-neuromorphic.org](mailto:contact@open-neuromorphic.org). +- **Join the conversation** on our [Discord server](https://discord.gg/hUygPUdD8E) and help us build the future of neuromorphic computing. diff --git a/content/neuromorphic-computing/community-resources/_index.md b/content/neuromorphic-computing/community-resources/_index.md new file mode 100644 index 00000000..c4f9017d --- /dev/null +++ b/content/neuromorphic-computing/community-resources/_index.md @@ -0,0 +1,5 @@ +--- +title: "Community Resources" +description: "A curated directory of valuable websites, channels, and projects created by and for the neuromorphic community, including our foundational supporters." +type: "community-resources" +--- \ No newline at end of file diff --git a/content/neuromorphic-computing/community-resources/sottosoglia-podcast/index.md b/content/neuromorphic-computing/community-resources/sottosoglia-podcast/index.md new file mode 100644 index 00000000..9e88804a --- /dev/null +++ b/content/neuromorphic-computing/community-resources/sottosoglia-podcast/index.md @@ -0,0 +1,27 @@ +--- +title: "Sottosoglia Podcast" +date: 2025-08-02 +description: "On a mission to uncover \"The Person Behind the Scientist,\" this isn't a typical academic chat. " +image: "sottosoglia-logo.png" +draft: false +type: "community-resources" +video: "j6nGd5APAXE" + +# --- Resource Details --- +resource_type: "Podcast" +website: "https://www.youtube.com/@Sottosoglia" +author: + - "Giulia D'Angelo" + - "Fabrizio Ottati" +is_supporter: false + +# --- Resource Log --- +resource_log: + - date: "2025-08-02" + title: "Resource Added to Open Neuromorphic" + description: "The Sottosoglia podcast was added to the community resources guide." +--- + +Hosted by Giulia D'Angelo and Fabrizio Ottati, Sottosoglia (Italian for "Subthreshold") is a podcast where science gets personal. On a mission to uncover "The Person Behind the Scientist," this isn't a typical academic chat. Instead, it digs into the real stories behind the research: the breakthroughs, the setbacks, and the human moments that shape top minds in the field. + +A unique twist is the "Sottosoglia cards"—a deck of random, spicy, and unpredictable questions that can take the conversation anywhere. The result is a raw, real, and often hilarious look at the lives of scientists. diff --git a/content/neuromorphic-computing/community-resources/sottosoglia-podcast/sottosoglia-logo.png b/content/neuromorphic-computing/community-resources/sottosoglia-podcast/sottosoglia-logo.png new file mode 100644 index 00000000..c0a730fa Binary files /dev/null and b/content/neuromorphic-computing/community-resources/sottosoglia-podcast/sottosoglia-logo.png differ diff --git a/content/neuromorphic-computing/software/data-tools/faery/faery.png b/content/neuromorphic-computing/software/data-tools/faery/faery.png new file mode 100644 index 00000000..977ff717 Binary files /dev/null and b/content/neuromorphic-computing/software/data-tools/faery/faery.png differ diff --git a/content/neuromorphic-computing/software/data-tools/faery/index.md b/content/neuromorphic-computing/software/data-tools/faery/index.md new file mode 100644 index 00000000..34e57598 --- /dev/null +++ b/content/neuromorphic-computing/software/data-tools/faery/index.md @@ -0,0 +1,33 @@ +--- +title: "Faery" +type: neuromorphic-software +description: "A modern, fast, and friendly Python library for processing event-based camera data, with a focus on streaming and interoperability." +logo: "faery.png" +website: "https://faery.readthedocs.io/" +dependencies: "NumPy, Rust" +field_of_application: "Data Processing" +source_code: "https://github.com/aestream/faery" +pypi_id: "faery" +license: "GPL-3.0-or-later" +supports_hardware: false +supports_NIR: false +language: "Python, Rust" +maintainer: + - "Alexandre Marcireau" + - "Jens E. Pedersen" +draft: false +--- + +## Overview + +Faery is a modern, high-performance Python library designed to streamline the processing of event-based data from neuromorphic cameras. It provides a user-friendly, streaming-first API for loading, filtering, and manipulating event data, treating streams as first-class citizens. + +The core of Faery is written in Rust for maximum performance, especially for parsing and I/O-intensive tasks, while offering a flexible and intuitive Python interface. It aims to defragment the neuromorphic ecosystem by providing a standardized tool for handling various event data formats. Its lazy-execution model processes data packet-by-packet, making it efficient for handling large datasets and real-time streams. + +Key features include: +- Support for multiple event-data file formats (`.aedat4`, `.es`, `.dat`, `.raw`, `.csv`). +- A rich set of filters for cropping, time-slicing, and data regularization. +- The ability to seamlessly convert between streaming data and static NumPy arrays. +- Tools for rendering event streams into videos and image sequences. + +Faery is designed to be the "Initial D" of event processing—fast, efficient, and built to handle the curves of neuromorphic data. diff --git a/content/neuromorphic-computing/software/data-tools/image.jpeg b/content/neuromorphic-computing/software/data-tools/image.jpeg deleted file mode 100644 index 7cf9fd1b..00000000 Binary files a/content/neuromorphic-computing/software/data-tools/image.jpeg and /dev/null differ diff --git a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-api-hacking/index.md b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-api-hacking/index.md index 92f92e84..11f3959d 100644 --- a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-api-hacking/index.md +++ b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-api-hacking/index.md @@ -11,6 +11,7 @@ speaker_photo: "images/speakers/alexandre-marcireau-placeholder.png" # Can reuse image: "alexandre-marcireau-faery-api-hacking.jpg" type: "hacking-hours" speaker_bio: "Alexandre Marcireau is a software developer and contributor in the neuromorphic computing space, known for his work on the Faery event processing library." +software_tags: ["faery"] --- This Hacking Hour features Alexandre Marcireau, who, along with host Jens E. Pedersen, dives deep into the Faery event processing library. The session focuses on practical API hacking, exploring how to extend and customize Faery for specific neuromorphic data processing tasks. diff --git a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-github-actions/index.md b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-github-actions/index.md index 5042b695..c625ade6 100644 --- a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-github-actions/index.md +++ b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-github-actions/index.md @@ -11,6 +11,7 @@ speaker_photo: "images/speakers/alexandre-marcireau-placeholder.png" # Can reuse image: "alexandre-marcireau-faery-github-actions.jpg" type: "hacking-hours" speaker_bio: "Alexandre Marcireau is a software developer and contributor in the neuromorphic computing space, known for his work on the Faery event processing library and its development workflows." +software_tags: ["faery"] --- In this Hacking Hour session, Alexandre Marcireau joins host Jens E. Pedersen to discuss the implementation and benefits of using GitHub Actions for the Faery event processing library. The focus is on continuous integration (CI), testing, and deployment (CD) workflows to maintain and improve the Faery codebase. diff --git a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-release-v0-3-0/index.md b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-release-v0-3-0/index.md index 48c9f5fb..4ca0db4a 100644 --- a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-release-v0-3-0/index.md +++ b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-faery-release-v0-3-0/index.md @@ -11,6 +11,7 @@ speaker_photo: "images/speakers/alexandre-marcireau-placeholder.png" image: "alexandre-marcireau-faery-release-v0-3-0.jpg" type: "hacking-hours" speaker_bio: "Alexandre Marcireau is a software developer and contributor in the neuromorphic computing space, known for his work on the Faery event processing library." +software_tags: ["faery"] --- In this Hacking Hour, Jens E. Pedersen is joined by Alexandre Marcireau to explore the v0.3.0 release of Faery. Alexandre walks through the new features, improvements, and potential use cases of this event processing library designed for neuromorphic applications. @@ -79,7 +80,7 @@ The discussion covered API development, build processes, and key features of the * > "there's no no way to cheat this process like to get these apis right to get this code right you just have to go through these long arduous detailed discussions" * > "I really think that like everything else it's a matter of experiment you don't until you try" -* > "it is in that intersection when you scrutinize things it's like when you when you when you put it out in the open you turn it around you rotate it a bit and you try to push one side and pull the other and see what happens that's where the the rubber hits the road" +* > "it is in that intersection when you scrutinize things it's like when you when you put it out in the open you turn it around you rotate it a bit and you try to push one side and pull the other and see what happens that's where the the rubber hits the road" * > "you need a bit of both [theory and practice]... they're very complimentary" * > "I think or I hope that we are essentially applying the scientific method when we build the API we're currently building together" * Referring to MP4 conversion: > "this has been a tool I've been waiting for for five years" diff --git a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-api-discussion/index.md b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-api-discussion/index.md index 488c67e7..debf61ef 100644 --- a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-api-discussion/index.md +++ b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-api-discussion/index.md @@ -12,6 +12,7 @@ speaker_photo: "images/speakers/multi-speaker-placeholder.png" # Placeholder for image: "faery-api-discussion-marcireau-bogdan.jpg" type: "hacking-hours" speaker_bio: "Alexandre Marcireau and Petruț Bogdan are developers and contributors in the neuromorphic software community, with a focus on event-based data processing tools like Faery." +software_tags: ["faery"] --- Jens E. Pedersen hosts a Hacking Hour with Alexandre Marcireau and Petruț Bogdan. This session is dedicated to a comprehensive discussion about the Faery API, covering its design philosophy, current capabilities, and future directions for this event processing library. diff --git a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-innatera-nir/index.md b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-innatera-nir/index.md index ae2479c3..c2927ab9 100644 --- a/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-innatera-nir/index.md +++ b/content/neuromorphic-computing/software/hacking-hours/alexandre-marcireau-petrut-bogdan-faery-innatera-nir/index.md @@ -12,7 +12,7 @@ speaker_photo: "images/speakers/multi-speaker-placeholder.png" # Placeholder, pl image: "faery-innatera-nir-hacking.jpg" # Placeholder, please create type: "hacking-hours" speaker_bio: "Alexandre Marcireau (International Center for Neuromorphic Systems, Western Sydney) and Petruț Bogdan (Innatera) are software developers active in the neuromorphic community, contributing to tools like Faery and exploring hardware-software co-design with platforms like Innatera and standards like NIR." -software_tags: ["nengo", "aestream", "norse", "spyx"] +software_tags: ["nengo", "aestream", "norse", "spyx", "faery", "neuromorphic-intermediate-representation", "nirtorch"] hardware_tags: ["pulsar-by-innatera","snp-by-innatera"] --- diff --git a/content/neuromorphic-computing/software/snn-frameworks/genn/genn.png b/content/neuromorphic-computing/software/snn-frameworks/genn/genn.png new file mode 100644 index 00000000..098a2477 Binary files /dev/null and b/content/neuromorphic-computing/software/snn-frameworks/genn/genn.png differ diff --git a/content/neuromorphic-computing/software/snn-frameworks/genn/index.md b/content/neuromorphic-computing/software/snn-frameworks/genn/index.md index d5d72fcb..7c2bb91b 100644 --- a/content/neuromorphic-computing/software/snn-frameworks/genn/index.md +++ b/content/neuromorphic-computing/software/snn-frameworks/genn/index.md @@ -2,7 +2,7 @@ title: "GeNN" type: neuromorphic-software description: Simulator for SNN models focusing on networks, not on individual neuron morphology. Optimised for accelerated simulations on computational backends including NVIDIA GPUs. -logo: +logo: genn.png website: https://genn-team.github.io/ dependencies: field_of_application: Neuroscience, Machine learning diff --git a/content/neuromorphic-computing/software/snn-frameworks/nirtorch/index.md b/content/neuromorphic-computing/software/snn-frameworks/nirtorch/index.md new file mode 100644 index 00000000..5db2c2e6 --- /dev/null +++ b/content/neuromorphic-computing/software/snn-frameworks/nirtorch/index.md @@ -0,0 +1,31 @@ +--- +title: "NIRTorch" +type: neuromorphic-software +description: "A PyTorch extension for the Neuromorphic Intermediate Representation (NIR), enabling seamless conversion of PyTorch-based SNN models to and from NIR." +logo: "nir-logo.png" +website: "https://github.com/neuromorphs/NIRTorch" +dependencies: "PyTorch, NIR" +field_of_application: "Interoperability / SNN Framework" +source_code: "https://github.com/neuromorphs/NIRTorch" +pypi_id: "nirtorch" +license: "MIT" +supports_hardware: true +supports_NIR: true +language: "Python" +maintainer: + - "Steven Abreu" + - "Jens E. Pedersen" + - "Felix Bauer" +draft: false +--- + +## Overview + +NIRTorch is a powerful extension for PyTorch that bridges the gap between PyTorch-based Spiking Neural Network (SNN) frameworks and the Neuromorphic Intermediate Representation (NIR). Its primary purpose is to provide a simple and robust way to convert `torch.nn.Module` objects into NIR graphs, and vice-versa. + +By leveraging `torch.fx` for symbolic tracing, NIRTorch can inspect a PyTorch model's computational graph and map its components to the corresponding NIR primitives. This allows developers to design and train SNNs within their favorite PyTorch-based environment (like snnTorch or Norse) and then export them to a standardized format that can be deployed across various neuromorphic hardware platforms and simulators that support NIR. + +Key features include: +- A simple `to_nir()` function to convert a `torch.nn.Module` to a NIR graph. +- A `from_nir()` function to load a NIR graph back into a runnable PyTorch model. +- A framework-agnostic design that allows any PyTorch-based SNN library to integrate with NIR by providing a simple mapping of its modules. diff --git a/content/neuromorphic-computing/software/snn-frameworks/nirtorch/nir-logo.png b/content/neuromorphic-computing/software/snn-frameworks/nirtorch/nir-logo.png new file mode 100644 index 00000000..0be0eb0d Binary files /dev/null and b/content/neuromorphic-computing/software/snn-frameworks/nirtorch/nir-logo.png differ diff --git a/content/supporters/_index.md b/content/supporters/_index.md index 1c03e39a..f9ba4281 100644 --- a/content/supporters/_index.md +++ b/content/supporters/_index.md @@ -5,14 +5,20 @@ description: "Meet the open-source projects and organizations that form our coll Open Neuromorphic is built on a foundation of open collaboration. We are proud to partner with a growing network of open-source projects, academic labs, and organizations that share our vision for a more accessible, reproducible, and competitive neuromorphic ecosystem. -## The Collaboration Network +{{< display_supporter_tier tier="platinum" >}} + +{{< display_supporter_tier tier="gold" >}} + +{{< display_supporter_tier tier="foundational" >}} + +{{< details summary="Becoming A Foundational Supporter: The Collaboration Network" >}} + +## Becoming A Foundational Supporter: The Collaboration Network We believe that by working together and promoting each other's work, we can elevate the entire field. Our open-source partners help us by linking back to Open Neuromorphic from their project websites, GitHub repositories, or documentation. This simple act of cross-promotion helps build domain authority and brings more visibility to everyone in the network, creating a virtuous cycle of discovery and growth. In return, we are proud to feature them here and across our platform. -{{< details summary="How to Link to Us" open="true" >}} - You can support our community by linking back to us. Here are examples you can use in your project website, `README.md`, and generated documentation sites. ### Text Link @@ -31,15 +37,13 @@ Part of the [Open Neuromorphic](https://open-neuromorphic.org/neuromorphic-compu ### Community Badge -You can also use a badge. Here is a generic community badge you can use. +You can also use our official collaboration badge. ``` -[![Open Neuromorphic Community](https://img.shields.io/badge/community-Open%20Neuromorphic-667eea?style=for-the-badge)](https://open-neuromorphic.org) +[![Neuromorphic Computing](https://img.shields.io/badge/Collaboration_Network-Open_Neuromorphic-blue)](https://open-neuromorphic.org/neuromorphic-computing/) ``` -**Result:** Open Neuromorphic Community +**Result:**[![Neuromorphic Computing](https://img.shields.io/badge/Collaboration_Network-Open_Neuromorphic-blue)](https://open-neuromorphic.org/neuromorphic-computing/) {{< /details >}} @@ -51,9 +55,3 @@ If your project, lab, or company is interested in joining our mission, we would For now, joining our open-source collaboration network is the first step. To learn more, please reach out to us at [contact@open-neuromorphic.org](mailto:contact@open-neuromorphic.org). - - diff --git a/content/workshops/neuromorphic-intermediate-representation/index.md b/content/workshops/neuromorphic-intermediate-representation/index.md index 7b90efcb..f5dc716e 100644 --- a/content/workshops/neuromorphic-intermediate-representation/index.md +++ b/content/workshops/neuromorphic-intermediate-representation/index.md @@ -12,7 +12,7 @@ speaker_bio: "This talk will be given jointly by Felix Bauer, Jason Eshraghian, speaker_code: "https://github.com/neuromorphs/nir" image: neuromorphic-intermediate-representation.png description: "We show how to use the Neuromorphic Intermediate Representation to migrate your spiking model onto neuromorphic hardware." -software_tags: ["norse", "snntorch", "spyx", "neuromorphic-intermediate-representation"] +software_tags: ["norse", "snntorch", "spyx", "neuromorphic-intermediate-representation", "nirtorch"] --- Have you wondered how to use neuromorphic hardware platforms? diff --git a/data/supporters.toml b/data/supporters.toml index 950f23c4..e3085eea 100644 --- a/data/supporters.toml +++ b/data/supporters.toml @@ -1,11 +1,69 @@ # Supporters of Open Neuromorphic -# This file manages the list of open-source projects and future tiered supporters. -# `page_path` should link to the software/hardware page on this site. -# `logo` should be the filename of the logo within the corresponding page bundle. -# `dark_logo_invert = true` will apply a CSS invert filter in dark mode for logos that are dark. - -# [[opensource_collaborator]] -# name = "BindsNET" -# logo = "bindsnet.jpg" -# page_path = "neuromorphic-computing/software/snn-frameworks/bindsnet/" +# This file manages the list of projects and organizations that support our mission, +# organized into tiers: Platinum, Gold, and Foundational. + +# [[platinum]] +# name = "Platinum Supporter" +# logo = "logo.png" # Path within the supporter's content bundle or static/images +# page_path = "path/to/supporter/page/" # Optional link to a page on this site +# website = "https://supporter.com" # External website link for the card +# dark_logo_invert = false + +# [[gold]] +# name = "Gold Supporter" +# logo = "logo.png" +# page_path = "path/to/supporter/page/" +# website = "https://supporter.com" # dark_logo_invert = false + + +# The Foundational Collaboration Network consists of open-source projects that +# are integral to the neuromorphic ecosystem. +[[foundational]] +name = "AEStream" +logo = "aestream.png" +page_path = "neuromorphic-computing/software/data-tools/aestream/" +dark_logo_invert = false + +[[foundational]] +name = "BindsNET" +logo = "bindsnet.jpg" +page_path = "neuromorphic-computing/software/snn-frameworks/bindsnet/" +dark_logo_invert = false + +[[foundational]] +name = "Brian" +logo = "brian.jpg" +page_path = "neuromorphic-computing/software/snn-frameworks/brian/" +dark_logo_invert = false + +[[foundational]] +name = "Faery" +logo = "faery.png" # No official logo found +page_path = "neuromorphic-computing/software/data-tools/faery/" +dark_logo_invert = false + +[[foundational]] +name = "GeNN" +logo = "genn.png" # No logo provided in the software page +page_path = "neuromorphic-computing/software/snn-frameworks/genn/" +dark_logo_invert = true + +[[foundational]] +name = "Neuromorphic Intermediate Representation (NIR)" +logo = "nir-logo.png" +page_path = "neuromorphic-computing/software/data-tools/neuromorphic-intermediate-representation/" +dark_logo_invert = false +hero_display = { name = "NIRTorch", page_path = "neuromorphic-computing/software/snn-frameworks/nirtorch/" } + +[[foundational]] +name = "snnTorch" +logo = "snntorch.png" +page_path = "neuromorphic-computing/software/snn-frameworks/snntorch/" +dark_logo_invert = false + +[[foundational]] +name = "Sottosoglia Podcast" +logo = "sottosoglia-logo.png" +page_path = "neuromorphic-computing/community-resources/sottosoglia-podcast/" +dark_logo_invert = false diff --git a/data/used_icons.yml b/data/used_icons.yml index 1c6b6cd3..984c984d 100644 --- a/data/used_icons.yml +++ b/data/used_icons.yml @@ -7,6 +7,7 @@ fontawesome_svgs: - { style: solid, name: rocket } - { style: solid, name: chalkboard-user } - { style: solid, name: user-group } + - { style: solid, name: share-nodes } - { style: solid, name: house } - { style: solid, name: magnifying-glass } - { style: solid, name: user } diff --git a/layouts/404.html b/layouts/404.html index d01d5394..03b8328c 100755 --- a/layouts/404.html +++ b/layouts/404.html @@ -8,12 +8,12 @@ { path: '/page/2/', target: 'https://open-neuromorphic.org' }, { path: '/events/', target: 'https://open-neuromorphic.org/workshops' }, { path: '/p/snn-library-benchmarks/', target: 'https://open-neuromorphic.org/blog/spiking-neural-network-framework-benchmarking/' }, - { path: '/p/spiking-neurons-a-digital-hardware-implementation/', target: 'https://open-neuromorphic.org/blog/spiking-neurons-digital-hardware-implementation/' } + { path: '/p/spiking-neurons-a-digital-hardware-implementation/', target: 'https://open-neuromorphic.org/blog/spiking-neurons-digital-hardware-implementation/' }, { path: '/p/efficient-compression-for-event-based-data/', target: 'https://open-neuromorphic.org/blog/efficient-compression-event-based-data-neuromorphic-applications/' }, { path: '/p/bits-of-chips-truenorth/', target: 'https://open-neuromorphic.org/blog/truenorth-deep-dive-ibm-neuromorphic-chip-design/' }, { path: '/p/open-neuromorphic/', target: 'https://open-neuromorphic.org' }, { path: '/p/digital-neuromorphic-hardware-read-list/', target: 'https://open-neuromorphic.org/blog/digital-neuromorphic-hardware-read-list/' }, - { path: '/p/digital-neuromophic-hardware-read-list/', target: 'https://open-neuromorphic.org/blog/digital-neuromorphic-hardware-read-list/' }, + { path: '/p/digital-neuromophic-hardware-read-list/', target: 'https://open-neuromorphic.org/blog/digital-neuromorphic-hardware-read-list/' } ]; const currentPath = window.location.pathname; diff --git a/layouts/community-resources/card.html b/layouts/community-resources/card.html new file mode 100644 index 00000000..de545e13 --- /dev/null +++ b/layouts/community-resources/card.html @@ -0,0 +1,24 @@ + +
+ {{ with .Params.image }} + {{ $img := . }} + {{ with $.Resources.GetMatch $img }} +
+ {{ $.Title }} logo +
+ {{ end }} + {{ end }} +

{{ .Title }}

+
+ {{ .Params.resource_type }} + {{ if .Params.is_supporter }} + | + Collaboration Network + {{ end }} +
+

{{ .Description }}

+ + View Resource → + +
+
diff --git a/layouts/community-resources/list.html b/layouts/community-resources/list.html new file mode 100644 index 00000000..e7bf1a0e --- /dev/null +++ b/layouts/community-resources/list.html @@ -0,0 +1,32 @@ +{{ define "main" }} +{{ partial "page-header" . }} + +
+
+
+

+ Welcome to our directory of Community Resources. This is a curated list of valuable websites, channels, and projects created by and for the neuromorphic community. +

+
+ + {{ $resources := (where .Site.RegularPages "Type" "community-resources").ByTitle }} + +
+ {{ range $resources }} + {{ .Render "card" }} + {{ end }} +
+ +
+ {{ partial "components/content-contribute-cta.html" (dict + "icon" "solid user-group" + "title" "Know a Resource We Should Add?" + "description" "Our resource guide is community-maintained. If you run a blog, YouTube channel, or project, or know of one we've missed, please let us know by opening an issue on GitHub." + "link" "https://github.com/open-neuromorphic/open-neuromorphic.github.io/issues/new/choose" + "link_text" "Suggest a Resource" + ) }} +
+ +
+
+{{ end }} diff --git a/layouts/community-resources/single.html b/layouts/community-resources/single.html new file mode 100644 index 00000000..c66f50fc --- /dev/null +++ b/layouts/community-resources/single.html @@ -0,0 +1,121 @@ +{{ define "main" }} +{{ partial "page-header" . }} +
+
+
+ + {{/* Main Content Column */}} +
+ {{/* --- NEW: Video Embed --- */}} + {{ if .Params.video }} +
+
+ {{ partial "youtube-lite.html" (dict "Id" .Params.video ) }} +
+ {{ with .Params.website }} + {{ if in . "youtube.com" }} + + {{ end }} + {{ end }} +
+ {{ end }} + {{/* --- End Video Embed --- */}} + +
+ {{ .Content }} +
+ + {{/* Resource Log Section */}} + {{ with .Params.resource_log }} +
+

Resource Log & Updates

+
+ {{ $currentYear := "" }} + {{ range . }} + {{ $logDate := time.AsTime .date }} + {{ $logYear := $logDate.Format "2006" }} + {{ if ne $logYear $currentYear }} +
+ {{ $logYear }} +
+ {{ $currentYear = $logYear }} + {{ end }} +
+
+
+
+

+ {{ if .link }} + {{ .title }} + {{ else }} + {{ .title }} + {{ end }} +

+

+ {{ $logDate.Format "January 2" }} +

+
+
+

{{ .description | markdownify }}

+
+
+ {{ end }} +
+
+ {{ end }} +
+ + {{/* Sidebar Column */}} + + +
+
+
+{{ end }} diff --git a/layouts/index.html b/layouts/index.html index 1da43466..e23d9bb3 100755 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,241 +1,314 @@ {{ define "main" }} - {{/* New Hero Section from Mockup */}} -
-
-

- Advancing Neuromorphic Computing, Together. -

-

- Open Neuromorphic (ONM) is a global community fostering education, research, and open-source collaboration in brain-inspired AI and hardware. -

- +{{/* New Hero Section from Mockup */}} +
+
+

+ Advancing Neuromorphic Computing, Together. +

+

+ Open Neuromorphic (ONM) is a global community fostering education, research, and open-source collaboration in brain-inspired AI and hardware. +

+ -
+
+
- {{ partial "components/community-partners.html" . }} +{{ partial "components/community-partners.html" . }} - {{ $sortedAllUpcomingEvents := partial "logic/get_sorted_upcoming_events.html" . }} +{{ $sortedAllUpcomingEvents := partial "logic/get_sorted_upcoming_events.html" . }} +{{/* Get all event pages */}} +{{ $workshops := where site.RegularPages "Section" "workshops" }} +{{ $student_talks := where site.RegularPages "Type" "student-talks" }} +{{ $hacking_hours := where site.RegularPages "Type" "hacking-hours" }} +{{ $all_events := $workshops | union $student_talks | union $hacking_hours }} - {{/* What's New at ONM Section */}} -
-
-

What's New at ONM

-

Stay up-to-date with the latest workshops, blog posts, and community highlights.

-
+{{/* Get sorted past events */}} +{{ $sorted_past_events := partial "logic/get_past_events.html" $all_events }} - {{/* Upcoming Events Column - Updated Logic */}} -
-

Upcoming Events

- {{ if $sortedAllUpcomingEvents }} - {{ range first 3 $sortedAllUpcomingEvents }} -
- {{ .Date.Format "Jan 02, 2006" }} -

- {{ .Title }} -

-

- {{ .Description | truncate 80 }} -

-

- {{ partial "icon.html" (dict "style" "regular" "name" "clock" "class" "mr-1") }} {{ .StartTime }} - {{ .EndTime }} {{ .TimeZone }} - {{ if .IsRecurring }} -
{{ partial "icon.html" (dict "style" "solid" "name" "location-dot" "class" "mr-1") }} {{ .LocationName }} (Recurring) - {{ else if .Authors }} -
{{ partial "icon.html" (dict "style" "regular" "name" "circle-user" "class" "mr-1") }} - {{ $numAuthors := len .Authors }} - {{ range $i, $authorName := .Authors }} - {{ $nameForProcessing := $authorName | replaceRE "[.]" "" }} - {{ $nameForProcessing = $nameForProcessing | replaceRE "ć" "c" | replaceRE "Ć" "C" }} - {{ $contributorSlug := $nameForProcessing | anchorize }} - {{ $contributorPagePath := printf "contributors/%s" $contributorSlug }} - {{ $contributorPage := site.GetPage $contributorPagePath }} - {{ if $contributorPage }}{{ $authorName }}{{ else }}{{ $authorName }}{{ end }}{{ if lt $i (sub $numAuthors 1) }}, {{ end }} - {{ end }} - {{ end }} -

- - View Details {{ partial "icon.html" (dict "style" "solid" "name" "arrow-right" "class" "ml-1") }} - -
- {{ end }} - {{ if gt (len $sortedAllUpcomingEvents) 3 }} - - {{ end }} - {{ else }} -
-

No upcoming events scheduled at the moment. Check back soon!

-
+{{/* Get the most recent one */}} +{{ $most_recent_past_event := "" }} +{{ if $sorted_past_events }} +{{ $most_recent_past_event = index $sorted_past_events 0 }} +{{ end }} + + +{{/* What's New at ONM Section */}} +
+
+

What's New at ONM

+

Stay up-to-date with the latest workshops, blog posts, and community highlights.

+
+ + {{/* Events Column (Recent & Upcoming) */}} +
+ + {{/* RECENT EVENT */}} + {{ with $most_recent_past_event }} +

Recent Event

+
+ + {{/* Thumbnail Logic */}} + {{ $image_param := .Params.image }} + {{ $img_resource := "" }} + {{ $processed_img := "" }} + + {{ if $image_param }} + {{ $img_resource = .Resources.GetMatch $image_param }} + {{ if not $img_resource }} + {{ $asset_path := strings.TrimPrefix "/" $image_param }} + {{ $img_resource = resources.Get $asset_path }} + {{ end }} + {{ if not $img_resource }} + {{ if fileExists (printf "static/%s" (strings.TrimPrefix "/" $image_param)) }} + {{ $img_resource = resources.Get (strings.TrimPrefix "/" $image_param) }} + {{ end }} + {{ end }} + {{ end }} + + {{ if not $img_resource }} + {{ $img_resource = resources.Get "images/workshop-thumbnail-default.png" }} {{ end }} -
- {{/* Latest Blog Posts Column */}} -
-

Recent Insights

-
- {{ $recentBlogPosts := first 3 (where site.RegularPages.ByDate.Reverse "Section" "blog") }} - {{ range $recentBlogPosts }} -
-

- {{ .Title }} -

-
    -
  • - {{ partial "icon.html" (dict "style" "regular" "name" "calendar" "class" "mr-1.5") }} - {{ .Date.Format "January 2, 2006" }} -
  • - {{ if .Params.author }} -
  • - {{ partial "icon.html" (dict "style" "regular" "name" "circle-user" "class" "mr-1.5") }} - By {{ partial "components/author-links.html" . }} -
  • - {{ end }} -
-

{{ .Description | truncate 120 }}

-
- {{ else }} -
-

No recent blog posts. Stay tuned for new content!

-
+ {{ if $img_resource }} + {{ $processed_img = $img_resource.Fill "504x280 Lanczos" }} + {{ end }} + + {{ if $processed_img }} + + {{ .Title }} + + {{ end }} + +
+ {{ .Date.Format "Jan 02, 2006" }} +

+ {{ .Title }} +

+ {{ if .Params.author }} +

+ {{ partial "icon.html" (dict "style" "regular" "name" "circle-user" "class" "mr-1") }} + {{ partial "components/author-links.html" . }} +

{{ end }} + + View Details {{ partial "icon.html" (dict "style" "solid" "name" "arrow-right" "class" "ml-1") }} +
- + {{ end }} + + {{/* UPCOMING EVENTS */}} +

Upcoming Events

+ {{ if $sortedAllUpcomingEvents }} + {{ range first 3 $sortedAllUpcomingEvents }} +
+ {{ .Date.Format "Jan 02, 2006" }} +

+ {{ .Title }} +

+

+ {{ .Description | truncate 80 }} +

+

+ {{ partial "icon.html" (dict "style" "regular" "name" "clock" "class" "mr-1") }} {{ .StartTime }} - {{ .EndTime }} {{ .TimeZone }} + {{ if .IsRecurring }} +
{{ partial "icon.html" (dict "style" "solid" "name" "location-dot" "class" "mr-1") }} {{ .LocationName }} (Recurring) + {{ else if .Authors }} +
{{ partial "icon.html" (dict "style" "regular" "name" "circle-user" "class" "mr-1") }} + {{ $numAuthors := len .Authors }} + {{ range $i, $authorName := .Authors }} + {{ $nameForProcessing := $authorName | replaceRE "[.]" "" }} + {{ $nameForProcessing = $nameForProcessing | replaceRE "ć" "c" | replaceRE "Ć" "C" }} + {{ $contributorSlug := $nameForProcessing | anchorize }} + {{ $contributorPagePath := printf "contributors/%s" $contributorSlug }} + {{ $contributorPage := site.GetPage $contributorPagePath }} + {{ if $contributorPage }}{{ $authorName }}{{ else }}{{ $authorName }}{{ end }}{{ if lt $i (sub $numAuthors 1) }}, {{ end }} + {{ end }} + {{ end }} +

+ + View Details {{ partial "icon.html" (dict "style" "solid" "name" "arrow-right" "class" "ml-1") }} + +
+ {{ end }} + {{ if gt (len $sortedAllUpcomingEvents) 3 }} + + {{ end }} + {{ else }} +
+

No upcoming events scheduled at the moment. Check back soon!

+
+ {{ end }} +
+ + {{/* Latest Blog Posts Column */}} +
+

Recent Insights

+
+ {{ $recentBlogPosts := first 3 (where site.RegularPages.ByDate.Reverse "Section" "blog") }} + {{ range $recentBlogPosts }} +
+

+ {{ .Title }} +

+
    +
  • + {{ partial "icon.html" (dict "style" "regular" "name" "calendar" "class" "mr-1.5") }} + {{ .Date.Format "January 2, 2006" }} +
  • + {{ if .Params.author }} +
  • + {{ partial "icon.html" (dict "style" "regular" "name" "circle-user" "class" "mr-1.5") }} + By {{ partial "components/author-links.html" . }} +
  • + {{ end }} +
+

{{ .Description | truncate 120 }}

+
+ {{ else }} +
+

No recent blog posts. Stay tuned for new content!

+ {{ end }} +
+
-
+
+
- {{/* Start Your Journey Section - Increased top padding, reduced bottom padding */}} -
-
-

Start Your Journey

-

Whether you're new to the field, a seasoned researcher, or an industry professional, find your path within ONM through these community highlights.

+{{/* Start Your Journey Section - Increased top padding, reduced bottom padding */}} +
+
+

Start Your Journey

+

Whether you're new to the field, a seasoned researcher, or an industry professional, find your path within ONM through these community highlights.

- {{ $journey_ribbons := slice - (dict - "title" "Understanding SNN Frameworks" - "description" "Dive into our comprehensive benchmarks of Spiking Neural Network libraries. Essential reading for choosing the right tools for your research and optimizing your SNN models." - "cta_link" "blog/spiking-neural-network-framework-benchmarking/" - "cta_text" "Read Benchmark Post" - "explore_links" (slice - (dict "title" "SNN Software Guide" "url" "neuromorphic-computing/software/snn-frameworks/") - (dict "title" "Hands-On with snnTorch" "url" "workshops/hands-on-with-snntorch-jason-eshraghian/") - ) - "contributor_text_prefix" "Insight by " - "primary_contributor_name" "Gregor Lenz" - "contributor_text_suffix" ", Kade Heckel, et al." - "default_image_path" "blog/spiking-neural-network-framework-benchmarking/neurons-race.png" - "alt_text" "SNN Framework Benchmarks" - "layout_class" "" - ) - (dict - "title" "Bio-Inspired Visual Attention" - "description" "Explore how visual attention mechanisms, inspired by the human visual system, can enhance robotic perception and interaction for efficient real-world applications." - "cta_link" "workshops/whats-catching-your-eye-visual-attention-mechanism-giulia-dangelo/" - "cta_text" "Watch Workshop" - "explore_links" (slice - (dict "title" "Efficient Event Data Compression" "url" "blog/efficient-compression-event-based-data-neuromorphic-applications/") - (dict "title" "Neuromorphic Hardware Guide" "url" "neuromorphic-computing/hardware/") - ) - "contributor_text_prefix" "Workshop by " - "primary_contributor_name" "Giulia D'Angelo" - "contributor_text_suffix" "" - "default_image_path" "workshops/whats-catching-your-eye-visual-attention-mechanism-giulia-dangelo/open-neuromorphic-thumbnail-giulia.png" - "alt_text" "Visual Attention Mechanism Workshop" - "layout_class" "reverse" - ) - (dict - "title" "Essential Reads in Digital Neuromorphic Hardware" - "description" "A curated list of influential papers and theses on digital neuromorphic hardware designs. An invaluable resource for course material and staying current with research trends." - "cta_link" "blog/digital-neuromorphic-hardware-read-list/" - "cta_text" "Access the Reading List" - "explore_links" (slice - (dict "title" "NIR Workshop: Unifying Neuromorphic Tools" "url" "workshops/neuromorphic-intermediate-representation/") - (dict "title" "About Open Neuromorphic & Our Mission" "url" "about/") - ) - "contributor_text_prefix" "Curated by " - "primary_contributor_name" "Fabrizio Ottati" - "contributor_text_suffix" "" - "default_image_path" "blog/digital-neuromorphic-hardware-read-list/banner.png" - "alt_text" "Neuromorphic Hardware Reading" - "layout_class" "" - ) - }} + {{ $journey_ribbons := slice + (dict + "title" "Understanding SNN Frameworks" + "description" "Dive into our comprehensive benchmarks of Spiking Neural Network libraries. Essential reading for choosing the right tools for your research and optimizing your SNN models." + "cta_link" "blog/spiking-neural-network-framework-benchmarking/" + "cta_text" "Read Benchmark Post" + "explore_links" (slice + (dict "title" "SNN Software Guide" "url" "neuromorphic-computing/software/snn-frameworks/") + (dict "title" "Hands-On with snnTorch" "url" "workshops/hands-on-with-snntorch-jason-eshraghian/") + ) + "contributor_text_prefix" "Insight by " + "primary_contributor_name" "Gregor Lenz" + "contributor_text_suffix" ", Kade Heckel, et al." + "default_image_path" "blog/spiking-neural-network-framework-benchmarking/neurons-race.png" + "alt_text" "SNN Framework Benchmarks" + "layout_class" "" + ) + (dict + "title" "Bio-Inspired Visual Attention" + "description" "Explore how visual attention mechanisms, inspired by the human visual system, can enhance robotic perception and interaction for efficient real-world applications." + "cta_link" "workshops/whats-catching-your-eye-visual-attention-mechanism-giulia-dangelo/" + "cta_text" "Watch Workshop" + "explore_links" (slice + (dict "title" "Efficient Event Data Compression" "url" "blog/efficient-compression-event-based-data-neuromorphic-applications/") + (dict "title" "Neuromorphic Hardware Guide" "url" "neuromorphic-computing/hardware/") + ) + "contributor_text_prefix" "Workshop by " + "primary_contributor_name" "Giulia D'Angelo" + "contributor_text_suffix" "" + "default_image_path" "workshops/whats-catching-your-eye-visual-attention-mechanism-giulia-dangelo/open-neuromorphic-thumbnail-giulia.png" + "alt_text" "Visual Attention Mechanism Workshop" + "layout_class" "reverse" + ) + (dict + "title" "Essential Reads in Digital Neuromorphic Hardware" + "description" "A curated list of influential papers and theses on digital neuromorphic hardware designs. An invaluable resource for course material and staying current with research trends." + "cta_link" "blog/digital-neuromorphic-hardware-read-list/" + "cta_text" "Access the Reading List" + "explore_links" (slice + (dict "title" "NIR Workshop: Unifying Neuromorphic Tools" "url" "workshops/neuromorphic-intermediate-representation/") + (dict "title" "About Open Neuromorphic & Our Mission" "url" "about/") + ) + "contributor_text_prefix" "Curated by " + "primary_contributor_name" "Fabrizio Ottati" + "contributor_text_suffix" "" + "default_image_path" "blog/digital-neuromorphic-hardware-read-list/banner.png" + "alt_text" "Neuromorphic Hardware Reading" + "layout_class" "" + ) + }} - {{ range $ribbon := $journey_ribbons }} - {{ $image_to_display_src := $ribbon.default_image_path | relURL }} - {{ $alt_text_for_image := $ribbon.alt_text }} - {{ $contributor_page_resource := "" }} + {{ range $ribbon := $journey_ribbons }} + {{ $image_to_display_src := $ribbon.default_image_path | relURL }} + {{ $alt_text_for_image := $ribbon.alt_text }} + {{ $contributor_page_resource := "" }} - {{ if $ribbon.primary_contributor_name }} - {{ $contributor_name_for_slug_cleaned := $ribbon.primary_contributor_name | replaceRE "[.]" "" }} - {{ $contributor_slug_final := $contributor_name_for_slug_cleaned | anchorize }} - {{ $contributor_page_path_final := printf "contributors/%s" $contributor_slug_final }} - {{ $contributor_page_resource = site.GetPage $contributor_page_path_final }} + {{ if $ribbon.primary_contributor_name }} + {{ $nameForProcessing := $ribbon.primary_contributor_name | replaceRE "[.]" "" }} + {{ $nameForProcessing = $nameForProcessing | replaceRE "ć" "c" | replaceRE "Ć" "C" }} + {{ $contributor_slug := $nameForProcessing | anchorize }} + {{ $contributor_page_path := printf "contributors/%s" $contributor_slug }} + {{ $contributor_page_resource = site.GetPage $contributor_page_path }} - {{ if $contributor_page_resource }} - {{ with $contributor_page_resource.Params.image }} - {{ $contributor_image_filename_from_frontmatter := . }} - {{ $bundled_image := $contributor_page_resource.Resources.GetMatch $contributor_image_filename_from_frontmatter }} - {{ if $bundled_image }} - {{ $processed_contributor_img := $bundled_image.Fill "250x250 Lanczos" }} - {{ $image_to_display_src = $processed_contributor_img.RelPermalink }} - {{ $alt_text_for_image = printf "Profile image of %s" $contributor_page_resource.Title }} - {{ else }} - {{ $asset_image_check_path := strings.TrimPrefix "/" $contributor_image_filename_from_frontmatter }} - {{ $asset_img := resources.Get $asset_image_check_path }} - {{ if $asset_img }} - {{ $processed_contributor_img := $asset_img.Fill "250x250 Lanczos" }} - {{ $image_to_display_src = $processed_contributor_img.RelPermalink }} - {{ $alt_text_for_image = printf "Profile image of %s" $contributor_page_resource.Title }} - {{ else if (fileExists (printf "static%s" $contributor_image_filename_from_frontmatter)) }} - {{ $image_to_display_src = $contributor_image_filename_from_frontmatter | relURL }} - {{ $alt_text_for_image = printf "Profile image of %s" $contributor_page_resource.Title }} - {{ end }} - {{ end }} - {{ end }} - {{ end }} - {{ end }} + {{ if $contributor_page_resource }} + {{ with $contributor_page_resource.Params.image }} + {{ $contributor_image_filename_from_frontmatter := . }} + {{ $bundled_image := $contributor_page_resource.Resources.GetMatch $contributor_image_filename_from_frontmatter }} + {{ if $bundled_image }} + {{ $processed_contributor_img := $bundled_image.Fill "250x250 Lanczos" }} + {{ $image_to_display_src = $processed_contributor_img.RelPermalink }} + {{ $alt_text_for_image = printf "Profile image of %s" $contributor_page_resource.Title }} + {{ else }} + {{ $asset_image_check_path := strings.TrimPrefix "/" $contributor_image_filename_from_frontmatter }} + {{ $asset_img := resources.Get $asset_image_check_path }} + {{ if $asset_img }} + {{ $processed_contributor_img := $asset_img.Fill "250x250 Lanczos" }} + {{ $image_to_display_src = $processed_contributor_img.RelPermalink }} + {{ $alt_text_for_image = printf "Profile image of %s" $contributor_page_resource.Title }} + {{ else if (fileExists (printf "static%s" $contributor_image_filename_from_frontmatter)) }} + {{ $image_to_display_src = $contributor_image_filename_from_frontmatter | relURL }} + {{ $alt_text_for_image = printf "Profile image of %s" $contributor_page_resource.Title }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} -
-
- {{ $alt_text_for_image }} -
-
-

- {{ $ribbon.contributor_text_prefix -}} - {{- if $contributor_page_resource -}} - {{ $ribbon.primary_contributor_name }} - {{- else -}} - {{- $ribbon.primary_contributor_name -}} - {{- end -}} - {{- $ribbon.contributor_text_suffix | safeHTML -}} -

-

{{ $ribbon.title }}

-

- {{ $ribbon.description }} -

- - - -
+
+
+ {{ $alt_text_for_image }} +
+
+

+ {{ $ribbon.contributor_text_prefix -}} + {{- if $contributor_page_resource -}} + {{ $ribbon.primary_contributor_name }} + {{- else -}} + {{- $ribbon.primary_contributor_name -}} + {{- end -}} + {{- $ribbon.contributor_text_suffix | safeHTML -}} +

+

{{ $ribbon.title }}

+

+ {{ $ribbon.description }} +

+ - {{ end }} + + +
-
+ {{ end }} +
+
{{/* NEW Ways to Get Involved Section */}}
@@ -246,31 +319,31 @@

Ways to Get Involved

{{ $involvement_pathways := slice - (dict - "title" "Learn & Discuss" - "description" "Join our community discussions, attend expert workshops, and explore our learning resources to deepen your understanding of neuromorphic computing." - "icon" "fas fa-comments" - "link" "/getting-involved/" - ) - (dict - "title" "Contribute & Code" - "description" "Lead or join community-driven projects. ONM Initiatives are a great way to make a direct impact, from developing new tools to organizing events. Find an active project and start contributing." - "icon" "fas fa-code-branch" - "link" "/getting-involved/" - ) - (dict - "title" "Share & Present" - "description" "Showcase your research by giving a workshop or student talk. Share your expertise by writing a blog post and contributing to our collective knowledge base." - "icon" "fas fa-chalkboard-user" - "link" "/getting-involved/" - ) + (dict + "title" "Learn & Discuss" + "description" "Join our community discussions, attend expert workshops, and explore our learning resources to deepen your understanding of neuromorphic computing." + "icon" "fas fa-comments" + "link" "/getting-involved/" + ) + (dict + "title" "Contribute & Code" + "description" "Lead or join community-driven projects. ONM Initiatives are a great way to make a direct impact, from developing new tools to organizing events. Find an active project and start contributing." + "icon" "fas fa-code-branch" + "link" "/getting-involved/" + ) + (dict + "title" "Share & Present" + "description" "Showcase your research by giving a workshop or student talk. Share your expertise by writing a blog post and contributing to our collective knowledge base." + "icon" "fas fa-chalkboard-user" + "link" "/getting-involved/" + ) }}
{{ range $involvement_pathways }} -
- {{ partial "components/involvement-card.html" . }} -
+
+ {{ partial "components/involvement-card.html" . }} +
{{ end }}
diff --git a/layouts/partials/components/community-partners.html b/layouts/partials/components/community-partners.html index 7e7fb867..989afca9 100644 --- a/layouts/partials/components/community-partners.html +++ b/layouts/partials/components/community-partners.html @@ -1,18 +1,6 @@ -{{- /* Get software from the panel discussion */ -}} -{{- $panelPage := site.GetPage "workshops/open-source-neuromorphic-infrastructure" -}} -{{- with $panelPage.Params.software_tags -}} -{{- $software_slugs := . -}} -{{- $all_software_pages := where site.RegularPages "Type" "neuromorphic-software" -}} -{{- $panel_software_list := slice -}} -{{- range $slug := $software_slugs -}} -{{- range $sw_page := $all_software_pages -}} -{{- if eq (path.Base $sw_page.File.Dir) $slug -}} -{{- $panel_software_list = $panel_software_list | append $sw_page -}} -{{- end -}} -{{- end -}} -{{- end -}} +{{- $supporters := site.Data.supporters.foundational -}} -{{- if $panel_software_list -}} +{{- if $supporters -}} {{- /* --- Pre-calculation of contributions for bubbles --- */ -}} {{- $contributionsMap := dict -}} {{- $contentTypes := slice "workshops" "hacking-hours" -}} @@ -37,53 +25,78 @@ {{- end -}} {{- end -}} -
+
-

- Featuring leading open-source software from the neuromorphic ecosystem -

- -
+
-
+
{{- /* Duplicate the logos for a seamless scroll animation effect */ -}} {{- range (seq 2) -}} - {{- range $panel_software_list -}} - {{- $page := . -}} + {{- range $supporter := $supporters -}} + {{- /* Determine what to display: the hero override or the default */ -}} + {{- $display_name := $supporter.name -}} + {{- $display_page_path := $supporter.page_path -}} + {{- if $supporter.hero_display -}} + {{- $display_name = $supporter.hero_display.name -}} + {{- $display_page_path = $supporter.hero_display.page_path -}} + {{- end -}} + + {{- $page := "" -}} + {{- with $display_page_path -}} + {{- $page = site.GetPage . -}} + {{- end -}} + + {{- if $page -}} {{- $slug := "" -}} - {{- if .File -}}{{- $slug = path.Base .File.Dir -}}{{- end -}} + {{- if $page.File -}}{{- $slug = path.Base $page.File.Dir -}}{{- end -}} - {{- $data_attr := "" -}} - {{- with index $contributionsMap $slug -}} + {{- /* Bubble logic: Always generate data-contributions, even if empty */ -}} {{- $contribution_strings := slice -}} + {{- with index $contributionsMap $slug -}} {{- if gt .Workshops 0 -}}{{- $contribution_strings = $contribution_strings | append (printf "Workshops: %d" .Workshops) -}}{{- end -}} {{- if gt (index . "Hacking Hours") 0 -}}{{- $contribution_strings = $contribution_strings | append (printf "Hacking Hours: %d" (index . "Hacking Hours")) -}}{{- end -}} {{- if gt .Blogs 0 -}}{{- $contribution_strings = $contribution_strings | append (printf "Blogs: %d" .Blogs) -}}{{- end -}} - {{- if gt (len $contribution_strings) 0 -}} - {{- $data_attr = printf `data-contributions="%s"` (delimit $contribution_strings "
") | safeHTMLAttr -}} {{- end -}} + {{- $data_attr := printf `data-contributions="%s"` (delimit $contribution_strings "
") | safeHTMLAttr -}} + + {{- /* Image and Link logic */ -}} + {{- with $supporter.logo -}} + {{- $logo_resource := "" -}} + {{- /* Check for logo in the actual page bundle (e.g., nirtorch's page) */ -}} + {{- with $page.Resources.GetMatch . -}} + {{- $logo_resource = . -}} {{- end -}} - {{- with $page.Params.logo -}} - {{- $logo_filename := . -}} - {{- with $page.Resources.GetMatch $logo_filename -}} - {{- $logo_resource := . -}} - + {{- /* Fallback to check assets folder */ -}} + {{- if not $logo_resource -}} + {{- $logo_from_assets := resources.Get . -}} + {{- if $logo_from_assets -}} + {{- $logo_resource = $logo_from_assets -}} + {{- end -}} + {{- end -}} + + {{- if $logo_resource -}} + {{- $logo_img := $logo_resource.Fit "150x50 Lanczos" -}} - {{- $dark_invert := false -}} - {{- with $page.Params.dark_logo_invert -}}{{- $dark_invert = . -}}{{- end -}} - + {{- end -}} {{- end -}} {{- end -}} {{- end -}} + {{- end -}}
+ +
+ +
+
{{- end -}} -{{- end -}} diff --git a/layouts/partials/components/supporter-card.html b/layouts/partials/components/supporter-card.html new file mode 100644 index 00000000..a17fb46c --- /dev/null +++ b/layouts/partials/components/supporter-card.html @@ -0,0 +1,36 @@ +{{ $supporter := . }} +{{ $page := "" }} +{{ $link := $supporter.website | default "#" }} + +{{ if $supporter.page_path }} +{{ $page = site.GetPage $supporter.page_path }} +{{ $link = $page.RelPermalink }} +{{ end }} + + +
+ {{ with $supporter.logo }} + {{ $logo_resource := "" }} + {{ if $page }} + {{ $logo_resource = $page.Resources.GetMatch . }} + {{ end }} + +
+ {{ if $logo_resource }} + {{ $logo_resized := $logo_resource.Resize "200x" }} + {{ $supporter.name }} logo + {{ else }} +
{{ $supporter.name }}
+ {{ end }} +
+ {{ else }} +
{{ $supporter.name }}
+ {{ end }} + +

{{ $supporter.name }}

+ + {{ if $page }} + View Details → + {{ end }} +
+
diff --git a/layouts/shortcodes/display_supporter_tier.html b/layouts/shortcodes/display_supporter_tier.html new file mode 100644 index 00000000..c18be7a0 --- /dev/null +++ b/layouts/shortcodes/display_supporter_tier.html @@ -0,0 +1,29 @@ +{{ $tier := .Get "tier" }} +{{ $supporters := index site.Data.supporters $tier }} + +
+

{{ $tier | humanize | title }} Supporters

+ + {{ if $supporters }} +
+ {{ range $supporters }} + {{ partial "components/supporter-card.html" . }} + {{ end }} +
+ {{ else }} +
+ {{ if or (eq $tier "platinum") (eq $tier "gold") }} +

+ Interested in becoming a supporter? Contact us to learn more. +

+ {{ else }} +

+ This tier is currently open. Be the first to support our mission! +

+

+ Interested in becoming a supporter? Contact us to learn more. +

+ {{ end }} +
+ {{ end }} +
diff --git a/layouts/supporters/list.html b/layouts/supporters/list.html index 84353d69..37457a78 100644 --- a/layouts/supporters/list.html +++ b/layouts/supporters/list.html @@ -1,45 +1,11 @@ {{ define "main" }} -{{ partial "page-header" . }} + {{ partial "page-header" . }} -
-
+
{{ end }} diff --git a/postcss.config.js b/postcss.config.js index 0fd6c1b8..223560ca 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -13,8 +13,13 @@ const purgecssOptions = { /^gprev/, /^gnext/, /^desc/, /^zoom/, /^search/, /^:is/, /dark/, /show/, /dragging/, /fullscreen/, /loaded/, /visible/, 'contributor-socials', - 'is-mobile-nav-open', // Add this class to prevent it from being purged - 'contribution-bubble', // Ensure bubble styles are not purged + 'is-mobile-nav-open', + 'contribution-bubble', + 'bubble-title', + 'bubble-description', + 'bubble-separator', + 'bubble-contributions', + 'is-highlighted', ], };