Skip to content

Add external program marketplace#4053

Open
pepeladeira wants to merge 21 commits into
mainfrom
external-program-marketplace
Open

Add external program marketplace#4053
pepeladeira wants to merge 21 commits into
mainfrom
external-program-marketplace

Conversation

@pepeladeira

@pepeladeira pepeladeira commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Added a public external marketplace experience (home, program list with filtering/search/pagination, category routing, and program detail pages).
    • Introduced public marketplace API endpoints for program listings and aggregated counts (cached) plus new external marketplace UI (header, filters sidebar, and apply button).
  • Bug Fixes

    • Improved missing-program redirect/404 behavior across partner apply and success flows.
    • Updated unauthenticated routing so the marketplace remains accessible.
    • Fixed catch-all workspace slug handling.
  • Refactor

    • Consolidated marketplace query parsing and count/filter logic; standardized shared static export behavior.
    • Simplified marketplace UI rendering by removing client fetching from program rows and removing legacy URL helper usage.
  • UI

    • Updated dashboard and app layout wrappers (modal provider and suspense boundaries) and improved hover interaction behavior.

@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dub Ready Ready Preview Jun 28, 2026 6:38am

Request Review

@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds public marketplace API routes and shared query/fetch helpers, introduces the external marketplace route and page shell, and updates marketplace-related redirects, layouts, and public-access handling.

Changes

Marketplace external browsing

Layer / File(s) Summary
Shared query and fetch helpers
apps/web/lib/marketplace/parse-public-marketplace-query.ts, apps/web/lib/fetchers/get-public-network-programs.ts, apps/web/lib/fetchers/get-network-program-counts.ts, apps/web/ui/program-marketplace/utils/default-exports.ts
parsePublicMarketplaceQuery normalizes public marketplace query params, the program/count fetchers build cached Prisma queries and aggregates from that shape, and shared route-segment defaults are generated from Prisma slugs and categories.
Public API endpoints
apps/web/app/(ee)/api/marketplace/programs/route.ts, apps/web/app/(ee)/api/marketplace/programs/counts/route.ts
New public GET routes parse requests with the shared helper and return marketplace programs or counts as JSON with one-hour revalidation.
Count route SQL delegation
apps/web/app/(ee)/api/network/programs/count/route.ts
The network program count route now builds its shared SQL filter through buildNetworkProgramCountWhereSql before running the grouped queries.
Marketplace route entry
apps/web/app/app.dub.co/marketplace/[[...segments]]/page.tsx, apps/web/ui/program-marketplace/external/marketplace-external-router.tsx, apps/web/app/(ee)/partners.dub.co/(dashboard)/marketplace/[[...segments]]/page.tsx
The external marketplace page generates metadata and route params, and MarketplaceExternalRouter selects home, list, category, program, or not-found views from segments.
Marketplace frame
apps/web/app/app.dub.co/marketplace/layout.tsx, apps/web/ui/program-marketplace/external/marketplace-external-shell.tsx, apps/web/ui/program-marketplace/external/marketplace-external-header.tsx
The external marketplace frame adds the header, shell, grid lines, and footer wrappers around routed content.
List filters and pagination
apps/web/ui/program-marketplace/external/marketplace-external-filters.tsx, apps/web/ui/program-marketplace/external/marketplace-external-list-page-client.tsx, apps/web/ui/program-marketplace/external/marketplace-external-list-page.tsx
External marketplace list pages derive their base path, render filter links and pagination, and synchronize URL-driven counts and program fetches on the client.
Home and program views
apps/web/ui/program-marketplace/external/marketplace-external-home-page.tsx, apps/web/ui/program-marketplace/external/marketplace-external-program-page.tsx, apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx, apps/web/ui/program-marketplace/program-rewards-display.tsx, apps/web/ui/program-marketplace/pages/marketplace-home-page.tsx, apps/web/ui/program-marketplace/home-sections.ts, apps/web/ui/program-marketplace/featured-program-card.tsx, apps/web/ui/program-marketplace/marketplace-program-row.tsx, apps/web/ui/program-marketplace/marketplace-router.tsx, apps/web/ui/program-marketplace/marketplace-sidebar-filters.tsx, apps/web/ui/program-marketplace/pages/marketplace-program-page.tsx, apps/web/ui/program-marketplace/program-card.tsx, apps/web/ui/program-marketplace/program-marketplace-banner.tsx, apps/web/ui/program-marketplace/program-marketplace-card.tsx, apps/web/ui/program-marketplace/utils/urls.ts
The external home and program pages render featured rows and program details, and the home row keys, card links, rewards hover trigger, and marketplace URL helpers change.
Partner apply redirects
apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/page.tsx, apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/page.tsx, apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/success/page.tsx, apps/web/lib/middleware/app.ts, apps/web/lib/middleware/utils/app-redirect.ts
Default-group partner apply pages now redirect to marketplace program URLs when a program exists, and marketplace access no longer uses the removed redirect mapping.
Layout and workspace plumbing
apps/web/app/app.dub.co/(dashboard)/layout.tsx, apps/web/app/app.dub.co/layout.tsx, apps/web/lib/swr/use-workspace.ts
The app and dashboard layouts now add modal and suspense wrappers, and useWorkspace ignores array catch-all slugs.

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant MarketplaceExternalListPageClient
  participant ProgramsRoute as GET /api/marketplace/programs
  participant CountsRoute as GET /api/marketplace/programs/counts
  participant Parser as parsePublicMarketplaceQuery
  participant ProgramsFetcher as getPublicNetworkPrograms
  participant CountsFetcher as getNetworkProgramCounts

  Browser->>MarketplaceExternalListPageClient: change filters or page
  MarketplaceExternalListPageClient->>ProgramsRoute: request program rows
  MarketplaceExternalListPageClient->>CountsRoute: request counts
  ProgramsRoute->>Parser: normalize query params
  ProgramsRoute->>ProgramsFetcher: load marketplace programs
  ProgramsFetcher-->>ProgramsRoute: programs
  ProgramsRoute-->>MarketplaceExternalListPageClient: JSON response
  CountsRoute->>Parser: normalize query params
  CountsRoute->>CountsFetcher: load category and reward counts
  CountsFetcher-->>CountsRoute: counts
  CountsRoute-->>MarketplaceExternalListPageClient: JSON response
  MarketplaceExternalListPageClient-->>Browser: updated grid, sidebar, and pagination
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • dubinc/dub#4052: Shares marketplace URL and category-segment plumbing with this PR’s external marketplace routing and filter path helpers.

Suggested reviewers

  • steven-tey

Poem

A rabbit hopped through paths of light,
With counts and filters snug and right.
The marketplace sprang, page by page,
From home to detail, stage by stage.
I twitch my nose—what a tidy site! 🐰

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.70% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the main change: adding an external program marketplace.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch external-program-marketplace

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@steven-tey steven-tey force-pushed the external-program-marketplace branch from 854c4a5 to 6e4440e Compare June 26, 2026 01:45

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/page.tsx (1)

32-44: 🩺 Stability & Availability | 🟡 Minor

Point this redirect at the public marketplace host
redirect("/marketplace/${programSlug}") stays on partners.dub.co, where /marketplace is an authenticated dashboard route. If this branch should show the public program page, use the app.dub.co marketplace URL instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/web/app/`(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/page.tsx
around lines 32 - 44, The default-group redirect in the apply page is pointing
to the authenticated `/marketplace` route on the current host instead of the
public marketplace host. Update the redirect in the `apply/page.tsx` branch that
handles `partnerGroupSlug === DEFAULT_PARTNER_GROUP.slug` so it sends users to
the public `app.dub.co` marketplace URL for the program page, while leaving the
`notFound()` and non-default group redirect behavior unchanged.
🧹 Nitpick comments (1)
apps/web/ui/program-marketplace/external/marketplace-external-list-page-client.tsx (1)

244-277: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Pagination renders one link per page — consider windowing for large catalogs.

Array.from({ length: totalPages }, ...) emits a <Link> for every page. As the marketplace grows, totalPages (= ceil(total / PAGE_SIZE)) can produce a very long, hard-to-use control and many DOM nodes. Consider a windowed/truncated pager (first/last + neighbors + ellipsis) or prev/next controls.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/web/ui/program-marketplace/external/marketplace-external-list-page-client.tsx`
around lines 244 - 277, The pagination rendering in
marketplace-external-list-page-client.tsx currently creates one Link per page
via Array.from({ length: totalPages }, ...), which will not scale for large
catalogs. Update the pagination UI in the relevant pager component to use a
windowed/truncated strategy instead of listing every page, such as showing the
first/last pages, the current page with neighboring pages, and ellipses or
prev/next controls. Keep the existing query-building logic with URLSearchParams
and Link, but change the page selection/rendering logic so the number of links
stays small as totalPages grows.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/lib/marketplace/parse-public-marketplace-query.ts`:
- Around line 24-33: The current `parsePublicMarketplaceQuery` flow in
`getPublicNetworkProgramsQuerySchema` drops all valid filters when `safeParse`
fails on a single malformed field. Update the parsing logic to validate or
coerce each query param independently, or merge the successfully parsed fields
with defaults so invalid values do not wipe out other valid ones. Keep
`fixedCategory` and `EXTERNAL_MARKETPLACE_PAGE_SIZE` as fallback values, but
preserve any other valid filters from the original input instead of replacing
the whole object.

In
`@apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx`:
- Around line 16-20: The href construction in
marketplace-external-apply-button’s apply button is adding an extra slash when
session is present because getMarketplaceProgramHref(programSlug) already
returns a path starting with a slash. Update the href expression in
MarketplaceExternalApplyButton so the session branch concatenates
PARTNERS_DOMAIN directly with getMarketplaceProgramHref(programSlug), while
keeping the non-session apply path unchanged, to avoid generating a double-slash
partners marketplace URL.

---

Outside diff comments:
In
`@apps/web/app/`(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/page.tsx:
- Around line 32-44: The default-group redirect in the apply page is pointing to
the authenticated `/marketplace` route on the current host instead of the public
marketplace host. Update the redirect in the `apply/page.tsx` branch that
handles `partnerGroupSlug === DEFAULT_PARTNER_GROUP.slug` so it sends users to
the public `app.dub.co` marketplace URL for the program page, while leaving the
`notFound()` and non-default group redirect behavior unchanged.

---

Nitpick comments:
In
`@apps/web/ui/program-marketplace/external/marketplace-external-list-page-client.tsx`:
- Around line 244-277: The pagination rendering in
marketplace-external-list-page-client.tsx currently creates one Link per page
via Array.from({ length: totalPages }, ...), which will not scale for large
catalogs. Update the pagination UI in the relevant pager component to use a
windowed/truncated strategy instead of listing every page, such as showing the
first/last pages, the current page with neighboring pages, and ellipses or
prev/next controls. Keep the existing query-building logic with URLSearchParams
and Link, but change the page selection/rendering logic so the number of links
stays small as totalPages grows.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6b44bd6b-9e7b-4102-8532-ca2600229db4

📥 Commits

Reviewing files that changed from the base of the PR and between 1fa9c58 and 6e4440e.

📒 Files selected for processing (29)
  • apps/web/app/(ee)/api/marketplace/programs/counts/route.ts
  • apps/web/app/(ee)/api/marketplace/programs/route.ts
  • apps/web/app/(ee)/api/network/programs/count/route.ts
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/page.tsx
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/apply/success/page.tsx
  • apps/web/app/(ee)/partners.dub.co/(apply)/[programSlug]/(default)/page.tsx
  • apps/web/app/(ee)/partners.dub.co/(dashboard)/marketplace/[[...segments]]/page.tsx
  • apps/web/app/app.dub.co/(dashboard)/layout.tsx
  • apps/web/app/app.dub.co/layout.tsx
  • apps/web/app/app.dub.co/marketplace/[[...segments]]/page.tsx
  • apps/web/app/app.dub.co/marketplace/layout.tsx
  • apps/web/lib/fetchers/get-network-program-counts.ts
  • apps/web/lib/fetchers/get-public-network-programs.ts
  • apps/web/lib/marketplace/parse-public-marketplace-query.ts
  • apps/web/lib/middleware/app.ts
  • apps/web/lib/middleware/utils/app-redirect.ts
  • apps/web/lib/swr/use-workspace.ts
  • apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-filters.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-header.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-home-page.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-list-page-client.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-list-page.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-program-page.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-router.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-shell.tsx
  • apps/web/ui/program-marketplace/pages/marketplace-program-page.tsx
  • apps/web/ui/program-marketplace/program-rewards-display.tsx
  • apps/web/ui/program-marketplace/utils/urls.ts
💤 Files with no reviewable changes (1)
  • apps/web/lib/middleware/utils/app-redirect.ts

Comment thread apps/web/lib/marketplace/parse-public-marketplace-query.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/app/app.dub.co/marketplace/[[...segments]]/page.tsx (1)

48-55: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reuse the router’s category parser here.

MarketplaceExternalRouter accepts category slugs case-insensitively via slugToCategory(), but this metadata branch does a case-sensitive enum match. A URL like /marketplace/c/SEO will render the category page and still keep the generic metadata. Use the same helper in both places so routing and metadata stay aligned.

Proposed fix
 import {
   getMarketplaceCanonicalUrl,
   getMarketplacePathFromSegments,
+  slugToCategory,
 } from "`@/ui/program-marketplace/utils/urls`";
 import { constructMetadata } from "`@dub/utils`";
-import { Category } from "`@prisma/client`";
 import { Metadata } from "next";
@@
   } else if (segments.length === 2 && segments[0] === "c") {
-    const category = Object.values(Category).find(
-      (value) => value.toLowerCase() === segments[1],
-    );
+    const category = slugToCategory(segments[1]);
 
     if (category) {
       const categoryMeta = PROGRAM_CATEGORIES_MAP[category];
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/app/app.dub.co/marketplace/`[[...segments]]/page.tsx around lines 48
- 55, The category metadata lookup in the marketplace page is doing a
case-sensitive enum match instead of reusing the router’s category parser, so it
can disagree with `MarketplaceExternalRouter` for URLs like
`/marketplace/c/SEO`. Update the `page.tsx` category branch to use the same
`slugToCategory()` helper used by `MarketplaceExternalRouter`, then derive
`categoryMeta` and `label` from that resolved category so routing and metadata
stay aligned.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/ui/program-marketplace/marketplace-program-row.tsx`:
- Line 64: Remove the leftover debug logging from marketplace-program-row.tsx:
the console.log in the MarketplaceProgramRow render path is emitting the full
programs payload on every render. Delete this statement so MarketplaceProgramRow
no longer spams logs in either the server-rendered or client-rendered path.

---

Outside diff comments:
In `@apps/web/app/app.dub.co/marketplace/`[[...segments]]/page.tsx:
- Around line 48-55: The category metadata lookup in the marketplace page is
doing a case-sensitive enum match instead of reusing the router’s category
parser, so it can disagree with `MarketplaceExternalRouter` for URLs like
`/marketplace/c/SEO`. Update the `page.tsx` category branch to use the same
`slugToCategory()` helper used by `MarketplaceExternalRouter`, then derive
`categoryMeta` and `label` from that resolved category so routing and metadata
stay aligned.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6d106c7d-2b02-43e1-9a5f-eb4ccba351f9

📥 Commits

Reviewing files that changed from the base of the PR and between 6e4440e and 8e9c962.

📒 Files selected for processing (8)
  • apps/web/app/(ee)/partners.dub.co/(dashboard)/marketplace/[[...segments]]/page.tsx
  • apps/web/app/app.dub.co/marketplace/[[...segments]]/page.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-home-page.tsx
  • apps/web/ui/program-marketplace/home-sections.ts
  • apps/web/ui/program-marketplace/marketplace-program-row.tsx
  • apps/web/ui/program-marketplace/pages/marketplace-home-page.tsx
  • apps/web/ui/program-marketplace/pages/marketplace-program-page.tsx
  • apps/web/ui/program-marketplace/utils/default-exports.ts
💤 Files with no reviewable changes (1)
  • apps/web/ui/program-marketplace/pages/marketplace-program-page.tsx

Comment thread apps/web/ui/program-marketplace/marketplace-program-row.tsx Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx (1)

14-26: 🎯 Functional Correctness | 🟠 Major

Use a single interactive element

Button renders a native <button>, so wrapping it in <a target="_blank"> creates nested interactive content. Style the anchor directly here instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx`
around lines 14 - 26, The Apply control in marketplace-external-apply-button.tsx
uses nested interactive elements because Button renders a native button inside
an anchor. Update the MarketplaceExternalApplyButton component to remove the
Button wrapper and style the anchor itself with the same classes so the link
remains the only interactive element; keep the existing href logic based on
session and programSlug and preserve target="_blank".
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In
`@apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx`:
- Around line 14-26: The Apply control in marketplace-external-apply-button.tsx
uses nested interactive elements because Button renders a native button inside
an anchor. Update the MarketplaceExternalApplyButton component to remove the
Button wrapper and style the anchor itself with the same classes so the link
remains the only interactive element; keep the existing href logic based on
session and programSlug and preserve target="_blank".

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 46fced09-93f2-496b-8c3f-263df5ade340

📥 Commits

Reviewing files that changed from the base of the PR and between 8e9c962 and 75d28fa.

📒 Files selected for processing (13)
  • apps/web/app/app.dub.co/marketplace/[[...segments]]/page.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-apply-button.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-header.tsx
  • apps/web/ui/program-marketplace/external/marketplace-external-program-page.tsx
  • apps/web/ui/program-marketplace/featured-program-card.tsx
  • apps/web/ui/program-marketplace/marketplace-program-row.tsx
  • apps/web/ui/program-marketplace/marketplace-router.tsx
  • apps/web/ui/program-marketplace/marketplace-sidebar-filters.tsx
  • apps/web/ui/program-marketplace/pages/marketplace-program-page.tsx
  • apps/web/ui/program-marketplace/program-card.tsx
  • apps/web/ui/program-marketplace/program-marketplace-banner.tsx
  • apps/web/ui/program-marketplace/program-marketplace-card.tsx
  • apps/web/ui/program-marketplace/utils/urls.ts
💤 Files with no reviewable changes (1)
  • apps/web/ui/program-marketplace/marketplace-program-row.tsx
✅ Files skipped from review due to trivial changes (1)
  • apps/web/ui/program-marketplace/marketplace-sidebar-filters.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • apps/web/ui/program-marketplace/external/marketplace-external-program-page.tsx
  • apps/web/app/app.dub.co/marketplace/[[...segments]]/page.tsx
  • apps/web/ui/program-marketplace/pages/marketplace-program-page.tsx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants