import { json, type MetaFunction } from '@remix-run/cloudflare'; import { useLoaderData } from '@remix-run/react'; import { ClientOnly } from 'remix-utils/client-only'; import { BaseChat } from '~/components/chat/BaseChat'; import { Chat } from '~/components/chat/Chat.client'; import { Header } from '~/components/header/Header'; import BackgroundRays from '~/components/ui/BackgroundRays'; import { useEffect, useState } from 'react'; import { providersStore } from '~/lib/stores/settings'; import { authStore } from '~/lib/stores/auth'; import { useNavigate } from '@remix-run/react'; import { motion, AnimatePresence } from 'framer-motion'; export const meta: MetaFunction = () => { return [ { title: 'Bolt.gives' }, { name: 'description', content: 'Build web applications with AI assistance - Enhanced fork with advanced features', }, ]; }; export const loader = ({ context }: { context: any }) => { // Check which local providers are configured const configuredProviders: string[] = []; // Check Ollama if (context.cloudflare?.env?.OLLAMA_API_BASE_URL || process.env?.OLLAMA_API_BASE_URL) { configuredProviders.push('Ollama'); } // Check LMStudio if (context.cloudflare?.env?.LMSTUDIO_API_BASE_URL || process.env?.LMSTUDIO_API_BASE_URL) { configuredProviders.push('LMStudio'); } // Check OpenAILike if (context.cloudflare?.env?.OPENAI_LIKE_API_BASE_URL || process.env?.OPENAI_LIKE_API_BASE_URL) { configuredProviders.push('OpenAILike'); } return json({ configuredProviders }); }; /** * Landing page component for Bolt.gives * Enhanced fork with multi-user authentication, advanced features, and provider auto-detection * Note: Settings functionality should ONLY be accessed through the sidebar menu. */ export default function Index() { const data = useLoaderData<{ configuredProviders: string[] }>(); const [showMultiUserBanner, setShowMultiUserBanner] = useState(false); const navigate = useNavigate(); useEffect(() => { // Enable configured providers if they haven't been manually configured yet if (data?.configuredProviders && data.configuredProviders.length > 0) { const savedSettings = localStorage.getItem('provider_settings'); if (!savedSettings) { // No saved settings, so enable the configured providers const currentProviders = providersStore.get(); data.configuredProviders.forEach((providerName) => { if (currentProviders[providerName]) { providersStore.setKey(providerName, { ...currentProviders[providerName], settings: { ...currentProviders[providerName].settings, enabled: true, }, }); } }); // Save to localStorage so this only happens once localStorage.setItem('provider_settings', JSON.stringify(providersStore.get())); } } }, [data?.configuredProviders]); useEffect(() => { // Check if user is authenticated const authState = authStore.get(); // Show banner only if not authenticated and hasn't been dismissed const bannerDismissed = localStorage.getItem('multiUserBannerDismissed'); if (!authState.isAuthenticated && !bannerDismissed) { setTimeout(() => setShowMultiUserBanner(true), 2000); } }, []); const handleActivateMultiUser = () => { navigate('/auth'); }; const handleDismissBanner = () => { setShowMultiUserBanner(false); localStorage.setItem('multiUserBannerDismissed', 'true'); }; return (
}>{() => } {/* Optional Multi-User Activation Banner */} {showMultiUserBanner && (

Unlock Multi-User Features

Save your projects, personalized settings, and collaborate with workspace isolation.

)}
); }