Stack homepage banners, search, and catalog to the 879px Figma mobile
frame on the independent marketplace site only. Event and ad slides use
the 357px mobile art frame; blog and recommend stay stacked 197+160.
The standalone and embedded creator pages call marketplaceClient.creatorDetail,
but those routes were dropped from the marketplace contract. Restore them, skip
avatar fetches when none was uploaded, and add creatorProfile strings to every
plugin locale.
Use Autocomplete Portal/Positioner/Popup after the dify-ui split, restore
creator-profile selection, and move the language filter search to InputGroup.
Count a frame impression after the current slide stays 50% visible for 1s, and emit Amplitude click/item_click events that match the banner export schema.
Keep the suggestion popup closed until results settle so the standalone
site does not flash the missing gotoAnything.searching key. Render
plugin and template icons from the marketplace asset URLs.
Prefer the current marketplace origin so marketplace.dify.dev opens creators.dify.dev instead of inheriting a baked-in .ai URL.
Co-authored-by: Cursor <cursoragent@cursor.com>
The public marketplace owns the suggestion dropdown. Console plugin and
template search keep updating results as the query changes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Compose the Plugins and Templates catalog homes from one HomeShell so the
page scaffold cannot drift, split the templates page into category
navigation, pagination and link helpers, and hand the collection list
pre-filtered locale data instead of filtering twice. Replace the
hand-rolled banner payload guards with a zod schema keeping the same
lenient semantics, share the partner-collection constants, label the
plugin type filter group as categories, and backfill the missing Lao
trending title.
Co-authored-by: Cursor <cursoragent@cursor.com>
Break the trending banner into navigation and slide modules with shared
home constants, hoist the marketplace container id and partner-collection
constants for reuse across the catalog, and drop the i18n keys the
redesigned home no longer renders.
Co-authored-by: Cursor <cursoragent@cursor.com>
The autoplay plugin skips its own setup when a carousel has one page, so
the eager play() path dereferenced an undefined delay list and crashed
the standalone marketplace templates tab. Keep autoplay stopped for
single-page carousels and pause rotation permanently once focus enters,
dropping the play/pause toggle that resumed it.
Co-authored-by: Cursor <cursoragent@cursor.com>
CI type-checks without the Next-generated image declarations, so *.webp
needs an explicit module declaration like the other formats. Also keep
getCarouselItemsPerPage module-private since only the hook consumes it,
which unblocks the knip production check.
Co-authored-by: Cursor <cursoragent@cursor.com>
- resample the 3MB trending background to a 97KB webp and serve a frozen
recommend banner from the E2E stub so the benchmark covers the carousel
- show the on-page filtered count in template search and redirect
out-of-range pages to the last available page
- localize the carousel controls across all 24 locales and replace the
i18n type casts with typed selectors
- surface Marketplace API failures with a retry action instead of
rendering them as empty results
- use iconify marks for the hero decorations, share the carousel
page-size hook to avoid a hydration mismatch, move banner types into
@dify/contracts, scope the Cmd+K shortcut to the standalone platform,
point the embedded logo at /marketplace, pass resolvedTheme to the
detail dialogs, and reveal the detail iframe after a loading timeout
Co-authored-by: Cursor <cursoragent@cursor.com>
home-header.tsx is a server component on the standalone marketplace
homepage, where calling buttonVariants() from the client-marked
dify-ui button module crashes SSR with a 500. Extract the Creator
Center link into its own 'use client' file, mirroring home-guide.tsx.
Co-authored-by: Cursor <cursoragent@cursor.com>