'use client' import { useAuth } from '@thedaviddias/auth' import { Button } from '@thedaviddias/design-system/button' import { Github, Heart, Mail, Users, X, Zap } from 'lucide-react' import Link from 'next/link' import { useEffect, useState } from 'react' import { Card } from '@/components/ui/card' interface ProgressiveAuthBannerProps { context?: 'favorites' | 'community' | 'submit' | 'general' onDismiss?: () => void className?: string } /** * Displays a dismissable banner prompting unauthenticated users to sign up */ export function ProgressiveAuthBanner({ context = 'general', onDismiss, className = '' }: ProgressiveAuthBannerProps) { const { user } = useAuth() const [isVisible, setIsVisible] = useState(false) const [dismissedBanners, setDismissedBanners] = useState([]) useEffect(() => { // Load dismissed banners from localStorage const dismissed = JSON.parse(localStorage.getItem('dismissed-auth-banners') || '[]') setDismissedBanners(dismissed) // Show banner logic based on context and auth state const shouldShow = !user && !dismissed.includes(context) setIsVisible(shouldShow) }, [user, context]) /** * Dismisses the banner and persists the dismissal to localStorage */ const handleDismiss = () => { const newDismissed = [...dismissedBanners, context] setDismissedBanners(newDismissed) localStorage.setItem('dismissed-auth-banners', JSON.stringify(newDismissed)) setIsVisible(false) onDismiss?.() } if (!isVisible || user) return null const contextConfig = { favorites: { icon: Heart, title: 'Save your discoveries', description: 'Create a free account to sync favorites across devices and never lose track of great AI documentation.', benefits: ['Cloud sync', 'Cross-device access', 'Smart collections'] }, community: { icon: Users, title: 'Join our growing community', description: 'Connect with 2,000+ developers building AI-ready documentation.', benefits: ['Community updates', 'Early access', 'Developer insights'] }, submit: { icon: Zap, title: 'Share your llms.txt', description: 'Help grow the ecosystem by sharing your AI-ready documentation.', benefits: ['Direct submission', 'GitHub integration', 'Contributor profile'] }, general: { icon: Mail, title: 'Unlock the full experience', description: 'Create a free account to save favorites, get updates, and contribute to the community.', benefits: ['Save favorites', 'Get updates', 'Easy contributions'] } } const config = contextConfig[context] const IconComponent = config.icon return ( {/* Dismiss button */}

{config.title}

{config.description}

{/* Benefits list */}
{config.benefits.map((benefit, index) => ( {benefit} ))}
{/* CTA buttons */}
) }