openDetail(app)}
+ onKeyDown={(ev) => { if (ev.key === 'Enter' || ev.key === ' ') { ev.preventDefault(); openDetail(app); } }}
+ >
+
+ {app.logo ? (
+
})
+ ) : (
+
{initial(app.displayName)}
+ )}
+
+
+ {app.displayName}
+ {app.verified ? Verified : null}
+
+
@{app.name}
+
+
+ {app.description || 'No description provided.'}
+
+ {String(app.kind || 'app')}
+ {Number(app.installs || 0)} installs
+
+
+ {installedNow ? (
+
+ ) : (
+
+ )}
+
+
+ );
+ };
+
+ const renderOfficialCard = (entry: any) => {
+ const isMcp = entry.type === 'mcp-app';
+ const caps: string[] = Array.isArray(entry.capabilities) ? entry.capabilities : [];
+ return (
+
+
+ {entry.logoUrl ? (
+

+ ) : (
+
{initial(entry.name)}
+ )}
+
+ {entry.name}
+ {isMcp ? 'MCP app' : entry.type || 'integration'}{entry.category ? ` · ${entry.category}` : ''}
+
+
+ {entry.description || ''}
+ {caps.length > 0 && (
+
+ {caps.slice(0, 4).map((c) => {c})}
+
+ )}
+
+
+ {entry.docsUrl && (
+
Docs
+ )}
+
+
+ );
+ };
+
+ return (
+
+
+
+
+ setSearch(e.target.value)}
+ />
+
+
+ {pods.length > 0 && (
+
+ )}
+
+
+
+
+
+
+
+ {status &&
{status}
}
+ {error &&
{error}
}
+
+ {tab === 'discover' ? (
+ <>
+
+ {search || kind !== 'all' || category !== 'all' ? 'Results' : 'All listings'}
+ {loading ? (
+
+ {[0, 1, 2, 3].map((i) =>
)}
+
+ ) : apps.length === 0 ? (
+
+
No listings yet
+
Nothing matches your filters. Try a broader search, or publish the first one.
+
+ ) : (
+ {apps.map(renderListingCard)}
+ )}
+
+
+ {officialIntegrations.length > 0 && (
+
+ Official integrations
+ Curated by Commonly — connect from a pod.
+ {officialIntegrations.map(renderOfficialCard)}
+
+ )}
+
+ {mcpListings.length > 0 && (
+
+ MCP apps (preview)
+ Interactive UI rendered inside MCP-compatible hosts.
+ {mcpListings.map(renderOfficialCard)}
+
+ )}
+ >
+ ) : (
+
+ {!selectedPodId ? (
+ Pick a pod to see what's installed.
+ ) : installed.length === 0 ? (
+
+
Nothing installed here yet
+
Browse Discover and install your first one.
+
+ ) : (
+ {installed.map(renderListingCard)}
+ )}
+
+ )}
+
+ );
+};
+
+export default V2MarketplacePage;