QR Architect is a polished QR code studio built with React, TypeScript, Vite, and Tailwind CSS. It lets users generate branded QR codes in real time, preview changes instantly, and export production-ready assets as PNG or SVG.
The app is designed as a focused single-page experience with a modern visual system, live customization controls, dark mode support, and flexible QR payload generation for common use cases like URLs, Wi-Fi credentials, social profiles, contact cards, plain text, and email links.
- Live QR code generation with instant preview updates
- Export support for
SVGandPNG - Multiple QR payload modes:
URLSocialWi-FivCardEmailText
- Visual customization for:
- Size
- Render engine (
svgorcanvas) - Dot color
- Background color
- Dot pattern
- Corner square style
- Corner dot style
- Error correction level
- Center logo upload
- Persistent light/dark theme toggle via
localStorage - Responsive UI optimized for desktop and mobile layouts
- Vercel-ready SPA routing configuration
The interface is split into two main areas:
Studio: input mode selection and QR styling controlsPreview: live QR rendering and asset download actions
This keeps the editing workflow fast and easy to understand for both casual users and production/design use cases.
React 19TypeScriptViteTailwind CSS v4react-router-domqr-code-stylinglucide-react
src/
├── App.tsx
├── main.tsx
├── components/
│ └── ui/
│ └── ThemeToggle.tsx
├── features/
│ └── qr/
│ ├── components/
│ │ ├── QRControls.tsx
│ │ ├── QRDownload.tsx
│ │ ├── QRInput.tsx
│ │ └── QRPreview.tsx
│ ├── hooks/
│ │ └── useQRCode.ts
│ ├── utils/
│ │ └── generateQR.ts
│ ├── index.ts
│ └── types.ts
├── lib/
│ └── qr.ts
├── pages/
│ ├── ErrorPage.tsx
│ └── Home/
│ └── Home.tsx
└── tailwind.css
The QR workflow is organized as a small feature module:
useQRCodemanages the live QR configuration stateQRInputbuilds payload strings for different QR content typesQRControlsupdates visual and rendering optionsQRPreviewcreates and updates the QR instance in the DOMcreateQRInstanceinsrc/lib/qr.tswrapsqr-code-stylingwith the project defaults
When the configuration changes, the preview updates immediately. If the rendering engine changes between svg and canvas, the QR instance is rebuilt to keep output behavior consistent.
Generates a QR code from a website link such as https://example.com.
Builds profile URLs for:
InstagramTwitterGitHubYouTube
Encodes a Wi-Fi connection string in the standard format:
WIFI:S:<ssid>;T:<type>;P:<password>;;
Creates a contact card payload using the VCARD format.
Generates a mailto: QR code.
Encodes plain text or arbitrary short content.
Node.js20+ recommendedpnpmrecommended
pnpm installIf you prefer npm:
npm installpnpm devpnpm buildpnpm previewpnpm lintThis project is ready to deploy as a static single-page application.
The repository already includes vercel.json, which rewrites all routes to index.html for SPA routing.
Typical deployment flow:
pnpm buildThen deploy the generated dist/ output through Vercel.
This project already has a solid front-end foundation:
- Modular feature-based structure
- Typed QR configuration model
- Real-time preview loop
- Clean separation between UI, state, and QR engine creation
- Build tooling suitable for modern frontend deployment
If you want to push it further for a broader production rollout, good next steps would be:
- Add automated tests for payload generation and config updates
- Add form validation for URLs, email addresses, and vCard fields
- Add accessibility review for keyboard navigation and announcements
- Add user-facing error states for invalid uploads or QR generation failures
- Add metadata, Open Graph tags, and analytics if this will be publicly hosted
From package.json:
pnpm dev- start Vite development serverpnpm build- run TypeScript build and create production bundlepnpm preview- preview the built app locallypnpm lint- run ESLint
The UI uses:
- large editorial-style headings
- glassmorphism-inspired panels
- animated gradient accents
- theme-aware surfaces for light and dark mode
That makes the app feel more like a small design tool than a generic form-based utility.
No license file is currently included in this repository. Add one before public distribution if you want to define usage terms clearly.