diff --git a/src/components/auth/google-button.tsx b/src/components/auth/google-button.tsx
new file mode 100644
index 0000000..59c2e03
--- /dev/null
+++ b/src/components/auth/google-button.tsx
@@ -0,0 +1,68 @@
+'use client'
+
+import { createClient } from '@/lib/supabase/client'
+import { Button } from '@/components/ui/button'
+import { useState } from 'react'
+
+// Simple Google icon SVG
+function GoogleIcon({ className }: { className?: string }) {
+ return (
+
+ )
+}
+
+export function GoogleSignInButton() {
+ const [loading, setLoading] = useState(false)
+ const supabase = createClient()
+
+ async function handleGoogleSignIn() {
+ setLoading(true)
+
+ const { error } = await supabase.auth.signInWithOAuth({
+ provider: 'google',
+ options: {
+ redirectTo: `${window.location.origin}/auth/callback`,
+ queryParams: {
+ access_type: 'offline',
+ prompt: 'consent',
+ },
+ },
+ })
+
+ if (error) {
+ console.error('Google sign-in error:', error)
+ setLoading(false)
+ }
+ // Note: No need to handle success - user is redirected to Google
+ }
+
+ return (
+
+ )
+}
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
new file mode 100644
index 0000000..6b471cb
--- /dev/null
+++ b/src/components/ui/button.tsx
@@ -0,0 +1,37 @@
+import { forwardRef, ButtonHTMLAttributes } from 'react'
+import { cn } from '@/lib/utils'
+
+export interface ButtonProps extends ButtonHTMLAttributes {
+ variant?: 'default' | 'outline' | 'ghost'
+ size?: 'default' | 'sm' | 'lg'
+}
+
+const Button = forwardRef(
+ ({ className, variant = 'default', size = 'default', ...props }, ref) => {
+ return (
+
+ )
+ }
+)
+Button.displayName = 'Button'
+
+export { Button }
diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx
new file mode 100644
index 0000000..5930360
--- /dev/null
+++ b/src/components/ui/card.tsx
@@ -0,0 +1,69 @@
+import { HTMLAttributes, forwardRef } from 'react'
+import { cn } from '@/lib/utils'
+
+const Card = forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ )
+)
+Card.displayName = 'Card'
+
+const CardHeader = forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ )
+)
+CardHeader.displayName = 'CardHeader'
+
+const CardTitle = forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ )
+)
+CardTitle.displayName = 'CardTitle'
+
+const CardDescription = forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ )
+)
+CardDescription.displayName = 'CardDescription'
+
+const CardContent = forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ )
+)
+CardContent.displayName = 'CardContent'
+
+const CardFooter = forwardRef>(
+ ({ className, ...props }, ref) => (
+
+ )
+)
+CardFooter.displayName = 'CardFooter'
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
new file mode 100644
index 0000000..d32b0fe
--- /dev/null
+++ b/src/lib/utils.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from 'clsx'
+import { twMerge } from 'tailwind-merge'
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}