diff --git a/src/components/ads/ezoic-placeholder.tsx b/src/components/ads/ezoic-placeholder.tsx
index fd4404e3..9ad8cf82 100644
--- a/src/components/ads/ezoic-placeholder.tsx
+++ b/src/components/ads/ezoic-placeholder.tsx
@@ -42,8 +42,11 @@ export function EzoicPlaceholder({ id }: EzoicPlaceholderProps) {
if (blocked) return null;
return (
-
-
+
);
}
diff --git a/src/components/prompts/infinite-prompt-list.tsx b/src/components/prompts/infinite-prompt-list.tsx
index 9dd2501e..2b5402ee 100644
--- a/src/components/prompts/infinite-prompt-list.tsx
+++ b/src/components/prompts/infinite-prompt-list.tsx
@@ -60,9 +60,15 @@ export function InfinitePromptList({
const [isLoading, setIsLoading] = useState(false);
const [hasMore, setHasMore] = useState(initialPrompts.length < initialTotal);
const [hasError, setHasError] = useState(false);
+ const [isMounted, setIsMounted] = useState(false);
const loaderRef = useRef
(null);
const abortControllerRef = useRef(null);
+ // Set mounted state after hydration
+ useEffect(() => {
+ setIsMounted(true);
+ }, []);
+
// Reset when new data arrives from server
useEffect(() => {
// Cancel any in-flight request when filters change
@@ -187,7 +193,8 @@ export function InfinitePromptList({
}
// Inject widgets into the prompt list (widgets decide their own injection logic)
- const itemsToRender = injectWidgets(prompts, { filters });
+ // Only inject after mount to prevent hydration mismatch
+ const itemsToRender = isMounted ? injectWidgets(prompts, { filters }) : prompts;
return (
diff --git a/src/lib/plugins/widgets/index.ts b/src/lib/plugins/widgets/index.ts
index f6322713..9c592b7e 100644
--- a/src/lib/plugins/widgets/index.ts
+++ b/src/lib/plugins/widgets/index.ts
@@ -13,7 +13,7 @@ const widgetPlugins: WidgetPlugin[] = [
bookWidget,
textreamWidget,
commandcodeWidget,
- ...(process.env.EZOIC_ENABLED === "true" ? [ezoicWidget] : []),
+ ezoicWidget,
];
/**