Files
supabase/apps/docs/data/content-listings/self-hosting.data.ts
T
Nik RichersandNik Richers 6418820b0b docs: convert self-hosting overview to ContentListings and restructure the page (#47469)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

This PR converts link sections in the self-hosting overview page to the
`ContentListings` component, puts conceptual guidance before deployment
options, and adds badge support for the Docker card (minor).

Relates to DOCS-1137

## Current behavior

`self-hosting.mdx` uses hand-authored `<GlassPanel>` / `<Link>` JSX for
two sections:
- **Get started**: Docker card with a JSX title containing a `<Badge>`
element (was previously deferred for this reason).
- **Community-driven projects**: Two cards with trivial `<span>`-wrapped
string titles.

Get started and Community cards appear at the top of the page, before
the conceptual overview. The Support and community section uses
hand-authored bullet lists for GitHub, Discord, and Reddit links.

## New behavior

- The self-hosting overview page now uses data-driven `ContentListings`
instead of hand-written cards and bullet lists.
- Conceptual content (how self-hosting differs, your responsibilities,
telemetry) comes first; deployment options and community resources
follow.
- Section intro text lives in listing data rather than inline MDX.
- Brand icons added to all listing cards (Docker, Kubernetes, Traefik,
GitHub, Discord, Reddit).
- Minor: Added support for badges to content listings, such as
"Official" in the Docker tile

Data lives in `self-hosting.data.ts` (5 groups, 8 links) and is
registered in `content-listings/index.ts`.

## Additional context

### Icon usage rights

New brand icons (Kubernetes, Traefik, Reddit) are sourced from [Simple
Icons](https://simpleicons.org) (CC0 1.0). Existing icons (Docker,
GitHub, Discord) reuse assets already in `apps/docs/public/img/icons/`.
Use is non-commercial documentation only — consistent with existing docs
icon usage and trademark fair-use for identifying linked third-party
services.

### To do:

- [ ] Check with @aantti if he's on board with switching the page to
content listings we can lint for and the content restructure to match
other overview pages

## Verification

| Gate | Result |
|------|--------|
| `pnpm vitest run lib/content-listings.test.ts` | ✅ 12/12 passed |
| `pnpm build:guides-markdown` | ✅ 744 files generated |
| `pnpm lint:mdx` (self-hosting.mdx) | ✅ No warnings on changed file |

### Proof: restructured self-hosting page with ContentListings and icons

| [Before (production)](https://supabase.com/docs/guides/self-hosting) |
[After (PR
preview)](https://docs-git-nikrichers-docs-1137-self-hosting-supabase.vercel.app/docs/guides/self-hosting)
|
|---|---|
|
![self-hosting-before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47469/self-hosting-before-dafdcdcf.png)
|
![self-hosting-after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47469/self-hosting-after-53d1e059.png)
|

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Updated the self-hosting guide to use dynamic content listings for
“Get started,” community resources, support options, and sharing
experiences.
* Added richer listing cards with optional badges and improved icon
handling.
* Expanded self-hosting resource groups to surface more relevant links
in docs navigation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Nik Richers <nik@validmind.ai>
2026-07-13 16:35:46 -07:00

105 lines
3.1 KiB
TypeScript

import type { ContentListingGroup } from '~/lib/content-listings.schema'
export const selfHostingGetStarted: ContentListingGroup = {
id: 'self-hosting-get-started',
heading: 'Get started',
headingLevel: 'h2',
type: 'grid',
columns: 2,
description: 'The fastest and recommended way to self-host Supabase is to use Docker.',
items: [
{
title: 'Docker',
href: '/guides/self-hosting/docker',
icon: '/docs/img/icons/docker',
description: 'Deploy Supabase within your own infrastructure using Docker Compose.',
badge: 'Official',
},
],
}
export const selfHostingCommunity: ContentListingGroup = {
id: 'self-hosting-community',
heading: 'Community-driven projects',
headingLevel: 'h2',
type: 'grid',
columns: 2,
description:
"There are several other options to deploy Supabase. If you're interested in helping these projects, visit our Community page.",
items: [
{
title: 'Kubernetes',
href: 'https://github.com/supabase-community/supabase-kubernetes',
icon: '/docs/img/icons/kubernetes-icon',
hasLightIcon: false,
description: 'Helm charts to deploy a Supabase on Kubernetes.',
},
{
title: 'Traefik',
href: 'https://github.com/supabase-community/supabase-traefik',
icon: '/docs/img/icons/traefik-icon',
hasLightIcon: false,
description: 'A self-hosted Supabase setup with Traefik as a reverse proxy.',
},
],
}
export const selfHostingResolveIssues: ContentListingGroup = {
id: 'self-hosting-resolve-issues',
description: 'For resolving common issues:',
type: 'grid',
columns: 2,
items: [
{
title: 'GitHub Discussions',
href: 'https://github.com/orgs/supabase/discussions?discussions_q=is%3Aopen+label%3Aself-hosted',
icon: '/docs/img/icons/github-icon',
description: 'Questions, feature requests, and workarounds',
},
{
title: 'GitHub Issues',
href: 'https://github.com/supabase/supabase/issues?q=is%3Aissue%20state%3Aopen%20label%3Aself-hosted',
icon: '/docs/img/icons/github-icon',
description: 'Known issues',
},
],
}
export const selfHostingGetHelp: ContentListingGroup = {
id: 'self-hosting-get-help',
description: 'Get help and connect with other users:',
type: 'grid',
columns: 2,
items: [
{
title: 'Discord',
href: 'https://discord.supabase.com',
icon: '/docs/img/icons/discord-icon',
hasLightIcon: false,
description: 'Real-time chat and community support',
},
{
title: 'Reddit',
href: 'https://www.reddit.com/r/Supabase/',
icon: '/docs/img/icons/reddit-icon',
hasLightIcon: false,
description: 'Official Supabase subreddit',
},
],
}
export const selfHostingShareExperience: ContentListingGroup = {
id: 'self-hosting-share-experience',
description: 'Share your self-hosting experience:',
type: 'grid',
columns: 2,
items: [
{
title: 'GitHub Discussions',
href: 'https://github.com/orgs/supabase/discussions/39820',
icon: '/docs/img/icons/github-icon',
description: "Self-hosting: What's working (and what's not)?",
},
],
}