Files
Design-Buddy/src/app/page.tsx
2025-08-13 12:53:32 +02:00

157 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client";
import Link from "next/link";
import { Button } from "@/components/ui/button";
import { SetupChecklist } from "@/components/setup-checklist";
import { useDiagnostics } from "@/hooks/use-diagnostics";
import { StarterPromptModal } from "@/components/starter-prompt-modal";
export default function Home() {
const { isAuthReady, isAiReady, loading } = useDiagnostics();
return (
<div className="min-h-screen flex flex-col grain">
<main className="flex-1 container mx-auto px-4 py-12">
<div className="max-w-4xl mx-auto text-center space-y-8">
<div className="space-y-4">
<h2 className="text-4xl font-bold tracking-tight">
Welcome to Your Next.js Boilerplate
</h2>
<p className="text-xl text-muted-foreground">
A complete starter kit with authentication, database, AI
integration, and modern tooling
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mt-12">
<div className="p-6 border rounded-lg">
<h3 className="font-semibold mb-2">🔐 Authentication</h3>
<p className="text-sm text-muted-foreground">
Better Auth with Google OAuth integration
</p>
</div>
<div className="p-6 border rounded-lg">
<h3 className="font-semibold mb-2">🗄 Database</h3>
<p className="text-sm text-muted-foreground">
Drizzle ORM with PostgreSQL setup
</p>
</div>
<div className="p-6 border rounded-lg">
<h3 className="font-semibold mb-2">🤖 AI Ready</h3>
<p className="text-sm text-muted-foreground">
Vercel AI SDK with OpenAI integration
</p>
</div>
<div className="p-6 border rounded-lg">
<h3 className="font-semibold mb-2">🎨 UI Components</h3>
<p className="text-sm text-muted-foreground">
shadcn/ui with Tailwind CSS
</p>
</div>
</div>
<div className="space-y-6 mt-12">
<SetupChecklist />
<h3 className="text-2xl font-semibold">Next Steps</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 text-left">
<div className="p-4 border rounded-lg">
<h4 className="font-medium mb-2">
1. Set up environment variables
</h4>
<p className="text-sm text-muted-foreground mb-2">
Copy <code>.env.example</code> to <code>.env.local</code> and
configure:
</p>
<ul className="text-sm text-muted-foreground space-y-1 list-disc list-inside">
<li>DATABASE_URL (PostgreSQL connection string)</li>
<li>GOOGLE_CLIENT_ID (OAuth credentials)</li>
<li>GOOGLE_CLIENT_SECRET (OAuth credentials)</li>
<li>OPENAI_API_KEY (for AI functionality)</li>
</ul>
</div>
<div className="p-4 border rounded-lg">
<h4 className="font-medium mb-2">2. Set up your database</h4>
<p className="text-sm text-muted-foreground mb-2">
Run database migrations:
</p>
<code className="text-sm bg-muted p-2 rounded block">
npx drizzle-kit push
</code>
</div>
<div className="p-4 border rounded-lg">
<h4 className="font-medium mb-2">3. Try the features</h4>
<div className="space-y-2">
{(loading || !isAuthReady) ? (
<Button
size="sm"
className="w-full glow"
disabled={true}
>
View Dashboard
</Button>
) : (
<Button asChild size="sm" className="w-full glow">
<Link href="/dashboard">
View Dashboard
</Link>
</Button>
)}
{(loading || !isAiReady) ? (
<Button
variant="outline"
size="sm"
className="w-full"
disabled={true}
>
Try AI Chat
</Button>
) : (
<Button
asChild
variant="outline"
size="sm"
className="w-full"
>
<Link href="/chat">
Try AI Chat
</Link>
</Button>
)}
</div>
</div>
<div className="p-4 border rounded-lg">
<h4 className="font-medium mb-2">4. Start building</h4>
<p className="text-sm text-muted-foreground mb-3">
Customize the components, add your own pages, and build your
application on top of this solid foundation.
</p>
<StarterPromptModal />
</div>
</div>
</div>
</div>
</main>
<footer className="border-t py-8 text-center text-sm text-muted-foreground">
<div className="container mx-auto px-4">
<p className="mb-2">
Boilerplate template by Leon van Zyl
</p>
<p>
Visit{" "}
<a
href="https://youtube.com/@leonvanzyl"
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline"
>
@leonvanzyl on YouTube
</a>
{" "}for tutorials on using this template
</p>
</div>
</footer>
</div>
);
}