import { Card, CardDescription, CardTitle } from "@/components/ui/card" import { ColoredText } from "@/components/ui/colored-text" import config from "@/lib/config" import { PROVIDERS } from "@/lib/llm-providers" import { getSelfHostedUser } from "@/models/users" import { ShieldAlert } from "lucide-react" import Image from "next/image" import { redirect } from "next/navigation" import SelfHostedSetupFormClient from "./setup-form-client" export default async function SelfHostedWelcomePage() { if (!config.selfHosted.isEnabled) { return ( Self-Hosted Mode is not enabled

To use TaxHacker in self-hosted mode, please set SELF_HOSTED_MODE=true in your environment.

In self-hosted mode you can use your own ChatGPT API key and store your data on your own server.

) } const user = await getSelfHostedUser() if (user) { redirect(config.selfHosted.redirectUrl) } const defaultProvider = PROVIDERS[0].key const defaultApiKeys: Record = { openai: config.ai.openaiApiKey ?? "", google: config.ai.googleApiKey ?? "", mistral: config.ai.mistralApiKey ?? "", } return ( Logo TaxHacker: Self-Hosted Edition

Welcome to your own instance of TaxHacker. Let's set up a couple of settings to get started.

) } export const dynamic = "force-dynamic"