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

spetz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iggy-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 2d30aef7 powered by structure with initial set of companies leveraging 
iggy. (#86)
2d30aef7 is described below

commit 2d30aef71a0898a21fa989276a7caf2aecc4342f
Author: Kranti Parisa <[email protected]>
AuthorDate: Tue Sep 8 10:19:05 2026 -0700

    powered by structure with initial set of companies leveraging iggy. (#86)
    
    Create a dynamic structure for the Powered By (/powered-by/) page on
    Iggy's website. allow the community to submit their entries through
    github issue using a template. include README, TEMPLATE files and
    initial set of companies who have shared their usage through public
    forums/discord channels/social posts etc.
    
    ---------
    
    Co-authored-by: spetz <[email protected]>
---
 .github/ISSUE_TEMPLATE/config.yml                  |  28 +++
 .github/ISSUE_TEMPLATE/organization-submission.yml | 133 +++++++++++
 content/organizations/README.md                    | 132 +++++++++++
 content/organizations/TEMPLATE.mdx                 | 109 +++++++++
 content/organizations/hotdata.mdx                  |  43 ++++
 content/organizations/lakesail.mdx                 |  46 ++++
 content/organizations/laserdata.mdx                |  46 ++++
 content/organizations/measure.mdx                  |  45 ++++
 content/organizations/onehouse.mdx                 |  42 ++++
 content/organizations/rocketride.mdx               |  43 ++++
 content/organizations/serro.mdx                    |  44 ++++
 content/organizations/velodb.mdx                   |  44 ++++
 content/organizations/videodb.mdx                  |  47 ++++
 public/img/emetlabs-light.svg                      |  27 ---
 public/img/hugin-light.svg                         |  23 --
 public/img/neferdata-light.svg                     |  29 ---
 public/img/organizations/hotdata-dark.svg          |  12 +
 public/img/organizations/hotdata.svg               |  12 +
 public/img/organizations/lakesail-dark.svg         |   1 +
 public/img/organizations/lakesail.svg              |   1 +
 public/img/organizations/laserdata-dark.png        | Bin 0 -> 68797 bytes
 public/img/organizations/laserdata.png             | Bin 0 -> 7548 bytes
 public/img/organizations/measure-dark.svg          |  16 ++
 public/img/organizations/measure.svg               |  16 ++
 public/img/organizations/rocketride-dark.svg       |   1 +
 public/img/organizations/rocketride.svg            |   1 +
 public/img/organizations/serro-dark.svg            |   1 +
 public/img/organizations/serro.svg                 |   1 +
 public/img/organizations/velodb-dark.svg           |  12 +
 public/img/organizations/velodb.png                | Bin 0 -> 5662 bytes
 public/img/organizations/velodb.svg                |  12 +
 public/img/organizations/videodb-dark.png          | Bin 0 -> 53502 bytes
 public/img/organizations/videodb.png               | Bin 0 -> 84108 bytes
 source.config.ts                                   |  55 +++++
 src/app/(site)/powered-by/page.tsx                 | 167 +++++++++++++
 src/app/global.css                                 |  15 +-
 src/components/organization-showcase.tsx           | 260 +++++++++++++++++++++
 src/lib/layout.shared.tsx                          |   2 +
 src/lib/organizations.ts                           | 103 ++++++++
 src/lib/site.ts                                    |  16 ++
 src/lib/source.ts                                  |   5 +-
 41 files changed, 1506 insertions(+), 84 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/config.yml 
b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000..b3b33738
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+blank_issues_enabled: true
+contact_links:
+  - name: Ask on Discord
+    url: https://discord.gg/apache-iggy
+    about: Questions about using Iggy, or about what belongs on the Powered By 
page.
+  - name: Dev mailing list
+    url: https://lists.apache.org/[email protected]
+    about: Project discussion, proposals and release coordination.
+  - name: Report a bug in Iggy itself
+    url: https://github.com/apache/iggy/issues
+    about: This repository only tracks the website. Server, SDK and CLI issues 
go here.
diff --git a/.github/ISSUE_TEMPLATE/organization-submission.yml 
b/.github/ISSUE_TEMPLATE/organization-submission.yml
new file mode 100644
index 00000000..9d2834e3
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/organization-submission.yml
@@ -0,0 +1,133 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: "Powered By Iggy submission"
+description: "Add your organization or project to iggy.apache.org/powered-by"
+title: "[Powered By] <organization or project name>"
+labels: ["powered-by"]
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for telling the community what you are building on Apache Iggy.
+
+        Only the first three fields are required. Everything else is optional,
+        and an entry that is just a name and a link is perfectly normal.
+
+        **This issue is public.** Only put things here you are happy to see on
+        a public website.
+
+  - type: input
+    id: name
+    attributes:
+      label: Organization or project name
+      description: Exactly as it should be printed.
+      placeholder: Acme Inc
+    validations:
+      required: true
+
+  - type: input
+    id: website
+    attributes:
+      label: Website
+      placeholder: https://example.com
+    validations:
+      required: true
+
+  - type: dropdown
+    id: deployment_stage
+    attributes:
+      label: Deployment stage
+      description: >-
+        Recorded for the project's own understanding of adoption. The Powered
+        By page does not sort or label organizations by this.
+      options:
+        - Production
+        - Pilot / POC
+        - Evaluating
+        - Integration / community project
+    validations:
+      required: true
+
+  - type: input
+    id: use_case
+    attributes:
+      label: What are you using Apache Iggy for?
+      description: >-
+        A short phrase. Becomes the category shown above your description.
+      placeholder: Change data capture
+
+  - type: textarea
+    id: description
+    attributes:
+      label: Short description
+      description: >-
+        One to three sentences, in the third person. This is published as
+        written, so phrase it the way you want to be quoted. Leave it blank and
+        your entry appears in the logo wall without a write-up.
+      placeholder: >-
+        Acme Inc uses Apache Iggy as the transport behind its real-time
+        pricing engine, fanning market data out to pricing workers across three
+        regions.
+
+  - type: input
+    id: technologies
+    attributes:
+      label: Relevant technologies and integrations
+      description: Optional. Comma separated; rendered as tags.
+      placeholder: Rust SDK, PostgreSQL CDC, Apache Iceberg
+
+  - type: textarea
+    id: logo
+    attributes:
+      label: Logo
+      description: >-
+        Optional. Attach or link an SVG (preferred) or a transparent PNG at
+        least 400px wide. The site has a light and a dark theme, so two
+        variants are ideal. Supply one and the other theme shows your name as
+        text, which looks fine. We highly encourage your to submit the logo.
+
+  - type: input
+    id: case_study
+    attributes:
+      label: Public case study or blog post
+      description: Optional. A link we can point readers at.
+      placeholder: https://example.com/blog/why-we-chose-iggy
+
+  - type: input
+    id: contact
+    attributes:
+      label: Contact for follow-up
+      description: >-
+        Optional, and never published on the website. Note that this issue
+        itself is public, so if you would rather not post an address, leave
+        this blank -- a committer will reply in the thread, or you can email
+        [email protected].
+
+  - type: checkboxes
+    id: confirmations
+    attributes:
+      label: Confirmations
+      options:
+        - label: >-
+            The information above is accurate and cleared for publication on a
+            public website.
+          required: true
+        - label: >-
+            I am authorized to grant the Apache Software Foundation permission
+            to display the logo above, and I grant it. (Only needed if you want
+            a logo shown -- entries without it are published as text.)
diff --git a/content/organizations/README.md b/content/organizations/README.md
new file mode 100644
index 00000000..e1c6c005
--- /dev/null
+++ b/content/organizations/README.md
@@ -0,0 +1,132 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Adding your organization to Powered By Iggy
+
+[iggy.apache.org/powered-by](https://iggy.apache.org/powered-by) lists the
+organizations, projects and teams building with Apache Iggy. It is maintained
+by the community: every entry arrives as an issue or a pull request from the
+people who run the system.
+
+Production deployments, pilots, integrations and open source side projects are
+all welcome. A team benchmarking Iggy against other streaming engines is as 
useful a data point
+for the next reader as a fleet running it at scale.
+
+## Two ways to submit
+
+**Open an issue.** Use the
+[Powered By Iggy submission 
form](https://github.com/apache/iggy-website/issues/new?template=organization-submission.yml).
+Three required fields; a committer opens the pull request for you.
+
+**Send the pull request yourself.**
+
+1. Copy [`TEMPLATE.mdx`](TEMPLATE.mdx) to 
`content/organizations/<your-slug>.mdx`.
+   Use a lowercase hyphenated slug: `acme.mdx`.
+2. Fill in the frontmatter. Delete every field you do not use.
+3. Commit any logo files to `public/img/organizations/`.
+4. Leave `draft: true`. A committer flips it to `false` once verified, and
+   that is what publishes the entry.
+5. Open the PR. Conventional commit style, e.g.
+   `content(site): add Acme Inc to Powered By`.
+
+Run `npm install && npm run dev`, then open <http://localhost:3000/powered-by>
+to preview. Setting `draft: false` locally shows your entry; set it back to 
`draft: true`
+before committing.
+
+## How the page decides what to show
+
+There are two levels, and the difference is whether you wrote a description.
+
+| You supply | Where it appears |
+| --- | --- |
+| Name only | Logo wall, unlinked |
+| Name + website | Logo wall, linked to your site |
+| Name + logo | Logo wall, showing your logo |
+| ...plus a `description` | Also gets a card in **How Iggy is being used**, 
and the wall tile links to it |
+
+There is deliberately no way to get a use-case card without writing a real
+description. Generated filler such as "Acme runs Apache Iggy in production" is
+not published: it tells a reader nothing, and a page of it reads as marketing.
+If all you can share is that you use Iggy, the logo wall is the right home and 
a
+complete answer.
+
+## Field reference
+
+| Field | Required | Notes |
+| --- | --- | --- |
+| `name` | yes | Printed exactly as written. |
+| `website` | yes | Omit rather than guess; the tile renders unlinked. |
+| `deploymentStatus` | yes | `production`, `pilot`, `evaluating` or 
`integration`. Not shown on the page. |
+| `useCaseCategory` | no | Short phrase, e.g. `Observability, AI 
Infrastructure`. |
+| `description` | no | One to three sentences, third person. Promotes the 
entry into the use-case section. |
+| `technologies` | no | List of short strings, rendered as tags. |
+| `caseStudyUrl` | no | Public write-up to link. |
+| `quote` / `quoteAuthor` | no | Attributed pull quote. |
+| `logo` | no | Artwork legible on a **light** background. |
+| `logoDark` | no | Artwork legible on a **dark** background. |
+| `permissionConfirmed` | no | Defaults to `false`. **No logo renders until 
this is `true`.** |
+| `draft` | no | Defaults to `true`. Committers publish by setting `false`. |
+| `submittedBy` | no | GitHub handle, so committers know who to follow up 
with. |
+
+Anything below the frontmatter is maintainer notes. It is not rendered, but it
+is still MDX: a bare `<` starts a JSX tag and fails the build. Write links as
+`[text](url)` rather than `<https://example.com>`, and wrap placeholders like
+`<name>` in backticks.
+
+### Logos and the two themes
+
+A single logo usually works in only one theme. Supply artwork for whichever
+backgrounds you have; the other theme falls back to your name as text, and
+plenty of entries are text-only by choice.
+
+SVG is preferred; a transparent PNG at least 400px wide is fine. Tiles cap
+logos at roughly 144x36px, so wordmarks read better than tall lockups.
+
+The build checks that the file named in the frontmatter actually exists in
+`public/`. A missing file falls back to text rather than shipping a broken
+image, so a PR can safely land the frontmatter and the artwork separately.
+
+### Logo permission
+
+`permissionConfirmed` is not a formality. Setting it to `true` is your
+statement that you are authorized to grant the ASF permission to display your
+mark on iggy.apache.org. Reviewers will ask who confirmed it.
+
+Adding an organization you do not work for? Leave it `false` and say so in the
+PR. Someone from that organization can grant permission in a follow-up.
+
+## What committers check before publishing
+
+- The submission comes from the organization, or the PR says who confirmed it.
+- Any `description` describes real usage and reads as a record, not an advert.
+- `permissionConfirmed` is `true` only where permission was actually granted.
+- Logo files are committed to the repo, not hotlinked.
+- No field was filled in by guessing. An empty field is always better.
+
+Entries go stale. If something listed here is no longer accurate, open an
+issue or a PR: removing an entry needs no more justification than adding one.
+
+## Trademark note
+
+Company names, product names and logos are the property of their respective
+owners. Inclusion on the Powered By page does not imply that the ASF endorses
+any listed organization, or that any listed organization endorses Apache Iggy
+beyond the description it submitted. See the
+[ASF trademark policy](https://www.apache.org/foundation/marks/) for how
+Apache marks themselves may be used.
diff --git a/content/organizations/TEMPLATE.mdx 
b/content/organizations/TEMPLATE.mdx
new file mode 100644
index 00000000..e7c50655
--- /dev/null
+++ b/content/organizations/TEMPLATE.mdx
@@ -0,0 +1,109 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# =====================================================================
+# Powered By Iggy -- organization entry template
+#
+# 1. Copy to content/organizations/<your-slug>.mdx
+#    (lowercase, hyphenated: content/organizations/acme.mdx)
+# 2. Fill in what you have. Delete every field you do not use.
+# 3. Put any logo files in public/img/organizations/.
+# 4. Open a pull request against apache/iggy-website.
+#
+# A committer reviews the entry and sets `draft: false` to publish it.
+# Field reference: content/organizations/README.md
+# =====================================================================
+
+# REQUIRED. Printed exactly as written.
+name: Acme Inc
+
+# REQUIRED. Public URL. Leave it out rather than guessing -- the tile renders 
unlinked.
+website: https://example.com
+
+# Optional. A short phrase describing the workload. Shown above the
+# description in "How Iggy is being used".
+useCaseCategory: Change data capture
+
+# Optional, and the field that matters most. One to three sentences, third
+# person, published as written. Supplying it moves your entry from the logo
+# wall into the use-case section.
+#
+# Leave it out unless there is something real to say. An entry that is just a
+# name and a logo is a perfectly good entry; a padded one is worse than none.
+description: >-
+  Acme Streaming uses Apache Iggy as the transport behind its real-time pricing
+  engine, fanning market data out to pricing workers across three regions.
+
+# Optional. Rendered as tags. Keep them short.
+technologies:
+  - Rust SDK
+  - PostgreSQL CDC
+
+# Optional. A public write-up we can link to.
+caseStudyUrl: https://example.com/blog/why-we-chose-iggy
+
+# Optional. Attributed pull quote.
+quote: Iggy gave us the fan-out latency we needed without another JVM to run.
+quoteAuthor: Name, Role at Acme Streaming
+
+# ---------------------------------------------------------------------
+# Logos (all optional)
+#
+# The site has a light and a dark theme.
+#   logo      -- legible on a LIGHT background
+#   logoDark  -- legible on a DARK background
+# Supply what you have; the theme with no artwork shows your name as text.
+#
+# SVG preferred, transparent PNG at least 400px wide is fine. Commit files to
+# public/img/organizations/ and reference them from /img/organizations/.
+#
+# permissionConfirmed MUST be true for any logo to render. Setting it is your
+# statement that you are authorized to grant the ASF permission to display the
+# mark on iggy.apache.org. The build also checks the file is actually present,
+# so a missing file falls back to text rather than shipping a broken image.
+# ---------------------------------------------------------------------
+logo: /img/organizations/acme-streaming.svg
+logoDark: /img/organizations/acme-streaming-dark.svg
+permissionConfirmed: false
+
+# REQUIRED: production | pilot | evaluating | integration
+#
+# Recorded for the project's own understanding of adoption. It is NOT used to
+# group or label organizations on the page -- see the README for why.
+deploymentStatus: production
+
+# Reserved for entries with a quote or case study. Sorts them first.
+featured: false
+
+# Leave as true. A committer sets it to false once the submission is verified,
+# and that is what publishes the entry.
+draft: true
+
+# Optional. GitHub handle of whoever submitted this.
+submittedBy: "@your-github-handle"
+---
+
+## Maintainer notes
+
+Nothing below the frontmatter is rendered on the page. Use this space for
+anything a reviewer should know: who confirmed the logo permission, what is
+still outstanding, which URL was guessed.
+
+This is MDX, so a bare `<` starts a JSX tag and fails the build. Write links
+as `[text](url)`, not `<https://example.com>`, and wrap placeholders like
+`<name>` in backticks.
diff --git a/content/organizations/hotdata.mdx 
b/content/organizations/hotdata.mdx
new file mode 100644
index 00000000..6367947b
--- /dev/null
+++ b/content/organizations/hotdata.mdx
@@ -0,0 +1,43 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: Hotdata
+website: https://hotdata.dev
+logo: /img/organizations/hotdata.svg
+logoDark: /img/organizations/hotdata-dark.svg
+permissionConfirmed: true
+technologies: []
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. No website, use case or deployment status was
+supplied, so the tile renders as the name in text and is not clickable.
+
+- [ ] **Add `website`.** It was deliberately left out rather than guessed, so
+      the tile currently links nowhere.
+- [ ] Ask what Hotdata uses Iggy for, and add a `description` plus a
+      `useCaseCategory` if there is something substantive to say.
+- [ ] Set `deploymentStatus` (`production`, `pilot`, `evaluating` or
+      `integration`). Recorded for the project's own use; not shown on the 
page.
+- [ ] Commit `public/img/organizations/hotdata.svg` and
+      `public/img/organizations/hotdata-dark.svg`, and confirm in writing that
+      Hotdata authorizes the ASF to display its logo.
diff --git a/content/organizations/lakesail.mdx 
b/content/organizations/lakesail.mdx
new file mode 100644
index 00000000..4aab4103
--- /dev/null
+++ b/content/organizations/lakesail.mdx
@@ -0,0 +1,46 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: LakeSail
+website: https://lakesail.com
+useCaseCategory: Real-time Analytics
+logo: /img/organizations/lakesail.svg
+logoDark: /img/organizations/lakesail-dark.svg
+description:
+  LakeSail combines Apache Iggy for real-time streaming with Sail for 
distributed data processing, enabling an end-to-end data infrastructure stack 
written in Rust. The integration brings together Iggy’s low-latency, 
resource-efficient streaming with Sail’s distributed compute engine for 
building high-performance real-time data and analytics pipelines.
+permissionConfirmed: true
+technologies: []
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. No website, use case or deployment status was
+supplied, so the tile renders as the name in text and is not clickable.
+
+- [ ] **Add `website`.** It was deliberately left out rather than guessed, so
+      the tile currently links nowhere.
+- [ ] Ask what LakeSail uses Iggy for, and add a `description` plus a
+      `useCaseCategory` if there is something substantive to say.
+- [ ] Set `deploymentStatus` (`production`, `pilot`, `evaluating` or
+      `integration`). Recorded for the project's own use; not shown on the 
page.
+- [ ] Commit `public/img/organizations/lakesail.svg` and
+      `public/img/organizations/lakesail-dark.svg`, and confirm in writing that
+      LakeSail authorizes the ASF to display its logo.
diff --git a/content/organizations/laserdata.mdx 
b/content/organizations/laserdata.mdx
new file mode 100644
index 00000000..aaeb0af6
--- /dev/null
+++ b/content/organizations/laserdata.mdx
@@ -0,0 +1,46 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: LaserData
+website: https://laserdata.com
+useCaseCategory: Real-time & AI Data Infrastructure
+logo: /img/organizations/laserdata.png
+logoDark: /img/organizations/laserdata-dark.png
+permissionConfirmed: true
+description:
+  LaserData uses Apache Iggy as the real-time streaming foundation of its data 
infrastructure platform. LaserData builds on Iggy with managed cloud and BYOC 
deployments, enterprise security and governance, connectors, and higher-level 
data and AI agent infrastructure capabilities.
+technologies: []
+deploymentStatus: production
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. Name and logo only until someone supplies a
+use case.
+
+- [ ] Ask what LaserData uses Iggy for, and add a `description` plus a
+      `useCaseCategory`. Until then the entry stays in the logo wall, which is
+      a fine place for it.
+- [ ] Commit `public/img/organizations/laserdata.svg` (legible on a **light**
+      background) and `public/img/organizations/laserdata-dark.svg` (legible 
on a
+      **dark** background). Until the files exist the tile shows the name as
+      text; nothing breaks. Delete whichever frontmatter line has no artwork.
+- [ ] Confirm in writing that LaserData authorizes the ASF to display its logo.
diff --git a/content/organizations/measure.mdx 
b/content/organizations/measure.mdx
new file mode 100644
index 00000000..2fdafc35
--- /dev/null
+++ b/content/organizations/measure.mdx
@@ -0,0 +1,45 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: Measure
+website: https://measure.sh
+useCaseCategory: Observability
+logo: /img/organizations/measure.svg
+logoDark: /img/organizations/measure-dark.svg
+permissionConfirmed: true
+description: >-
+  Apache Iggy powers Measure’s ingestion pipeline, processing billions of 
mobile data points every week. Measure's ingestion grew 8x while reducing 
compute costs by 80%, with Iggy providing sub-ms latency and throughput up to 3 
GB/s while absorbing ingestion spikes of up to 10x.
+technologies: []
+draft: false
+---
+
+## Maintainer notes
+
+The source given was a [LinkedIn post](https://lnkd.in/p/g7ghXQen) and the 
[GitHub PR](https://github.com/measure-sh/measure/pull/3314) The product
+description above comes from [measure.sh](https://measure.sh).
+
+Before this is considered done:
+
+- [ ] Fill in `technologies` with the integrations the post names (SDKs,
+      storage, transport).
+- [ ] Consider `caseStudyUrl`. The LinkedIn link was found publicly but an 
official blog post or the project README would be better.
+- [ ] Set `deploymentStatus` once known (`production`, `pilot`, `evaluating`
+      or `integration`).
+- [ ] Ask for a logo, and confirm in writing that measure.sh authorizes the
+      ASF to display it, then add `logo` / `logoDark` and set
+      `permissionConfirmed: true`.
+- [ ] Confirm the entry with the measure.sh team before relying on it.
diff --git a/content/organizations/onehouse.mdx 
b/content/organizations/onehouse.mdx
new file mode 100644
index 00000000..184e6a24
--- /dev/null
+++ b/content/organizations/onehouse.mdx
@@ -0,0 +1,42 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: Onehouse
+logo: /img/organizations/onehouse.svg
+logoDark: /img/organizations/onehouse-dark.svg
+permissionConfirmed: true
+technologies: []
+# draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. No website, use case or deployment status was
+supplied, so the tile renders as the name in text and is not clickable.
+
+- [ ] **Add `website`.** It was deliberately left out rather than guessed, so
+      the tile currently links nowhere.
+- [ ] Ask what Onehouse uses Iggy for, and add a `description` plus a
+      `useCaseCategory` if there is something substantive to say.
+- [ ] Set `deploymentStatus` (`production`, `pilot`, `evaluating` or
+      `integration`). Recorded for the project's own use; not shown on the 
page.
+- [ ] Commit `public/img/organizations/onehouse.svg` and
+      `public/img/organizations/onehouse-dark.svg`, and confirm in writing that
+      Onehouse authorizes the ASF to display its logo.
diff --git a/content/organizations/rocketride.mdx 
b/content/organizations/rocketride.mdx
new file mode 100644
index 00000000..6666f8cf
--- /dev/null
+++ b/content/organizations/rocketride.mdx
@@ -0,0 +1,43 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: RocketRide
+website: https://www.rocketride.ai
+logo: /img/organizations/rocketride.svg
+logoDark: /img/organizations/rocketride-dark.svg
+permissionConfirmed: true
+technologies: []
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. No website, use case or deployment status was
+supplied, so the tile renders as the name in text and is not clickable.
+
+- [ ] **Add `website`.** It was deliberately left out rather than guessed, so
+      the tile currently links nowhere.
+- [ ] Ask what RocketRide uses Iggy for, and add a `description` plus a
+      `useCaseCategory` if there is something substantive to say.
+- [ ] Set `deploymentStatus` (`production`, `pilot`, `evaluating` or
+      `integration`). Recorded for the project's own use; not shown on the 
page.
+- [ ] Commit `public/img/organizations/rocketride.svg` and
+      `public/img/organizations/rocketride-dark.svg`, and confirm in writing 
that
+      RocketRide authorizes the ASF to display its logo.
diff --git a/content/organizations/serro.mdx b/content/organizations/serro.mdx
new file mode 100644
index 00000000..94d3ba14
--- /dev/null
+++ b/content/organizations/serro.mdx
@@ -0,0 +1,44 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: Serro
+website: https://serro.ai
+logo: /img/organizations/serro.svg
+logoDark: /img/organizations/serro-dark.svg
+permissionConfirmed: true
+technologies: []
+deploymentStatus: production
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. Name and logo only until someone supplies a
+use case.
+
+- [ ] **Confirm the website URL.** `serro.com` was guessed, not verified.
+- [ ] Ask what Serro uses Iggy for, and add a `description` plus a
+      `useCaseCategory`. Until then the entry stays in the logo wall, which is
+      a fine place for it.
+- [ ] Commit `public/img/organizations/serro.svg` (legible on a **light**
+      background) and `public/img/organizations/serro-dark.svg` (legible on a
+      **dark** background). Until the files exist the tile shows the name as
+      text; nothing breaks. Delete whichever frontmatter line has no artwork.
+- [ ] Confirm in writing that Serro authorizes the ASF to display its logo.
diff --git a/content/organizations/velodb.mdx b/content/organizations/velodb.mdx
new file mode 100644
index 00000000..ac305a35
--- /dev/null
+++ b/content/organizations/velodb.mdx
@@ -0,0 +1,44 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: VeloDB
+website: https://www.velodb.io/
+useCaseCategory: Real-time Analytics
+logo: /img/organizations/velodb.png
+logoDark: /img/organizations/velodb-dark.svg
+permissionConfirmed: true
+technologies: []
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. No website, use case or deployment status was
+supplied, so the tile renders as the name in text and is not clickable.
+
+- [ ] **Add `website`.** It was deliberately left out rather than guessed, so
+      the tile currently links nowhere.
+- [ ] Ask what VeloDB uses Iggy for, and add a `description` plus a
+      `useCaseCategory` if there is something substantive to say.
+- [ ] Set `deploymentStatus` (`production`, `pilot`, `evaluating` or
+      `integration`). Recorded for the project's own use; not shown on the 
page.
+- [ ] Commit `public/img/organizations/velodb.svg` and
+      `public/img/organizations/velodb-dark.svg`, and confirm in writing that
+      VeloDB authorizes the ASF to display its logo.
diff --git a/content/organizations/videodb.mdx 
b/content/organizations/videodb.mdx
new file mode 100644
index 00000000..b0684f77
--- /dev/null
+++ b/content/organizations/videodb.mdx
@@ -0,0 +1,47 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name: VideoDB
+website: https://videodb.io
+useCaseCategory: Real-time Data Ingestion
+logo: /img/organizations/videodb.png
+logoDark: /img/organizations/videodb-dark.png
+permissionConfirmed: true
+description:
+  VideoDB leverages Apache Iggy for high-volume, real-time video processing, 
designed to ingest approximately 240 TB of frame data per day while delivering 
single-digit millisecond P99 latencies.
+technologies: []
+deploymentStatus: production
+draft: false
+---
+
+## Maintainer notes
+
+The body of this file is not rendered on the page. It is where a committer
+records what still needs confirming.
+
+Added at a maintainer's request. Name and logo only until someone supplies a
+use case.
+
+- [ ] **Confirm the website URL.** `videodb.io` was guessed, not verified.
+- [ ] Ask what VideoDB uses Iggy for, and add a `description` plus a
+      `useCaseCategory`. Until then the entry stays in the logo wall, which is
+      a fine place for it.
+- [ ] Commit `public/img/organizations/videodb.svg` (legible on a **light**
+      background) and `public/img/organizations/videodb-dark.svg` (legible on a
+      **dark** background). Until the files exist the tile shows the name as
+      text; nothing breaks. Delete whichever frontmatter line has no artwork.
+- [ ] Confirm in writing that VideoDB authorizes the ASF to display its logo.
diff --git a/public/img/emetlabs-light.svg b/public/img/emetlabs-light.svg
deleted file mode 100644
index 6cc65389..00000000
--- a/public/img/emetlabs-light.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg id="Warstwa_2" data-name="Warstwa 2" xmlns="http://www.w3.org/2000/svg"; 
viewBox="0 0 562.58 369.54">
-  <defs>
-    <style>
-      .cls-1 {
-        stroke: rgba(0, 0, 0, 0);
-        stroke-miterlimit: 7.06;
-        stroke-width: 1.77px;
-      }
-
-      .cls-1, .cls-2 {
-        fill: #fff;
-      }
-    </style>
-  </defs>
-  <g id="textblock">
-    <g id="tight-bounds">
-      <g>
-        <g id="textblocktransform">
-          <path id="text-0" class="cls-2" 
d="M156.88,178.41l16.7-.63.84,1.16-.95,10.61h-42.44l.74-20.17-.74-47.48h42.86l.84,1.16-1.05,10.61-16.18-.53-12.19.11-.32,16.28,11.66.21,11.03-.32.84,1.05-.95,10.61-11.98-.32-10.82.11-.11,7.25.32,10.19,11.87.11ZM238.62,136.49l4.94,53.05h-11.87l-.74-16.07-1.79-17.33h-.84l-11.66,28.15h-10.19l-10.4-28.15h-.84l-1.89,16.07-1.16,17.33h-11.24l5.67-53.05h15.55l2.1,7.77,7.67,22.48h.84l8.3-22.38,2.31-7.88h15.23ZM278.22,179.25l14.29-.42.84.84-.95,9.88h-36.35
 [...]
-          <path id="text-1" class="cls-2" 
d="M131.03,247.17v-36.06h20.72v3.49h-16.71v14.16h14.5v3.47h-14.5v14.94h-4.01ZM161.59,212.41h0c-1.05,0-1.72-.15-2.03-.44h0c-.47-.49-.7-1.16-.7-2.02s.05-1.47.15-1.84c.1-.37.26-.65.46-.86h0c.37-.37.95-.56,1.73-.56s1.34.04,1.67.12c.34.08.62.23.84.44h0c.38.38.57,1,.57,1.85s-.05,1.47-.14,1.83c-.08.37-.23.67-.43.89h0c-.39.39-1.1.59-2.12.59ZM159.74,247.17l-.05-28.05h3.86v28.05h-3.81ZM188.16,222.33h0c-3.06,0-6.19.9-9.36,2.71h0v22.13h-3.91v-28.05h3.45l.38,
 [...]
-        </g>
-        <path class="cls-1" 
d="M368.65,111.3V.88H.88v367.77h367.77v-110.41h-6.19v104.23H7.07V7.07h355.4v104.23h6.19Z"/>
-      </g>
-    </g>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/public/img/hugin-light.svg b/public/img/hugin-light.svg
deleted file mode 100644
index 0f13ef9d..00000000
--- a/public/img/hugin-light.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg id="Warstwa_2" data-name="Warstwa 2" xmlns="http://www.w3.org/2000/svg"; 
viewBox="0 0 957.59 273.97">
-  <defs>
-    <style>
-      .cls-1 {
-        fill: #fff;
-      }
-    </style>
-  </defs>
-  <g id="Warstwa_1-2" data-name="Warstwa 1">
-    <g id="kXjd7y.tif">
-      <g>
-        <path class="cls-1" 
d="M246.18,14.69c34.44,34.39-1.14,72.7-3.22,110.1-2.42,43.47,42.35,90.94-1.75,124.96-35.53,27.41-77.86-10.58-120.87-7.15-36.9,2.94-76.08,38.98-108.32-.64-30.21-37.13,9.61-77.64,5.94-121.88-2.97-35.79-34.81-67.06-5.99-101.65,33.4-40.11,74.32-2.54,113.08-.51,42.5,2.22,86.22-38.07,121.12-3.22Z"/>
-        <polygon class="cls-1" points="367.5 41.76 367.5 112.89 369.29 114.68 
440.51 114.68 440.51 41.76 478.81 41.76 478.81 228.24 442.31 228.24 440.51 
226.45 440.51 145.76 367.5 145.76 367.5 228.24 330.99 228.24 329.2 226.45 329.2 
41.76 367.5 41.76"/>
-        <path class="cls-1" 
d="M726.58,205.53c-15.05,13.72-31.29,17.59-51.2,12.29-53.89-14.34-57.99-103.41-6.56-123.17,20.56-7.9,45-5.3,58.95,12.86v-13.15h34.72v134.48c0,7.95-9.14,23.7-14.97,29.28-27.48,26.27-107.87,21.5-111.9-26.29h35.91c4.2,17.34,34.6,18.04,46.07,9.55,2.87-2.12,8.99-10.53,8.99-13.74v-22.11ZM690.36,119.74c-31.61,5.34-33.35,76.25,11.56,71.31,39.41-4.34,36.47-79.42-11.56-71.31Z"/>
-        <path class="cls-1" 
d="M957.59,228.24h-35.91v-89.06c0-.53-3.1-7.13-3.78-8.17-8.52-12.99-29.85-11.93-39.27-.16-2.58,3.22-7.22,12.87-7.22,16.7v80.69h-35.91V94.36h35.91v16.74c18.45-27.49,62.66-28.17,79.24,1.55,1.85,3.32,6.94,17.34,6.94,20.56v95.03Z"/>
-        <path class="cls-1" 
d="M535.07,94.36c1.41,26.35-1.87,54.6-.05,80.74,1.34,19.29,9.19,29.66,30.3,25.38,7.72-1.56,18.82-14.2,18.82-21.84v-84.27h35.91v133.88h-34.71v-15.54c-3.31,1.25-4.28,5.04-6.59,7.16-21.05,19.28-61.89,15.11-73.83-12.31-.84-1.93-4.56-13.39-4.56-14.57v-98.62h34.71Z"/>
-        <rect class="cls-1" x="781.64" y="94.36" width="35.91" 
height="133.88"/>
-        <rect class="cls-1" x="781.64" y="41.76" width="35.91" height="31.08"/>
-      </g>
-    </g>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/public/img/neferdata-light.svg b/public/img/neferdata-light.svg
deleted file mode 100644
index b29f7d35..00000000
--- a/public/img/neferdata-light.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg id="Warstwa_2" data-name="Warstwa 2" xmlns="http://www.w3.org/2000/svg"; 
viewBox="0 0 174.29 49.63">
-  <defs>
-    <style>
-      .cls-1 {
-        fill: #fff;
-      }
-    </style>
-  </defs>
-  <g id="Warstwa_1-2" data-name="Warstwa 1">
-    <g>
-      <path class="cls-1" 
d="M57.96,14.88h4.3l7.17,12.34h.08v-12.34h3.38v18.57h-3.79l-7.69-13.32h-.08v13.32h-3.38V14.88Z"/>
-      <path class="cls-1" 
d="M75.64,26.6v-.35c0-4.63,2.79-7.06,6.58-7.06,4.25,0,6.04,2.41,6.04,6.9v1.3h-8.99c.24,2.71,1.71,3.6,4.25,3.6,1.73,0,3.06-.41,4.25-.92v2.33c-.97.65-2.63,1.3-5.06,1.3-4.71,0-7.06-2.6-7.06-7.09ZM79.26,25.09h5.5c0-2.46-.89-3.38-2.63-3.38-1.27,0-2.68.73-2.87,3.38Z"/>
-      <path class="cls-1" 
d="M91.55,22.08h-1.89v-2.65h1.89v-1.65c0-3,1.98-4.33,4.66-4.33,1.33,0,2.27.22,2.79.43v2.33c-.38-.08-.97-.19-1.73-.19-1.43,0-2.19.65-2.19,2.14v1.27h3.03v2.65h-3.03v11.37h-3.52v-11.37Z"/>
-      <path class="cls-1" 
d="M99.49,26.6v-.35c0-4.63,2.79-7.06,6.58-7.06,4.25,0,6.04,2.41,6.04,6.9v1.3h-8.99c.24,2.71,1.71,3.6,4.25,3.6,1.73,0,3.06-.41,4.25-.92v2.33c-.97.65-2.62,1.3-5.06,1.3-4.71,0-7.07-2.6-7.07-7.09ZM103.11,25.09h5.49c0-2.46-.89-3.38-2.62-3.38-1.27,0-2.68.73-2.87,3.38Z"/>
-      <path class="cls-1" 
d="M114.54,19.43h3.41v1.65h.14c.73-1.06,2.14-1.79,3.63-1.79.38,0,.7.03.81.11v3.14c-.3-.05-.76-.11-1.11-.11-1.25,0-2.46.35-3.33.87v10.15h-3.55v-14.02Z"/>
-      <path class="cls-1" 
d="M123.99,26.85v-.35c0-5.2,2.65-7.34,6.28-7.34,1.6,0,2.6.41,3.22.76v-6.25h3.55v19.79h-3.03l-.3-1.11h-.13c-.89.84-2.19,1.35-3.95,1.35-2.82,0-5.63-1.81-5.63-6.85ZM133.49,30.1v-7.66c-.46-.35-1.43-.6-2.57-.6-2.06,0-3.28,1.03-3.28,4.36v.49c0,3.38,1.3,4.3,3.28,4.3,1.22,0,2.08-.49,2.57-.89Z"/>
-      <path class="cls-1" 
d="M139.36,29.72c0-2.65,1.84-3.84,4.68-4.25l3.09-.38v-.95c0-1.73-.76-2.14-3.06-2.14-1.38,0-2.63.16-3.55.43v-2.49c1.38-.49,2.95-.76,4.9-.76,3.3,0,5.22,1.19,5.22,4.22v10.04h-2.9l-.27-1.14h-.16c-.62.81-1.81,1.38-3.57,1.38-2.57,0-4.38-1.27-4.38-3.98ZM147.13,30.53v-3.25l-2.3.24c-1.33.14-1.98.62-1.98,1.92s.84,1.84,2,1.84c.89,0,1.84-.33,2.27-.76Z"/>
-      <path class="cls-1" 
d="M154.58,29.88v-7.82h-1.87v-2.63h1.87v-3.3h3.49v3.3h3.22v2.63h-3.22v7.25c0,1.19.51,1.6,1.84,1.6.51,0,1.11-.08,1.52-.22v2.36c-.51.27-1.35.57-2.73.57-2.54,0-4.11-.95-4.11-3.74Z"/>
-      <path class="cls-1" 
d="M163,29.72c0-2.65,1.84-3.84,4.68-4.25l3.09-.38v-.95c0-1.73-.76-2.14-3.06-2.14-1.38,0-2.63.16-3.55.43v-2.49c1.38-.49,2.95-.76,4.9-.76,3.3,0,5.22,1.19,5.22,4.22v10.04h-2.9l-.27-1.14h-.16c-.62.81-1.81,1.38-3.57,1.38-2.57,0-4.38-1.27-4.38-3.98ZM170.77,30.53v-3.25l-2.3.24c-1.33.14-1.98.62-1.98,1.92s.84,1.84,2,1.84c.89,0,1.84-.33,2.27-.76Z"/>
-    </g>
-    <g>
-      <path class="cls-1" 
d="M13.27,4.49c0,.44-.11.85-.29,1.22l2.95,4.23c.3-.09.62-.16.96-.16,1.81,0,3.28,1.47,3.28,3.28,0,.75-.26,1.43-.68,1.98l12.32,17.69v-16.68c-1.15-.51-1.95-1.66-1.95-2.99,0-1.81,1.47-3.28,3.28-3.28.38,0,.73.08,1.07.19l2.67-3.67c-.41-.49-.67-1.12-.67-1.82,0-.55.16-1.07.44-1.5-3.51-1.91-7.54-2.99-11.82-2.99s-8.4,1.11-11.94,3.06c.25.42.4.91.4,1.43Z"/>
-      <path class="cls-1" 
d="M10.43,42.75c.43,0,.83.1,1.2.27l2.57-3.21c-.37-.53-.59-1.17-.59-1.87,0-1.34.8-2.48,1.95-2.99v-18.89c-1.15-.51-1.95-1.66-1.95-2.99,0-.44.09-.86.25-1.24l-3.16-4.52c-.09,0-.17.03-.27.03-.87,0-1.64-.4-2.16-1.01C3.2,10.86,0,17.46,0,24.81s3.3,14.15,8.51,18.69c.51-.47,1.18-.76,1.92-.76Z"/>
-      <path class="cls-1" 
d="M36.19,45.33c0-.43.1-.83.27-1.19l-2.2-3.14c-.36.13-.74.22-1.14.22-1.81,0-3.28-1.47-3.28-3.28,0-.81.31-1.54.79-2.12l-12.43-17.77v16.89c1.15.51,1.95,1.66,1.95,2.99,0,1.81-1.47,3.28-3.28,3.28-.62,0-1.19-.18-1.69-.48l-2.48,3.19c.34.47.54,1.04.54,1.66,0,.38-.08.75-.22,1.08,3.5,1.89,7.5,2.96,11.76,2.96s8.24-1.07,11.73-2.95c-.22-.4-.36-.86-.36-1.35Z"/>
-      <path class="cls-1" 
d="M41.26,6.24c-.52.66-1.32,1.09-2.22,1.09-.38,0-.74-.08-1.08-.21l-2.54,3.61c.6.59.98,1.42.98,2.33,0,1.34-.8,2.48-1.95,2.99v18.89c1.15.51,1.95,1.66,1.95,2.99,0,.39-.08.76-.21,1.11l2.43,3.48c.14-.02.27-.04.41-.04.85,0,1.61.38,2.13.98,5.18-4.55,8.46-11.22,8.46-18.66s-3.24-14.03-8.37-18.57Z"/>
-    </g>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/public/img/organizations/hotdata-dark.svg 
b/public/img/organizations/hotdata-dark.svg
new file mode 100644
index 00000000..43f2f809
--- /dev/null
+++ b/public/img/organizations/hotdata-dark.svg
@@ -0,0 +1,12 @@
+<svg width="533" height="88" viewBox="0 0 533 88" fill="none" 
xmlns="http://www.w3.org/2000/svg";>
+<path d="M495.77 85.1942C490.725 85.2803 486.442 84.0822 482.923 
81.5999C479.44 79.0796 476.949 75.5329 475.451 70.9599C473.951 66.3494 473.635 
60.9897 474.503 54.8808C475.446 48.7705 477.354 43.3916 480.229 38.7439C483.103 
34.0962 486.667 30.4462 490.921 27.7939C495.176 25.1416 499.826 23.7723 504.872 
23.6863C509.319 23.6104 513.207 24.647 516.534 26.7961C519.897 28.9071 522.097 
31.8419 523.133 35.6003L523.245 35.5984L525.037 24.2775L531.969 24.2894L523.208 
83.7818L516.104 83.7818L517.7 [...]
+<path d="M523.316 38.0507L520.601 30.6094C521.881 30.4073 523.381 30.2741 
523.952 29.1104C524.203 28.5979 524.444 27.8688 524.633 26.8329C525.326 23.0294 
525.898 30.3032 525.898 30.3032L523.316 38.0507Z" fill="#FCFAF9"/>
+<path d="M458.677 84.8025C453.705 84.8025 450.048 83.4131 447.708 
80.6344C445.441 77.7824 444.673 73.724 445.405 68.4589L450.45 
32.1519H439.482L440.469 25.8996H444.308C446.502 25.8996 448.32 25.9329 449.709 
24.5435C451.172 23.1542 452.023 20.598 452.315 18.3311L453.193 
12.2982H459.884L458.019 25.8996H470.633L469.756 32.1519H457.141L451.986 
68.8977C451.767 70.5064 451.767 72.0786 451.986 73.6143C452.205 75.0768 452.9 
76.2834 454.07 77.234C455.24 78.1115 457.105 78.5503 459.664 78.5503C460 [...]
+<path d="M331.264 85.4607C325.999 85.4607 321.319 84.2176 317.224 
81.7313C313.202 79.245 310.057 75.8812 307.79 71.6399C305.523 67.3255 304.39 
62.4992 304.39 57.161C304.39 52.7003 305.158 48.5321 306.693 44.6564C308.229 
40.7076 310.386 37.2342 313.165 34.236C315.944 31.2378 319.198 28.8978 322.927 
27.2159C326.657 25.4609 330.715 24.5834 335.103 24.5834C340.587 24.5834 345.377 
25.8996 349.472 28.5322C353.64 31.0916 356.675 34.6382 358.576 39.172L357.699 
40.5979L363.183 1.10992H369.874L358 [...]
+<path d="M282.211 83.9802C275.849 83.9802 271.132 82.1887 268.061 
78.6055C265.063 74.9492 264.002 69.9401 264.88 63.5781L268.829 
35.1687H258.299L259.944 23.9804H261.26C264.039 23.9804 266.505 23.7587 268.406 
22.0768C270.308 20.3218 271.315 17.4356 271.681 14.6568L272.339 
10.379H284.843L282.869 23.9804H296.251L294.606 35.1687H281.333L277.275 
63.6878C276.982 65.7353 277.019 67.4538 277.384 68.8432C277.823 70.2326 278.664 
71.2929 279.907 72.0242C281.15 72.6823 282.905 73.0114 285.172 73.011 [...]
+<path d="M216.237 84.6385C210.753 84.6385 205.78 83.3953 201.319 
80.909C196.932 78.4228 193.422 74.9858 190.789 70.5983C188.157 66.1376 186.841 
61.0553 186.841 55.3515C186.841 50.8177 187.681 46.5764 189.363 42.6276C191.045 
38.6057 193.385 35.1322 196.383 32.2072C199.455 29.209 202.965 26.869 206.914 
25.1871C210.862 23.5052 215.104 22.6642 219.638 22.6642C225.195 22.6642 230.204 
23.9074 234.665 26.3936C239.126 28.8799 242.636 32.3168 245.195 36.7044C247.754 
41.0188 249.034 46.028 249.034 [...]
+<path d="M120.708 83.3223L132.335 0.287781H144.62L139.684 35.6076L137.929 
33.7429C139.83 30.0135 142.462 27.2347 145.826 25.4066C149.263 23.5784 153.066 
22.6643 157.234 22.6643C161.621 22.6643 165.387 23.6881 168.532 25.7356C171.749 
27.7831 174.089 30.5985 175.552 34.1817C177.088 37.7648 177.526 41.8233 176.868 
46.3571L171.713 83.3223H159.318L164.254 47.6734C164.839 43.5784 164.108 40.3242 
162.06 37.9111C160.013 35.4248 157.088 34.1817 153.285 34.1817C150.726 34.1817 
148.349 34.7667 146. [...]
+<path d="M394.452 86.9229C389.406 87.009 385.123 85.8109 381.604 
83.3286C378.121 80.8083 375.63 77.2616 374.132 72.6885C372.632 68.0781 372.317 
62.7184 373.184 56.6094C374.127 50.4992 376.035 45.1202 378.91 40.4725C381.784 
35.8248 385.348 32.1748 389.603 29.5225C393.857 26.8702 398.507 25.501 403.553 
25.4149C408.001 25.339 411.888 26.3756 415.215 28.5247C418.578 30.6358 420.778 
33.5705 421.814 37.329L421.926 37.3271L423.719 26.0061L430.65 26.0181L421.889 
85.5104L414.785 85.5104L416.444 7 [...]
+<path d="M421.997 39.7793L419.282 32.338C420.562 32.1359 422.063 32.0028 
422.633 30.839C422.884 30.3265 423.125 29.5974 423.314 28.5615C424.008 24.7581 
424.579 32.0319 424.579 32.0319L421.997 39.7793Z" fill="#FCFAF9"/>
+<path d="M0 23.6415V3.61639C0 2.23779 1.11758 1.12021 2.49618 
1.12021H21.7091C22.3711 1.12021 23.006 1.3832 23.4741 1.85132L84.5552 
62.9324C85.0233 63.4005 85.2863 64.0354 85.2863 64.6975V83.9104C85.2863 85.289 
84.1688 86.4065 82.7902 86.4065H62.765C62.103 86.4065 61.4681 86.1436 60.9999 
85.6754L30.8655 55.541V83.9104C30.8655 85.289 29.748 86.4065 28.3693 
86.4065H21.3402C20.6782 86.4065 20.0433 86.1436 19.5752 85.6754L0.731114 
66.8314C0.262989 66.3633 0 65.7283 0 65.0663V58.0372C0 56.658 [...]
+</svg>
diff --git a/public/img/organizations/hotdata.svg 
b/public/img/organizations/hotdata.svg
new file mode 100644
index 00000000..551bbc5c
--- /dev/null
+++ b/public/img/organizations/hotdata.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="533" height="88" viewBox="0 0 
533 88" fill="none">
+<path d="M495.77 85.1942C490.725 85.2803 486.442 84.0822 482.923 
81.5999C479.44 79.0796 476.949 75.5329 475.451 70.9599C473.951 66.3494 473.635 
60.9897 474.503 54.8808C475.446 48.7705 477.354 43.3916 480.229 38.7439C483.103 
34.0962 486.667 30.4462 490.921 27.7939C495.176 25.1416 499.826 23.7723 504.872 
23.6863C509.319 23.6104 513.207 24.647 516.534 26.7961C519.897 28.9071 522.097 
31.8419 523.133 35.6003L523.245 35.5984L525.037 24.2775L531.969 24.2894L523.208 
83.7818L516.104 83.7818L517.7 [...]
+<path d="M523.316 38.0507L520.601 30.6094C521.881 30.4073 523.381 30.2741 
523.952 29.1104C524.203 28.5979 524.444 27.8688 524.633 26.8329C525.326 23.0294 
525.898 30.3032 525.898 30.3032L523.316 38.0507Z" fill="#000000"/>
+<path d="M458.677 84.8025C453.705 84.8025 450.048 83.4131 447.708 
80.6344C445.441 77.7824 444.673 73.724 445.405 68.4589L450.45 
32.1519H439.482L440.469 25.8996H444.308C446.502 25.8996 448.32 25.9329 449.709 
24.5435C451.172 23.1542 452.023 20.598 452.315 18.3311L453.193 
12.2982H459.884L458.019 25.8996H470.633L469.756 32.1519H457.141L451.986 
68.8977C451.767 70.5064 451.767 72.0786 451.986 73.6143C452.205 75.0768 452.9 
76.2834 454.07 77.234C455.24 78.1115 457.105 78.5503 459.664 78.5503C460 [...]
+<path d="M331.264 85.4607C325.999 85.4607 321.319 84.2176 317.224 
81.7313C313.202 79.245 310.057 75.8812 307.79 71.6399C305.523 67.3255 304.39 
62.4992 304.39 57.161C304.39 52.7003 305.158 48.5321 306.693 44.6564C308.229 
40.7076 310.386 37.2342 313.165 34.236C315.944 31.2378 319.198 28.8978 322.927 
27.2159C326.657 25.4609 330.715 24.5834 335.103 24.5834C340.587 24.5834 345.377 
25.8996 349.472 28.5322C353.64 31.0916 356.675 34.6382 358.576 39.172L357.699 
40.5979L363.183 1.10992H369.874L358 [...]
+<path d="M282.211 83.9802C275.849 83.9802 271.132 82.1887 268.061 
78.6055C265.063 74.9492 264.002 69.9401 264.88 63.5781L268.829 
35.1687H258.299L259.944 23.9804H261.26C264.039 23.9804 266.505 23.7587 268.406 
22.0768C270.308 20.3218 271.315 17.4356 271.681 14.6568L272.339 
10.379H284.843L282.869 23.9804H296.251L294.606 35.1687H281.333L277.275 
63.6878C276.982 65.7353 277.019 67.4538 277.384 68.8432C277.823 70.2326 278.664 
71.2929 279.907 72.0242C281.15 72.6823 282.905 73.0114 285.172 73.011 [...]
+<path d="M216.237 84.6385C210.753 84.6385 205.78 83.3953 201.319 
80.909C196.932 78.4228 193.422 74.9858 190.789 70.5983C188.157 66.1376 186.841 
61.0553 186.841 55.3515C186.841 50.8177 187.681 46.5764 189.363 42.6276C191.045 
38.6057 193.385 35.1322 196.383 32.2072C199.455 29.209 202.965 26.869 206.914 
25.1871C210.862 23.5052 215.104 22.6642 219.638 22.6642C225.195 22.6642 230.204 
23.9074 234.665 26.3936C239.126 28.8799 242.636 32.3168 245.195 36.7044C247.754 
41.0188 249.034 46.028 249.034 [...]
+<path d="M120.708 83.3223L132.335 0.287781H144.62L139.684 35.6076L137.929 
33.7429C139.83 30.0135 142.462 27.2347 145.826 25.4066C149.263 23.5784 153.066 
22.6643 157.234 22.6643C161.621 22.6643 165.387 23.6881 168.532 25.7356C171.749 
27.7831 174.089 30.5985 175.552 34.1817C177.088 37.7648 177.526 41.8233 176.868 
46.3571L171.713 83.3223H159.318L164.254 47.6734C164.839 43.5784 164.108 40.3242 
162.06 37.9111C160.013 35.4248 157.088 34.1817 153.285 34.1817C150.726 34.1817 
148.349 34.7667 146. [...]
+<path d="M394.452 86.9229C389.406 87.009 385.123 85.8109 381.604 
83.3286C378.121 80.8083 375.63 77.2616 374.132 72.6885C372.632 68.0781 372.317 
62.7184 373.184 56.6094C374.127 50.4992 376.035 45.1202 378.91 40.4725C381.784 
35.8248 385.348 32.1748 389.603 29.5225C393.857 26.8702 398.507 25.501 403.553 
25.4149C408.001 25.339 411.888 26.3756 415.215 28.5247C418.578 30.6358 420.778 
33.5705 421.814 37.329L421.926 37.3271L423.719 26.0061L430.65 26.0181L421.889 
85.5104L414.785 85.5104L416.444 7 [...]
+<path d="M421.997 39.7793L419.282 32.338C420.562 32.1359 422.063 32.0028 
422.633 30.839C422.884 30.3265 423.125 29.5974 423.314 28.5615C424.008 24.7581 
424.579 32.0319 424.579 32.0319L421.997 39.7793Z" fill="#000000"/>
+<path d="M0 23.6415V3.61639C0 2.23779 1.11758 1.12021 2.49618 
1.12021H21.7091C22.3711 1.12021 23.006 1.3832 23.4741 1.85132L84.5552 
62.9324C85.0233 63.4005 85.2863 64.0354 85.2863 64.6975V83.9104C85.2863 85.289 
84.1688 86.4065 82.7902 86.4065H62.765C62.103 86.4065 61.4681 86.1436 60.9999 
85.6754L30.8655 55.541V83.9104C30.8655 85.289 29.748 86.4065 28.3693 
86.4065H21.3402C20.6782 86.4065 20.0433 86.1436 19.5752 85.6754L0.731114 
66.8314C0.262989 66.3633 0 65.7283 0 65.0663V58.0372C0 56.658 [...]
+</svg>
\ No newline at end of file
diff --git a/public/img/organizations/lakesail-dark.svg 
b/public/img/organizations/lakesail-dark.svg
new file mode 100644
index 00000000..c46b3041
--- /dev/null
+++ b/public/img/organizations/lakesail-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 668 202" 
shape-rendering="geometricPrecision" aria-label="LakeSail"><path d="M216.494 
129.203V59.9758H200.347V143.6H254.733V129.203H216.494Z" fill="#ffffff"/><path 
d="M303.661 86.1406V91.5681C302.073 89.921 300.217 88.5418 298.083 
87.4504C294.838 85.7834 291.196 84.95 287.156 84.95C281.847 84.95 277.123 
86.2597 272.964 88.8792C268.806 91.4986 265.541 95.0607 263.169 99.5853C260.797 
104.11 259.606 109.22 259.606 114.935C259.606 120.65 2 [...]
\ No newline at end of file
diff --git a/public/img/organizations/lakesail.svg 
b/public/img/organizations/lakesail.svg
new file mode 100644
index 00000000..92c06ae9
--- /dev/null
+++ b/public/img/organizations/lakesail.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 668 202" xmlns="http://www.w3.org/2000/svg"; 
shape-rendering="geometricPrecision" aria-label="LakeSail"><path d="M216.494 
129.203V59.9758H200.347V143.6H254.733V129.203H216.494Z" 
fill="currentColor"></path><path d="M303.661 86.1406V91.5681C302.073 89.921 
300.217 88.5418 298.083 87.4504C294.838 85.7834 291.196 84.95 287.156 
84.95C281.847 84.95 277.123 86.2597 272.964 88.8792C268.806 91.4986 265.541 
95.0607 263.169 99.5853C260.797 104.11 259.606 109.22 259.606 114.935C259.6 
[...]
\ No newline at end of file
diff --git a/public/img/organizations/laserdata-dark.png 
b/public/img/organizations/laserdata-dark.png
new file mode 100644
index 00000000..106897c4
Binary files /dev/null and b/public/img/organizations/laserdata-dark.png differ
diff --git a/public/img/organizations/laserdata.png 
b/public/img/organizations/laserdata.png
new file mode 100644
index 00000000..386e732d
Binary files /dev/null and b/public/img/organizations/laserdata.png differ
diff --git a/public/img/organizations/measure-dark.svg 
b/public/img/organizations/measure-dark.svg
new file mode 100644
index 00000000..9f1f9cdc
--- /dev/null
+++ b/public/img/organizations/measure-dark.svg
@@ -0,0 +1,16 @@
+<svg width="1024" height="306" viewBox="0 0 1024 306" fill="none" 
xmlns="http://www.w3.org/2000/svg";>
+<path d="M323.7 184V126.886H347.412V139.312C349.084 135.056 351.478 131.788 
354.594 129.508C357.786 127.228 361.776 126.088 366.564 126.088C371.276 126.088 
375.266 127.266 378.534 129.622C381.878 131.902 384.234 134.866 385.602 
138.514C388.186 134.638 391.226 131.598 394.722 129.394C398.294 127.19 402.588 
126.088 407.604 126.088C414.672 126.088 420.144 128.672 424.02 133.84C427.896 
138.932 429.834 146.152 429.834 155.5V184H405.78V154.246C405.78 147.482 403.386 
144.1 398.598 144.1C395.634 [...]
+<mask id="mask0_221_80" style="mask-type:luminance" maskUnits="userSpaceOnUse" 
x="180" y="119" width="70" height="71">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M248.559 145.587C253.51 
164.133 242.556 183.194 224.094 188.16C205.635 193.126 186.656 182.117 181.706 
163.57C176.757 145.026 187.71 125.966 206.169 121C224.631 116.034 243.61 
127.043 248.559 145.587ZM210.305 136.499C200.367 139.172 194.469 149.436 
197.134 159.42C199.799 169.407 210.019 175.335 219.958 172.662C229.899 169.988 
235.797 159.724 233.132 149.737C230.467 139.753 220.247 133.825 210.305 
136.499Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_221_80)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M156.203 120.413L249.151 
95.4099L274.063 188.747L181.115 213.75L156.203 120.413Z" fill="white"/>
+</g>
+<mask id="mask1_221_80" style="mask-type:luminance" maskUnits="userSpaceOnUse" 
x="101" y="158" width="49" height="33">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M149.549 158.58L149.553 
181.094L111.519 190.264L101.169 175.518L149.549 158.58Z" fill="white"/>
+</mask>
+<g mask="url(#mask1_221_80)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M91.9233 159.916L147.094 
145.075L158.799 188.927L103.628 203.768L91.9233 159.916Z" fill="white"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M154.812 109.642C167.887 
106.125 180.058 96.7615 190.488 86.1713C201.069 75.4301 210.647 62.6055 218.437 
50.9173C224.981 41.0961 239.38 42.2502 243.877 51.1174C251.075 65.311 259.118 
81.5091 265.801 95.8277C272.61 110.414 277.652 122.306 279.244 128.268C293.709 
182.465 256.927 241.435 194.722 258.168C132.518 274.901 71.2933 242.294 56.8279 
188.097C55.244 182.163 53.6871 169.397 52.3159 153.423C50.97 137.743 49.8598 
119.761 49.0171 103.924C [...]
+</svg>
diff --git a/public/img/organizations/measure.svg 
b/public/img/organizations/measure.svg
new file mode 100644
index 00000000..66f7ba90
--- /dev/null
+++ b/public/img/organizations/measure.svg
@@ -0,0 +1,16 @@
+<svg width="1024" height="306" viewBox="0 0 1024 306" fill="none" 
xmlns="http://www.w3.org/2000/svg";>
+<path d="M323.7 184V126.886H347.412V139.312C349.084 135.056 351.478 131.788 
354.594 129.508C357.786 127.228 361.776 126.088 366.564 126.088C371.276 126.088 
375.266 127.266 378.534 129.622C381.878 131.902 384.234 134.866 385.602 
138.514C388.186 134.638 391.226 131.598 394.722 129.394C398.294 127.19 402.588 
126.088 407.604 126.088C414.672 126.088 420.144 128.672 424.02 133.84C427.896 
138.932 429.834 146.152 429.834 155.5V184H405.78V154.246C405.78 147.482 403.386 
144.1 398.598 144.1C395.634 [...]
+<path fill-rule="evenodd" clip-rule="evenodd" d="M154.812 109.642C167.887 
106.125 180.058 96.7615 190.488 86.1713C201.069 75.4301 210.647 62.6055 218.437 
50.9173C224.981 41.0961 239.38 42.2502 243.877 51.1174C251.075 65.311 259.118 
81.5091 265.801 95.8277C272.61 110.414 277.652 122.306 279.244 128.268C293.709 
182.465 256.927 241.435 194.722 258.168C132.518 274.901 71.2933 242.294 56.8279 
188.097C55.244 182.163 53.6871 169.397 52.3159 153.423C50.97 137.743 49.8598 
119.761 49.0171 103.924C [...]
+<mask id="mask0_218_2" style="mask-type:luminance" maskUnits="userSpaceOnUse" 
x="180" y="119" width="70" height="71">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M248.56 145.587C253.51 
164.133 242.556 183.194 224.095 188.16C205.635 193.126 186.656 182.117 181.706 
163.57C176.757 145.026 187.71 125.966 206.169 121C224.631 116.034 243.61 
127.043 248.56 145.587ZM210.306 136.499C200.367 139.172 194.469 149.436 197.134 
159.42C199.799 169.407 210.019 175.335 219.958 172.662C229.899 169.988 235.797 
159.724 233.132 149.737C230.467 139.753 220.247 133.825 210.306 136.499Z" 
fill="white"/>
+</mask>
+<g mask="url(#mask0_218_2)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M156.203 120.413L249.151 
95.4099L274.063 188.747L181.116 213.75L156.203 120.413Z" fill="white"/>
+</g>
+<mask id="mask1_218_2" style="mask-type:luminance" maskUnits="userSpaceOnUse" 
x="101" y="158" width="49" height="33">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M149.549 158.58L149.553 
181.094L111.519 190.264L101.169 175.518L149.549 158.58Z" fill="white"/>
+</mask>
+<g mask="url(#mask1_218_2)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M91.9233 159.916L147.094 
145.075L158.799 188.927L103.628 203.768L91.9233 159.916Z" fill="white"/>
+</g>
+</svg>
diff --git a/public/img/organizations/rocketride-dark.svg 
b/public/img/organizations/rocketride-dark.svg
new file mode 100644
index 00000000..ba22f0e1
--- /dev/null
+++ b/public/img/organizations/rocketride-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; width="1920" zoomAndPan="magnify" 
viewBox="0 0 1440 248.999984" height="332" preserveAspectRatio="xMidYMid meet" 
version="1.0"><defs fill="#ffffff"><clipPath id="f4636453d4" 
fill="#ffffff"><path d="M 648 34.070312 L 755 34.070312 L 755 193 L 648 193 Z M 
648 34.070312 " clip-rule="nonzero" fill="#ffffff"/></clipPath><clipPath 
id="9aa6561abb" fill="#ffffff"><path d="M 1133 34.070312 L 1247 34.070312 L 
1247 1 [...]
\ No newline at end of file
diff --git a/public/img/organizations/rocketride.svg 
b/public/img/organizations/rocketride.svg
new file mode 100644
index 00000000..9c44d689
--- /dev/null
+++ b/public/img/organizations/rocketride.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; width="1920" zoomAndPan="magnify" 
viewBox="0 0 1440 248.999984" height="332" preserveAspectRatio="xMidYMid meet" 
version="1.0"><defs><clipPath id="f4636453d4"><path d="M 648 34.070312 L 755 
34.070312 L 755 193 L 648 193 Z M 648 34.070312 " 
clip-rule="nonzero"/></clipPath><clipPath id="9aa6561abb"><path d="M 1133 
34.070312 L 1247 34.070312 L 1247 195 L 1133 195 Z M 1133 34.070312 " 
clip-rule="nonzero"/></cl [...]
\ No newline at end of file
diff --git a/public/img/organizations/serro-dark.svg 
b/public/img/organizations/serro-dark.svg
new file mode 100644
index 00000000..1d64be90
--- /dev/null
+++ b/public/img/organizations/serro-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; viewBox="0 0 159.906 42.996" 
overflow="visible"><g><g transform="translate(0 0)"><path d="M 0 0.001 L 42.994 
0.001 L 42.994 42.995 L 0 42.995 Z" fill="transparent"></path><path d="M 19.8 
36.226 L 19.8 6.769 L 20.365 6.769 L 20.365 0.001 C 19.6 0.041 18.845 0.121 
18.103 0.239 L 18.103 6.769 L 18.668 6.769 L 18.668 36.226 L 18.102 36.226 L 
18.102 42.756 C 18.845 42.874 19.6 42.956 20.365 42.996 L 20.365 36.2 [...]
\ No newline at end of file
diff --git a/public/img/organizations/serro.svg 
b/public/img/organizations/serro.svg
new file mode 100644
index 00000000..55c0201a
--- /dev/null
+++ b/public/img/organizations/serro.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; viewBox="0 0 159.906 42.996" 
overflow="visible"><g><g transform="translate(0 0)"><path d="M 0 0.001 L 42.994 
0.001 L 42.994 42.995 L 0 42.995 Z" fill="transparent"/><path d="M 19.8 36.226 
L 19.8 6.769 L 20.365 6.769 L 20.365 0.001 C 19.6 0.041 18.845 0.121 18.103 
0.239 L 18.103 6.769 L 18.668 6.769 L 18.668 36.226 L 18.102 36.226 L 18.102 
42.756 C 18.845 42.874 19.6 42.956 20.365 42.996 L 20.365 36.226 Z M [...]
\ No newline at end of file
diff --git a/public/img/organizations/velodb-dark.svg 
b/public/img/organizations/velodb-dark.svg
new file mode 100644
index 00000000..f95f3f06
--- /dev/null
+++ b/public/img/organizations/velodb-dark.svg
@@ -0,0 +1,12 @@
+<svg width="99" height="36" viewBox="0 0 99 36" fill="none" 
xmlns="http://www.w3.org/2000/svg";>
+<path d="M0 9.34612H3.46154L9 26.6538H5.53846L0 9.34612Z" fill="white"/>
+<path d="M5.53857 26.6537H9.00011L14.5386 9.34605H11.077L5.53857 26.6537Z" 
fill="white"/>
+<rect x="29.5952" y="9.51801" width="3.11538" height="12.1154" 
transform="rotate(90 29.5952 9.51801)" fill="#0BA2FF"/>
+<rect x="29.0776" y="16.268" width="3.11538" height="11.0769" 
transform="rotate(90 29.0776 16.268)" fill="#0BA2FF"/>
+<rect x="29.771" y="23.1938" width="3.46154" height="12.4615" 
transform="rotate(90 29.771 23.1938)" fill="#0BA2FF"/>
+<rect x="33.231" y="9.34615" width="3.46154" height="17.3077" fill="white"/>
+<rect x="45.6924" y="23.1923" width="3.46154" height="12.4615" 
transform="rotate(90 45.6924 23.1923)" fill="white"/>
+<rect x="48.8079" y="10.7308" width="12.4615" height="14.5385" rx="6.23077" 
stroke="white" stroke-width="3.46154" stroke-linejoin="round"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M72.3465 
12.8077H69.2311V23.1923H72.3465C74.8317 23.1923 76.8465 21.1776 76.8465 
18.6923V17.3077C76.8465 14.8224 74.8317 12.8077 72.3465 12.8077ZM65.7695 
9.34614V26.6538H72.3465C76.7435 26.6538 80.308 23.0893 80.308 
18.6923V17.3077C80.308 12.9106 76.7435 9.34614 72.3465 9.34614H65.7695Z" 
fill="white"/>
+<path d="M92.2495 9.25973C95.0216 9.25973 97.269 11.5072 97.269 
14.2793L97.2622 14.5371C97.1984 15.7962 96.6694 16.9316 95.8452 17.7783C96.9272 
18.712 97.6146 20.0937 97.6147 21.6406L97.6089 21.9033C97.4765 24.5107 95.3853 
26.6012 92.7778 26.7334L92.5151 26.7402H83.0767V9.25973H92.2495ZM86.5386 
23.4521H92.2495C92.8654 23.4521 93.4113 23.1577 93.7593 22.7041C94.0043 22.4179 
94.1538 22.0469 94.1538 21.6406C94.1538 21.625 94.1513 21.6092 94.1509 
21.5937C94.1513 21.5786 94.1538 21.563 94.153 [...]
+</svg>
diff --git a/public/img/organizations/velodb.png 
b/public/img/organizations/velodb.png
new file mode 100644
index 00000000..aa86b895
Binary files /dev/null and b/public/img/organizations/velodb.png differ
diff --git a/public/img/organizations/velodb.svg 
b/public/img/organizations/velodb.svg
new file mode 100644
index 00000000..6f033c71
--- /dev/null
+++ b/public/img/organizations/velodb.svg
@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg"; width="99" height="36" viewBox="0 0 99 
36" fill="none">
+<path d="M0 9.34612H3.46154L9 26.6538H5.53846L0 9.34612Z" fill="#000000"/>
+<path d="M5.53857 26.6537H9.00011L14.5386 9.34605H11.077L5.53857 26.6537Z" 
fill="#000000"/>
+<rect x="29.5952" y="9.51801" width="3.11538" height="12.1154" 
transform="rotate(90 29.5952 9.51801)" fill="#0BA2FF"/>
+<rect x="29.0776" y="16.268" width="3.11538" height="11.0769" 
transform="rotate(90 29.0776 16.268)" fill="#0BA2FF"/>
+<rect x="29.771" y="23.1938" width="3.46154" height="12.4615" 
transform="rotate(90 29.771 23.1938)" fill="#0BA2FF"/>
+<rect x="33.231" y="9.34615" width="3.46154" height="17.3077" fill="#000000"/>
+<rect x="45.6924" y="23.1923" width="3.46154" height="12.4615" 
transform="rotate(90 45.6924 23.1923)" fill="#000000"/>
+<rect x="48.8079" y="10.7308" width="12.4615" height="14.5385" rx="6.23077" 
stroke="#000000" stroke-width="3.46154" stroke-linejoin="round" fill="#ffffff"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M72.3465 
12.8077H69.2311V23.1923H72.3465C74.8317 23.1923 76.8465 21.1776 76.8465 
18.6923V17.3077C76.8465 14.8224 74.8317 12.8077 72.3465 12.8077ZM65.7695 
9.34614V26.6538H72.3465C76.7435 26.6538 80.308 23.0893 80.308 
18.6923V17.3077C80.308 12.9106 76.7435 9.34614 72.3465 9.34614H65.7695Z" 
fill="#000000"/>
+<path d="M92.2495 9.25973C95.0216 9.25973 97.269 11.5072 97.269 
14.2793L97.2622 14.5371C97.1984 15.7962 96.6694 16.9316 95.8452 17.7783C96.9272 
18.712 97.6146 20.0937 97.6147 21.6406L97.6089 21.9033C97.4765 24.5107 95.3853 
26.6012 92.7778 26.7334L92.5151 26.7402H83.0767V9.25973H92.2495ZM86.5386 
23.4521H92.2495C92.8654 23.4521 93.4113 23.1577 93.7593 22.7041C94.0043 22.4179 
94.1538 22.0469 94.1538 21.6406C94.1538 21.625 94.1513 21.6092 94.1509 
21.5937C94.1513 21.5786 94.1538 21.563 94.153 [...]
+</svg>
diff --git a/public/img/organizations/videodb-dark.png 
b/public/img/organizations/videodb-dark.png
new file mode 100644
index 00000000..23b7bc8a
Binary files /dev/null and b/public/img/organizations/videodb-dark.png differ
diff --git a/public/img/organizations/videodb.png 
b/public/img/organizations/videodb.png
new file mode 100644
index 00000000..330d8b79
Binary files /dev/null and b/public/img/organizations/videodb.png differ
diff --git a/source.config.ts b/source.config.ts
index e192c2c8..0bc71dbe 100644
--- a/source.config.ts
+++ b/source.config.ts
@@ -44,6 +44,61 @@ export const blogPosts = defineCollections({
   }),
 });
 
+export const organizations = defineCollections({
+  type: "doc",
+  dir: "content/organizations",
+  // Submission instructions live beside the entries for contributors, but
+  // only completed organization MDX files belong to this collection.
+  files: ["**/*.mdx", "!TEMPLATE.mdx"],
+  schema: z.object({
+    // Organization or project name, exactly as it should be printed.
+    name: z.string(),
+    // Public URL. Omit when it is not known -- the entry renders unlinked
+    // rather than pointing somewhere unverified.
+    website: z.string().optional(),
+
+    // Logo variants. `logo` must be legible on a light background, `logoDark`
+    // on a dark one. Either may be omitted; the wall falls back to the name
+    // set as text for whichever theme has no artwork.
+    logo: z.string().optional(),
+    logoDark: z.string().optional(),
+    // Logos render only when the submitter has confirmed they are authorized
+    // to grant the ASF permission to display the mark, AND the file is
+    // actually committed. See content/organizations/README.md.
+    permissionConfirmed: z.boolean().optional().default(false),
+
+    // A short category for the workload, e.g. "AI infrastructure",
+    // "Change data capture", "Observability". Rendered as a label above the
+    // description in the "How Iggy is being used" section.
+    useCaseCategory: z.string().optional(),
+    // One to three sentences about what the organization uses Iggy for.
+    // Presence of this field is what promotes an entry out of the logo wall
+    // and into the use-case section -- so leave it empty unless there is
+    // something substantive to say. Never write filler.
+    description: z.string().optional(),
+    technologies: z.array(z.string()).optional().default([]),
+    since: z.string().optional(),
+    caseStudyUrl: z.string().optional(),
+    quote: z.string().optional(),
+    quoteAuthor: z.string().optional(),
+
+    // Collected at submission time and kept for the project's own records.
+    // Deliberately NOT used as the page's public taxonomy: with adoption
+    // still early, sorting a handful of names into production vs evaluating
+    // advertises how few there are. Revisit when the numbers justify a
+    // "Running Iggy in production" cut.
+    deploymentStatus: z
+      .enum(["production", "pilot", "evaluating", "integration"])
+      .optional(),
+
+    // Reserved for entries that earn a richer treatment (quote, case study).
+    featured: z.boolean().optional().default(false),
+    // Entries stay hidden until a committer has verified the submission.
+    draft: z.boolean().optional().default(true),
+    submittedBy: z.string().optional(),
+  }),
+});
+
 export default defineConfig({
   mdxOptions: {
     remarkPlugins: [remarkMdxMermaid],
diff --git a/src/app/(site)/powered-by/page.tsx 
b/src/app/(site)/powered-by/page.tsx
new file mode 100644
index 00000000..f3b24c2e
--- /dev/null
+++ b/src/app/(site)/powered-by/page.tsx
@@ -0,0 +1,167 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import type { Metadata } from "next";
+
+import {
+  OrganizationWall,
+  UseCaseCard,
+} from "@/components/organization-showcase";
+import {
+  organizationSlug,
+  organizationsWithUseCase,
+  publishedOrganizations,
+  SUBMIT_GUIDE_URL,
+  SUBMIT_ISSUE_URL,
+} from "@/lib/organizations";
+import { absoluteUrl, serializeJsonLd } from "@/lib/site";
+
+export const metadata: Metadata = {
+  title: "Powered By Iggy",
+  description:
+    "Organizations, developers and open source projects building with Apache 
Iggy, and what they use it for.",
+};
+
+export default function PoweredByPage() {
+  const allOrganizations = publishedOrganizations();
+  const useCases = organizationsWithUseCase();
+
+  /**
+   * Structured data, following the pattern in the root layout: it restates
+   * only what the page already says in HTML, so an answer engine reading the
+   * markup and one reading the graph arrive at the same claims.
+   */
+  const structuredData = {
+    "@context": "https://schema.org";,
+    "@type": "ItemList",
+    name: "Organizations building with Apache Iggy",
+    url: absoluteUrl("/powered-by"),
+    numberOfItems: allOrganizations.length,
+    itemListElement: allOrganizations.map((entry, index) => ({
+      "@type": "ListItem",
+      position: index + 1,
+      item: {
+        "@type": "Organization",
+        name: entry.name,
+        ...(entry.website ? { url: entry.website } : {}),
+        ...(entry.description ? { description: entry.description } : {}),
+      },
+    })),
+  };
+
+  return (
+    <main className="min-h-screen px-6 py-20 md:px-12">
+      <div className="mx-auto max-w-6xl">
+        <header className="mb-16">
+          <h1 className="mb-5 text-4xl font-extrabold tracking-tight 
text-fd-foreground md:text-5xl">
+            Powered By Apache Iggy™
+          </h1>
+          <p className="text-lg leading-relaxed text-fd-muted-foreground">
+            From first experiments to production systems, teams are using 
Apache Iggy to power real-time data across AI and agents, financial services, 
observability, cybersecurity, IoT and edge, gaming, communications, analytics 
and big data infrastructure. Iggy is built for workloads where latency, 
throughput and efficiency matter.
+          </p>
+          <p className="mt-3 max-w-3xl text-lg leading-relaxed 
text-fd-muted-foreground">
+            See how organizations, developers and open source projects are
+            building with Iggy.
+          </p>
+          <a
+            href={SUBMIT_ISSUE_URL}
+            target="_blank"
+            rel="noreferrer noopener"
+            className="mt-8 inline-block rounded-lg bg-[#ff9103] px-4 py-2 
text-sm font-semibold text-fd-primary-foreground transition-opacity 
hover:opacity-90"
+          >
+            Add your organization
+          </a>
+        </header>
+
+        {useCases.length > 0 && (
+          <section id="use-cases" className="mb-16 scroll-mt-24">
+            <h2 className="text-2xl font-bold tracking-tight 
text-fd-foreground">
+              How Iggy is being used
+            </h2>
+            <p className="mt-2 max-w-2xl text-sm leading-relaxed 
text-fd-muted-foreground">
+              Workloads the community has shared in their own words.
+            </p>
+            <div
+              className={`mt-6 grid gap-4 ${useCases.length > 1 ? 
"md:grid-cols-2" : ""}`}
+            >
+              {useCases.map((entry) => (
+                <UseCaseCard key={organizationSlug(entry)} entry={entry} />
+              ))}
+            </div>
+          </section>
+        )}
+
+        {allOrganizations.length > 0 && (
+          <section id="organizations" className="scroll-mt-24">
+            <h2 className="text-2xl font-bold tracking-tight 
text-fd-foreground">
+              Organizations building &amp; integrating with Iggy
+            </h2>
+            <p className="mt-2 max-w-2xl text-sm leading-relaxed 
text-fd-muted-foreground">
+              Companies, projects and teams that have told the community they
+              are using or building with Apache Iggy.
+            </p>
+            <div className="mt-6">
+              <OrganizationWall entries={allOrganizations} />
+            </div>
+          </section>
+        )}
+
+        <section className="mt-16 rounded-2xl border border-fd-border 
bg-fd-card p-8">
+          <h2 className="text-2xl font-bold tracking-tight text-fd-foreground">
+            Evaluating or Building with Iggy? Tell the community.
+          </h2>
+          <p className="mt-3 max-w-2xl text-sm leading-relaxed 
text-fd-muted-foreground">
+            Exploring Iggy, running a POC, building an integration, or already 
in production? You’re part of the story. We’d love to hear what you’re building.
+          </p>
+          <a
+            href={SUBMIT_ISSUE_URL}
+            target="_blank"
+            rel="noreferrer noopener"
+            className="mt-6 inline-block rounded-lg bg-[#ff9103] px-4 py-2 
text-sm font-semibold text-fd-primary-foreground transition-opacity 
hover:opacity-90"
+          >
+            Share your use case on GitHub
+          </a>
+          <p className="mt-4 text-xs text-fd-muted-foreground">
+            Prefer to send the pull request yourself? See the{" "}
+            <a
+              href={SUBMIT_GUIDE_URL}
+              target="_blank"
+              rel="noreferrer noopener"
+              className="text-fd-primary hover:underline"
+            >
+              submission guide
+            </a>
+            .
+          </p>
+        </section>
+
+        <footer className="mt-16 border-t border-fd-border pt-8">
+          <p className="text-xs leading-relaxed text-fd-muted-foreground">
+            Usage information on this page comes from community submissions as 
well as publicly available sources, including project documentation, GitHub 
issues and pull requests, blog posts, conference talks, and public social media 
posts. Where possible, Apache Iggy committers review entries and link to the 
original source. Usage, deployment stage, and other details may change over 
time and should be understood in the context of the cited source. Company 
names, product names, trademar [...]
+          </p>
+        </footer>
+
+        <script
+          type="application/ld+json"
+          dangerouslySetInnerHTML={{ __html: serializeJsonLd(structuredData) }}
+        />
+      </div>
+    </main>
+  );
+}
diff --git a/src/app/global.css b/src/app/global.css
index ca6a2802..c78f17c9 100644
--- a/src/app/global.css
+++ b/src/app/global.css
@@ -32,8 +32,15 @@
 }
 
 :root {
-    --color-fd-primary: hsl(34 100% 51%);
-    --color-fd-primary-foreground: hsl(0 0% 0%);
+    --color-fd-foreground: #000000;
+    --color-fd-muted-foreground: #000000;
+    --color-fd-card-foreground: #000000;
+    --color-fd-popover-foreground: #000000;
+    --color-fd-secondary-foreground: #000000;
+    --color-fd-accent-foreground: #000000;
+    --color-fd-primary: #fb4800;
+    --color-fd-primary-foreground: #000000;
+    --color-fd-ring: #fb4800;
     --sh-class: #e879f9;
     --sh-identifier: #e2e8f0;
     --sh-sign: #b0bec5;
@@ -56,7 +63,7 @@
     --sh-string: #a5d6ff;
     --sh-keyword: #ff7b72;
     --sh-comment: #636b75;
-    --color-fd-primary: hsl(34 100% 51%);
+    --color-fd-primary: #fb4800;
     --color-fd-primary-foreground: hsl(0 0% 0%);
     --color-fd-background: hsl(222 55% 6%);
     --color-fd-foreground: hsl(42 100% 95%);
@@ -67,7 +74,7 @@
     --color-fd-border: hsl(216 14% 20%);
     --color-fd-accent: hsl(222 44% 16%);
     --color-fd-accent-foreground: hsl(42 100% 95%);
-    --color-fd-ring: hsl(34 100% 51%);
+    --color-fd-ring: #fb4800;
     --color-fd-popover: hsl(222 55% 10%);
     --color-fd-popover-foreground: hsl(42 100% 95%);
     --color-fd-secondary: hsl(222 30% 12%);
diff --git a/src/components/organization-showcase.tsx 
b/src/components/organization-showcase.tsx
new file mode 100644
index 00000000..afecdaf6
--- /dev/null
+++ b/src/components/organization-showcase.tsx
@@ -0,0 +1,260 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import {
+  hasUseCase,
+  logoFor,
+  organizationSlug,
+  type Organization,
+} from "@/lib/organizations";
+
+/**
+ * Height is pinned rather than capped. `max-h-*` with `w-auto` leaves a
+ * replaced element inside a shrink-to-fit flex chain with a circular size
+ * dependency that browsers resolve to zero, and a fixed height is what makes
+ * logos of different aspect ratios read as one row.
+ */
+const WALL_LOGO_CLASS = "h-7 w-auto max-w-full shrink-0 object-contain";
+const USE_CASE_LOGO_CLASS = "h-9 w-auto max-w-36 shrink-0 object-contain";
+
+/**
+ * Each theme shows its own artwork, and falls back to the name set as text
+ * when there is none. Deliberately symmetric: a logo drawn for a light
+ * background is often invisible on a dark card, so it is not reused across
+ * themes. Either way the name is in the markup for both themes, so the
+ * organization is readable without images and without JavaScript.
+ *
+ * The logo band needs a definite height and `shrink-0` on the image: a
+ * replaced element with `width: auto` inside a shrink-to-fit flex container
+ * otherwise resolves to zero on both axes.
+ */
+function Mark({ entry }: { entry: Organization }) {
+  const { light, dark } = logoFor(entry);
+
+  const name = (
+    <span className="text-sm font-semibold leading-tight tracking-tight 
text-fd-foreground">
+      {entry.name}
+    </span>
+  );
+
+  if (!light && !dark) return name;
+
+  const withLogo = (src: string) => (
+    <>
+      <span className="flex h-7 w-full items-center justify-center">
+        {/* eslint-disable-next-line @next/next/no-img-element */}
+        <img
+          src={src}
+          alt={`${entry.name} logo`}
+          className={WALL_LOGO_CLASS}
+        />
+      </span>
+      {/* Most of these marks are wordmarks, so a visible caption would print
+          the name twice. It stays in the DOM for screen readers and crawlers
+          instead -- the point is that the page never depends on the image
+          alone to say who this is. */}
+      <span className="sr-only">{entry.name}</span>
+    </>
+  );
+
+  return (
+    <>
+      <span className="flex flex-col items-center dark:hidden">
+        {light ? withLogo(light) : name}
+      </span>
+      <span className="hidden flex-col items-center dark:flex">
+        {dark ? withLogo(dark) : name}
+      </span>
+    </>
+  );
+}
+
+const TILE_CLASS =
+  "flex h-16 flex-col items-center justify-center rounded-lg px-3 text-center";
+
+/**
+ * A tile links to the organization's use-case section when it has one, and
+ * to its own site otherwise. Entries with neither render as plain tiles
+ * rather than pointing somewhere unverified.
+ */
+function Tile({ entry }: { entry: Organization }) {
+  const interactive =
+    "transition-colors hover:bg-fd-accent/40 focus-visible:outline-none 
focus-visible:ring-2 focus-visible:ring-fd-primary/50";
+
+  if (hasUseCase(entry)) {
+    return (
+      <a
+        href={`#${organizationSlug(entry)}`}
+        className={`${TILE_CLASS} ${interactive}`}
+      >
+        <Mark entry={entry} />
+      </a>
+    );
+  }
+
+  if (entry.website) {
+    return (
+      <a
+        href={entry.website}
+        target="_blank"
+        rel="noreferrer noopener"
+        className={`${TILE_CLASS} ${interactive}`}
+      >
+        <Mark entry={entry} />
+      </a>
+    );
+  }
+
+  return (
+    <div className={TILE_CLASS}>
+      <Mark entry={entry} />
+    </div>
+  );
+}
+
+export function OrganizationWall({ entries }: { entries: Organization[] }) {
+  return (
+    <ul className="grid list-none grid-cols-3 gap-2 p-0 sm:grid-cols-4 
md:grid-cols-5 lg:grid-cols-6 xl:grid-cols-8">
+      {entries.map((entry) => (
+        <li key={organizationSlug(entry)}>
+          <Tile entry={entry} />
+        </li>
+      ))}
+    </ul>
+  );
+}
+
+function Tag({ children }: { children: React.ReactNode }) {
+  return (
+    <span className="rounded-full border border-fd-border bg-fd-muted/40 
px-2.5 py-0.5 text-xs font-medium text-fd-muted-foreground">
+      {children}
+    </span>
+  );
+}
+
+/**
+ * The use-case entry. Everything substantive here is plain semantic markup:
+ * no disclosure, no modal, nothing that needs JavaScript to read.
+ */
+export function UseCaseCard({ entry }: { entry: Organization }) {
+  const { light, dark } = logoFor(entry);
+  const slug = organizationSlug(entry);
+
+  const heading = entry.website ? (
+    <a
+      href={entry.website}
+      target="_blank"
+      rel="noreferrer noopener"
+      className="transition-colors hover:text-fd-primary"
+    >
+      {entry.name}
+    </a>
+  ) : (
+    entry.name
+  );
+
+  return (
+    <article
+      id={slug}
+      className="scroll-mt-24 rounded-xl border border-fd-border bg-fd-card 
p-6 md:p-8"
+    >
+      <div className="flex flex-wrap items-start justify-between gap-x-6 
gap-y-4">
+        <div>
+          <h3 className="text-xl font-bold tracking-tight text-fd-foreground">
+            {heading}
+          </h3>
+          {entry.useCaseCategory && (
+            <p className="mt-1.5 text-xs font-semibold uppercase tracking-wide 
text-fd-primary">
+              {entry.useCaseCategory}
+            </p>
+          )}
+        </div>
+
+        {light && (
+          <div className="flex h-9 items-center dark:hidden">
+            {/* eslint-disable-next-line @next/next/no-img-element */}
+            <a
+              href={entry.website}
+              target="_blank"
+              rel="noreferrer noopener"
+              className="transition-colors hover:text-fd-primary"
+            >
+              <img
+                src={light}
+                alt={`${entry.name} logo`}
+                className={USE_CASE_LOGO_CLASS}
+              />
+            </a>
+          </div>
+        )}
+        {dark && (
+          <div className="hidden h-9 items-center dark:flex">
+            {/* eslint-disable-next-line @next/next/no-img-element */}
+            <a
+              href={entry.website}
+              target="_blank"
+              rel="noreferrer noopener"
+              className="transition-colors hover:text-fd-primary"
+            >
+              <img
+                src={dark}
+                alt={`${entry.name} logo`}
+                className={USE_CASE_LOGO_CLASS}
+              />
+            </a>
+          </div>
+        )}
+      </div>
+
+      <p className="mt-5 max-w-3xl text-base leading-relaxed 
text-fd-muted-foreground">
+        {entry.description}
+      </p>
+
+      {entry.quote && (
+        <blockquote className="mt-5 border-l-2 border-fd-primary/60 pl-4 
text-sm italic leading-relaxed text-fd-muted-foreground">
+          <p>{entry.quote}</p>
+          {entry.quoteAuthor && (
+            <footer className="mt-2 not-italic text-xs 
text-fd-muted-foreground/80">
+              {entry.quoteAuthor}
+            </footer>
+          )}
+        </blockquote>
+      )}
+
+      {entry.technologies.length > 0 && (
+        <div className="mt-5 flex flex-wrap gap-1.5">
+          {entry.technologies.map((technology) => (
+            <Tag key={technology}>{technology}</Tag>
+          ))}
+        </div>
+      )}
+
+      {entry.caseStudyUrl && (
+        <a
+          href={entry.caseStudyUrl}
+          target="_blank"
+          rel="noreferrer noopener"
+          className="mt-5 inline-block text-sm font-medium text-fd-primary 
transition-opacity hover:opacity-80"
+        >
+          Read the full case study &rarr;
+        </a>
+      )}
+    </article>
+  );
+}
diff --git a/src/lib/layout.shared.tsx b/src/lib/layout.shared.tsx
index cdbd4f28..590933a0 100644
--- a/src/lib/layout.shared.tsx
+++ b/src/lib/layout.shared.tsx
@@ -40,6 +40,7 @@ const sharedLinks: BaseLayoutProps["links"] = [
   { text: "Docs", url: "/docs" },
   { text: "Blogs", url: "/blogs" },
   { text: "Downloads", url: "/downloads" },
+  { text: "Powered By", url: "/powered-by" },
   {
     type: "custom",
     on: "nav",
@@ -114,6 +115,7 @@ export function docsOptions(): BaseLayoutProps {
       { text: "Home", url: "/" },
       { text: "Blogs", url: "/blogs" },
       { text: "Downloads", url: "/downloads" },
+      { text: "Powered By", url: "/powered-by" },
       {
         type: "custom",
         on: "nav",
diff --git a/src/lib/organizations.ts b/src/lib/organizations.ts
new file mode 100644
index 00000000..1c087356
--- /dev/null
+++ b/src/lib/organizations.ts
@@ -0,0 +1,103 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import fs from "node:fs";
+import path from "node:path";
+
+import { organizations } from "@/lib/source";
+
+export type Organization = (typeof organizations)[number];
+
+export const WEBSITE_REPO = "https://github.com/apache/iggy-website";;
+
+export const SUBMIT_ISSUE_URL = 
`${WEBSITE_REPO}/issues/new?template=organization-submission.yml`;
+export const SUBMIT_GUIDE_URL = 
`${WEBSITE_REPO}/blob/main/content/organizations/README.md`;
+
+/** Derive the anchor slug for an entry from its file name. */
+export function organizationSlug(entry: Organization): string {
+  return (
+    entry.info.path
+      .replace(/\.mdx?$/, "")
+      .split("/")
+      .pop() ?? entry.name
+  );
+}
+
+/**
+ * Entries stay hidden until a committer flips `draft` to false, which is the
+ * gate for verifying that a submission is genuine and, where a logo is
+ * supplied, that permission to display it was granted.
+ *
+ * Ordered alphabetically on purpose. The wall carries no ranking: it is a
+ * list of who is building with Iggy, not a leaderboard.
+ */
+export function publishedOrganizations(): Organization[] {
+  return [...organizations]
+    .filter((entry) => !entry.draft)
+    .sort((a, b) => a.name.localeCompare(b.name));
+}
+
+export function hasUseCase(entry: Organization): boolean {
+  return Boolean(entry.description?.trim());
+}
+
+/**
+ * An entry earns a place in "How Iggy is being used" by having something
+ * substantive to say. No description means logo wall only: a generated
+ * one-liner would be filler, and filler is what makes an adoption page read
+ * as marketing rather than as a record.
+ */
+export function organizationsWithUseCase(): Organization[] {
+  return publishedOrganizations()
+    .filter(hasUseCase)
+    .sort((a, b) => {
+      if (a.featured !== b.featured) return a.featured ? -1 : 1;
+      return a.name.localeCompare(b.name);
+    });
+}
+
+/**
+ * Resolved at build time only. This module is imported by server components
+ * and must never be pulled into a client bundle.
+ *
+ * A frontmatter entry may name artwork that has not been committed yet, and
+ * a static export would happily ship the broken image.
+ */
+function logoExists(publicPath?: string): boolean {
+  if (!publicPath) return false;
+  const relative = publicPath.replace(/^\//, "");
+  return fs.existsSync(path.join(process.cwd(), "public", relative));
+}
+
+/**
+ * A logo renders only once the submitter has confirmed they are authorized
+ * to grant the ASF permission to display the mark, and once the artwork is
+ * actually in the repository. Failing either, the tile shows the name set as
+ * text, which is a normal outcome rather than a degraded one.
+ */
+export function logoFor(entry: Organization): {
+  light?: string;
+  dark?: string;
+} {
+  if (!entry.permissionConfirmed) return {};
+  return {
+    light: logoExists(entry.logo) ? entry.logo : undefined,
+    dark: logoExists(entry.logoDark) ? entry.logoDark : undefined,
+  };
+}
diff --git a/src/lib/site.ts b/src/lib/site.ts
index 8e067b46..c89dc2bd 100644
--- a/src/lib/site.ts
+++ b/src/lib/site.ts
@@ -35,6 +35,7 @@ export const STATIC_ROUTES = [
   "/",
   "/blogs",
   "/downloads",
+  "/powered-by",
   "/community",
   "/community/become-a-committer",
   "/community/brand-kit",
@@ -45,6 +46,21 @@ export const STATIC_ROUTES = [
 ] as const;
 
 /** `trailingSlash: true` in next.config.mjs, so every emitted URL ends in a 
slash. */
+/**
+ * JSON-LD has to be injected as raw text: React would HTML-escape it as a 
child
+ * and the quotes would end up as entities. Callers build the object from
+ * constants, so nothing is user input, but JSON.stringify does not escape "<"
+ * -- so escape it, and a stray "</script>" can never close the tag.
+ *
+ * `src/app/layout.tsx` still carries its own private copy of this. It was left
+ * alone deliberately: that file is under active change elsewhere, and folding
+ * the two together is not worth a merge conflict. Worth de-duplicating the
+ * next time layout.tsx is touched for another reason.
+ */
+export function serializeJsonLd(data: unknown): string {
+  return JSON.stringify(data).replace(/</g, "\\u003c");
+}
+
 export function absoluteUrl(path: string): string {
   const withLeading = path.startsWith("/") ? path : `/${path}`;
   const withTrailing = withLeading.endsWith("/") ? withLeading : 
`${withLeading}/`;
diff --git a/src/lib/source.ts b/src/lib/source.ts
index 0d9559d5..59d4247e 100644
--- a/src/lib/source.ts
+++ b/src/lib/source.ts
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { docs, blogPosts } from "fumadocs-mdx:collections/server";
+import { docs, blogPosts, organizations } from 
"fumadocs-mdx:collections/server";
 import { loader } from "fumadocs-core/source";
 
 export const source = loader({
@@ -27,3 +27,6 @@ export const source = loader({
 
 // Blog posts as raw collection for direct access to custom schema fields
 export { blogPosts };
+
+// Organization entries powering /powered-by
+export { organizations };

Reply via email to