✨ QR-Genie: Building a Single-Purpose QR Code Tool with Kiro AI
AI for Bharat Hackathon - Week 1: Micro-Tools Submission
📌 The Problem
QR codes are everywhere — restaurant menus, payment apps, event tickets, WiFi sharing. Yet, most QR tools online are either:
- Cluttered with ads and unnecessary features
- Slow and require multiple steps
- Ugly with outdated UI designs
- Limited — generate only, no scanning
I needed a single-purpose micro-tool that does ONE thing elegantly: Generate and scan QR codes instantly with a clean, modern interface.
💡 The Solution: QR-Genie
QR-Genie is a lightweight, beautiful web app that solves this tiny but annoying problem:
✅ Generate QR codes from any text or URL instantly
✅ Scan QR codes using your device camera
✅ Download as PNG with one click
✅ Copy to clipboard for quick sharing
✅ No ads, no clutter — just pure functionality
Live Features
| Feature | Description |
|---|---|
| Generate | Convert any text/URL to QR code |
| Scan | Use camera to decode QR codes |
| Download | Save QR as PNG image |
| Copy | One-click clipboard copy |
| Responsive | Works on desktop & mobile |
🤖 How Kiro Accelerated Development
Kiro is an AI-powered development assistant that dramatically sped up my workflow. Here's how:
1. Project Scaffolding with Specs
Kiro helped me define clear requirements and design specs upfront in the /.kiro directory:
/.kiro
├── specs/
│ └── qr-genie/
│ ├── requirements.md # Feature requirements
│ ├── design.md # UI/UX specifications
│ └── tasks.md # Development tasks
├── context.json # Project context
└── prompts.txt # AI prompts used
2. Rapid Component Generation
I described what I wanted, and Kiro generated the complete React components:
My prompt:
"Create a QR code generator component with textarea input, generate button, and preview area"
Kiro's output: Complete Generator.jsx with state management, error handling, and download functionality.
// Generated by Kiro - Generator.jsx
import { useState } from 'react'
import QRCode from 'qrcode'
function Generator() {
const [text, setText] = useState('https://example.com')
const [dataUrl, setDataUrl] = useState('')
const generate = async () => {
if (!text.trim()) return
const url = await QRCode.toDataURL(text, { margin: 1, width: 400 })
setDataUrl(url)
}
const download = () => {
const a = document.createElement('a')
a.href = dataUrl
a.download = 'qr-genie.png'
a.click()
}
return (
<div className="card-glass p-6">
<h2 className="text-2xl font-bold text-[#31694E] mb-4">Generate QR Code</h2>
<textarea
value={text}
onChange={(e) => setText(e.target.value)}
placeholder="Enter text or URL"
className="w-full h-32 p-3 rounded-lg bg-white/15 text-[#31694E]"
/>
<button onClick={generate} className="button-primary">Generate</button>
{dataUrl && (
<>
<img src={dataUrl} alt="QR Code" className="rounded-lg" />
<button onClick={download} className="button-primary">Download PNG</button>
</>
)}
</div>
)
}
3. UI Theme Customization
When I wanted to change from the default blue-purple theme to a nature-inspired palette, I simply asked Kiro:
My prompt:
"Update the UI to use this color palette: #F0E491, #BBC863, #658C58, #31694E with glassmorphism effects"
Kiro updated:
-
tailwind.config.cjs— Added custom color palette -
index.css— New gradient background, button styles, glassmorphism cards - All components — Updated text colors and borders
4. Camera Scanner Implementation
The camera-based QR scanner was complex, but Kiro handled it:
// Generated by Kiro - Scanner.jsx
import { Html5Qrcode } from 'html5-qrcode'
const startScanner = async () => {
const scanner = new Html5Qrcode('html5qr-app')
await scanner.start(
cameraId,
{ fps: 10, qrbox: 250 },
(decodedText) => {
setResult(decodedText)
scanner.stop()
},
() => {} // Ignore scan errors
)
}
5. Test Generation
Kiro also generated test files for both components:
// Generator.test.jsx - Auto-generated
describe('Generator Component', () => {
it('renders input textarea', () => { ... })
it('generates QR code on button click', () => { ... })
it('downloads QR as PNG', () => { ... })
})
🎨 Design: Nature-Inspired Glassmorphism
Color Palette
| Color | Hex | Usage |
|---|---|---|
| Light Yellow | #F0E491 |
Background gradient start |
| Olive Green | #BBC863 |
Button gradients |
| Natural Green | #658C58 |
Body text, borders |
| Forest Green | #31694E |
Titles, headings |
Glassmorphism CSS
.card-glass {
background: rgba(255, 255, 255, 0.18);
backdrop-filter: blur(16px);
border: 1px solid rgba(101, 140, 88, 0.35);
box-shadow: 0 8px 32px rgba(49, 105, 78, 0.15);
border-radius: 1rem;
}
.button-primary {
background: linear-gradient(135deg, #BBC863 0%, #658C58 100%);
border: 1px solid rgba(101, 140, 88, 0.5);
color: white;
}
.button-primary:hover {
transform: scale(1.05);
box-shadow: 0 4px 20px rgba(101, 140, 88, 0.4);
}
Background Gradient
body {
background: linear-gradient(
135deg,
#F0E491 0%,
#BBC863 35%,
#658C58 65%,
#31694E 100%
);
}
🛠️ Tech Stack
| Technology | Purpose |
|---|---|
| React | UI Components |
| Vite | Build tool & dev server |
| TailwindCSS | Utility-first styling |
| qrcode | QR code generation |
| html5-qrcode | Camera-based scanning |
| Kiro AI | Development acceleration |
📁 Project Structure
qr-genie/
├── .kiro/ # Kiro AI specs & context
│ ├── specs/qr-genie/
│ │ ├── requirements.md
│ │ ├── design.md
│ │ └── tasks.md
│ ├── context.json
│ └── prompts.txt
├── src/
│ ├── components/
│ │ ├── Generator.jsx # QR generator
│ │ ├── Generator.test.jsx
│ │ ├── Scanner.jsx # QR scanner
│ │ └── Scanner.test.jsx
│ ├── App.jsx # Main app
│ ├── index.css # Styles
│ └── main.jsx # Entry point
├── tailwind.config.cjs
├── vite.config.js
└── package.json
🚀 Getting Started
# Clone the repository
git clone https://github.com/abhishek-maurya576/qr-genie.git
# Navigate to project
cd qr-genie
# Install dependencies
npm install
# Start development server
npm run dev
⏱️ Development Timeline
| Task | Time with Kiro | Traditional Estimate |
|---|---|---|
| Project setup | 5 min | 20 min |
| Generator component | 10 min | 45 min |
| Scanner component | 15 min | 60 min |
| UI theming | 10 min | 40 min |
| Testing | 5 min | 30 min |
| Total | ~45 min | ~3 hours |
Kiro reduced development time by ~75%!
🎯 Key Takeaways
-
Kiro specs-driven development — Defining requirements upfront in
/.kirokeeps the project focused - AI-assisted coding — Kiro generates production-ready code, not just boilerplate
- Rapid iteration — Changing the entire color theme took one prompt
- Single-purpose tools win — Focused micro-tools are more useful than bloated alternatives
🔗 Submission Links
- GitHub Repository: github.com/abhishek-maurya576/qr-genie
- Live Demo: qr-genie-henna.vercel.app
👨💻 About Me
Abhishek Maurya
- GitHub: github.com/abhishek-maurya576
- LinkedIn: linkedin.com/in/abhishekm9118
Built with ❤️ for the AI for Bharat Hackathon - Week 1: Micro-Tools
This project demonstrates how Kiro AI can accelerate development of single-purpose web tools while maintaining code quality and modern design standards.
#AIforBharat #Kiro #React #TailwindCSS #WebDev #MicroTools

Top comments (0)