'use client'; import React, { useState, useEffect, useRef } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import StyledQRCode from '@/components/generator/StyledQRCode'; import { renderStyledQRSvg } from '@/lib/render-qr-svg'; import { ModuleShape, EyeFrameShape, EyeBallShape, PRO_MODULE_SHAPES, BUSINESS_MODULE_SHAPES, LOW_COVERAGE_SHAPES, MODULE_SHAPE_LABELS, EYE_FRAME_LABELS, EYE_BALL_LABELS, } from '@/lib/qr-shapes'; import { toPng } from 'html-to-image'; import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/Card'; import { Input } from '@/components/ui/Input'; import { Select } from '@/components/ui/Select'; import { Button } from '@/components/ui/Button'; import { Badge } from '@/components/ui/Badge'; import { calculateContrast, cn } from '@/lib/utils'; import { useTranslation } from '@/hooks/useTranslation'; import { useCsrf } from '@/hooks/useCsrf'; import { showToast } from '@/components/ui/Toast'; import { trackEvent } from '@/components/PostHogProvider'; import { appendRedirectParam, sanitizeRedirectPath } from '@/lib/auth-flow'; import UpgradeModal, { UpgradeReason, ActiveCodeSummary, } from '@/components/app/UpgradeModal'; import { ONBOARDING_DOWNLOAD_COMPLETE_EVENT, ONBOARDING_DOWNLOAD_COMPLETE_KEY, } from '@/lib/revops'; import { Globe, User, MapPin, Phone, FileText, Smartphone, Ticket, Star, HelpCircle, Upload, Barcode as BarcodeIcon } from 'lucide-react'; import Barcode from 'react-barcode'; // Tooltip component for form field help const Tooltip = ({ text }: { text: string }) => (
Uploading...
or drag and drop
PDF, PNG, JPG up to 10MB
> )}How dynamic barcodes work: The barcode encodes a short redirect URL (e.g. qrmaster.net/r/…) that you can update anytime.
📱 Scanner tip: Use a barcode scanner app on iPhone (iOS Camera doesn't auto-open links from barcodes). Android Google Lens / Camera works out of the box. Print min. 5 cm wide for reliable scanning.
Only URL-capable formats available. EAN-13, UPC, and ITF-14 encode numbers only and cannot embed a redirect URL.
{t('create.subtitle')}