diff --git a/src/components/users.astro b/src/components/users.astro
new file mode 100644
index 0000000..b032f19
--- /dev/null
+++ b/src/components/users.astro
@@ -0,0 +1,68 @@
+---
+interface Props {
+ // Grid columns, since the reading column is too narrow for four across.
+ class?: string;
+ // Only show users of this use case.
+ useCase?: string;
+}
+
+const { class: columns = "sm:grid-cols-2", useCase } = Astro.props;
+
+// Companies running MoQ in production. A null `name` renders as a redaction bar
+// for users who can't be named yet; `redacted` sets the bar's width.
+const users = [
+ {
+ name: "Meta",
+ useCase: "contribution",
+ what: "Live ingest",
+ body: 'Spoke about "Shipping MoQ for Instagram and Facebook Live Ingest" at DEMOQED. Uses its own implementation of the standard, not ours.',
+ links: [{ text: "DEMOQED program", href: "https://moqalliance.org/demoqed-2026/" }],
+ },
+ {
+ name: "Saronic",
+ useCase: "robotics",
+ what: "Autonomous boats",
+ body: "MoQ is the primary video system across its vessels. One uplink per boat, hundreds of viewers, and nothing sent when nobody is watching.",
+ links: [
+ { text: "Their write-up", href: "https://medium.com/saronic-technologies/the-ground-moves-building-on-early-open-source-without-getting-burned-ba2af78beb78" },
+ { text: "Corsair rescues two Army pilots", href: "https://www.navalnews.com/naval-news/2026/06/saronic-usv-rescues-two-u-s-army-pilots-downed-by-iran/" },
+ ],
+ },
+ {
+ name: "Evolve Robotics",
+ useCase: "robotics",
+ what: "Teleoperation",
+ body: 'Spoke about "MoQ beyond media" at DEMOQED, the first MoQ conference.',
+ links: [{ text: "evolverobotics.com", href: "https://evolverobotics.com/" }],
+ },
+ { name: null, useCase: "robotics", redacted: "w-32", what: "Drones", body: "That's all we're allowed to say.", links: [] },
+ { name: null, useCase: "robotics", redacted: "w-24", what: "Drones", body: "Also drones. Also can't say.", links: [] },
+];
+---
+
+
+ {
+ users
+ .filter((user) => !useCase || user.useCase === useCase)
+ .map((user) => (
+
+
{user.what}
+ {user.name ? (
+
{user.name}
+ ) : (
+
+ )}
+
{user.body}
+ {user.links.length > 0 && (
+
+ {user.links.map((link) => (
+
+ {link.text}
+
+ ))}
+
+ )}
+
+ ))
+ }
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 6338193..6d5bf96 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -1,4 +1,5 @@
---
+import Users from "@/components/users.astro";
import Layout from "@/layouts/global.astro";
interface Post {
@@ -37,9 +38,13 @@ const languages = [
{ name: "C", icon: "c", href: "https://doc.moq.dev/lib/c/" },
];
+// A few members of the MoQ Alliance. Most build their own MoQ stack, so they
+// sit apart from the users above.
+const alliance = ["Cloudflare", "Akamai", "AWS", "Fastly", "Cisco", "Intel", "Oracle", "Mux"];
+
// `icon` is hand-drawn art in public/icons/use-case/.
const useCases = [
- { title: "Robotics", icon: "robotics", body: "Real-time teleoperation, with telemetry and control on the same relays as the video.", href: "/blog/on-a-boat" },
+ { title: "Robotics", icon: "robotics", body: "Real-time teleoperation, with telemetry and control on the same relays as the video.", href: "/robotics" },
{ title: "Voice and video AI", icon: "voice-video-ai", body: "Server-side media in Rust or Python, played back faster than real time in the browser.", href: "https://doc.moq.dev/concept/use-case/ai" },
{ title: "Interactive", icon: "interactive", body: "Media down, input up. MoQ Boy is a Game Boy played by everyone watching at once.", href: "/boy" },
{ title: "Conferencing", icon: "conferencing", body: "Browser publish and watch with a live roster, plus WebRTC for WHIP and WHEP clients.", href: "/blog/first-app" },
@@ -53,11 +58,11 @@ const useCases = [
+
+
+
diff --git a/src/pages/robotics.mdx b/src/pages/robotics.mdx
new file mode 100644
index 0000000..6fc8556
--- /dev/null
+++ b/src/pages/robotics.mdx
@@ -0,0 +1,34 @@
+---
+layout: "@/layouts/global.astro"
+title: Robotics
+description: MoQ streams video, telemetry, and control for robots on terrible networks.
+---
+
+import Users from "@/components/users.astro";
+
+# Robotics
+
+Robots have a lot of cameras.
+They also tend to be somewhere with a terrible network: cellular, satellite, mesh radio, or nothing at all.
+And everybody wants to watch: the operator, the fleet dashboard, the guy in the back with an iPad.
+
+Existing protocols make the robot pay for every viewer, and for every frame nobody is watching.
+
+## Why MoQ
+
+- **Pull, not push.** A robot only sends the tracks somebody subscribed to. Nobody watching camera 7? Camera 7 doesn't touch the uplink.
+- **One uplink, any number of viewers.** The robot publishes once to a relay, and the relay fans out. Viewer #100 costs the robot nothing.
+- **Latency over quality.** When the link degrades, MoQ skips old frames instead of buffering them. An operator wants what's happening *now*.
+- **More than video.** Telemetry, control, and logs are just more tracks on the same connection and the same relays.
+- **Watch in a browser.** Operators open a tab. No plugins, no WebRTC signaling servers, no VPN to the robot.
+
+I wrote about the pull model in more detail in [On a Boat](/blog/on-a-boat).
+
+## In Production
+
+
+
+## Yours?
+
+Running MoQ on something that moves? [Tell us](mailto:me@kixel.me), we'd love to brag about it.
+Or don't, and we'll add another black bar.