MVP
This commit is contained in:
@@ -37,7 +37,7 @@ const blogPosts: Record<string, BlogPostData> = {
|
||||
dateModified: '2025-10-16T09:00:00Z',
|
||||
readTime: '8 Min',
|
||||
category: 'Analytics',
|
||||
image: 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1200&q=80',
|
||||
image: 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=1200&q=80',
|
||||
imageAlt: 'QR code analytics dashboard showing real-time scan metrics and campaign performance data',
|
||||
author: 'QR Master Team',
|
||||
authorUrl: 'https://www.qrmaster.com/about',
|
||||
@@ -140,6 +140,193 @@ const blogPosts: Record<string, BlogPostData> = {
|
||||
<p>Whether you're deploying QR codes for event tracking, print marketing, bulk generation, or API-driven automation, scan analytics provides the data foundation for smarter, more effective campaigns. Start leveraging QR analytics today to unlock the full potential of your QR marketing strategy.</p>
|
||||
</div>`,
|
||||
},
|
||||
'dynamische-vs-statische-qr-codes': {
|
||||
slug: 'dynamische-vs-statische-qr-codes',
|
||||
title: 'Dynamische vs. Statische QR-Codes: Der ultimative Vergleich',
|
||||
excerpt: 'Entdecken Sie die wichtigsten Unterschiede zwischen dynamischen und statischen QR-Codes und wählen Sie die richtige Option für Ihre Kampagne.',
|
||||
date: 'October 15, 2025',
|
||||
datePublished: '2025-10-15T09:00:00Z',
|
||||
dateModified: '2025-10-15T09:00:00Z',
|
||||
readTime: '6 Min',
|
||||
category: 'Grundlagen',
|
||||
image: 'https://images.unsplash.com/photo-1603791440384-56cd371ee9a7?w=1200&q=80',
|
||||
imageAlt: 'Vergleich zwischen dynamischen und statischen QR-Codes mit Diagrammen',
|
||||
author: 'QR Master Team',
|
||||
authorUrl: 'https://www.qrmaster.com/about',
|
||||
content: `<div class="blog-content">
|
||||
<h2>Was sind statische QR-Codes?</h2>
|
||||
<p>Statische QR-Codes enthalten fest eingebettete Informationen, die nach der Erstellung nicht mehr geändert werden können. Der QR-Code speichert die Daten direkt – zum Beispiel eine URL, einen Text oder Kontaktdaten. Sobald der Code gedruckt ist, bleibt sein Inhalt permanent.</p>
|
||||
|
||||
<h3>Vorteile statischer QR-Codes</h3>
|
||||
<p><strong>Für immer gültig:</strong> Statische QR-Codes funktionieren unabhängig von Servern oder Abonnements. Sie sind ideal für Anwendungen, bei denen Sie garantiert langfristige Verfügbarkeit benötigen.</p>
|
||||
<p><strong>Keine laufenden Kosten:</strong> Da keine Server-Infrastruktur erforderlich ist, fallen keine monatlichen Gebühren an.</p>
|
||||
<p><strong>Schneller Scan:</strong> Direkter Zugriff auf Inhalte ohne Umleitung über Server.</p>
|
||||
|
||||
<h3>Nachteile statischer QR-Codes</h3>
|
||||
<p><strong>Nicht editierbar:</strong> Nach dem Druck können Sie die verlinkten Inhalte nicht mehr ändern.</p>
|
||||
<p><strong>Keine Analytics:</strong> Sie können nicht nachverfolgen, wie oft der Code gescannt wurde.</p>
|
||||
<p><strong>Größer bei langen URLs:</strong> Je mehr Daten eingebettet sind, desto komplexer und größer wird der QR-Code.</p>
|
||||
|
||||
<h2>Was sind dynamische QR-Codes?</h2>
|
||||
<p>Dynamische QR-Codes enthalten eine kurze Weiterleitungs-URL, die auf einen Server verweist. Der Server speichert die eigentliche Ziel-URL. Das bedeutet, dass Sie die Ziel-URL jederzeit ändern können, ohne den gedruckten QR-Code neu erstellen zu müssen.</p>
|
||||
|
||||
<h3>Vorteile dynamischer QR-Codes</h3>
|
||||
<p><strong>Editierbar:</strong> Ändern Sie die Ziel-URL jederzeit, auch nach dem Druck.</p>
|
||||
<p><strong>Detaillierte Analytics:</strong> Verfolgen Sie Scans nach Standort, Gerät, Zeit und mehr.</p>
|
||||
<p><strong>Retargeting-fähig:</strong> Nutzen Sie Scan-Daten für personalisierte Marketing-Kampagnen.</p>
|
||||
<p><strong>Kompakter Code:</strong> Da nur eine kurze Umleitungs-URL eingebettet ist, bleibt der QR-Code kleiner und einfacher zu scannen.</p>
|
||||
|
||||
<h3>Nachteile dynamischer QR-Codes</h3>
|
||||
<p><strong>Erfordert Abo:</strong> Dynamische QR-Codes benötigen eine aktive Server-Infrastruktur, was meist mit monatlichen Kosten verbunden ist.</p>
|
||||
<p><strong>Abhängig vom Server:</strong> Wenn der Server ausfällt oder das Abo abläuft, funktioniert der QR-Code nicht mehr.</p>
|
||||
|
||||
<h2>Vergleichstabelle: Statisch vs. Dynamisch</h2>
|
||||
<div class="overflow-x-auto my-8">
|
||||
<table class="min-w-full border-collapse border border-gray-300">
|
||||
<thead class="bg-gray-100">
|
||||
<tr>
|
||||
<th class="border border-gray-300 px-6 py-3 text-left font-semibold text-gray-900">Feature</th>
|
||||
<th class="border border-gray-300 px-6 py-3 text-left font-semibold text-gray-900">Statisch</th>
|
||||
<th class="border border-gray-300 px-6 py-3 text-left font-semibold text-gray-900">Dynamisch</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="bg-white">
|
||||
<td class="border border-gray-300 px-6 py-4 font-medium text-gray-900">Editierbar</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Nein</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Ja</td>
|
||||
</tr>
|
||||
<tr class="bg-gray-50">
|
||||
<td class="border border-gray-300 px-6 py-4 font-medium text-gray-900">Analytics</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Nein</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Ja</td>
|
||||
</tr>
|
||||
<tr class="bg-white">
|
||||
<td class="border border-gray-300 px-6 py-4 font-medium text-gray-900">Kosten</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Kostenlos</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Abo erforderlich</td>
|
||||
</tr>
|
||||
<tr class="bg-gray-50">
|
||||
<td class="border border-gray-300 px-6 py-4 font-medium text-gray-900">Größe</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Größer bei langen URLs</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Immer kompakt</td>
|
||||
</tr>
|
||||
<tr class="bg-white">
|
||||
<td class="border border-gray-300 px-6 py-4 font-medium text-gray-900">Gültigkeitsdauer</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Für immer</td>
|
||||
<td class="border border-gray-300 px-6 py-4 text-gray-700">Abhängig vom Abo</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h2>Wann sollten Sie welchen QR-Code-Typ verwenden?</h2>
|
||||
<h3>Verwenden Sie statische QR-Codes für:</h3>
|
||||
<p>• Visitenkarten mit festen Kontaktdaten</p>
|
||||
<p>• WLAN-Passwörter</p>
|
||||
<p>• Produktverpackungen mit permanenten URLs</p>
|
||||
<p>• Anwendungen, bei denen Sie keine Analytics benötigen</p>
|
||||
|
||||
<h3>Verwenden Sie dynamische QR-Codes für:</h3>
|
||||
<p>• Marketing-Kampagnen mit wechselnden Angeboten</p>
|
||||
<p>• Event-Tickets mit aktualisierbaren Informationen</p>
|
||||
<p>• Print-Anzeigen, bei denen Sie die Landingpage optimieren möchten</p>
|
||||
<p>• Jede Anwendung, bei der Sie Scan-Statistiken tracken möchten</p>
|
||||
|
||||
<h2>Fazit</h2>
|
||||
<p>Statische QR-Codes sind ideal für permanente, unveränderliche Inhalte ohne Tracking-Bedarf. Dynamische QR-Codes bieten Flexibilität, Analytics und Marketing-Power – perfekt für professionelle Kampagnen. Wählen Sie basierend auf Ihren Anforderungen: Langfristige Stabilität oder Marketing-Flexibilität?</p>
|
||||
</div>`,
|
||||
},
|
||||
'qr-codes-im-restaurant': {
|
||||
slug: 'qr-codes-im-restaurant',
|
||||
title: 'QR-Codes im Restaurant: Digitale Speisekarten & kontaktloses Bestellen',
|
||||
excerpt: 'Erfahren Sie, wie Restaurants QR-Codes für digitale Menüs, kontaktlose Bestellungen und verbessertes Gästeerlebnis einsetzen.',
|
||||
date: 'October 14, 2025',
|
||||
datePublished: '2025-10-14T09:00:00Z',
|
||||
dateModified: '2025-10-14T09:00:00Z',
|
||||
readTime: '7 Min',
|
||||
category: 'Anwendungsfälle',
|
||||
image: 'https://images.unsplash.com/photo-1555396273-367ea4eb4db5?w=1200&q=80',
|
||||
imageAlt: 'Restaurant-Tisch mit QR-Code für digitale Speisekarte',
|
||||
author: 'QR Master Team',
|
||||
authorUrl: 'https://www.qrmaster.com/about',
|
||||
content: `<div class="blog-content">
|
||||
<h2>Warum QR-Codes für Restaurants?</h2>
|
||||
<p>Seit der Pandemie haben QR-Codes die Gastronomie revolutioniert. Sie ermöglichen kontaktloses Bestellen, reduzieren Druckkosten für Speisekarten und verbessern das Gästeerlebnis durch interaktive Funktionen. Moderne Gäste erwarten digitale Lösungen – QR-Codes liefern genau das.</p>
|
||||
|
||||
<h2>Digitale Speisekarten mit QR-Codes</h2>
|
||||
<h3>Vorteile für Restaurants</h3>
|
||||
<p><strong>Kosten sparen:</strong> Keine teuren Speisekarten-Neudrucke bei Preisänderungen oder neuen Gerichten.</p>
|
||||
<p><strong>Aktualisierungen in Echtzeit:</strong> Passen Sie Ihr Menü sofort an – täglich wechselnde Angebote, Verfügbarkeiten oder Allergiehinweise.</p>
|
||||
<p><strong>Mehrsprachigkeit:</strong> Bieten Sie Ihre Speisekarte automatisch in mehreren Sprachen an.</p>
|
||||
<p><strong>Hygiene:</strong> Gäste scannen mit ihrem eigenen Smartphone – keine gemeinsam genutzten Speisekarten mehr.</p>
|
||||
|
||||
<h3>Vorteile für Gäste</h3>
|
||||
<p>• Sofortiger Zugriff auf die Speisekarte ohne Warten</p>
|
||||
<p>• Hochauflösende Bilder der Gerichte</p>
|
||||
<p>• Detaillierte Nährwertangaben und Allergiehinweise</p>
|
||||
<p>• Personalisierte Empfehlungen</p>
|
||||
|
||||
<h2>Kontaktloses Bestellen via QR-Code</h2>
|
||||
<p>QR-Codes ermöglichen es Gästen, direkt vom Tisch aus zu bestellen – ohne auf Kellner zu warten. Das System ist einfach: Gast scannt Code → wählt Gerichte aus → bestätigt Bestellung → zahlt digital.</p>
|
||||
|
||||
<h3>Vorteile des kontaktlosen Bestellens</h3>
|
||||
<p><strong>Schnellerer Service:</strong> Bestellungen gehen direkt in die Küche, ohne Zwischenschritte.</p>
|
||||
<p><strong>Weniger Fehler:</strong> Gäste geben ihre Bestellung selbst ein – keine Missverständnisse mehr.</p>
|
||||
<p><strong>Upselling-Möglichkeiten:</strong> Zeigen Sie automatisch passende Empfehlungen oder Zusatzprodukte an.</p>
|
||||
<p><strong>Höhere Tischrotation:</strong> Weniger Wartezeiten bedeuten mehr bediente Gäste pro Abend.</p>
|
||||
|
||||
<h2>QR-Code-Platzierung im Restaurant</h2>
|
||||
<h3>Auf dem Tisch</h3>
|
||||
<p>Der klassische Ansatz: QR-Codes auf Tischaufstellern, Tischsets oder direkt auf dem Tisch. Ideal für Restaurants mit festem Sitzplatz.</p>
|
||||
|
||||
<h3>An der Wand oder am Eingang</h3>
|
||||
<p>Für Schnellrestaurants oder Cafés: Gäste scannen beim Betreten und bestellen an der Theke oder am Tisch.</p>
|
||||
|
||||
<h3>Auf Rechnungen und Flyern</h3>
|
||||
<p>Nutzen Sie QR-Codes auf Rechnungen für Online-Bewertungen, Treueprogramme oder Social-Media-Verlinkungen.</p>
|
||||
|
||||
<h2>Best Practices für Restaurant-QR-Codes</h2>
|
||||
<h3>1. Design: Markenkonform und ansprechend</h3>
|
||||
<p>Gestalten Sie QR-Codes in Ihren Markenfarben mit Ihrem Logo. Ein professionelles Design erhöht die Scan-Rate.</p>
|
||||
|
||||
<h3>2. Klare Anweisungen</h3>
|
||||
<p>Fügen Sie einen Call-to-Action hinzu: "Scannen für Speisekarte" oder "Hier bestellen". Nicht jeder Gast ist mit QR-Codes vertraut.</p>
|
||||
|
||||
<h3>3. Mobile Optimierung</h3>
|
||||
<p>Ihre digitale Speisekarte MUSS mobilfreundlich sein. Große Schriftarten, einfache Navigation, schnelle Ladezeiten.</p>
|
||||
|
||||
<h3>4. Testen Sie regelmäßig</h3>
|
||||
<p>Prüfen Sie wöchentlich, ob alle QR-Codes funktionieren und zur richtigen Seite führen.</p>
|
||||
|
||||
<h2>Analytics: Messen Sie den Erfolg</h2>
|
||||
<p>Mit dynamischen QR-Codes erhalten Sie wertvolle Insights:</p>
|
||||
<p>• Wie viele Gäste scannen den QR-Code?</p>
|
||||
<p>• Welche Gerichte werden am häufigsten angesehen?</p>
|
||||
<p>• Zu welchen Uhrzeiten ist die Nachfrage am höchsten?</p>
|
||||
<p>• Welche Tische haben die höchste Scan-Rate?</p>
|
||||
|
||||
<h2>Praxisbeispiel: Pizza-Restaurant "Bella Italia"</h2>
|
||||
<p>Das fiktive Restaurant "Bella Italia" führte QR-Code-Bestellungen ein und erzielte innerhalb von 3 Monaten:</p>
|
||||
<p>• 40% schnellere Bestellabwicklung</p>
|
||||
<p>• 25% höherer Umsatz durch Upselling-Vorschläge</p>
|
||||
<p>• 90% der Gäste bevorzugen QR-Bestellungen gegenüber klassischer Bedienung</p>
|
||||
<p>• 50% Kosteneinsparung bei Speisekarten-Druck</p>
|
||||
|
||||
<h2>Häufige Fragen (FAQ)</h2>
|
||||
<h3>Was, wenn Gäste kein Smartphone haben?</h3>
|
||||
<p>Halten Sie einige gedruckte Speisekarten als Backup bereit – besonders für ältere Gäste.</p>
|
||||
|
||||
<h3>Wie sicher ist das Bezahlen via QR-Code?</h3>
|
||||
<p>Nutzen Sie etablierte Payment-Anbieter wie Stripe oder PayPal, die höchste Sicherheitsstandards erfüllen.</p>
|
||||
|
||||
<h3>Brauche ich technisches Know-how?</h3>
|
||||
<p>Nein! Plattformen wie QR Master ermöglichen die Erstellung und Verwaltung von Restaurant-QR-Codes ohne Programmierkenntnisse.</p>
|
||||
|
||||
<h2>Fazit</h2>
|
||||
<p>QR-Codes sind die Zukunft der Gastronomie. Sie verbessern das Gästeerlebnis, sparen Kosten und steigern den Umsatz. Egal ob kleines Café oder gehobenes Restaurant – QR-Codes lohnen sich für jeden Betrieb. Starten Sie noch heute mit Ihrer digitalen Transformation!</p>
|
||||
</div>`,
|
||||
},
|
||||
};
|
||||
|
||||
function truncateAtWord(text: string, maxLength: number): string {
|
||||
@@ -210,7 +397,7 @@ export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||
{ name: post.title, url: `/blog/${post.slug}` },
|
||||
];
|
||||
|
||||
const schemas = [
|
||||
const schemas: any[] = [
|
||||
blogPostingSchema({
|
||||
title: post.title,
|
||||
description: post.excerpt,
|
||||
|
||||
@@ -52,25 +52,25 @@ const blogPosts = [
|
||||
date: 'October 16, 2025',
|
||||
readTime: '8 Min',
|
||||
category: 'Analytics',
|
||||
image: 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&q=80',
|
||||
image: 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=800&q=80',
|
||||
},
|
||||
{
|
||||
slug: 'qr-codes-im-restaurant',
|
||||
title: 'QR Codes in Restaurants: The Digital Menu Revolution',
|
||||
excerpt: 'Discover how QR codes are revolutionizing the restaurant industry and what benefits they offer for restaurants and guests.',
|
||||
date: 'January 15, 2024',
|
||||
date: 'January 15, 2025',
|
||||
readTime: '5 Min',
|
||||
category: 'Restaurant',
|
||||
image: 'https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=800&q=80',
|
||||
image: 'https://images.unsplash.com/photo-1555396273-367ea4eb4db5?w=800&q=80',
|
||||
},
|
||||
{
|
||||
slug: 'dynamische-vs-statische-qr-codes',
|
||||
title: 'Dynamic vs Static QR Codes: What\'s the Difference?',
|
||||
excerpt: 'A comprehensive comparison between dynamic and static QR codes and when you should use each type.',
|
||||
date: 'January 10, 2024',
|
||||
date: 'January 10, 2025',
|
||||
readTime: '3 Min',
|
||||
category: 'Basics',
|
||||
image: 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&q=80',
|
||||
image: 'https://images.unsplash.com/photo-1603791440384-56cd371ee9a7?w=800&q=80',
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ const faqs = [
|
||||
},
|
||||
{
|
||||
question: 'How do I brand my QR codes?',
|
||||
answer: 'QR Master offers full customization options including custom colors, logo embedding, rounded corners, and pattern styles. Branded QR codes maintain scannability while matching your brand identity. Upload your logo, choose your color palette, and preview designs before downloading.',
|
||||
answer: 'QR Master offers customization options including custom colors, corner styles, and pattern designs. Branded QR codes maintain scannability while matching your brand identity. Choose your color palette and preview designs before downloading.',
|
||||
},
|
||||
{
|
||||
question: 'Is scan analytics GDPR compliant?',
|
||||
|
||||
@@ -4,6 +4,7 @@ import React, { useState } from 'react';
|
||||
import Link from 'next/link';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import CookieBanner from '@/components/CookieBanner';
|
||||
import en from '@/i18n/en.json';
|
||||
|
||||
export default function MarketingLayout({
|
||||
@@ -28,7 +29,7 @@ export default function MarketingLayout({
|
||||
<div className="min-h-screen bg-white">
|
||||
{/* Header */}
|
||||
<header className="sticky top-0 z-50 bg-white border-b border-gray-200">
|
||||
<nav className="container mx-auto px-4 py-4">
|
||||
<nav className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl py-4">
|
||||
<div className="flex items-center justify-between">
|
||||
{/* Logo */}
|
||||
<Link href="/" className="flex items-center space-x-2">
|
||||
@@ -106,18 +107,18 @@ export default function MarketingLayout({
|
||||
|
||||
{/* Footer */}
|
||||
<footer className="bg-gray-900 text-white py-12 mt-20">
|
||||
<div className="container mx-auto px-4">
|
||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
|
||||
<div className="grid md:grid-cols-4 gap-8">
|
||||
<div>
|
||||
<div className="flex items-center space-x-2 mb-4">
|
||||
<img src="/logo.svg" alt="QR Master" className="w-8 h-8 brightness-0 invert" />
|
||||
<Link href="/" className="flex items-center space-x-2 mb-4 hover:opacity-80 transition-opacity">
|
||||
<img src="/favicon.svg" alt="QR Master" className="w-10 h-10" />
|
||||
<span className="text-xl font-bold">QR Master</span>
|
||||
</div>
|
||||
</Link>
|
||||
<p className="text-gray-400">
|
||||
Create custom QR codes in seconds with advanced tracking and analytics.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<h3 className="font-semibold mb-4">Product</h3>
|
||||
<ul className="space-y-2 text-gray-400">
|
||||
@@ -127,33 +128,34 @@ export default function MarketingLayout({
|
||||
<li><Link href="/blog" className="hover:text-white">Blog</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<h3 className="font-semibold mb-4">Company</h3>
|
||||
<h3 className="font-semibold mb-4">Resources</h3>
|
||||
<ul className="space-y-2 text-gray-400">
|
||||
<li><a href="#" className="hover:text-white">About</a></li>
|
||||
<li><a href="#" className="hover:text-white">Careers</a></li>
|
||||
<li><a href="#" className="hover:text-white">Contact</a></li>
|
||||
<li><a href="#" className="hover:text-white">Partners</a></li>
|
||||
<li><Link href="/pricing" className="hover:text-white">Full Pricing</Link></li>
|
||||
<li><Link href="/faq" className="hover:text-white">All Questions</Link></li>
|
||||
<li><Link href="/blog" className="hover:text-white">Blog</Link></li>
|
||||
<li><Link href="/signup" className="hover:text-white">Get Started</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<h3 className="font-semibold mb-4">Legal</h3>
|
||||
<ul className="space-y-2 text-gray-400">
|
||||
<li><a href="#" className="hover:text-white">Privacy Policy</a></li>
|
||||
<li><a href="#" className="hover:text-white">Terms of Service</a></li>
|
||||
<li><a href="#" className="hover:text-white">Cookie Policy</a></li>
|
||||
<li><a href="#" className="hover:text-white">GDPR</a></li>
|
||||
<li><Link href="/privacy" className="hover:text-white">Privacy Policy</Link></li>
|
||||
<li><Link href="/terms" className="hover:text-white">Terms of Service</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="border-t border-gray-800 mt-8 pt-8 text-center text-gray-400">
|
||||
<p>© 2024 QR Master. All rights reserved.</p>
|
||||
<p>© 2025 QR Master. All rights reserved.</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
{/* Cookie Banner */}
|
||||
<CookieBanner />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,267 +0,0 @@
|
||||
import React from 'react';
|
||||
import type { Metadata } from 'next';
|
||||
import Link from 'next/link';
|
||||
import SeoJsonLd from '@/components/SeoJsonLd';
|
||||
import { productSchema } from '@/lib/schema';
|
||||
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { Badge } from '@/components/ui/Badge';
|
||||
|
||||
function truncateAtWord(text: string, maxLength: number): string {
|
||||
if (text.length <= maxLength) return text;
|
||||
const truncated = text.slice(0, maxLength);
|
||||
const lastSpace = truncated.lastIndexOf(' ');
|
||||
return lastSpace > 0 ? truncated.slice(0, lastSpace) : truncated;
|
||||
}
|
||||
|
||||
export async function generateMetadata(): Promise<Metadata> {
|
||||
const title = truncateAtWord('QR Master Pricing & Bulk Plans', 60);
|
||||
const description = truncateAtWord(
|
||||
'Choose flexible plans for bulk QR generation, analytics & branding.',
|
||||
160
|
||||
);
|
||||
|
||||
return {
|
||||
title,
|
||||
description,
|
||||
alternates: {
|
||||
canonical: 'https://www.qrmaster.com/pricing',
|
||||
languages: {
|
||||
'x-default': 'https://www.qrmaster.com/pricing',
|
||||
en: 'https://www.qrmaster.com/pricing',
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
title,
|
||||
description,
|
||||
url: 'https://www.qrmaster.com/pricing',
|
||||
type: 'website',
|
||||
},
|
||||
twitter: {
|
||||
title,
|
||||
description,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export default function PricingPage() {
|
||||
const productData = {
|
||||
name: 'QR Master Plans',
|
||||
description: 'Flexible pricing for dynamic QR codes, bulk generation, branded designs, and analytics.',
|
||||
offers: [
|
||||
{
|
||||
name: 'Free Plan',
|
||||
price: '0',
|
||||
priceCurrency: 'USD',
|
||||
availability: 'https://schema.org/InStock',
|
||||
url: 'https://www.qrmaster.com/pricing',
|
||||
},
|
||||
{
|
||||
name: 'Pro Plan',
|
||||
price: '29',
|
||||
priceCurrency: 'USD',
|
||||
availability: 'https://schema.org/InStock',
|
||||
url: 'https://www.qrmaster.com/pricing',
|
||||
},
|
||||
{
|
||||
name: 'Business Plan',
|
||||
price: '99',
|
||||
priceCurrency: 'USD',
|
||||
availability: 'https://schema.org/InStock',
|
||||
url: 'https://www.qrmaster.com/pricing',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const plans = [
|
||||
{
|
||||
name: 'Free',
|
||||
price: '$0',
|
||||
interval: '/mo',
|
||||
description: 'Perfect for personal projects',
|
||||
features: [
|
||||
'10 Dynamic QR Codes',
|
||||
'Basic Scan Analytics',
|
||||
'Standard QR Design Templates',
|
||||
'Community Support',
|
||||
],
|
||||
cta: 'Get Started',
|
||||
ctaLink: '/signup',
|
||||
popular: false,
|
||||
},
|
||||
{
|
||||
name: 'Pro',
|
||||
price: '$29',
|
||||
interval: '/mo',
|
||||
description: 'For professionals and small teams',
|
||||
features: [
|
||||
'Unlimited Dynamic QR Codes',
|
||||
'Advanced Scan Analytics',
|
||||
'Branded QR Codes with Custom Colors & Logo',
|
||||
'Bulk QR Generation (up to 1,000)',
|
||||
'UTM Campaign Tracking',
|
||||
'Download as SVG/PNG/PDF',
|
||||
'Priority Support',
|
||||
],
|
||||
cta: 'Start Pro Trial',
|
||||
ctaLink: '/signup?plan=pro',
|
||||
popular: true,
|
||||
},
|
||||
{
|
||||
name: 'Business',
|
||||
price: '$99',
|
||||
interval: '/mo',
|
||||
description: 'For agencies and enterprises',
|
||||
features: [
|
||||
'Everything in Pro',
|
||||
'Unlimited Bulk QR Generation',
|
||||
'API Access for Automation',
|
||||
'White-Label Options',
|
||||
'Advanced Security Features',
|
||||
'Custom Integrations',
|
||||
'Dedicated Account Manager',
|
||||
'SLA Guarantee',
|
||||
],
|
||||
cta: 'Contact Sales',
|
||||
ctaLink: '/signup?plan=business',
|
||||
popular: false,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<SeoJsonLd data={productSchema(productData)} />
|
||||
<div className="py-20 bg-gradient-to-b from-gray-50 to-white">
|
||||
<div className="container mx-auto px-4">
|
||||
<div className="text-center mb-16">
|
||||
<h1 className="text-4xl lg:text-5xl font-bold text-gray-900 mb-6">
|
||||
Pricing Plans
|
||||
</h1>
|
||||
<p className="text-xl text-gray-600 max-w-2xl mx-auto">
|
||||
Choose flexible plans for bulk QR generation, analytics, and branded QR codes.
|
||||
Start free, upgrade anytime.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid md:grid-cols-3 gap-8 max-w-6xl mx-auto mb-20">
|
||||
{plans.map((plan, index) => (
|
||||
<Card
|
||||
key={index}
|
||||
className={`relative ${
|
||||
plan.popular
|
||||
? 'border-2 border-blue-600 shadow-xl transform scale-105'
|
||||
: 'border-gray-200'
|
||||
}`}
|
||||
>
|
||||
{plan.popular && (
|
||||
<div className="absolute -top-4 left-1/2 transform -translate-x-1/2">
|
||||
<Badge variant="info" className="px-4 py-1 text-sm font-semibold">
|
||||
Most Popular
|
||||
</Badge>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<CardHeader className="text-center pb-6">
|
||||
<CardTitle className="text-2xl mb-2">{plan.name}</CardTitle>
|
||||
<p className="text-sm text-gray-600 mb-6">{plan.description}</p>
|
||||
|
||||
<div className="flex items-baseline justify-center">
|
||||
<span className="text-5xl font-bold text-gray-900">{plan.price}</span>
|
||||
<span className="text-gray-600 ml-2 text-lg">{plan.interval}</span>
|
||||
</div>
|
||||
</CardHeader>
|
||||
|
||||
<CardContent className="space-y-6">
|
||||
<ul className="space-y-3 mb-8">
|
||||
{plan.features.map((feature, fIndex) => (
|
||||
<li key={fIndex} className="flex items-start space-x-3">
|
||||
<svg
|
||||
className="w-5 h-5 text-green-500 flex-shrink-0 mt-0.5"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 20 20"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
|
||||
clipRule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
<span className="text-gray-700">{feature}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
<Link href={plan.ctaLink}>
|
||||
<Button
|
||||
variant={plan.popular ? 'primary' : 'outline'}
|
||||
className="w-full"
|
||||
size="lg"
|
||||
>
|
||||
{plan.cta}
|
||||
</Button>
|
||||
</Link>
|
||||
</CardContent>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* FAQ Section */}
|
||||
<div className="mt-20 max-w-3xl mx-auto">
|
||||
<h2 className="text-3xl font-bold text-center mb-12 text-gray-900">
|
||||
Pricing FAQs
|
||||
</h2>
|
||||
<div className="space-y-6">
|
||||
<Card>
|
||||
<CardContent className="p-6">
|
||||
<h3 className="font-semibold text-lg mb-3 text-gray-900">
|
||||
Can I cancel my subscription anytime?
|
||||
</h3>
|
||||
<p className="text-gray-700 leading-relaxed">
|
||||
Yes, you can cancel your subscription at any time. Your account will remain active
|
||||
until the end of your current billing period. No refunds for partial months.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardContent className="p-6">
|
||||
<h3 className="font-semibold text-lg mb-3 text-gray-900">
|
||||
What happens to my QR codes if I downgrade?
|
||||
</h3>
|
||||
<p className="text-gray-700 leading-relaxed">
|
||||
All your existing QR codes remain active and functional. You won't be able to create
|
||||
new codes if you exceed your new plan's limit, but existing codes continue working.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardContent className="p-6">
|
||||
<h3 className="font-semibold text-lg mb-3 text-gray-900">
|
||||
Do you offer annual billing?
|
||||
</h3>
|
||||
<p className="text-gray-700 leading-relaxed">
|
||||
Yes! Annual billing saves you 17% compared to monthly billing. Contact sales for
|
||||
custom annual contracts with additional discounts for enterprise customers.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardContent className="p-6">
|
||||
<h3 className="font-semibold text-lg mb-3 text-gray-900">
|
||||
Is there a free trial for paid plans?
|
||||
</h3>
|
||||
<p className="text-gray-700 leading-relaxed">
|
||||
Yes, all paid plans include a 14-day free trial. No credit card required to start.
|
||||
Test all premium features before committing to a paid plan.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
228
src/app/(marketing)/privacy/page.tsx
Normal file
228
src/app/(marketing)/privacy/page.tsx
Normal file
@@ -0,0 +1,228 @@
|
||||
import React from 'react';
|
||||
import Link from 'next/link';
|
||||
|
||||
export const metadata = {
|
||||
title: 'Privacy Policy | QR Master',
|
||||
description: 'Privacy Policy and data protection information for QR Master',
|
||||
};
|
||||
|
||||
export default function PrivacyPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-white py-12">
|
||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl">
|
||||
<div className="mb-8">
|
||||
<Link href="/" className="text-primary-600 hover:text-primary-700 font-medium">
|
||||
← Back to Home
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<h1 className="text-4xl font-bold text-gray-900 mb-4">Privacy Policy</h1>
|
||||
<p className="text-gray-600 mb-8">Last updated: January 2025</p>
|
||||
|
||||
<div className="prose prose-lg max-w-none">
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">1. Introduction</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Welcome to QR Master ("we," "our," or "us"). We respect your privacy and are committed to protecting your personal data.
|
||||
This privacy policy will inform you about how we look after your personal data when you visit our website and use our services,
|
||||
and tell you about your privacy rights and how the law protects you.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">2. Information We Collect</h2>
|
||||
<p className="text-gray-700 mb-4">We collect and process the following data about you:</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">2.1 Information You Provide</h3>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Account Information:</strong> Name, email address, and password when you create an account</li>
|
||||
<li><strong>Payment Information:</strong> Payment details processed securely through Stripe (we do not store credit card information)</li>
|
||||
<li><strong>QR Code Data:</strong> Content, URLs, and customization settings for QR codes you create</li>
|
||||
<li><strong>Profile Information:</strong> Any additional information you choose to provide</li>
|
||||
</ul>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">2.2 Information We Collect Automatically</h3>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Usage Data:</strong> QR code scans, analytics data, and interaction with our services</li>
|
||||
<li><strong>Technical Data:</strong> IP address, browser type, device information, and operating system</li>
|
||||
<li><strong>Analytics Data:</strong> Website usage analytics collected via PostHog (only with your consent)</li>
|
||||
<li><strong>Cookies:</strong> We use cookies to improve your experience (see our Cookie Policy below)</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">3. How We Use Your Information</h2>
|
||||
<p className="text-gray-700 mb-4">We use your personal data for the following purposes:</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>To provide and maintain our QR code generation and analytics services</li>
|
||||
<li>To process your payments and manage your subscription</li>
|
||||
<li>To provide customer support and respond to your inquiries</li>
|
||||
<li>To improve our services and develop new features</li>
|
||||
<li>To detect and prevent fraud and abuse</li>
|
||||
<li>To comply with legal obligations</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">4. Legal Basis for Processing (GDPR)</h2>
|
||||
<p className="text-gray-700 mb-4">We process your personal data under the following legal bases:</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Contract Performance:</strong> Processing necessary to provide our services to you</li>
|
||||
<li><strong>Consent:</strong> Where you have given clear consent for specific purposes</li>
|
||||
<li><strong>Legitimate Interests:</strong> For improving our services, security, and fraud prevention</li>
|
||||
<li><strong>Legal Obligation:</strong> To comply with applicable laws and regulations</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">5. Data Sharing and Third Parties</h2>
|
||||
<p className="text-gray-700 mb-4">We may share your data with the following third parties:</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Stripe:</strong> Payment processing (subject to Stripe's privacy policy)</li>
|
||||
<li><strong>PostHog:</strong> Website analytics platform for tracking user behavior and improving our services (only with your consent, subject to PostHog's privacy policy)</li>
|
||||
<li><strong>Cloud Hosting:</strong> Vercel and database providers for hosting our services</li>
|
||||
<li><strong>Service Providers:</strong> Companies that help us provide our services (under strict confidentiality agreements)</li>
|
||||
<li><strong>Legal Requirements:</strong> When required by law or to protect our rights</li>
|
||||
</ul>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We do not sell your personal data to third parties. PostHog analytics are only activated if you accept analytics cookies,
|
||||
and we use privacy-friendly settings including respecting Do Not Track (DNT) headers.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">6. Data Security</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We implement appropriate technical and organizational measures to protect your personal data, including:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>Secure HTTPS transmission for data in transit</li>
|
||||
<li>Secure password hashing using bcrypt</li>
|
||||
<li>Database security and access controls</li>
|
||||
<li>Cookie-based authentication with HttpOnly flags</li>
|
||||
<li>CSRF protection for sensitive operations</li>
|
||||
<li>Rate limiting to prevent abuse</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">7. Data Retention</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We retain your personal data only for as long as necessary to fulfill the purposes outlined in this policy:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Active Accounts:</strong> Data retained while your account is active</li>
|
||||
<li><strong>Deleted Accounts:</strong> Most data deleted immediately upon account deletion</li>
|
||||
<li><strong>Legal Requirements:</strong> Some data may be retained to comply with legal obligations</li>
|
||||
<li><strong>Analytics Data:</strong> Aggregated, anonymized data may be retained indefinitely</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">8. Your Rights (GDPR)</h2>
|
||||
<p className="text-gray-700 mb-4">Under GDPR, you have the following rights:</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Right to Access:</strong> Request a copy of your personal data</li>
|
||||
<li><strong>Right to Rectification:</strong> Correct inaccurate or incomplete data (edit name in settings)</li>
|
||||
<li><strong>Right to Erasure:</strong> Request deletion of your data (account deletion available in settings)</li>
|
||||
<li><strong>Right to Restriction:</strong> Request limitation of processing</li>
|
||||
<li><strong>Right to Data Portability:</strong> Receive your data in a portable format (available upon request)</li>
|
||||
<li><strong>Right to Object:</strong> Object to processing based on legitimate interests</li>
|
||||
<li><strong>Right to Withdraw Consent:</strong> Withdraw consent at any time</li>
|
||||
</ul>
|
||||
<p className="text-gray-700 mb-4">
|
||||
To exercise these rights, please contact us at{' '}
|
||||
<a href="mailto:privacy@qrmaster.com" className="text-primary-600 hover:text-primary-700">
|
||||
privacy@qrmaster.com
|
||||
</a>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">9. Cookies</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We use cookies to improve your experience on our website. Cookies are small text files stored on your device.
|
||||
</p>
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">Types of Cookies We Use:</h3>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Essential Cookies:</strong> Required for authentication and basic functionality (userId, CSRF token)</li>
|
||||
<li><strong>Preference Cookies:</strong> Remember your settings and cookie consent preferences (cookieConsent)</li>
|
||||
<li><strong>Analytics Cookies:</strong> PostHog analytics cookies to track page views, user behavior, and improve our services (only with your consent)</li>
|
||||
</ul>
|
||||
<p className="text-gray-700 mb-4">
|
||||
You can control cookies through your browser settings and our cookie banner. Analytics cookies are only set if you accept them
|
||||
through our cookie banner. Essential cookies are required for the website to function and cannot be disabled.
|
||||
</p>
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">PostHog Analytics:</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
PostHog is our analytics platform that helps us understand how users interact with our website. When you accept analytics cookies:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>PostHog tracks page views, clicks, and user journeys</li>
|
||||
<li>We collect device type, browser, operating system, and referral source</li>
|
||||
<li>PostHog respects Do Not Track (DNT) browser settings</li>
|
||||
<li>No personally identifiable information (PII) is sent to PostHog without explicit identification</li>
|
||||
<li>Data is processed in accordance with PostHog's privacy policy</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">10. International Data Transfers</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Your data may be transferred to and processed in countries outside the European Economic Area (EEA).
|
||||
We ensure appropriate safeguards are in place, including Standard Contractual Clauses (SCCs) and
|
||||
adequacy decisions by the European Commission.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">11. Children's Privacy</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Our services are not intended for children under 16 years of age. We do not knowingly collect personal data
|
||||
from children. If you believe we have collected data from a child, please contact us immediately.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">12. Changes to This Policy</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We may update this privacy policy from time to time. We will notify you of significant changes through
|
||||
a prominent notice on our website. Continued use of our services after changes constitutes
|
||||
acceptance of the updated policy.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">13. Contact Us</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
If you have any questions about this privacy policy or our data practices, please contact us:
|
||||
</p>
|
||||
<div className="bg-gray-50 p-6 rounded-lg">
|
||||
<p className="text-gray-700 mb-2"><strong>Email:</strong> privacy@qrmaster.com</p>
|
||||
<p className="text-gray-700 mb-2"><strong>Website:</strong> <a href="/" className="text-primary-600 hover:text-primary-700">qrmaster.com</a></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">14. Supervisory Authority</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
If you are located in the EEA and believe we have not addressed your concerns adequately,
|
||||
you have the right to lodge a complaint with your local data protection supervisory authority.
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div className="mt-12 pt-8 border-t border-gray-200">
|
||||
<p className="text-gray-600 text-center">
|
||||
<Link href="/terms" className="text-primary-600 hover:text-primary-700 mr-4">
|
||||
Terms of Service
|
||||
</Link>
|
||||
<Link href="/" className="text-primary-600 hover:text-primary-700">
|
||||
Back to Home
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
304
src/app/(marketing)/terms/page.tsx
Normal file
304
src/app/(marketing)/terms/page.tsx
Normal file
@@ -0,0 +1,304 @@
|
||||
import React from 'react';
|
||||
import Link from 'next/link';
|
||||
|
||||
export const metadata = {
|
||||
title: 'Terms of Service | QR Master',
|
||||
description: 'Terms of Service and usage conditions for QR Master',
|
||||
};
|
||||
|
||||
export default function TermsPage() {
|
||||
return (
|
||||
<div className="min-h-screen bg-white py-12">
|
||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl">
|
||||
<div className="mb-8">
|
||||
<Link href="/" className="text-primary-600 hover:text-primary-700 font-medium">
|
||||
← Back to Home
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<h1 className="text-4xl font-bold text-gray-900 mb-4">Terms of Service</h1>
|
||||
<p className="text-gray-600 mb-8">Last updated: January 2025</p>
|
||||
|
||||
<div className="prose prose-lg max-w-none">
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">1. Agreement to Terms</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
By accessing or using QR Master ("Service"), you agree to be bound by these Terms of Service ("Terms").
|
||||
If you disagree with any part of these terms, you may not access the Service.
|
||||
</p>
|
||||
<p className="text-gray-700 mb-4">
|
||||
These Terms apply to all visitors, users, and others who access or use the Service.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">2. Description of Service</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
QR Master is a SaaS platform that provides:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>QR code generation (static and dynamic)</li>
|
||||
<li>QR code customization and branding</li>
|
||||
<li>Analytics and tracking for dynamic QR codes</li>
|
||||
<li>Bulk QR code creation</li>
|
||||
<li>QR code management dashboard</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">3. Account Registration</h2>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">3.1 Account Creation</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
To use certain features, you must create an account. You agree to:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>Provide accurate, current, and complete information</li>
|
||||
<li>Maintain and update your information to keep it accurate</li>
|
||||
<li>Maintain the security of your password</li>
|
||||
<li>Accept responsibility for all activities under your account</li>
|
||||
<li>Notify us immediately of any unauthorized use</li>
|
||||
</ul>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">3.2 Account Eligibility</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
You must be at least 16 years old to use this Service. By creating an account, you represent that you meet this requirement.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">3.3 Account Termination</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We reserve the right to suspend or terminate your account at any time for violations of these Terms,
|
||||
fraudulent activity, or other reasons at our sole discretion.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">4. Subscription Plans and Payments</h2>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">4.1 Plans</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We offer multiple subscription tiers:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li><strong>Free Plan:</strong> Limited features with usage restrictions</li>
|
||||
<li><strong>Pro Plan:</strong> Enhanced features and higher limits</li>
|
||||
<li><strong>Business Plan:</strong> Full features with maximum limits</li>
|
||||
</ul>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">4.2 Billing</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Paid subscriptions are billed monthly in advance. By subscribing, you agree to:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>Pay all fees associated with your chosen plan</li>
|
||||
<li>Provide current, complete, and accurate billing information</li>
|
||||
<li>Update payment information promptly to avoid service interruption</li>
|
||||
<li>Accept that fees are non-refundable except as required by law</li>
|
||||
</ul>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">4.3 Payment Processing</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
All payments are processed securely through Stripe. We do not store your credit card information.
|
||||
Your payment information is subject to Stripe's Terms of Service and Privacy Policy.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">4.4 Automatic Renewal</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Subscriptions automatically renew at the end of each billing period unless cancelled.
|
||||
You may cancel your subscription at any time through your account settings or the Stripe Customer Portal.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">4.5 Cancellation and Refunds</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
You may cancel your subscription at any time. Cancellation takes effect at the end of the current billing period.
|
||||
No refunds will be provided for partial months or unused services, except as required by applicable law.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">4.6 Price Changes</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We reserve the right to change our pricing. We will provide at least 30 days' notice before any price changes take effect.
|
||||
Continued use of the Service after a price change constitutes acceptance of the new pricing.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">5. Acceptable Use</h2>
|
||||
|
||||
<p className="text-gray-700 mb-4">You agree NOT to use the Service to:</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>Violate any laws or regulations</li>
|
||||
<li>Infringe on intellectual property rights</li>
|
||||
<li>Transmit malware, viruses, or harmful code</li>
|
||||
<li>Engage in phishing, spam, or fraudulent activities</li>
|
||||
<li>Create QR codes linking to illegal, harmful, or malicious content</li>
|
||||
<li>Harass, abuse, or harm others</li>
|
||||
<li>Impersonate any person or entity</li>
|
||||
<li>Interfere with or disrupt the Service</li>
|
||||
<li>Attempt to gain unauthorized access to our systems</li>
|
||||
<li>Use automated tools to access the Service without permission</li>
|
||||
<li>Resell or redistribute the Service without authorization</li>
|
||||
</ul>
|
||||
|
||||
<p className="text-gray-700 mb-4">
|
||||
We reserve the right to investigate and take appropriate legal action against anyone who violates these provisions.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">6. Content and Intellectual Property</h2>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">6.1 Your Content</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
You retain all rights to the content you create using our Service (URLs, text, images in QR codes, etc.).
|
||||
By using our Service, you grant us a limited license to store, process, and display your content solely
|
||||
for the purpose of providing the Service to you.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">6.2 Our Content</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
The Service and its original content (excluding user-generated content), features, and functionality
|
||||
are owned by QR Master and are protected by international copyright, trademark, and other intellectual property laws.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">6.3 Generated QR Codes</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
QR codes you generate using our Service are yours to use as you wish. However, you are responsible for ensuring
|
||||
that the content encoded in QR codes complies with these Terms and applicable laws.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">7. Service Availability and Modifications</h2>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">7.1 Service Availability</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We strive to provide reliable service but do not guarantee uninterrupted access. The Service may be temporarily
|
||||
unavailable due to maintenance, updates, or circumstances beyond our control.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">7.2 Modifications</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We reserve the right to modify, suspend, or discontinue any part of the Service at any time with or without notice.
|
||||
We will not be liable to you or any third party for any modification, suspension, or discontinuation of the Service.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">8. Data and Privacy</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Your use of the Service is also governed by our Privacy Policy. Please review our{' '}
|
||||
<Link href="/privacy" className="text-primary-600 hover:text-primary-700">Privacy Policy</Link>
|
||||
{' '}to understand how we collect, use, and protect your data.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">9. Disclaimers and Limitations of Liability</h2>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">9.1 Disclaimer of Warranties</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">9.2 Limitation of Liability</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY LAW, QR MASTER SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
|
||||
CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS OR REVENUES, WHETHER INCURRED DIRECTLY OR INDIRECTLY,
|
||||
OR ANY LOSS OF DATA, USE, GOODWILL, OR OTHER INTANGIBLE LOSSES.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">9.3 Maximum Liability</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Our total liability to you for all claims arising from your use of the Service shall not exceed the amount
|
||||
you paid us in the 12 months preceding the claim.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">10. Indemnification</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
You agree to indemnify and hold harmless QR Master and its officers, directors, employees, and agents from any
|
||||
claims, damages, losses, liabilities, and expenses (including legal fees) arising from:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>Your use of the Service</li>
|
||||
<li>Your violation of these Terms</li>
|
||||
<li>Your violation of any rights of another party</li>
|
||||
<li>Content you create or share using the Service</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">11. Governing Law and Dispute Resolution</h2>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">11.1 Governing Law</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
These Terms shall be governed by and construed in accordance with the laws of the jurisdiction in which
|
||||
QR Master operates, without regard to conflict of law provisions.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-semibold text-gray-900 mb-3">11.2 Dispute Resolution</h3>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Any disputes arising from these Terms or your use of the Service shall first be attempted to be resolved
|
||||
through good-faith negotiation. If unresolved, disputes may be brought in the courts of competent jurisdiction.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">12. Changes to Terms</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
We reserve the right to modify these Terms at any time. We will provide notice of significant changes by:
|
||||
</p>
|
||||
<ul className="list-disc pl-6 mb-4 text-gray-700 space-y-2">
|
||||
<li>Posting the updated Terms with a new "Last Updated" date</li>
|
||||
<li>Displaying a prominent notice on our website</li>
|
||||
</ul>
|
||||
<p className="text-gray-700 mb-4">
|
||||
Your continued use of the Service after changes take effect constitutes acceptance of the revised Terms.
|
||||
If you do not agree to the new Terms, you must stop using the Service and may cancel your account.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">13. Severability</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
If any provision of these Terms is found to be unenforceable or invalid, that provision will be limited
|
||||
or eliminated to the minimum extent necessary, and the remaining provisions will remain in full force and effect.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">14. Entire Agreement</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
These Terms, together with our Privacy Policy, constitute the entire agreement between you and QR Master
|
||||
regarding the Service and supersede all prior agreements and understandings.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-bold text-gray-900 mb-4">15. Contact Information</h2>
|
||||
<p className="text-gray-700 mb-4">
|
||||
If you have questions about these Terms, please contact us:
|
||||
</p>
|
||||
<div className="bg-gray-50 p-6 rounded-lg">
|
||||
<p className="text-gray-700 mb-2"><strong>Email:</strong> legal@qrmaster.com</p>
|
||||
<p className="text-gray-700 mb-2"><strong>Website:</strong> <a href="/" className="text-primary-600 hover:text-primary-700">qrmaster.com</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div className="mt-12 pt-8 border-t border-gray-200">
|
||||
<p className="text-gray-600 text-center">
|
||||
<Link href="/privacy" className="text-primary-600 hover:text-primary-700 mr-4">
|
||||
Privacy Policy
|
||||
</Link>
|
||||
<Link href="/" className="text-primary-600 hover:text-primary-700">
|
||||
Back to Home
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user