feat: add GDPR cookie consent banner and upgrade-to-Pro link
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 3m8s
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 3m8s
- Cookie consent banner with accept all / essential only buttons - Uses existing i18n messages (en/fr) and localStorage for persistence - Animated with Framer Motion, respects dark/light theme - Free tier users see "Passer Pro →" link next to their badge in sidebar Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -73,15 +73,22 @@ export function DashboardSidebar() {
|
||||
<div className="flex min-w-0 flex-1 flex-col gap-0.5">
|
||||
<span className="truncate text-sm font-medium leading-none text-foreground">{user.name}</span>
|
||||
<span className="truncate text-xs leading-none text-muted-foreground">{user.email}</span>
|
||||
<Badge
|
||||
variant="secondary"
|
||||
className={cn(
|
||||
'mt-0.5 w-fit text-xs',
|
||||
user.tier !== 'free' && user.tier && 'border border-primary/20 bg-primary/10 text-primary'
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Badge
|
||||
variant="secondary"
|
||||
className={cn(
|
||||
'text-xs',
|
||||
user.tier !== 'free' && user.tier && 'border border-primary/20 bg-primary/10 text-primary'
|
||||
)}
|
||||
>
|
||||
{translateTier(t, user.tier)}
|
||||
</Badge>
|
||||
{(!user.tier || user.tier === 'free') && (
|
||||
<Link href="/pricing" className="text-xs font-medium text-primary hover:underline">
|
||||
{t('dashboard.sidebar.upgradeToPro', { defaultValue: 'Passer Pro →' })}
|
||||
</Link>
|
||||
)}
|
||||
>
|
||||
{translateTier(t, user.tier)}
|
||||
</Badge>
|
||||
</div>
|
||||
</div>
|
||||
<ThemeToggle />
|
||||
</div>
|
||||
|
||||
@@ -7,6 +7,7 @@ import { NotificationProvider } from "@/components/ui/notification";
|
||||
import { I18nProvider } from "@/lib/i18n";
|
||||
import { Agentation } from "agentation";
|
||||
import { GoogleOAuthProvider } from "@react-oauth/google";
|
||||
import { CookieConsent } from "@/components/ui/cookie-consent";
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -33,6 +34,7 @@ export default function RootLayout({
|
||||
<GoogleOAuthProvider clientId={process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID || ""}>
|
||||
<NotificationProvider>
|
||||
{children}
|
||||
<CookieConsent />
|
||||
</NotificationProvider>
|
||||
</GoogleOAuthProvider>
|
||||
</QueryProvider>
|
||||
|
||||
Reference in New Issue
Block a user