This commit is contained in:
knuthtimo-lab 2026-01-22 22:24:06 +01:00
parent f67945d8e7
commit 0409fe2afd
3 changed files with 44 additions and 7 deletions

View File

@ -9,7 +9,10 @@
"create_qr": "QR erstellen",
"bulk_creation": "Massen-Erstellung",
"analytics": "Analytik",
"settings": "Einstellungen"
"settings": "Einstellungen",
"cta": "Kostenlos starten",
"tools": "Kostenlose Tools",
"all_free": "Alle Generatoren sind 100% kostenlos"
},
"hero": {
"badge": "Kostenloser QR-Code-Generator",
@ -64,6 +67,8 @@
"demo_note": "Dies ist ein Demo-QR-Code"
},
"static_vs_dynamic": {
"title": "Warum dynamische QR-Codes Ihnen Geld sparen",
"description": "Hören Sie auf, Materialien neu zu drucken. Wechseln Sie Ziele sofort und verfolgen Sie jeden Scan.",
"static": {
"title": "Statische QR-Codes",
"subtitle": "Immer kostenlos",
@ -97,6 +102,10 @@
"title": "Vollständige Anpassung",
"description": "Branden Sie Ihre QR-Codes mit individuellen Farben, Logos und Styling-Optionen."
},
"unlimited": {
"title": "Unbegrenzte statische QR-Codes",
"description": "Erstellen Sie so viele statische QR-Codes wie Sie benötigen. Kostenlos für immer, ohne Limits."
},
"bulk": {
"title": "Bulk-Operationen",
"description": "Erstellen Sie hunderte von QR-Codes auf einmal mit CSV-Import und Batch-Verarbeitung."
@ -370,5 +379,22 @@
"loading": "Lädt...",
"error": "Ein Fehler ist aufgetreten",
"success": "Erfolgreich!"
},
"footer": {
"product": "Produkt",
"features": "Funktionen",
"pricing": "Preise",
"faq": "FAQ",
"blog": "Blog",
"resources": "Ressourcen",
"full_pricing": "Alle Preise",
"all_questions": "Alle Fragen",
"all_articles": "Alle Artikel",
"get_started": "Loslegen",
"legal": "Rechtliches",
"privacy_policy": "Datenschutzerklärung",
"tagline": "Erstellen Sie benutzerdefinierte QR-Codes in Sekunden mit erweitertem Tracking und Analysen.",
"newsletter": "Newsletter-Anmeldung",
"rights_reserved": "QR Master. Alle Rechte vorbehalten."
}
}

View File

@ -43,28 +43,37 @@ export const authOptions: NextAuthOptions = {
id: user.id,
email: user.email,
name: user.name,
plan: user.plan || 'FREE',
};
},
}),
...(process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET
? [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
]
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
]
: []),
],
callbacks: {
async jwt({ token, user }) {
async jwt({ token, user, trigger, session }) {
if (user) {
token.id = user.id;
token.plan = user.plan;
}
// Update session support
if (trigger === "update" && session?.plan) {
token.plan = session.plan;
}
return token;
},
async session({ session, token }) {
if (session?.user) {
session.user.id = token.id as string;
session.user.plan = (token.plan as string) || 'FREE';
}
return session;
},

View File

@ -4,10 +4,12 @@ declare module 'next-auth' {
interface Session {
user: {
id: string;
plan: string;
} & DefaultSession['user'];
}
interface User {
id: string;
plan: string;
}
}