Skip to main content

Routes

Defined in fleapo-marketplace/src/App.tsx. React Router v6, nested admin section under AdminLayout.

PathComponentAccessPurpose
/IndexpublicHero, featured carousel, browse strip
/agentsAgentspublicFull catalog with tag + search filters
/agent/:slugAgentDetailpublicHero, capabilities, steps, pricing, reviews, changelog, analytics
/pricing/:slugPricingpublic (auth-required for checkout)Tier selection + Stripe Checkout redirect
/sign-inSignInpublicEmail + password
/sign-upSignUppublicEmail + password registration
/consentConsentpublicOAuth consent (only shown for non-first-party clients)
/unauthorizedUnauthorizedpublic403 fallback
/dashboardDashboardbearer (any role)Active subscriptions + usage
/adminAdminLayoutAdminOverviewplatform_adminKPIs
/admin/leadsAdminLeadsplatform_adminLead pipeline (mock data)
/admin/customersAdminCustomersplatform_adminPaying customers + MRR (mock data)
/admin/vendorsAdminVendorsplatform_adminAgent publishers (mock data)
/admin/agentsAdminAgentsplatform_adminAgent catalog management
/admin/agents/newAdminAgentSubmitplatform_adminCreate agent form
/admin/agents/:id/editAdminAgentEditplatform_adminEdit agent form
/admin/interactionsAdminInteractionsplatform_adminMarketing event feed
*NotFoundpublic404

Provider tree

QueryClientProvider
└── Sonner (toast)
└── TooltipProvider
└── BrowserRouter
└── ScrollBgController
└── SearchProvider
└── <Routes>

ScrollBgController is mounted outside the route tree so the page background animates continuously across route changes.

Sign-in mid-flow bounce

SignIn inspects query params on mount. If response_type + client_id are present, the page is part of an OAuth /authorize flow that hit the marketplace login — after successful auth, it bounces back to /api/auth/oauth2/authorize?... instead of /dashboard.

Role-based redirect after sign-in

  • platform_admin/admin
  • other → /dashboard

Layout transitions

AgentCardAgentDetail uses Framer Motion layoutId for shared-element transitions on the icon, name, and hero band. The IDs follow agent-{part}-{prefix}{slug} — different layoutIdPrefix values prevent collisions when the same agent appears in multiple grids on one page.