Compare commits

...

10 Commits

Author SHA1 Message Date
Kushagra Srivastava
5901a965f7 Merge pull request #934 from PSYEONE/no-ads
Added ability to remove the widgets in the front empty page of the search. Specifically the Weather and News widget.
2025-11-28 20:03:00 +05:30
ItzCrazyKns
6150784c27 feat(app): lint & beautify 2025-11-28 18:41:11 +05:30
Kushagra Srivastava
cb30e2438a Update src/components/EmptyChat.tsx
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-11-28 18:17:07 +05:30
Kushagra Srivastava
ead2a5b215 Update src/components/EmptyChat.tsx
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-11-28 18:17:01 +05:30
PSYEONE
1df4d886ff Revert "Added updated README for this fork"
This reverts commit 2574287fa8.
2025-11-28 12:24:15 +00:00
PSYEONE
2574287fa8 Added updated README for this fork 2025-11-28 12:08:19 +00:00
PSYEONE
3005b379cf Added functionality for hiding weather and news widgets 2025-11-28 11:59:53 +00:00
ItzCrazyKns
9934c1dbe0 Update README.md 2025-11-14 14:15:06 +05:30
ItzCrazyKns
f767717d7f Update README.md 2025-11-14 14:13:40 +05:30
ItzCrazyKns
e88e1c627c Update README.md 2025-11-14 14:12:43 +05:30
5 changed files with 83 additions and 9 deletions

View File

@@ -61,9 +61,9 @@ We'd also like to thank the following partners for their generous support:
<table>
<tr>
<td>
<td width="100" align="center">
<a href="https://dashboard.exa.ai" target="_blank">
<img src=".assets/sponsers/exa.png" alt="Exa" style="max-width: 8rem; max-height: 8rem; border-radius: .75rem;" />
<img src=".assets/sponsers/exa.png" alt="Exa" width="80" height="80" style="border-radius: .75rem;" />
</a>
</td>
<td>

View File

@@ -1,3 +1,6 @@
'use client';
import { useEffect, useState } from 'react';
import { Settings } from 'lucide-react';
import EmptyChatMessageInput from './EmptyChatMessageInput';
import { File } from './ChatWindow';
@@ -5,8 +8,39 @@ import Link from 'next/link';
import WeatherWidget from './WeatherWidget';
import NewsArticleWidget from './NewsArticleWidget';
import SettingsButtonMobile from '@/components/Settings/SettingsButtonMobile';
import {
getShowNewsWidget,
getShowWeatherWidget,
} from '@/lib/config/clientRegistry';
const EmptyChat = () => {
const [showWeather, setShowWeather] = useState(() =>
typeof window !== 'undefined' ? getShowWeatherWidget() : true,
);
const [showNews, setShowNews] = useState(() =>
typeof window !== 'undefined' ? getShowNewsWidget() : true,
);
useEffect(() => {
const updateWidgetVisibility = () => {
setShowWeather(getShowWeatherWidget());
setShowNews(getShowNewsWidget());
};
updateWidgetVisibility();
window.addEventListener('client-config-changed', updateWidgetVisibility);
window.addEventListener('storage', updateWidgetVisibility);
return () => {
window.removeEventListener(
'client-config-changed',
updateWidgetVisibility,
);
window.removeEventListener('storage', updateWidgetVisibility);
};
}, []);
return (
<div className="relative">
<div className="absolute w-full flex flex-row items-center justify-end mr-5 mt-5">
@@ -19,14 +53,20 @@ const EmptyChat = () => {
</h2>
<EmptyChatMessageInput />
</div>
<div className="flex flex-col w-full gap-4 mt-2 sm:flex-row sm:justify-center">
<div className="flex-1 w-full">
<WeatherWidget />
{(showWeather || showNews) && (
<div className="flex flex-col w-full gap-4 mt-2 sm:flex-row sm:justify-center">
{showWeather && (
<div className="flex-1 w-full">
<WeatherWidget />
</div>
)}
{showNews && (
<div className="flex-1 w-full">
<NewsArticleWidget />
</div>
)}
</div>
<div className="flex-1 w-full">
<NewsArticleWidget />
</div>
</div>
)}
</div>
</div>
);

View File

@@ -12,6 +12,12 @@ import { useTheme } from 'next-themes';
import { Loader2 } from 'lucide-react';
import { Switch } from '@headlessui/react';
const emitClientConfigChanged = () => {
if (typeof window !== 'undefined') {
window.dispatchEvent(new Event('client-config-changed'));
}
};
const SettingsSelect = ({
field,
value,
@@ -35,6 +41,7 @@ const SettingsSelect = ({
if (field.key === 'theme') {
setTheme(newValue);
}
emitClientConfigChanged();
} else {
const res = await fetch('/api/config', {
method: 'POST',
@@ -106,6 +113,7 @@ const SettingsInput = ({
try {
if (field.scope === 'client') {
localStorage.setItem(field.key, newValue);
emitClientConfigChanged();
} else {
const res = await fetch('/api/config', {
method: 'POST',
@@ -182,6 +190,7 @@ const SettingsTextarea = ({
try {
if (field.scope === 'client') {
localStorage.setItem(field.key, newValue);
emitClientConfigChanged();
} else {
const res = await fetch('/api/config', {
method: 'POST',
@@ -258,6 +267,7 @@ const SettingsSwitch = ({
try {
if (field.scope === 'client') {
localStorage.setItem(field.key, String(newValue));
emitClientConfigChanged();
} else {
const res = await fetch('/api/config', {
method: 'POST',

View File

@@ -11,3 +11,9 @@ export const getAutoMediaSearch = () =>
export const getSystemInstructions = () =>
getClientConfig('systemInstructions', '');
export const getShowWeatherWidget = () =>
getClientConfig('showWeatherWidget', 'true') === 'true';
export const getShowNewsWidget = () =>
getClientConfig('showNewsWidget', 'true') === 'true';

View File

@@ -69,6 +69,24 @@ class ConfigManager {
default: true,
scope: 'client',
},
{
name: 'Show weather widget',
key: 'showWeatherWidget',
type: 'switch',
required: false,
description: 'Display the weather card on the home screen.',
default: true,
scope: 'client',
},
{
name: 'Show news widget',
key: 'showNewsWidget',
type: 'switch',
required: false,
description: 'Display the recent news card on the home screen.',
default: true,
scope: 'client',
},
],
personalization: [
{