Commit Graph
35093 Commits
Author SHA1 Message Date
Alan Daniel 70b0d66ccf wip 2026-03-23 18:39:42 -04:00
Alan Daniel 035928fb2a wp 2026-03-23 18:39:42 -04:00
Alan Daniel c6ebc9dbb7 visual demo for database 2026-03-23 18:39:42 -04:00
Jonathan Summers-MuirandClaude Sonnet 4.6 ae624aa0f2 www: redesign customer stories, blog layout, and footer (#43954)
- CustomerStoriesSection: animated accordion with brand colors
(black/dark panels for Resend/Hyper/Mobbin, muted rust for Firecrawl,
muted amber for E2B), raw brand-color icons for Firecrawl/E2B, author
avatar ring, consistent padding
- AI builder section: photo background cards for Lovable/Bolt,
full-width logo strip (Lovable, Figma, v0, Bolt, Tempo, Gumloop, Pika,
Udio)
- Blog: remove borders/grid lines, narrower featured post, smaller title
text, image border, restored list padding
- Footer: replace large SOC2/HIPAA seal section with compact footnote
next to copyright
- Fix icon SVG viewBoxes (Resend, E2B) and add brand fill color to E2B
icon

## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES/NO

## What kind of change does this PR introduce?

Bug fix, feature, docs update, ...

## What is the current behavior?

Please link any relevant issues here.

## What is the new behavior?

Feel free to include screenshots if it includes visual changes.

## Additional context

Add any other context or screenshots.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 17:35:58 -04:00
Alan Daniel c8c43210c0 contain navbar 2026-03-17 15:11:54 -04:00
Alan Daniel 940f7af41f fix 2026-03-17 15:08:54 -04:00
Alan Daniel dffc75292e mobile 2026-03-17 15:07:17 -04:00
Alan Daniel 98b3200af0 database upd 2026-03-17 14:47:44 -04:00
Alan Daniel 4e986a4ef2 upd 2026-03-17 14:29:19 -04:00
Alan Daniel 1038d88241 nits 2026-03-17 14:00:07 -04:00
Alan Daniel 58aa6a64a3 fix 2026-03-17 13:54:50 -04:00
Alan Daniel 466b17c78a font options 2026-03-17 13:52:09 -04:00
Alan Daniel ece51b4d2f new layout 2026-03-17 13:32:45 -04:00
Alan Daniel 7d765a474e use font everywhere 2026-03-16 16:38:29 -04:00
Alan Daniel 433b7484d5 more animated visuals 2026-03-13 15:25:08 -04:00
Alan Daniel 5b3f362a2c nits 2026-03-13 13:52:14 -04:00
Alan Daniel 18a2a523fd edge function pae 2026-03-13 12:31:56 -04:00
Alan Daniel 92d68d2551 merge 2026-03-12 12:31:33 -04:00
Gildas Garcia 2773179a5b fix: studio docker build fails because of package patches (#43713)
## Problem

The docker build for studio fails because pnpm patches are not included

## Solution

- bump pnpm version in Dockefile to match the one used by the repo
- bump turbo version in Dockerfile to use one that handles pnpm patches
- add a script to test the build locally
- add a github action to validate the build on each PR
2026-03-12 16:24:07 +01:00
Ali Waseem 173b725c93 fix: add old homepage to self hosted w/ unit tests (#43705)
## 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?

- Bring back the old home page for self hosted, because the new one does
not work for self hosted users
- Unit tests to catch this in the future
2026-03-12 15:13:17 +00:00
Andrey A. b7cbc11d21 add data api page to integrations for self-hosted 2026-03-12 15:50:07 +01:00
David Camacho Cateura f4f19c3891 chore(docs): Add David Camacho Cateura to humans.txt (#43696)
## 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?

Adding myself to humans.txt
2026-03-12 15:47:57 +01:00
Prashant Sridharan 8935aaf5f1 Added new conference go pages with speaker and slide download callouts (#43695) 2026-03-12 13:43:44 +00:00
Jeremias Menichelli b2fdc7687f feat: Implement telemetry on Search commands (#43563) 2026-03-12 14:34:55 +01:00
Alaister Young 6b87279288 fix(studio): allow graphql_public schema in exposed schemas (#43702)
Fix `graphql_public` schema not showing in legacy exposed schemas
selector

## Summary
- The `graphql_public` schema was getting filtered out of the exposed
schemas multi-select when the API grant toggles feature flag is disabled
- `ExposedSchemaSelector` (new mode) already had an exception for
`graphql_public` – this just adds the same exception to the legacy
mode's schema filter

## Test plan
- [ ] Disable the `tableEditorApiAccessToggle` feature flag
- [ ] Go to Settings > API > exposed schemas
- [ ] Confirm `graphql_public` appears in the schema list and is
selectable
2026-03-12 13:22:58 +00:00
Chris Chinchillaandgithub-docs-sync-bot bd72526e04 [bot] sync troubleshooting guides to db (#43699)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 14:02:12 +01:00
Joey Freeland 22e28e7f0f chore(docs): add Joey Freeland to humans.txt (#43701)
## 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?

Adding myself to humans.txt
2026-03-12 14:02:02 +01:00
Chris Chinchillaandgithub-docs-sync-bot 7d67f95f81 [bot] sync troubleshooting guides to db (#43652)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 13:21:57 +01:00
Chris Chinchillaandgithub-docs-sync-bot 9dfc39d8f6 [bot] sync troubleshooting guides to db (#43687)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 12:19:34 +00:00
Chris Chinchillaandgithub-docs-sync-bot afd8d41898 [bot] sync troubleshooting guides to db (#43691)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 12:16:22 +00:00
Chris Chinchillaandgithub-docs-sync-bot cadec0432e [bot] sync troubleshooting guides to db (#43653)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 13:14:06 +01:00
Chris Chinchillaandgithub-docs-sync-bot 6c2b9f57a4 [bot] sync troubleshooting guides to db (#43686)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 13:13:53 +01:00
Chris Chinchillaandgithub-docs-sync-bot 86b4eea6fd [bot] sync troubleshooting guides to db (#43688)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 13:11:07 +01:00
Chris Chinchillaandgithub-docs-sync-bot 5dcd74b58b [bot] sync troubleshooting guides to db (#43690)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

Co-authored-by: github-docs-sync-bot <github-docs-sync-bot@supabase.com>
2026-03-12 13:10:57 +01:00
kemal.earth 2c48910673 feat(design-system): status code component (#42064)
## 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?

Formalising our status code component that was introduced in the new
charts + update auth overview page.


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

* **New Features**
* Added a StatusCode UI component to display HTTP methods and status
codes with color-coded indicators.
* Added a demo showcasing multiple StatusCode examples and alignment
variants.

* **Documentation**
* Added a documentation fragment and sidebar entry for Status Codes with
a preview of the demo.

* **Refactor**
* Updated an Auth Overview view to use the new StatusCode component for
consistent status rendering.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-12 10:57:46 +00:00
Jordi EnricandClaude 5b6a1c9858 fix(logs): render special characters in event_message properly (#43694)
In the log explorer's LogSelection component, special characters like \n
(newlines) and \t (tabs) were being displayed literally instead of being
rendered. This was because JSON.stringify was being used for all values,
which escapes these characters.

Now string values are rendered directly, preserving newlines and tabs,
while objects still use JSON.stringify for proper formatting.

Slack thread:
https://supabase.slack.com/archives/C0161K73J1J/p1773308745191129?thread_ts=1773275727.200079&cid=C0161K73J1J

https://claude.ai/code/session_01117yL8Ww5VF4HNDJvyYF6X

## Before
<img width="846" height="346" alt="CleanShot 2026-03-12 at 10 59 57@2x"
src="https://github.com/user-attachments/assets/3fa8ee95-0090-4941-905f-6cb13724ac53"
/>
  
## After
<img width="754" height="350" alt="CleanShot 2026-03-12 at 11 00 14@2x"
src="https://github.com/user-attachments/assets/3c41e7f5-7a35-46f2-8bd1-c9b9a42c2a4d"
/>

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-12 11:53:55 +01:00
Alaister Young 9652e8c4d3 [SEC-385] feat(studio): Add default privileges for new entities toggle (#43583)
Adds a new toggle in:
<img width="1161" height="356" alt="Screenshot 2026-03-10 at 17 17 06"
src="https://github.com/user-attachments/assets/b09ac1aa-a8f5-4fb4-8771-f113b140eac8"
/>

Other changes:
- form submissions with no table/function changes were failing because
an empty string got passed to executeSql. Added an early return when
there's nothing to execute

To test:
- Ensure the form is still in working order
- Create some tables and functions with the toggle on add off and make
sure your selected default applies
2026-03-12 09:38:03 +00:00
Gildas Garcia d6d419a12e fix: improve table editor truncated texts display (#43630)
Fixes #41579
Supersedes #42342 and #41580

## Problem

In the table editor, when the column type is long, it is truncated which
makes it hard to disambiguate `timestamp` from `timestampz` for
instance.

<img width="1310" height="360" alt="image"
src="https://github.com/user-attachments/assets/668b4022-944e-4d10-90b6-8b5173ec45e3"
/>

## Solution

- make the table editor a bit larger
- add a tooltip on the column type input
- I also added a tooltip on the default value input which suffers from
the same issue

Note: the column name already have a tooltip

<img width="623" height="418" alt="image"
src="https://github.com/user-attachments/assets/9aa5bc10-d627-42ee-b91a-1f8d83911ee0"
/>

<img width="640" height="357" alt="image"
src="https://github.com/user-attachments/assets/c6af4780-8308-4073-bf5c-937ff5822884"
/>
2026-03-12 08:58:26 +01:00
05252ff8cb docs: update js sdk docs (2.99.1) (#43684)
Updates JS sdk documentation following stable release.
Ran `make` in apps/docs/spec to regenerate tsdoc files.

**Details:**
- **Version:** `2.99.1`
- **Source:** `manual`
- **Changes:** Regenerated tsdoc files from latest spec files

🤖 Auto-generated from @supabase/supabase-js stable release.

Manual: also clean up yml

---------

Co-authored-by: mandarini <6603745+mandarini@users.noreply.github.com>
Co-authored-by: Katerina Skroumpelou <sk.katherine@gmail.com>
2026-03-12 09:11:05 +02:00
Danny White dca4087bb4 feat(studio): expose project members in settings (#43477)
## What kind of change does this PR introduce?

Feature that resolves DEPR-321.

## What is the current behavior?

From @dshukertjr:
> Users of free and pro orgs frequently struggle to figure out how to
add teammates to a project.

## What is the new behavior?

Project Settings → General now has a Project access section showing who
can access the project (email + role), with a link to team management
(_Manage members_ or _View team_ for limited users). Large member lists
are truncated with +N more.

| Permutations |
| --- |
| <img width="1462" height="544" alt="CleanShot 2026-03-06 at 17 00
00@2x"
src="https://github.com/user-attachments/assets/68e5519f-3851-4ab8-a364-9fcb222fbcb7"
/> |
| <img width="1486" height="676" alt="CleanShot 2026-03-06 at 16 59
48@2x"
src="https://github.com/user-attachments/assets/e1b85bb5-6fbd-46ec-9b13-15501defd030"
/> |
| <img width="1464" height="566" alt="CleanShot 2026-03-06 at 16 59
34@2x"
src="https://github.com/user-attachments/assets/e9fdc188-cf79-4af9-8b3c-313e98256109"
/> |
| <img width="1438" height="654" alt="CleanShot 2026-03-06 at 17 11
25@2x-83D06149-E4AE-4AC0-98D9-FBBE10A58C8C"
src="https://github.com/user-attachments/assets/8a6e1aa2-76bb-486e-999a-1df4f88c3692"
/> |

## Additional context

Behaviour is based on user role visibility, not a special plan-only
toggle. Team+ orgs are more likely to hit limited/project-scoped cases;
free/pro are usually org-wide access.
2026-03-12 06:39:55 +00:00
Danny White ff0edaafdb chore(studio): tax ID banner copywriting (#43682)
## What kind of change does this PR introduce?

Copywriting improvements

## What is the current behavior?

The “missing tax ID” banner:

- Is longer than it needs to be
- Therefore overflows on smaller viewports
- Has unnecessarily qualifications despite having a dismiss button
- Has funky capitalization

## What is the new behavior?

- Tighter copywriting with less redundancy

| Before | After |
| --- | --- |
| <img width="1024" height="563" alt="AWS Healthy Toolshed
Supabase-8B1E57CE-72A6-4C7F-918F-71C1842CBDD3"
src="https://github.com/user-attachments/assets/755fd9ac-50e7-4540-9dd3-529e37bdeaff"
/> | <img width="1024" height="563" alt="AWS Healthy Toolshed
Supabase-A2B65D23-103A-4146-BE6A-DEAC592646D0"
src="https://github.com/user-attachments/assets/deefb639-0670-4d92-8b75-bc0080bfb587"
/> |
2026-03-12 05:41:37 +00:00
Danny White fc7667462d chore(studio): nits (#43683)
## What kind of change does this PR introduce?

UI nit changes

## What is the current behavior?

- We use big dots `•` to separate semantically different sets of text
that are in the same row
  - This looks a bit odd given how large the dot is to text
- We put _Project Settings_ in its own sidebar section but without a
separator like all other sidebar sections

## What is the new behavior?

- Use the smaller dots `·` to separate text
- Place a separator above _Project Settings_ in sidebar

| Before | After |
| --- | --- |
| <img width="1342" height="711" alt="AWS Healthy Toolshed
Supabase-70BD1825-8077-4D1B-84C1-831A4ADAFC0B"
src="https://github.com/user-attachments/assets/70246009-a3c7-4b5c-8d75-122140a637d1"
/> | <img width="1342" height="711" alt="AWS Healthy Toolshed Supabase"
src="https://github.com/user-attachments/assets/e3fc13e4-923d-472e-aaf9-d689e890697b"
/> |
2026-03-12 16:37:07 +11:00
Joshen Lim 0b97e0ff86 Joshen/fe 2642 project settings allow to select a replica to power (#43626)
## Context

Related to dashboard scalability
Previous PR: https://github.com/supabase/supabase/pull/42856

Note: Changes are all feature flagged still and I'm still not entirely
convinced with the current UX
Will iterate as as go along, and only make this publicly available when
we're satisfied with the behaviour

Adds a "Dashboard preference" section to the project settings
<img width="265" height="740" alt="image"
src="https://github.com/user-attachments/assets/6ce1aa19-26c2-47c6-a9c4-595137266631"
/>

In which users can then select which database they'd like to use for
read queries run from the dashboard
Note: Everything is local storage for now, but we'd need middleware
support if we want to make this setting persist for all users on the
project
<img width="791" height="434" alt="image"
src="https://github.com/user-attachments/assets/e651d6d9-fed4-4da4-b552-c9f93f8d46d3"
/>

Added a dialog as well to further explain what this implies
<img width="610" height="312" alt="image"
src="https://github.com/user-attachments/assets/0aa957af-cb51-476f-aa79-8948a7cbe5ae"
/>

## To test

- Choosing a replica in dashboard preferences will only affect the table
editor as thats the only place that's set up so far to use a replica for
read queries (I'll need to follow up for other parts of the dashboard in
subsequent PRs)
2026-03-12 11:18:28 +07:00
Danny WhiteandJoshen Lim a753a599ea feat(studio): page titles for logs and observability (#43535)
Stacked PR 3/5 for page title improvements. Includes Logs and
Observability layout title adoption, unified logs title cleanup, and
small route title fixes.

_Base:
[dnywh/feat/page-titles](https://github.com/supabase/supabase/pull/43538)_

---

## What kind of change does this PR introduce?

- Resolves FE-1960
- Resolves FE-1983
- Resolves DEPR-207

## What is the current behavior?

Page titles between surfaces are inconsistent and vague. Sometimes they
say the product name:

```
My Project | My Org | Supabase
```

...even when on a specific surface like Database > Tables.

Other times they show the entity name but skip over the project or org
name :

```
Edge Functions | Supabase
```

## What is the new behavior?

Logs and Observability adopts the layout title format introduced in
https://github.com/supabase/supabase/pull/43538:

```
users | Table Editor | My Project | My Org | Supabase
hello-world | Logs | Edge Functions | My Project | My Org | Supabase
Backups | Database | My Project | My Org | Supabase
Authentication | My Project | My Org | Supabase
```

That format is:

entity, section, surface, project, org, brand.

Also includes unified logs title cleanup, and small route title fixes.

## Additional context

Related stacked PRs also based on the the original
[dnywh/feat/page-titles](https://github.com/supabase/supabase/pull/43538)
branch:

- https://github.com/supabase/supabase/pull/43534
- https://github.com/supabase/supabase/pull/43536
- https://github.com/supabase/supabase/pull/43537

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-03-12 14:08:15 +11:00
Joshen Lim 0fdfd8aaff Small QoL improvemnets for branch management (#43633)
## Context

Couple of small QoL improvements for branch management from internal
feedback

- Use `TimestampInfo` component for branch rows here
<img width="786" height="395" alt="image"
src="https://github.com/user-attachments/assets/639381e3-359b-4b11-9854-623d8cc7584f"
/>

- Workflow logs dialog will show branch name + use `TimestampInfo`
component as well for workflow runs created at
<img width="836" height="462" alt="image"
src="https://github.com/user-attachments/assets/1d2af7fe-9445-47ae-a1a3-a5dcf0fecf4c"
/>

- Selecting a workflow run will then show the run created at in the
header description + use `TimestampInfo` component
<img width="829" height="256" alt="image"
src="https://github.com/user-attachments/assets/9fe65f21-e948-4f49-a9ba-46acd9505f2f"
/>
2026-03-12 09:59:28 +07:00
Ignacio Dobronich 2f9921bd81 feat(billing): tax id dismissible banner (#43580)
### Changes
- Adds a dismissible banner prompting paid org users to add a Tax ID to
their billing settings
- Only shown to users with billing read permissions on orgs with a paid
plan and no Tax ID set
- Dismissal is persisted per-org via localStorage; banner also
auto-hides when a Tax ID is added

### Testing
- Log in as a user with no billing permissions into a Free Plan Org with
no tax id: no banner is shown
- Log in as a user with billing permissions into a Free Plan Org with no
tax id: no banner is shown
- Log in as a user with billing permissions into a Paid Plan Org with no
tax id
- Assert banner appears at the top
- Head to `/org/_/billing` with a paid Org. Change your billing country
to a not support one (like Paraguay) and click save. Assert that the
banner disappears. Change it back to continue testing.
- Click dismiss: banner disappears and stays dismissed across
navigation/refresh
- Log in as a user with billing permissions into a different Paid Plan
Org with no tax id
- Add a Tax ID via billing settings, assert that the banner disappears
immediately

<img width="1911" height="50" alt="image"
src="https://github.com/user-attachments/assets/d6208d6d-0939-4ff6-9613-5c687e7c622e"
/>
2026-03-11 19:01:10 -03:00
Ali Waseem 00b740e0a0 chore: add telemetry to track other AI link usage (#43675)
## 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?

- Added tracker when the main ai button was pressed
- Added new event to track "Open in" third party apps 
- Added 2 missing telemetry sources
2026-03-11 20:09:45 +00:00
Sean Oliver 075c2f4528 fix(common): resolve double-encoding in first-referrer cookie serialization (#43617)
## Problem

While working on the phased PostHog Attribution rollout (GROWTH-625 /
GROWTH-668) — specifically the initial referrer handoff across the app
boundary — we discovered that `parseFirstReferrerCookie` was returning
`null` even when the cookie was visibly present in the browser.

The root cause: `serializeFirstReferrerCookie` calls
`encodeURIComponent(JSON.stringify(data))`, but Next.js `cookies.set()`
encodes the value again, producing a double-encoded cookie. On the read
side, `parseFirstReferrerCookie` only decodes once, so `JSON.parse`
receives a still-encoded string and fails. The `try/catch` swallows the
error and returns `null`.

Confirmed in production: the raw cookie value starts with `%257B%2522`
(double-encoded `%` characters). A single `decodeURIComponent` produces
`%7B%22referrer%22...` — still URL-encoded, not valid JSON. This was
blocking the cross-app attribution handoff that GROWTH-625 depends on.

## Changes

- **Serializer**: Removed `encodeURIComponent` from
`serializeFirstReferrerCookie` — Next.js `cookies.set()` already handles
encoding
- **Parser**: Made `parseFirstReferrerCookie` resilient to both
encodings — tries single decode first, falls back to double decode for
existing cookies in the wild (365-day TTL means legacy cookies persist
up to a year)
- **Test**: Added unit test for the double-encoded legacy cookie format

## Testing

- 35/35 common unit tests pass, 12/12 www middleware tests pass
- Verified locally: Google → www (localhost:3000) → Studio
(localhost:8082). Console logs confirmed `parseFirstReferrerCookie`
returned the full data object instead of null
- Confirmed in production that existing cookies are double-encoded and
the fix correctly handles them

Ref: GROWTH-625 / GROWTH-668
2026-03-11 13:08:11 -07:00
Ignacio Dobronich 60a2a5e092 chore: observability dashboard entitlements (#43502)
## Changes
- Replaces plan ID-based chart gating with entitlement-based checks
across all observability pages (database, auth, realtime,
edge-functions)
- Adds requiredPlan display field so the upsell shows the correct target
plan (e.g. "Upgrade to Team" for disk throughput, not just "Upgrade")
- Decouples database-charts.ts from Organization Plan, now accepts
pre-computed entitlement flags instead

### Note on `requiredPlan`
The entitlement system currently tells us whether a user has access, but
not what plan they need to get access. `requiredPlan` is a frontend-only
display hint. Ideally the backend entitlement response would include a
minimumPlan field so we can remove this hardcoded mapping. For now, this
is a pragmatic workaround to avoid misleading upsell copy (e.g. a Free
user seeing "Upgrade" for a Team-only feature and landing on Pro).


## Testing 

### Database
- Head to `/project/_/observability/database` with an Org on the Free
Plan and assert that the Disk throughput is gated.

<img width="1402" height="682" alt="image"
src="https://github.com/user-attachments/assets/b783d866-774d-44dc-88d1-797d26502f02"
/>

### Auth
- Head to `/project/_/observability/auth` with an Org on the Free Plan
and assert that the following metrics are gated:

<img width="1402" height="682" alt="image"
src="https://github.com/user-attachments/assets/cb062dd7-5864-4e40-a11f-ad6be1f7fd41"
/>

### Edge Functions
- Head to `/project/_/observability/edge-functions` with an Org on the
Free Plan and assert that the following metrics are gated:

<img width="1402" height="320" alt="image"
src="https://github.com/user-attachments/assets/517b5483-4575-493c-9401-2c67ac9e684c"
/>


### Realtime
- Head to `/project/_/observability/realtime` with an Org on the Free
Plan and assert that the following metrics are gated:

<img width="1402" height="722" alt="image"
src="https://github.com/user-attachments/assets/0c2757a2-8482-43f4-a65c-c0dde3d878c7"
/>
2026-03-11 16:57:53 -03:00
Alan Daniel 7b370db080 product page concept. 2026-03-11 15:55:21 -04:00