This commit is contained in:
Timo Knuth 2026-03-12 15:54:56 +01:00
parent 3c8e6bd19f
commit d47108d27c
16 changed files with 3826 additions and 5316 deletions

View File

@ -0,0 +1,96 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//QR Master//Reddit Full Calendar//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:QR Master Reddit Full
X-WR-TIMEZONE:Europe/Berlin
BEGIN:VEVENT
UID:reddit-full-20260316-library@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260316T100000Z
DTEND:20260316T103000Z
SUMMARY:Reddit reply library - all 15 templates
DESCRIPTION:1) If someone asks what tool you use:\nIf you need the destination to stay editable later\, thats exactly the problem I built around.\nI built QR Master for this\, so obvious bias:\nhttps://www.qrmaster.net/dynamic-qr-code-generator\nIf you want\, I can also just explain the setup without linking anything.\n\n2) Direct link ask:\nSure. Im building it\, so bias disclosed:\nhttps://www.qrmaster.net/dynamic-qr-code-generator\nMain use case is when something is already printed and the destination changes later.\n\n3) Restaurant/menu:\nIf the menu changes even semi-regularly\, I wouldnt print a static QR.\nhttps://www.qrmaster.net/use-cases/restaurant-menu-qr-codes\n\n4) Flyer/print:\nThe problem usually isnt generating the QR. Its what happens when the page changes after print.\nhttps://www.qrmaster.net/use-cases/flyer-qr-codes\n\n5) Events:\nFor events\, Id mainly optimize for can we update this later without reprinting everything?\nhttps://www.qrmaster.net/use-cases/event-qr-codes\n\n6) Packaging/bulk:\nIf youre dealing with lots of codes\, bulk workflow matters way more than people expect.\nhttps://www.qrmaster.net/bulk-qr-code-generator\n\n7) Analytics:\nYou probably want some scan visibility\, but only the useful stuff.\nhttps://www.qrmaster.net/qr-code-tracking\n\n8) Privacy:\nIf privacy matters\, Id look very closely at how the tracking is handled.\nhttps://www.qrmaster.net/privacy\n\n9) Agencies:\nYeah\, agencies are actually one of the more interesting use cases.\nhttps://www.qrmaster.net/qr-code-for-marketing-campaigns\n\n10) Alternatives:\nIf you need editability after print\, thats where tools start to differ.\nhttps://www.qrmaster.net/dynamic-qr-code-generator\n\n11) Skeptical reply:\nFair skepticism. I built it\, so Im obviously biased:\nhttps://www.qrmaster.net/dynamic-qr-code-generator\n\n12) How set up:\nUse a dynamic destination\, keep the landing page mobile-first\, and make sure you can update it after print.\nhttps://www.qrmaster.net/dynamic-qr-code-generator\n\n13) Recommendations:\nIf the destination might change later\, Id use a dynamic QR setup.\nhttps://www.qrmaster.net/dynamic-qr-code-generator\n\n14) Feedback thread:\nIm building in this space\, so this is partly self-interested\, but yes\, this is a real problem.\nhttps://www.qrmaster.net/dynamic-qr-code-generator\n\n15) Direct relevance:\nI built a tool for this exact issue\, so obvious bias:\nhttps://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260317-post2@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260317T120000Z
DTEND:20260317T124500Z
SUMMARY:r/startups - Post 2
DESCRIPTION:Title: One URL change can ruin 500 flyers. That pain is more real than I expected.\n\nI underestimated how annoying printed mistakes are.\n\nA lot of software problems are reversible.\nPrint problems arent.\n\nIf a landing page changes after flyers\, posters\, inserts\, or menus are already out there\, someone has to:\n- live with a broken flow\n- reprint everything\n- or patch it manually in a messy way\n\nThat sounds minor until you talk to people actually running campaigns or local businesses.\n\nWhat small operational problem ended up being much more expensive than it looked at first?\n\nUse replies: 2\, 4\, 11\, 12\, 15
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260319-post1@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260319T120000Z
DTEND:20260319T124500Z
SUMMARY:r/SaaS - Post 1
DESCRIPTION:Title: I thought QR code software was about generation. The real pain starts after print.\n\nI used to think the value was make a QR code fast.\n\nIts not.\n\nThe painful part starts after something is already printed:\n- the menu changes\n- the event page changes\n- the campaign URL changes\n- someone notices a typo too late\n\nOne small change can turn a stack of flyers into trash.\n\nThat shifted how I think about the whole category.\nThe QR itself is easy.\nThe expensive part is everything around it.\n\nAnyone else building in a category where the simple feature isnt actually where the value is?\n\nUse replies: 1\, 7\, 10\, 11\, 15
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260324-post3@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260324T123000Z
DTEND:20260324T131500Z
SUMMARY:r/smallbusiness - Post 3
DESCRIPTION:Title: Small businesses usually dont need more marketing. They need fewer expensive mistakes.\n\nOne thing I keep noticing:\n\nA lot of owners dont care about having a fancy tool.\nThey care about not wasting money.\n\nWith QR codes\, the common mistakes seem to be:\n- printing static codes for things that change often\n- sending people to ugly mobile pages\n- having no idea whether anyone scanned anything\n- letting one outdated link stay live for weeks\n\nFeels like a lot of marketing problems are actually ops problems.\n\nWhats one small process change that saved your business money this year?\n\nUse replies: 3\, 4\, 10\, 12\, 13
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260326-post4@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260326T120000Z
DTEND:20260326T124500Z
SUMMARY:r/EntrepreneurRideAlong - Post 4
DESCRIPTION:Title: Building in a boring category taught me that boring problems are usually expensive.\n\nIm building around QR codes\, which sounds incredibly boring on paper.\n\nBut boring problems are often the ones people pay to avoid.\n\nIn this case\, its stuff like:\n- reprinting menus\n- fixing outdated flyers\n- updating event info after posters are already out\n- managing lots of QR destinations across campaigns\n\nNobody is emotionally excited about QR codes.\nTheyre emotionally excited about not dealing with preventable mess.\n\nAnyone else building something unsexy that turned out to have very real pain behind it?\n\nUse replies: 2\, 4\, 9\, 11\, 15
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260327-post5@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260327T133000Z
DTEND:20260327T141500Z
SUMMARY:r/SideProject - Post 5
DESCRIPTION:Title: The weird part about building a QR product is that the technical problem isnt the interesting one.\n\nGenerating a QR image is trivial.\n\nWhat turned out to be more interesting:\n- what happens after print\n- whether someone can change the destination later\n- what analytics are actually useful\n- how privacy concerns show up once tracking enters the conversation\n- how bulk workflows matter way more than expected\n\nIts one of those products that looks dumb-simple from the outside and much more operational once you talk to users.\n\nWhat kind of side project looked simple until real use cases started showing up?\n\nUse replies: 1\, 6\, 7\, 8\, 15
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260331-post7@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260331T120000Z
DTEND:20260331T124500Z
SUMMARY:r/AlphaandBetaTesters - Post 7
DESCRIPTION:Title: Looking for feedback from anyone who has used QR codes in restaurants\, events\, print\, or packaging.\n\nIm trying to learn from people who use QR codes in the real world\, not just in theory.\n\nEspecially if youve used them for:\n- menus\n- flyers\n- product packaging\n- event materials\n- WiFi / contact sharing\n- agency campaigns\n\nThings Im curious about:\n- what changes most often after something is printed?\n- whats annoying about current tools?\n- do you actually care about scan analytics?\n- does privacy / GDPR affect vendor choice at all?\n\nIm happy to share what Im building if useful\, but mostly looking for honest feedback from people whove dealt with this firsthand.\n\nUse replies: 3\, 5\, 6\, 8\, 14
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260402-post8@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260402T120000Z
DTEND:20260402T124500Z
SUMMARY:r/RoastMyStartup - Post 8
DESCRIPTION:Title: Roast my positioning: is avoid reprints and broken QR campaigns a strong enough problem?\n\nIm working on a product around dynamic QR codes.\n\nThe positioning Im testing is less make QR codes and more avoid reprints\, outdated links\, and messy campaign management.\n\nTarget users are mostly:\n- small businesses\n- restaurants\n- marketers\n- agencies\n- event / packaging use cases\n\nThe questions Id love roasted:\n- does the pain feel real enough?\n- does this sound too niche?\n- what part sounds generic or weak?\n- what would make you ignore this instantly?\n\nHappy to share the product if the sub is okay with it.\n\nUse replies: 2\, 10\, 11\, 14\, 15
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260403-post6@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260403T123000Z
DTEND:20260403T131500Z
SUMMARY:r/ProductMgmt - Post 6
DESCRIPTION:Title: Users say they want a QR generator. What they actually want is damage control.\n\nA PM lesson I didnt expect:\n\nPeople describe the need as I need a QR code.\nBut what they actually care about is something like:\nI need this thing to not break once its already printed.\n\nThat changes what feels important.\n\nGenerate code sounds like the core feature.\nBut retention/value probably sits closer to:\n- edit later\n- track scans\n- handle multiple codes\n- avoid privacy headaches\n- manage existing campaigns cleanly\n\nHave you seen that mismatch in your own product?\nWhat users ask for first vs. what actually matters later?\n\nUse replies: 1\, 7\, 8\, 10\, 12
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260407-post9@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260407T120000Z
DTEND:20260407T124500Z
SUMMARY:r/startups - Post 9
DESCRIPTION:Title: Im starting to think edit after print is a stronger product promise than track scans.\n\nInteresting thing from early positioning:\n\nI assumed analytics would be the hero feature.\nBut I can change the destination later seems to click faster.\n\nMakes sense in hindsight.\nTracking is nice.\nAvoiding expensive mistakes is urgent.\n\nSo now Im wondering if the better message is:\n- first promise control\n- then introduce analytics\n- then layer in bulk / workflow / privacy\n\nIf youve sold into small businesses or marketers:\nwhat kind of promise gets attention faster\, insight or control?\n\nUse replies: 1\, 7\, 9\, 10\, 15
END:VEVENT
BEGIN:VEVENT
UID:reddit-full-20260409-post10@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260409T123000Z
DTEND:20260409T131500Z
SUMMARY:r/smallbusiness - Post 10
DESCRIPTION:Title: What looks like a tiny print detail can quietly waste a lot of money.\n\nI keep coming back to this:\n\nA broken link on a website is annoying.\nA broken link on printed material is expensive.\n\nBecause now the problem is sitting in:\n- stores\n- restaurants\n- posters\n- packaging\n- tables\n- flyers already handed out\n\nFeels like one of those things that sounds tiny until you count the friction and replacement cost.\n\nWhats a small detail in your business that causes way more downstream cost than people assume?\n\nUse replies: 3\, 4\, 6\, 13\, 15
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,443 @@
# QR Master Reddit Calendar - Full 4 Weeks
Times are in Europe/Berlin.
## Link Map
- Core dynamic angle: `https://www.qrmaster.net/dynamic-qr-code-generator`
- Reprint / waste angle: `https://www.qrmaster.net/reprint-calculator`
- Restaurant / menu: `https://www.qrmaster.net/use-cases/restaurant-menu-qr-codes`
- Flyer / print campaigns: `https://www.qrmaster.net/use-cases/flyer-qr-codes`
- Event use case: `https://www.qrmaster.net/use-cases/event-qr-codes`
- Bulk / packaging: `https://www.qrmaster.net/bulk-qr-code-generator`
- Packaging use case: `https://www.qrmaster.net/use-cases/packaging-qr-codes`
- Tracking / analytics: `https://www.qrmaster.net/qr-code-tracking`
- Privacy: `https://www.qrmaster.net/privacy`
- Campaign workflows: `https://www.qrmaster.net/qr-code-for-marketing-campaigns`
- Main site: `https://www.qrmaster.net/`
## Reply Library
### 1. If someone asks what tool you use
```text
If you need the destination to stay editable later, thats exactly the problem I built around.
I built QR Master for this, so obvious bias:
https://www.qrmaster.net/dynamic-qr-code-generator
If you want, I can also just explain the setup without linking anything.
```
### 2. If someone asks for the link directly
```text
Sure. Im building it, so bias disclosed:
https://www.qrmaster.net/dynamic-qr-code-generator
Main use case is when something is already printed and the destination changes later.
```
### 3. Restaurant / menu threads
```text
If the menu changes even semi-regularly, I wouldnt print a static QR.
I built a tool for exactly that use case, so obvious bias here:
https://www.qrmaster.net/use-cases/restaurant-menu-qr-codes
Even without using mine, Id still recommend a dynamic destination and a very mobile-friendly menu page.
```
### 4. Flyer / print campaign threads
```text
The problem usually isnt generating the QR. Its what happens when the page changes after print.
I built something specifically for that:
https://www.qrmaster.net/use-cases/flyer-qr-codes
If helpful, I can outline the print-safe setup here too.
```
### 5. Event use case
```text
For events, Id mainly optimize for “can we update this later without reprinting everything?”
I built QR Master around that exact headache, so bias here:
https://www.qrmaster.net/use-cases/event-qr-codes
```
### 6. Packaging / bulk
```text
If youre dealing with lots of codes, bulk workflow matters way more than people expect.
I built this with that in mind:
https://www.qrmaster.net/bulk-qr-code-generator
Happy to share what a clean CSV / batch setup usually looks like.
```
### 7. Analytics questions
```text
You probably want some scan visibility, but only the useful stuff.
I built QR Master with that angle in mind, so obvious bias:
https://www.qrmaster.net/qr-code-tracking
Personally I think basic scan data + clean attribution matters more than a flashy dashboard.
```
### 8. Privacy / GDPR
```text
If privacy matters, Id look very closely at how the tracking is handled.
Im building QR Master, so not pretending to be neutral:
https://www.qrmaster.net/privacy
That said, Id ask the same questions to any vendor.
```
### 9. If someone says this would be useful for agencies
```text
Yeah, agencies are actually one of the more interesting use cases.
I built this partly with that workflow in mind:
https://www.qrmaster.net/qr-code-for-marketing-campaigns
Managing multiple destinations gets messy fast otherwise.
```
### 10. If someone asks about alternatives
```text
Depends what you care about.
If you just need a basic static code, almost anything works.
If you need editability after print, thats where tools start to differ.
I built QR Master for that second case:
https://www.qrmaster.net/dynamic-qr-code-generator
```
### 11. If someone is skeptical
```text
Fair skepticism.
I built it, so Im obviously biased:
https://www.qrmaster.net/dynamic-qr-code-generator
If youd rather keep it link-free, Im happy to just explain the tradeoffs here.
```
### 12. If someone asks how you would set this up
```text
Short version:
use a dynamic destination, keep the landing page mobile-first, and make sure you can update it after print.
I built a tool for exactly that flow:
https://www.qrmaster.net/dynamic-qr-code-generator
```
### 13. If someone asks for recommendations
```text
If the destination might change later, Id use a dynamic QR setup.
I built one for that use case, so take this with bias:
https://www.qrmaster.net/dynamic-qr-code-generator
If not mine, Id still choose something that makes post-print edits easy.
```
### 14. Feedback threads
```text
Im building in this space, so this is partly self-interested, but yes, this is a real problem.
Heres what Im working on if useful:
https://www.qrmaster.net/dynamic-qr-code-generator
Would genuinely love blunt feedback more than polite praise.
```
### 15. Direct relevance / no hard sell
```text
I built a tool for this exact issue, so obvious bias:
https://www.qrmaster.net/dynamic-qr-code-generator
No hard sell. Just seemed directly relevant to what you asked.
```
## Schedule
### 2026-03-17 Tuesday, 13:00
- Subreddit: `r/startups`
- Post #2
- Title: `One URL change can ruin 500 flyers. That pain is more real than I expected.`
- Use replies: `2`, `4`, `11`, `12`, `15`
```text
I underestimated how annoying printed mistakes are.
A lot of software problems are reversible.
Print problems arent.
If a landing page changes after flyers, posters, inserts, or menus are already out there, someone has to:
- live with a broken flow
- reprint everything
- or patch it manually in a messy way
That sounds minor until you talk to people actually running campaigns or local businesses.
What small operational problem ended up being much more expensive than it looked at first?
```
### 2026-03-19 Thursday, 13:00
- Subreddit: `r/SaaS`
- Post #1
- Title: `I thought QR code software was about generation. The real pain starts after print.`
- Use replies: `1`, `7`, `10`, `11`, `15`
```text
I used to think the value was “make a QR code fast.”
Its not.
The painful part starts after something is already printed:
- the menu changes
- the event page changes
- the campaign URL changes
- someone notices a typo too late
One small change can turn a stack of flyers into trash.
That shifted how I think about the whole category.
The QR itself is easy.
The expensive part is everything around it.
Anyone else building in a category where the “simple feature” isnt actually where the value is?
```
### 2026-03-24 Tuesday, 13:30
- Subreddit: `r/smallbusiness`
- Post #3
- Title: `Small businesses usually dont need “more marketing.” They need fewer expensive mistakes.`
- Use replies: `3`, `4`, `10`, `12`, `13`
```text
One thing I keep noticing:
A lot of owners dont care about having a fancy tool.
They care about not wasting money.
With QR codes, the common mistakes seem to be:
- printing static codes for things that change often
- sending people to ugly mobile pages
- having no idea whether anyone scanned anything
- letting one outdated link stay live for weeks
Feels like a lot of “marketing problems” are actually ops problems.
Whats one small process change that saved your business money this year?
```
### 2026-03-26 Thursday, 13:00
- Subreddit: `r/EntrepreneurRideAlong`
- Post #4
- Use replies: `2`, `4`, `9`, `11`, `15`
```text
Building in a boring category taught me that boring problems are usually expensive
Im building around QR codes, which sounds incredibly boring on paper.
But boring problems are often the ones people pay to avoid.
In this case, its stuff like:
- reprinting menus
- fixing outdated flyers
- updating event info after posters are already out
- managing lots of QR destinations across campaigns
Nobody is emotionally excited about QR codes.
Theyre emotionally excited about not dealing with preventable mess.
Anyone else building something “unsexy” that turned out to have very real pain behind it?
```
### 2026-03-27 Friday, 14:30
- Subreddit: `r/SideProject`
- Post #5
- Title: `The weird part about building a QR product is that the technical problem isnt the interesting one`
- Use replies: `1`, `6`, `7`, `8`, `15`
```text
Generating a QR image is trivial.
What turned out to be more interesting:
- what happens after print
- whether someone can change the destination later
- what analytics are actually useful
- how privacy concerns show up once tracking enters the conversation
- how bulk workflows matter way more than expected
Its one of those products that looks dumb-simple from the outside and much more operational once you talk to users.
What kind of side project looked simple until real use cases started showing up?
```
### 2026-03-31 Tuesday, 14:00
- Subreddit: `r/AlphaandBetaTesters`
- Post #7
- Use replies: `3`, `5`, `6`, `8`, `14`
```text
Looking for feedback from anyone who has used QR codes in restaurants, events, print, or packaging
Im trying to learn from people who use QR codes in the real world, not just in theory.
Especially if youve used them for:
- menus
- flyers
- product packaging
- event materials
- WiFi / contact sharing
- agency campaigns
Things Im curious about:
- what changes most often after something is printed?
- whats annoying about current tools?
- do you actually care about scan analytics?
- does privacy / GDPR affect vendor choice at all?
Im happy to share what Im building if useful, but mostly looking for honest feedback from people whove dealt with this firsthand.
```
### 2026-04-02 Thursday, 14:00
- Subreddit: `r/RoastMyStartup`
- Post #8
- Use replies: `2`, `10`, `11`, `14`, `15`
```text
Roast my positioning: is “avoid reprints and broken QR campaigns” a strong enough problem?
Im working on a product around dynamic QR codes.
The positioning Im testing is less “make QR codes” and more:
“avoid reprints, outdated links, and messy campaign management.”
Target users are mostly:
- small businesses
- restaurants
- marketers
- agencies
- event / packaging use cases
The questions Id love roasted:
- does the pain feel real enough?
- does this sound too niche?
- what part sounds generic or weak?
- what would make you ignore this instantly?
Happy to share the product if the sub is okay with it.
```
### 2026-04-03 Friday, 14:30
- Subreddit: `r/ProductMgmt`
- Post #6
- Use replies: `1`, `7`, `8`, `10`, `12`
```text
Users say they want a QR generator. What they actually want is damage control.
A PM lesson I didnt expect:
People describe the need as “I need a QR code.”
But what they actually care about is something like:
“I need this thing to not break once its already printed.”
That changes what feels important.
“Generate code” sounds like the core feature.
But retention/value probably sits closer to:
- edit later
- track scans
- handle multiple codes
- avoid privacy headaches
- manage existing campaigns cleanly
Have you seen that mismatch in your own product?
What users ask for first vs. what actually matters later?
```
### 2026-04-07 Tuesday, 14:00
- Subreddit: `r/startups`
- Post #9
- Use replies: `1`, `7`, `9`, `10`, `15`
```text
Im starting to think “edit after print” is a stronger product promise than “track scans”
Interesting thing from early positioning:
I assumed analytics would be the hero feature.
But “I can change the destination later” seems to click faster.
Makes sense in hindsight.
Tracking is nice.
Avoiding expensive mistakes is urgent.
So now Im wondering if the better message is:
- first promise control
- then introduce analytics
- then layer in bulk / workflow / privacy
If youve sold into small businesses or marketers:
what kind of promise gets attention faster, insight or control?
```
### 2026-04-09 Thursday, 14:30
- Subreddit: `r/smallbusiness`
- Post #10
- Use replies: `3`, `4`, `6`, `13`, `15`
```text
What looks like a tiny print detail can quietly waste a lot of money
I keep coming back to this:
A broken link on a website is annoying.
A broken link on printed material is expensive.
Because now the problem is sitting in:
- stores
- restaurants
- posters
- packaging
- tables
- flyers already handed out
Feels like one of those things that sounds tiny until you count the friction and replacement cost.
Whats a “small detail” in your business that causes way more downstream cost than people assume?
```

View File

@ -0,0 +1,168 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//QR Master//Reddit 4 Week Calendar Universal//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:QR Master Reddit Plan
X-WR-TIMEZONE:Europe/Berlin
BEGIN:VEVENT
UID:reddit-20260316-comments-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260316T133000Z
DTEND:20260316T141500Z
SUMMARY:Reddit comment block - r/startups + r/SaaS
DESCRIPTION:Warm up account and build relevant karma. No links unless asked directly.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260317-startups-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260317T120000Z
DTEND:20260317T124500Z
SUMMARY:Reddit post - r/startups
DESCRIPTION:Post: One URL change can ruin 500 flyers. Link only if asked. Use https://www.qrmaster.net/reprint-calculator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260318-startups-replies-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260318T133000Z
DTEND:20260318T141500Z
SUMMARY:Reddit replies - r/startups
DESCRIPTION:Reply to all serious comments from Tuesday. Keep link-free unless asked directly.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260319-saas-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260319T120000Z
DTEND:20260319T124500Z
SUMMARY:Reddit post - r/SaaS
DESCRIPTION:Post: The real pain starts after print. Link only if asked. Use https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260320-saas-comments-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260320T133000Z
DTEND:20260320T141500Z
SUMMARY:Reddit comment block - r/SaaS
DESCRIPTION:Extend the Thursday discussion. Tracking link if needed: https://www.qrmaster.net/qr-code-tracking
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260323-smallbiz-sideproject-comments-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260323T133000Z
DTEND:20260323T141500Z
SUMMARY:Reddit comment block - r/smallbusiness + r/SideProject
DESCRIPTION:Warm both subs before posting this week. No links unless asked directly.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260324-smallbusiness-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260324T123000Z
DTEND:20260324T131500Z
SUMMARY:Reddit post - r/smallbusiness
DESCRIPTION:Post: Most small businesses do not need more tools. Default link if asked: https://www.qrmaster.net/reprint-calculator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260325-smallbusiness-replies-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260325T133000Z
DTEND:20260325T141500Z
SUMMARY:Reddit replies - r/smallbusiness
DESCRIPTION:Answer practical questions from Tuesday. Drop links only when the use case is obvious.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260326-sideproject-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260326T120000Z
DTEND:20260326T124500Z
SUMMARY:Reddit post - r/SideProject
DESCRIPTION:Post: The technical problem is not the interesting one. Core link: https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260327-sideproject-comments-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260327T133000Z
DTEND:20260327T141500Z
SUMMARY:Reddit comment block - r/SideProject
DESCRIPTION:Follow up on Thursday. Bulk link if needed: https://www.qrmaster.net/bulk-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260330-feedback-roast-comments-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260330T133000Z
DTEND:20260330T141500Z
SUMMARY:Reddit comment block - feedback week warm-up
DESCRIPTION:Warm up r/AlphaandBetaTesters and r/RoastMyStartup. No links today.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260331-alpha-beta-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260331T120000Z
DTEND:20260331T124500Z
SUMMARY:Reddit post - r/AlphaandBetaTesters
DESCRIPTION:Feedback request. Put the link in the first comment. Use https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260401-alpha-beta-replies-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260401T133000Z
DTEND:20260401T141500Z
SUMMARY:Reddit replies - r/AlphaandBetaTesters
DESCRIPTION:Answer all serious feedback. Privacy proof only if asked: https://www.qrmaster.net/privacy
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260402-roast-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260402T120000Z
DTEND:20260402T124500Z
SUMMARY:Reddit post - r/RoastMyStartup
DESCRIPTION:Roast my positioning. Direct site link is okay here: https://www.qrmaster.net/
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260403-objection-review-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260403T133000Z
DTEND:20260403T141500Z
SUMMARY:Reddit objection review
DESCRIPTION:Summarize week 3 objections: pricing, niche, privacy, free generator comparison, ICP clarity.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260406-saas-comments-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260406T133000Z
DTEND:20260406T141500Z
SUMMARY:Reddit comment block - r/SaaS
DESCRIPTION:Re-enter with objection-informed comments before the next post. No links unless asked.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260407-saas-post-2-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260407T120000Z
DTEND:20260407T124500Z
SUMMARY:Reddit post - r/SaaS follow-up
DESCRIPTION:Post: edit later vs track scans. Default link if asked: https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260408-saas-replies-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260408T133000Z
DTEND:20260408T141500Z
SUMMARY:Reddit replies - r/SaaS
DESCRIPTION:Work the Tuesday thread hard for comments, not just upvotes.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260409-promo-post-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260409T123000Z
DTEND:20260409T131500Z
SUMMARY:Reddit promo post
DESCRIPTION:Post in r/Plugyourproduct or r/startups_promotion. Direct link okay: https://www.qrmaster.net/
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260410-followup-universal@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260410T133000Z
DTEND:20260410T141500Z
SUMMARY:Reddit follow-up block
DESCRIPTION:Answer all promo-thread comments publicly. No DMs, no pressure.
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,166 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//QR Master//Reddit 4 Week Calendar//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:reddit-20260316-comments@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260316T143000
DTEND:20260316T151500
SUMMARY:Reddit comment block - r/startups + r/SaaS
DESCRIPTION:Goal: warm up account and build relevant karma. No links unless asked directly.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260317-startups-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260317T130000
DTEND:20260317T134500
SUMMARY:Reddit post - r/startups
DESCRIPTION:Title: One URL change can ruin 500 flyers. Link only if asked. Use https://www.qrmaster.net/reprint-calculator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260318-startups-replies@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260318T143000
DTEND:20260318T151500
SUMMARY:Reddit replies - r/startups
DESCRIPTION:Reply to all serious comments from Tuesday. Keep link-free unless asked directly.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260319-saas-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260319T130000
DTEND:20260319T134500
SUMMARY:Reddit post - r/SaaS
DESCRIPTION:Title: The real pain starts after print. Link only if asked. Use https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260320-saas-comments@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260320T143000
DTEND:20260320T151500
SUMMARY:Reddit comment block - r/SaaS
DESCRIPTION:Extend the Thursday discussion. If asked about tracking, use https://www.qrmaster.net/qr-code-tracking
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260323-smallbiz-sideproject-comments@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260323T143000
DTEND:20260323T151500
SUMMARY:Reddit comment block - r/smallbusiness + r/SideProject
DESCRIPTION:Warm both subs before posting this week. No links unless asked directly.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260324-smallbusiness-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260324T133000
DTEND:20260324T141500
SUMMARY:Reddit post - r/smallbusiness
DESCRIPTION:Title: Most small businesses don't need more tools. Default link if asked: https://www.qrmaster.net/reprint-calculator Restaurant link: https://www.qrmaster.net/use-cases/restaurant-menu-qr-codes
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260325-smallbusiness-replies@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260325T143000
DTEND:20260325T151500
SUMMARY:Reddit replies - r/smallbusiness
DESCRIPTION:Answer practical questions from Tuesday. Drop links only when the use case is obvious.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260326-sideproject-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260326T130000
DTEND:20260326T134500
SUMMARY:Reddit post - r/SideProject
DESCRIPTION:Title: The technical problem isn't the interesting one. Core link if asked: https://www.qrmaster.net/dynamic-qr-code-generator Bulk link: https://www.qrmaster.net/bulk-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260327-sideproject-comments@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260327T143000
DTEND:20260327T151500
SUMMARY:Reddit comment block - r/SideProject
DESCRIPTION:Follow up on the Thursday thread. Use bulk link if people ask about scale or packaging.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260330-feedback-roast-comments@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260330T153000
DTEND:20260330T161500
SUMMARY:Reddit comment block - feedback week warm-up
DESCRIPTION:Warm up r/AlphaandBetaTesters and r/RoastMyStartup. No links today.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260331-alpha-beta-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260331T140000
DTEND:20260331T144500
SUMMARY:Reddit post - r/AlphaandBetaTesters
DESCRIPTION:Feedback request. Put the link in the first comment, not the post body. Use https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260401-alpha-beta-replies@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260401T153000
DTEND:20260401T161500
SUMMARY:Reddit replies - r/AlphaandBetaTesters
DESCRIPTION:Answer all serious feedback. Privacy proof only if asked: https://www.qrmaster.net/privacy
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260402-roast-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260402T140000
DTEND:20260402T144500
SUMMARY:Reddit post - r/RoastMyStartup
DESCRIPTION:Roast my positioning. Direct site link is okay here: https://www.qrmaster.net/
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260403-objection-review@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260403T153000
DTEND:20260403T161500
SUMMARY:Reddit objection review
DESCRIPTION:Summarize the week-3 objections: pricing, niche, privacy, free generator comparison, ICP clarity.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260406-saas-comments@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260406T153000
DTEND:20260406T161500
SUMMARY:Reddit comment block - r/SaaS
DESCRIPTION:Re-enter with objection-informed comments before the next post. No links unless asked.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260407-saas-post-2@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260407T140000
DTEND:20260407T144500
SUMMARY:Reddit post - r/SaaS follow-up
DESCRIPTION:Title: edit later vs track scans. Default link if asked: https://www.qrmaster.net/dynamic-qr-code-generator Measurement angle: https://www.qrmaster.net/qr-code-for-marketing-campaigns
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260408-saas-replies@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260408T153000
DTEND:20260408T161500
SUMMARY:Reddit replies - r/SaaS
DESCRIPTION:Work the Tuesday thread hard for comments, not just upvotes.
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260409-promo-post@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260409T143000
DTEND:20260409T151500
SUMMARY:Reddit promo post - r/Plugyourproduct or r/startups_promotion
DESCRIPTION:Direct link in post is okay. Use https://www.qrmaster.net/ Optional focused link: https://www.qrmaster.net/dynamic-qr-code-generator
END:VEVENT
BEGIN:VEVENT
UID:reddit-20260410-followup@qrmaster.net
DTSTAMP:20260312T120000Z
DTSTART:20260410T153000
DTEND:20260410T161500
SUMMARY:Reddit follow-up block
DESCRIPTION:Answer all promo-thread comments publicly. No DMs, no pressure, keep it in-thread.
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,457 @@
# Reddit 4-Week Calendar for QR Master
Times below are in Europe/Berlin local time.
Use clean URLs only. Do not add UTM parameters to public Reddit links.
## Link Map
- Reprint / cost angle: `https://www.qrmaster.net/reprint-calculator`
- Dynamic after print: `https://www.qrmaster.net/dynamic-qr-code-generator`
- Restaurant / menu angle: `https://www.qrmaster.net/use-cases/restaurant-menu-qr-codes`
- Flyer / print attribution: `https://www.qrmaster.net/use-cases/flyer-qr-codes`
- Campaign measurement: `https://www.qrmaster.net/qr-code-for-marketing-campaigns`
- Tracking / analytics: `https://www.qrmaster.net/qr-code-tracking`
- Bulk / packaging: `https://www.qrmaster.net/bulk-qr-code-generator`
- Packaging use case: `https://www.qrmaster.net/use-cases/packaging-qr-codes`
- Privacy proof only: `https://www.qrmaster.net/privacy`
- Full site feedback / promo-only subs: `https://www.qrmaster.net/`
## 2026-03-16 Monday, 14:30
- Type: Comment block
- Subreddits: `r/startups`, `r/SaaS`
- Goal: Warm up account and build relevant karma
- Rule: No links unless someone explicitly asks
- Comment prompt ideas:
- "The expensive part starts after print, not at QR generation."
- "A lot of SMB tools sound boring until one mistake turns printed material into waste."
- "I care less about the QR itself and more about what happens when the destination changes later."
## 2026-03-17 Tuesday, 13:00
- Type: Main post
- Subreddit: `r/startups`
- Title: `One URL change can ruin 500 flyers. That pain is more real than I expected.`
- Body:
```text
I underestimated how annoying printed mistakes are.
A lot of software problems are reversible.
Print problems arent.
If a landing page changes after flyers, posters, inserts, or menus are already out there, someone has to:
- live with a broken flow
- reprint everything
- or patch it manually in a messy way
That sounds minor until you talk to people actually running campaigns or local businesses.
What small operational problem ended up being much more expensive than it looked at first?
```
- Link if asked: `https://www.qrmaster.net/reprint-calculator`
- Possible replies:
```text
Yeah, thats the part I underestimated too. The QR itself is easy. The expensive part is when the destination changes after print.
```
```text
I built around exactly that issue, so obvious bias here:
https://www.qrmaster.net/reprint-calculator
If links are annoying in this thread, I can just explain the workflow here.
```
```text
Static is fine if the URL is truly permanent. The pain starts when someone assumes “permanent” and the campaign changes two weeks later.
```
## 2026-03-18 Wednesday, 14:30
- Type: Reply block
- Subreddits: `r/startups`
- Goal: Reply to every serious comment from the Tuesday post
- Link rule: Only if asked directly
- Safe reply template:
```text
Thats fair. Im building in this space, so obvious bias if I share the product. Happy to keep it link-free and just explain the setup.
```
## 2026-03-19 Thursday, 13:00
- Type: Main post
- Subreddit: `r/SaaS`
- Title: `I thought QR code software was about generation. The real pain starts after print.`
- Body:
```text
I used to think the value was “make a QR code fast.”
Its not.
The painful part starts after something is already printed:
- the menu changes
- the event page changes
- the campaign URL changes
- someone notices a typo too late
One small change can turn a stack of flyers into trash.
That shifted how I think about the whole category.
The QR itself is easy.
The expensive part is everything around it.
Anyone else building in a category where the “simple feature” isnt actually where the value is?
```
- Link if asked: `https://www.qrmaster.net/dynamic-qr-code-generator`
- Possible replies:
```text
Thats exactly how I see it now too. “Generate” sounds like the product, but “edit after print” is where the value starts.
```
```text
I built a tool for that exact use case, so obvious founder bias:
https://www.qrmaster.net/dynamic-qr-code-generator
```
```text
I thought analytics would be the hook. In practice, “dont make me reprint stuff” lands faster.
```
## 2026-03-20 Friday, 14:30
- Type: Comment block
- Subreddits: `r/SaaS`
- Goal: Extend the Thursday discussion without posting a new link
- If someone asks about tracking: `https://www.qrmaster.net/qr-code-tracking`
- Safe tracking reply:
```text
If the goal is proof instead of guesswork, tracking matters. Im building in that space too, so obvious bias:
https://www.qrmaster.net/qr-code-tracking
```
## 2026-03-23 Monday, 14:30
- Type: Comment block
- Subreddits: `r/smallbusiness`, `r/SideProject`
- Goal: Warm both subs before posting this week
- Rule: No link unless asked directly
## 2026-03-24 Tuesday, 13:30
- Type: Main post
- Subreddit: `r/smallbusiness`
- Title: `Most small businesses dont need more tools. They need fewer preventable mistakes.`
- Body:
```text
I keep seeing the same pattern:
Owners usually dont want “more software.”
They want fewer headaches.
With QR codes, the common headaches seem to be:
- printing a code that cant be updated later
- linking to a bad mobile page
- not knowing if anyone scanned it
- having to redo materials because one URL changed
That feels less like a marketing problem and more like an operations problem.
What low-effort process change saved you time or money recently?
```
- Default link if asked: `https://www.qrmaster.net/reprint-calculator`
- Restaurant/menu link if relevant: `https://www.qrmaster.net/use-cases/restaurant-menu-qr-codes`
- Possible replies:
```text
Thats basically how I think about it now too. Most owners dont want a “QR platform.” They want to avoid paying twice for the same print run.
```
```text
If the menu changes regularly, I wouldnt print a static QR. I built around exactly that use case, so bias disclosed:
https://www.qrmaster.net/use-cases/restaurant-menu-qr-codes
```
```text
For a more general cost angle, this is the cleanest page to share:
https://www.qrmaster.net/reprint-calculator
```
## 2026-03-25 Wednesday, 14:30
- Type: Reply block
- Subreddits: `r/smallbusiness`
- Goal: Answer every practical question from the Tuesday post
- Rule: Only drop a link when the use case is obvious
## 2026-03-26 Thursday, 13:00
- Type: Main post
- Subreddit: `r/SideProject`
- Title: `The weird part about building a QR product is that the technical problem isnt the interesting one`
- Body:
```text
Generating a QR image is trivial.
What turned out to be more interesting:
- what happens after print
- whether someone can change the destination later
- what analytics are actually useful
- how privacy concerns show up once tracking enters the conversation
- how bulk workflows matter way more than expected
Its one of those products that looks dumb-simple from the outside and much more operational once you talk to users.
What kind of side project looked simple until real use cases started showing up?
```
- Link if asked: `https://www.qrmaster.net/dynamic-qr-code-generator`
- Bulk link if someone asks about scale: `https://www.qrmaster.net/bulk-qr-code-generator`
- Possible replies:
```text
Exactly. The QR itself is not the product. The post-print control is.
```
```text
I built around that exact issue, so obvious bias:
https://www.qrmaster.net/dynamic-qr-code-generator
```
```text
If the interesting part for you is scale, the bulk side is here:
https://www.qrmaster.net/bulk-qr-code-generator
```
## 2026-03-27 Friday, 14:30
- Type: Comment block
- Subreddits: `r/SideProject`
- Goal: Follow up on the Thursday thread and answer bulk/packaging questions
- Primary link if relevant: `https://www.qrmaster.net/bulk-qr-code-generator`
## 2026-03-30 Monday, 15:30
- Type: Comment block
- Subreddits: `r/AlphaandBetaTesters`, `r/RoastMyStartup`
- Goal: Warm up both communities before feedback posts
- Rule: No links today
## 2026-03-31 Tuesday, 14:00
- Type: Feedback post
- Subreddit: `r/AlphaandBetaTesters`
- Title: `Looking for feedback from anyone who has used QR codes in restaurants, events, print, or packaging`
- Body:
```text
Im trying to learn from people who use QR codes in the real world, not just in theory.
Especially if youve used them for:
- menus
- flyers
- product packaging
- event materials
- WiFi / contact sharing
- agency campaigns
Things Im curious about:
- what changes most often after something is printed?
- whats annoying about current tools?
- do you actually care about scan analytics?
- does privacy / GDPR affect vendor choice at all?
Im happy to share what Im building if useful, but mostly looking for honest feedback from people whove dealt with this firsthand.
```
- Link placement: first comment, not the post body
- First comment link: `https://www.qrmaster.net/dynamic-qr-code-generator`
- Possible replies:
```text
This is the product Im testing the messaging on, so obvious bias:
https://www.qrmaster.net/dynamic-qr-code-generator
```
```text
Thats useful. The thing I keep hearing too is that the problem starts once something is already printed.
```
```text
If the privacy side is the bigger concern, I can share how Im handling that specifically instead of pitching the product.
```
## 2026-04-01 Wednesday, 15:30
- Type: Reply block
- Subreddits: `r/AlphaandBetaTesters`
- Goal: Answer all serious feedback and record objections
- Privacy proof link only if asked: `https://www.qrmaster.net/privacy`
## 2026-04-02 Thursday, 14:00
- Type: Roast post
- Subreddit: `r/RoastMyStartup`
- Title: `Roast my positioning: is “avoid reprints and broken QR campaigns” a strong enough problem?`
- Body:
```text
Im working on a product around dynamic QR codes.
The positioning Im testing is less “make QR codes” and more:
“avoid reprints, outdated links, and messy campaign management.”
Target users are mostly:
- small businesses
- restaurants
- marketers
- agencies
- event / packaging use cases
The questions Id love roasted:
- does the pain feel real enough?
- does this sound too niche?
- what part sounds generic or weak?
- what would make you ignore this instantly?
Happy to share the product if the sub is okay with it.
```
- Link placement: direct link in post is okay
- Link: `https://www.qrmaster.net/`
- Possible replies:
```text
Fair. The goal here is honestly sharper criticism, not a soft launch.
```
```text
Thats a good callout. If the pain still sounds too “small,” then the messaging isnt strong enough yet.
```
```text
Yep, thats the site:
https://www.qrmaster.net/
```
## 2026-04-03 Friday, 15:30
- Type: Objection review
- Goal: Summarize the week-3 feedback into 3 to 5 objections
- Typical objection buckets:
- "why pay for QR codes?"
- "sounds niche"
- "privacy / GDPR?"
- "whats different from free generators?"
- "who is this really for?"
## 2026-04-06 Monday, 15:30
- Type: Comment block
- Subreddits: `r/SaaS`
- Goal: Re-enter with objection-informed comments before the next post
- Rule: No links unless asked
## 2026-04-07 Tuesday, 14:00
- Type: Main post
- Subreddit: `r/SaaS`
- Title: `Im starting to think “edit later” is a stronger product promise than “track scans”`
- Body:
```text
Interesting thing from early positioning:
I assumed analytics would be the hero feature.
But “I can change the destination later” seems to click faster.
Makes sense in hindsight.
Tracking is nice.
Avoiding expensive mistakes is urgent.
So now Im wondering if the better message is:
- first promise control
- then introduce analytics
- then layer in bulk / workflow / privacy
If youve sold into small businesses or marketers:
what kind of promise gets attention faster, insight or control?
```
- Default link if asked: `https://www.qrmaster.net/dynamic-qr-code-generator`
- If the thread becomes measurement-heavy: `https://www.qrmaster.net/qr-code-for-marketing-campaigns`
- Possible replies:
```text
Thats exactly the split Im seeing too. “Insight” sounds nice, “control” feels urgent.
```
```text
I built around that exact use case, so obvious bias:
https://www.qrmaster.net/dynamic-qr-code-generator
```
```text
If the attribution side is the interesting part for you, this is the more relevant page:
https://www.qrmaster.net/qr-code-for-marketing-campaigns
```
## 2026-04-08 Wednesday, 15:30
- Type: Reply block
- Subreddits: `r/SaaS`
- Goal: Work the Tuesday thread hard for comments, not just upvotes
## 2026-04-09 Thursday, 14:30
- Type: Promo post
- Subreddit: `r/Plugyourproduct` or `r/startups_promotion`
- Title: `QR Master: editable QR codes for print campaigns, menus, packaging, and analytics`
- Body:
```text
Built QR Master to solve a simple but expensive problem:
people print QR codes, then the destination changes later.
What it does:
- editable QR destinations after print
- scan tracking
- bulk workflows
- campaign-friendly use cases for menus, flyers, events, and packaging
Looking for honest feedback on the value prop and landing page clarity.
```
- Link placement: direct link in post
- Link: `https://www.qrmaster.net/`
- Possible replies:
```text
Appreciate it. The core promise is really “dont reprint just because the URL changed.”
```
```text
If you want the most direct core page instead of the homepage, this is it:
https://www.qrmaster.net/dynamic-qr-code-generator
```
```text
If youre more interested in measurement than editability, this page is the better entry point:
https://www.qrmaster.net/qr-code-tracking
```
## 2026-04-10 Friday, 15:30
- Type: Follow-up block
- Goal: Answer all promo-thread comments publicly and close the 4-week run
- Rule: No DMs, no pressure, keep every answer in-thread

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
tiktok-developers-site-verification=VwGRbyf2BbBLqUlFrnehtntSEU9Ihiok

View File

@ -6,15 +6,19 @@ import { Card } from '@/components/ui/Card';
import SeoJsonLd from '@/components/SeoJsonLd'; import SeoJsonLd from '@/components/SeoJsonLd';
import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs'; import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs';
import { breadcrumbSchema } from '@/lib/schema'; import { breadcrumbSchema } from '@/lib/schema';
import { AnswerFirstBlock } from '@/components/marketing/AnswerFirstBlock';
import { FAQSection } from '@/components/aeo/FAQSection';
import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection'; import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection';
import { MarketingPageTracker } from '@/components/marketing/MarketingAnalytics'; import { MarketingPageTracker } from '@/components/marketing/MarketingAnalytics';
export const metadata: Metadata = { export const metadata: Metadata = {
title: { title: {
absolute: 'Bulk QR Code Generator - Create Bulk QR Codes from Excel', absolute: 'Bulk QR Code Generator - Create QR Codes from a Spreadsheet',
}, },
description: 'Generate hundreds of QR codes at once from Excel/CSV. Create URLs, vCards, and more in bulk with custom branding. Perfect for products and events.', description:
keywords: 'bulk qr code generator, batch qr code, qr code from excel, csv qr code generator, mass qr code generation, bulk vcard qr code, bulk qr codes free', 'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan. Upload, preview, download as ZIP, or save the batch to your dashboard.',
keywords:
'bulk qr code generator, qr code from excel, csv qr code generator, bulk qr codes, spreadsheet qr generation',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/bulk-qr-code-generator', canonical: 'https://www.qrmaster.net/bulk-qr-code-generator',
languages: { languages: {
@ -23,157 +27,127 @@ export const metadata: Metadata = {
}, },
}, },
openGraph: { openGraph: {
title: 'Bulk QR Code Generator - Create Bulk QR Codes from Excel', title: 'Bulk QR Code Generator - Create QR Codes from a Spreadsheet',
description: 'Generate hundreds of QR codes at once from Excel/CSV. Create URLs, vCards, and more in bulk with custom branding.', description:
'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan.',
url: 'https://www.qrmaster.net/bulk-qr-code-generator', url: 'https://www.qrmaster.net/bulk-qr-code-generator',
type: 'website', type: 'website',
images: ['/og-image.png'], images: ['/og-image.png'],
}, },
twitter: { twitter: {
title: 'Bulk QR Code Generator - Create Bulk QR Codes from Excel', title: 'Bulk QR Code Generator - Create QR Codes from a Spreadsheet',
description: 'Generate hundreds of QR codes at once from Excel/CSV. Create URLs, vCards, and more in bulk with custom branding.', description:
'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan.',
}, },
}; };
export default function BulkQRCodeGeneratorPage() { const featureCards = [
const qrCodeTypes = [
{ {
type: 'URL', title: 'Spreadsheet upload',
icon: '🌐', description:
title: 'Website Links', 'Upload CSV, XLS, or XLSX files and map the title and content columns before generating the batch.',
description: 'Generate QR codes for websites, landing pages, and online content',
format: 'https://example.com/product',
example: 'Product Page,URL,https://example.com/product',
}, },
{ {
type: 'VCARD', title: 'Up to 1,000 rows per upload',
icon: '👤', description:
title: 'Contact Cards', 'The current bulk creation flow limits each upload to 1,000 rows so the batch stays predictable and reviewable.',
description: 'Create vCard QR codes with contact information',
format: 'FirstName,LastName,Email,Phone,Organization,Title',
example: 'John Doe,VCARD,John,Doe,john[at]example.com,+1234567890,Company Inc,CEO',
}, },
{ {
type: 'GEO', title: 'Static QR output',
icon: '📍', description:
title: 'Locations', 'Bulk creation currently generates static QR codes. These codes do not include post-print editing or tracking.',
description: 'Generate location QR codes with GPS coordinates',
format: 'latitude,longitude,label',
example: 'Office Location,GEO,37.7749,-122.4194,Main Office',
}, },
{ {
type: 'PHONE', title: 'ZIP download',
icon: '📞', description:
title: 'Phone Numbers', 'Download the generated QR codes together as a ZIP archive of SVG files for easier handoff or print prep.',
description: 'Create QR codes that dial phone numbers',
format: '+1234567890',
example: 'Support Hotline,PHONE,+1234567890',
}, },
{ {
type: 'TEXT', title: 'Optional dashboard save',
icon: '📝', description:
title: 'Plain Text', 'After generation, you can save the batch into your QR Master dashboard for later management.',
description: 'Generate QR codes with any text content',
format: 'Your text content here',
example: 'Serial Number,TEXT,SN-12345-ABCDE',
}, },
]; {
title: 'Business plan access',
description:
'The current bulk creation workflow is available to Business plan subscribers and is positioned around scale, not single-code creation.',
},
];
const bulkFeatures = [ const inputExamples = [
{ {
icon: '📊', title: 'Website URLs',
title: 'Excel & CSV Import', content: 'https://example.com/product',
description: 'Upload Excel or CSV files to generate hundreds of QR codes in seconds. Simple column mapping.', note: 'Useful for product pages, flyers, support pages, or campaign destinations.',
}, },
{ {
icon: '⚡', title: 'vCard data',
title: 'Fast Processing', content: 'John,Doe,john@example.com,+1234567890,Company,Sales',
description: 'Generate up to 1000 QR codes in under a minute. Optimized for speed and reliability.', note: 'Useful when each spreadsheet row contains contact card data you want encoded into the QR.',
}, },
{ {
icon: '🎨', title: 'Coordinates',
title: 'Unified Branding', content: '37.7749,-122.4194,Main Office',
description: 'Apply your logo, colors, and design to all QR codes at once. Consistent brand identity.', note: 'Useful for location or asset workflows where the content string already contains the coordinates.',
}, },
{ {
icon: '📦', title: 'Plain text',
title: 'Batch Download', content: 'SN-12345-ABCDE',
description: 'Download all QR codes as a ZIP file with custom filenames. Organized and ready to use.', note: 'Useful for serials, labels, and operational identifiers.',
}, },
{ ];
icon: '📈',
title: 'Individual Tracking',
description: 'Track each QR code separately. See which products or locations perform best.',
},
{
icon: '🔄',
title: 'Update in Bulk',
description: 'Edit multiple QR codes at once. Save time when updating campaigns or product info.',
},
];
const useCases = [ const useCases = [
{ {
title: 'Product Labels', title: 'Product labels and inserts',
icon: '🏷️', description:
description: 'Generate unique QR codes for each product SKU. Link to manuals, warranty info, or product pages.', 'Generate large static batches for packaging, inserts, manuals, or support labels when every unit needs a QR code.',
stats: ['1000+ products', 'Individual tracking', 'Custom naming'], points: ['One spreadsheet as input', 'Consistent file naming', 'Printable SVG output'],
}, },
{ {
title: 'Event Tickets', title: 'Event materials',
icon: '🎟️', description:
description: 'Create unique QR codes for every attendee. Enable fast check-ins and track attendance.', 'Produce batches for badges, handouts, booth materials, or attendee resources when a static QR is enough.',
stats: ['Unique per ticket', 'Real-time validation', 'Analytics dashboard'], points: ['Batch generation from one file', 'Preview before generation', 'Download everything together'],
}, },
{ {
title: 'Asset Management', title: 'Inventory and asset labels',
icon: '💼', description:
description: 'Tag equipment, furniture, and assets with unique QR codes. Track location and maintenance.', 'Encode asset IDs, location strings, or internal references without building each QR code one by one.',
stats: ['Equipment tracking', 'Maintenance logs', 'Location history'], points: ['Works with text content', 'Good for offline labeling', 'Save the finished set to the dashboard'],
}, },
{ {
title: 'Marketing Campaigns', title: 'Bulk print preparation',
icon: '📢', description:
description: 'Generate codes for different locations or channels. Track which campaigns perform best.', 'Prepare many QR codes for printers or production teams from one spreadsheet instead of manual single-code exports.',
stats: ['Location-specific', 'Campaign tracking', 'ROI measurement'], points: ['SVG batch download', 'Up to 1,000 rows per upload', 'Business-plan workflow'],
}, },
]; ];
const howItWorks = [ const faqItems = [
{ {
step: 1, question: 'How many QR codes can I generate at once?',
title: 'Prepare Your File', answer:
description: 'Create an Excel or CSV file with your URLs, names, and any custom data.', 'The current bulk creation flow accepts up to 1,000 rows per upload.',
example: 'Product Name | URL | SKU',
}, },
{ {
step: 2, question: 'Are bulk-generated QR codes dynamic or trackable?',
title: 'Upload & Map', answer:
description: 'Upload your file and map columns to QR code fields. Preview before generating.', 'No. The current bulk creation flow generates static QR codes, so those codes do not include post-print editing or tracking.',
example: 'Map columns: Name → Title, URL → Destination',
}, },
{ {
step: 3, question: 'What file formats can I upload?',
title: 'Customize Design', answer:
description: 'Apply logo, colors, and branding to all QR codes at once. Consistent look.', 'The current flow accepts CSV, XLS, and XLSX files.',
example: 'Add logo, set colors, choose frame',
}, },
{ {
step: 4, question: 'Which plan includes bulk QR creation?',
title: 'Generate & Download', answer:
description: 'Click generate and download all QR codes as PNG files in a ZIP archive.', 'Bulk QR creation is currently available in the Business plan.',
example: 'product-001.png, product-002.png, ...',
}, },
]; ];
const fileFormat = [ const softwareSchema = {
{ column: 'name', description: 'QR code title/label', required: true },
{ column: 'url', description: 'Destination URL', required: true },
{ column: 'description', description: 'Optional description', required: false },
{ column: 'tags', description: 'Comma-separated tags', required: false },
];
const softwareSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'SoftwareApplication', '@type': 'SoftwareApplication',
'@id': 'https://www.qrmaster.net/bulk-qr-code-generator#software', '@id': 'https://www.qrmaster.net/bulk-qr-code-generator#software',
@ -182,173 +156,148 @@ export default function BulkQRCodeGeneratorPage() {
operatingSystem: 'Web Browser', operatingSystem: 'Web Browser',
offers: { offers: {
'@type': 'Offer', '@type': 'Offer',
price: '0', price: '29',
priceCurrency: 'USD', priceCurrency: 'EUR',
availability: 'https://schema.org/InStock', availability: 'https://schema.org/InStock',
}, },
description:
description: 'Generate hundreds of QR codes at once from CSV or Excel files. Perfect for products, events, inventory management with custom branding.', 'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan.',
featureList: [ featureList: [
'Excel and CSV file import', 'CSV, XLS, and XLSX upload',
'Generate up to 1000 QR codes at once', 'Up to 1,000 rows per upload',
'Unified branding and design', 'Static QR code generation',
'Batch download as ZIP', 'ZIP download of generated SVG files',
'Individual tracking per code', 'Optional save-to-dashboard step',
'Bulk update capabilities',
'Custom filenames',
'High-resolution exports',
], ],
}; };
const howToSchema = { const howToSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'HowTo', '@type': 'HowTo',
'@id': 'https://www.qrmaster.net/bulk-qr-code-generator#howto', '@id': 'https://www.qrmaster.net/bulk-qr-code-generator#howto',
name: 'How to Generate Bulk QR Codes from Excel', name: 'How to generate bulk QR codes from a spreadsheet',
description: 'Learn how to create hundreds of QR codes from an Excel or CSV file', description:
'Upload a spreadsheet, map the title and content columns, preview the batch, then generate and download the QR codes.',
totalTime: 'PT10M', totalTime: 'PT10M',
step: [ step: [
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 1, position: 1,
name: 'Prepare Excel File', name: 'Prepare the spreadsheet',
text: 'Create an Excel or CSV file with columns for name, URL, and any custom data you need', text: 'Create a CSV, XLS, or XLSX file with one row per QR code and at least title and content data.',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 2, position: 2,
name: 'Upload File', name: 'Upload and map columns',
text: 'Log into QR Master and upload your file to the bulk generator', text: 'Upload the file in the Business-plan bulk creation flow and map the title and content columns.',
url: 'https://www.qrmaster.net/bulk-creation', url: 'https://www.qrmaster.net/bulk-creation',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 3, position: 3,
name: 'Map Columns', name: 'Preview the batch',
text: 'Map your file columns to QR code fields (name, URL, description, etc.)', text: 'Review the detected rows and confirm the content before generating the final QR batch.',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 4, position: 4,
name: 'Customize Design', name: 'Generate and download',
text: 'Apply your logo, brand colors, and design settings to all QR codes at once', text: 'Generate the QR codes, then download the ZIP archive or save the finished set to the dashboard.',
},
{
'@type': 'HowToStep',
position: 5,
name: 'Generate and Download',
text: 'Click generate and download all QR codes as a ZIP file with custom filenames',
}, },
], ],
}; };
const faqSchema = { const faqSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'FAQPage', '@type': 'FAQPage',
'@id': 'https://www.qrmaster.net/bulk-qr-code-generator#faq', '@id': 'https://www.qrmaster.net/bulk-qr-code-generator#faq',
mainEntity: [ mainEntity: faqItems.map((item) => ({
{
'@type': 'Question', '@type': 'Question',
name: 'How many QR codes can I generate at once?', name: item.question,
acceptedAnswer: { acceptedAnswer: {
'@type': 'Answer', '@type': 'Answer',
text: 'With QR Master, you can generate up to 1000 QR codes at once from a CSV or Excel file. For larger volumes, contact our enterprise team.', text: item.answer,
}, },
}, })),
{ };
'@type': 'Question',
name: 'What file formats are supported?',
acceptedAnswer: {
'@type': 'Answer',
text: 'QR Master supports CSV (.csv), Excel (.xlsx, .xls), and other spreadsheet formats. Simply ensure your file has columns for name and destination URL.',
},
},
{
'@type': 'Question',
name: 'Can I apply my branding to all QR codes?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes, you can apply your logo, brand colors, and custom design to all QR codes in your bulk generation. All codes will have consistent branding.',
},
},
{
'@type': 'Question',
name: 'Are bulk generated QR codes trackable?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes, each QR code generated in bulk is individually trackable. You can see scans, locations, and analytics for every single code in your dashboard.',
},
},
],
};
const breadcrumbItems: BreadcrumbItem[] = [ const breadcrumbItems: BreadcrumbItem[] = [
{ name: 'Home', url: '/' }, { name: 'Home', url: '/' },
{ name: 'Bulk QR Code Generator', url: '/bulk-qr-code-generator' }, { name: 'Bulk QR Code Generator', url: '/bulk-qr-code-generator' },
]; ];
const relatedUseCaseLinks = [ const relatedUseCaseLinks = [
{ {
href: '/use-cases/packaging-qr-codes', href: '/use-cases/packaging-qr-codes',
title: 'Packaging QR Codes', title: 'Packaging QR Codes',
description: 'Use bulk generation when packaging, inserts, or labels need measurable scan routing at scale.', description:
'Use bulk generation when labels, inserts, or packaging need many QR codes produced from one spreadsheet.',
ctaLabel: 'Create your packaging QR code', ctaLabel: 'Create your packaging QR code',
}, },
{
href: '/qr-code-for-marketing-campaigns',
title: 'QR Codes for Marketing Campaigns',
description: 'Use bulk generation when campaign placement or print distribution needs multiple trackable codes.',
ctaLabel: 'Create a trackable campaign QR',
},
{ {
href: '/use-cases', href: '/use-cases',
title: 'Explore the use-case hub', title: 'Explore the use-case hub',
description: 'See where bulk creation fits into broader QR workflows and commercial parents.', description:
'See where bulk creation fits into broader QR workflows and adjacent commercial pages.',
ctaLabel: 'Explore QR code use cases', ctaLabel: 'Explore QR code use cases',
}, },
{ {
href: '/custom-qr-code-generator', href: '/custom-qr-code-generator',
title: 'Custom QR Code Generator', title: 'Custom QR Code Generator',
description: 'Pair bulk creation with stronger print presentation when brand consistency matters.', description:
'Use single-code design workflows when you need more styling control than the current bulk flow exposes.',
ctaLabel: 'Design a custom QR code', ctaLabel: 'Design a custom QR code',
}, },
]; {
href: '/pricing',
title: 'Pricing',
description:
'Review which plan includes bulk creation and how it fits alongside dynamic QR and analytics features.',
ctaLabel: 'View pricing',
},
];
export default function BulkQRCodeGeneratorPage() {
return ( return (
<> <>
<SeoJsonLd data={[softwareSchema, howToSchema, faqSchema, breadcrumbSchema(breadcrumbItems)]} /> <SeoJsonLd data={[softwareSchema, howToSchema, faqSchema, breadcrumbSchema(breadcrumbItems)]} />
<MarketingPageTracker pageType="commercial" cluster="bulk-qr" /> <MarketingPageTracker pageType="commercial" cluster="bulk-qr" />
<div className="min-h-screen bg-white"> <div className="min-h-screen bg-white">
{/* Hero Section */}
<section className="relative overflow-hidden bg-gradient-to-br from-green-50 via-white to-blue-50 py-20"> <section className="relative overflow-hidden bg-gradient-to-br from-green-50 via-white to-blue-50 py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<Breadcrumbs items={breadcrumbItems} /> <Breadcrumbs items={breadcrumbItems} />
<div className="grid lg:grid-cols-2 gap-12 items-center"> <div className="grid items-center gap-12 lg:grid-cols-2">
<div className="space-y-8"> <div className="space-y-8">
<div className="inline-flex items-center space-x-2 bg-green-100 text-green-800 px-4 py-2 rounded-full text-sm font-semibold"> <div className="inline-flex items-center rounded-full bg-green-100 px-4 py-2 text-sm font-semibold text-green-800">
<span></span> Business-plan spreadsheet workflow
<span>CSV and Excel workflows</span>
</div> </div>
<h1 className="text-5xl lg:text-6xl font-bold text-gray-900 leading-tight"> <div className="space-y-5">
<h1 className="text-5xl font-bold leading-tight text-gray-900 lg:text-6xl">
Bulk QR Code Generator Bulk QR Code Generator
</h1> </h1>
<p className="text-xl leading-relaxed text-gray-600">
<p className="text-xl text-gray-600 leading-relaxed"> Generate up to 1,000 static QR codes from a CSV or Excel file. Upload,
Create hundreds or thousands of QR codes from Excel or CSV files. Generate URLs, vCards, locations, phone numbers, and text QR codes in bulk. Perfect for products, events, inventory, and marketing campaigns. preview, download the batch as ZIP, or save it into your dashboard.
</p> </p>
</div>
<div className="space-y-3"> <div className="space-y-3">
{[ {[
'Upload Excel or CSV files', 'CSV, XLS, and XLSX upload',
'Generate URLs, vCards, locations & more', 'Up to 1,000 rows per upload',
'Custom branding on all codes', 'Static QR code output',
'Download as organized ZIP', 'ZIP download and optional save to dashboard',
].map((feature, index) => ( ].map((feature) => (
<div key={index} className="flex items-center space-x-3"> <div key={feature} className="flex items-center gap-3">
<div className="flex-shrink-0 w-5 h-5 bg-green-500 rounded-full flex items-center justify-center"> <div className="flex h-5 w-5 items-center justify-center rounded-full bg-green-500">
<svg className="w-3 h-3 text-white" fill="currentColor" viewBox="0 0 20 20"> <svg className="h-3 w-3 text-white" 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" /> <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> </svg>
</div> </div>
<span className="text-gray-700">{feature}</span> <span className="text-gray-700">{feature}</span>
@ -356,308 +305,156 @@ export default function BulkQRCodeGeneratorPage() {
))} ))}
</div> </div>
<div className="flex flex-col sm:flex-row gap-4"> <div className="flex flex-col gap-4 sm:flex-row">
<Link href="/signup"> <Link href="/pricing">
<Button size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> <Button size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
Start Bulk Generation View Business Plan
</Button> </Button>
</Link> </Link>
<Link href="/signup"> <Link href="/signup">
<Button variant="outline" size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> <Button variant="outline" size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
Try Single QR First Sign Up
</Button> </Button>
</Link> </Link>
</div> </div>
</div> </div>
{/* Visual Example */}
<div className="relative"> <div className="relative">
<Card className="p-6 shadow-2xl"> <Card className="p-6 shadow-2xl">
<h3 className="font-semibold text-lg mb-4">Upload Your File</h3> <h3 className="mb-4 text-lg font-semibold">Spreadsheet to ZIP workflow</h3>
<div className="bg-gray-50 border-2 border-dashed border-gray-300 rounded-lg p-8 text-center mb-4"> <div className="mb-4 rounded-lg border-2 border-dashed border-gray-300 bg-gray-50 p-8 text-center">
<div className="text-4xl mb-2">📊</div> <p className="font-medium text-gray-700">products.xlsx</p>
<p className="text-gray-600 font-medium mb-1">products.xlsx</p> <p className="text-sm text-gray-500">Upload, map, preview, generate</p>
<p className="text-sm text-gray-500">Bulk-ready file</p>
</div> </div>
<div className="flex items-center justify-center mb-4"> <div className="mb-4 flex justify-center">
<svg className="w-6 h-6 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <svg className="h-6 w-6 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" /> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" />
</svg> </svg>
</div> </div>
<div className="grid grid-cols-4 gap-2"> <div className="grid grid-cols-4 gap-2">
{[1, 2, 3, 4, 5, 6, 7, 8].map((i) => ( {[1, 2, 3, 4, 5, 6, 7, 8].map((item) => (
<div key={i} className="aspect-square bg-gray-200 rounded flex items-center justify-center text-xs text-gray-500"> <div
QR {i} key={item}
className="flex aspect-square items-center justify-center rounded bg-gray-200 text-xs text-gray-500"
>
QR {item}
</div> </div>
))} ))}
</div> </div>
<p className="text-center text-sm text-gray-600 mt-4"> <p className="mt-4 text-center text-sm text-gray-600">
Continue with a full batch import Designed for bulk static output, not dynamic tracking.
</p> </p>
</Card> </Card>
<div className="absolute -top-4 -right-4 bg-green-500 text-white px-4 py-2 rounded-full text-sm font-semibold shadow-lg"> <div className="absolute -right-4 -top-4 rounded-full bg-green-500 px-4 py-2 text-sm font-semibold text-white shadow-lg">
Bulk import Up to 1,000 rows
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
{/* Supported QR Code Types */} <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<AnswerFirstBlock
whatIsIt="QR Master bulk creation is a spreadsheet-driven Business-plan workflow for generating up to 1,000 static QR codes in one upload. It is useful when you need many printable QR codes quickly, not when you need post-print editing or tracking."
whenToUse={[
'You need many static QR codes from one spreadsheet instead of one-by-one creation',
'You want SVG files downloaded together as a ZIP archive',
'You are preparing labels, inserts, event materials, or other repeatable print batches',
]}
comparison={{
leftTitle: 'Single-code workflow',
rightTitle: 'Bulk workflow',
items: [
{ label: 'Spreadsheet upload', value: true, text: 'Manual entry' },
{ label: 'Batch generation', value: true, text: 'One at a time' },
{ label: 'Output format', value: true, text: 'Single export' },
],
}}
howTo={{
steps: [
'Prepare a CSV, XLS, or XLSX file with one row per QR code',
'Upload the file and map the title and content columns',
'Preview the batch, then generate and download the QR codes as a ZIP or save them to the dashboard',
],
}}
/>
</div>
<div className="container mx-auto max-w-5xl px-4 pb-8 sm:px-6 lg:px-8">
<FAQSection items={faqItems} title="Bulk QR questions" />
</div>
<section className="bg-gray-50 py-20">
<div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mb-16 text-center">
<h2 className="mb-4 text-4xl font-bold text-gray-900">What the current bulk flow supports</h2>
<p className="mx-auto max-w-3xl text-xl text-gray-600">
This section stays aligned with the actual Business-plan bulk creation experience in the app.
</p>
</div>
<div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
{featureCards.map((feature) => (
<Card key={feature.title} className="p-6 transition-shadow hover:shadow-lg">
<h3 className="mb-2 text-xl font-semibold text-gray-900">{feature.title}</h3>
<p className="text-gray-600">{feature.description}</p>
</Card>
))}
</div>
</div>
</section>
<section className="py-20"> <section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-6xl px-4 sm:px-6 lg:px-8">
<div className="text-center mb-16"> <div className="mb-16 text-center">
<h2 className="text-4xl font-bold text-gray-900 mb-4"> <h2 className="mb-4 text-4xl font-bold text-gray-900">Example input content</h2>
Supported QR Code Types <p className="mx-auto max-w-3xl text-xl text-gray-600">
</h2> The current workflow maps a title column and a content column. What you encode in the content field is up to the row data you provide.
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
Generate multiple types of QR codes from your CSV or Excel file. Each type has its own format requirements.
</p> </p>
</div> </div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6"> <div className="grid gap-6 md:grid-cols-2">
{qrCodeTypes.map((qrType, index) => ( {inputExamples.map((example) => (
<Card key={index} className="p-6 hover:shadow-lg transition-shadow"> <Card key={example.title} className="p-6">
<div className="flex items-center space-x-3 mb-4"> <h3 className="mb-3 text-xl font-semibold text-gray-900">{example.title}</h3>
<div className="text-3xl">{qrType.icon}</div> <div className="mb-3 rounded-lg bg-gray-50 p-3">
<div> <code className="break-all text-sm text-gray-800">{example.content}</code>
<h3 className="text-lg font-semibold text-gray-900">
{qrType.title}
</h3>
<span className="text-xs font-mono text-gray-500">{qrType.type}</span>
</div> </div>
</div> <p className="text-gray-600">{example.note}</p>
<p className="text-gray-600 mb-4 text-sm">
{qrType.description}
</p>
<div className="bg-gray-50 rounded-lg p-3 mb-3">
<p className="text-xs font-semibold text-gray-700 mb-1">Format:</p>
<code className="text-xs text-gray-900 break-all">{qrType.format}</code>
</div>
<div className="bg-blue-50 rounded-lg p-3">
<p className="text-xs font-semibold text-blue-700 mb-1">CSV Example:</p>
<code className="text-xs text-blue-900 break-all">{qrType.example}</code>
</div>
</Card>
))}
</div>
<div className="mt-12 bg-gradient-to-r from-blue-50 to-purple-50 rounded-lg p-8">
<h3 className="text-xl font-bold text-gray-900 mb-4 text-center">
📥 CSV/Excel File Format
</h3>
<p className="text-gray-600 text-center mb-6">
Your file must have at least these three columns: <code className="bg-white px-2 py-1 rounded">title</code>, <code className="bg-white px-2 py-1 rounded">contentType</code>, and <code className="bg-white px-2 py-1 rounded">content</code>
</p>
<div className="bg-white rounded-lg p-6 shadow-sm overflow-x-auto">
<table className="w-full text-sm">
<thead>
<tr className="border-b-2 border-gray-300">
<th className="text-left py-2 px-3 font-semibold text-gray-700">title</th>
<th className="text-left py-2 px-3 font-semibold text-gray-700">contentType</th>
<th className="text-left py-2 px-3 font-semibold text-gray-700">content</th>
<th className="text-left py-2 px-3 font-semibold text-gray-700">tags</th>
</tr>
</thead>
<tbody className="font-mono text-xs">
<tr className="border-b border-gray-200">
<td className="py-2 px-3">Product Page</td>
<td className="py-2 px-3">URL</td>
<td className="py-2 px-3">https://example.com/product</td>
<td className="py-2 px-3">product,shop</td>
</tr>
<tr className="border-b border-gray-200">
<td className="py-2 px-3">John Doe</td>
<td className="py-2 px-3">VCARD</td>
<td className="py-2 px-3">John,Doe,john<span>@</span>example.com,+1234567890,Company,CEO</td>
<td className="py-2 px-3">contact</td>
</tr>
<tr className="border-b border-gray-200">
<td className="py-2 px-3">Office Location</td>
<td className="py-2 px-3">GEO</td>
<td className="py-2 px-3">37.7749,-122.4194,Main Office</td>
<td className="py-2 px-3">location</td>
</tr>
<tr className="border-b border-gray-200">
<td className="py-2 px-3">Support Hotline</td>
<td className="py-2 px-3">PHONE</td>
<td className="py-2 px-3">+1234567890</td>
<td className="py-2 px-3">support</td>
</tr>
<tr>
<td className="py-2 px-3">Serial Number</td>
<td className="py-2 px-3">TEXT</td>
<td className="py-2 px-3">SN-12345-ABCDE</td>
<td className="py-2 px-3">product,serial</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</section>
{/* Features */}
<section className="py-20 bg-gray-50">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
Powerful Bulk Generation Features
</h2>
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
Everything you need to create and manage QR codes at scale
</p>
</div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{bulkFeatures.map((feature, index) => (
<Card key={index} className="p-6 hover:shadow-lg transition-shadow">
<div className="text-4xl mb-4">{feature.icon}</div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">
{feature.title}
</h3>
<p className="text-gray-600">
{feature.description}
</p>
</Card> </Card>
))} ))}
</div> </div>
</div> </div>
</section> </section>
<section className="bg-gray-50 py-20">
<div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mb-16 text-center">
{/* How It Works */} <h2 className="mb-4 text-4xl font-bold text-gray-900">Where bulk generation fits best</h2>
<section className="py-20"> <p className="mx-auto max-w-3xl text-xl text-gray-600">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl"> Bulk creation is strongest when one spreadsheet feeds a real print, labeling, or operational workflow.
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
How Bulk QR Generation Works
</h2>
<p className="text-xl text-gray-600">
Simple 4-step process to create hundreds of QR codes
</p> </p>
</div> </div>
<div className="space-y-8"> <div className="grid gap-8 md:grid-cols-2">
{howItWorks.map((item, index) => ( {useCases.map((useCase) => (
<Card key={index} className="p-8"> <Card key={useCase.title} className="p-8">
<div className="flex items-start space-x-6"> <h3 className="mb-3 text-2xl font-bold text-gray-900">{useCase.title}</h3>
<div className="flex-shrink-0 w-16 h-16 bg-primary-100 rounded-full flex items-center justify-center"> <p className="mb-6 text-gray-600">{useCase.description}</p>
<span className="text-2xl font-bold text-primary-600">{item.step}</span>
</div>
<div className="flex-1">
<h3 className="text-2xl font-bold text-gray-900 mb-2">
{item.title}
</h3>
<p className="text-gray-600 mb-3">
{item.description}
</p>
<div className="bg-blue-50 border-l-4 border-blue-500 p-3">
<p className="text-sm text-gray-700 font-mono">
{item.example}
</p>
</div>
</div>
</div>
</Card>
))}
</div>
</div>
</section>
{/* File Format Guide */}
<section className="py-20 bg-gray-50">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-5xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
CSV/Excel File Format
</h2>
<p className="text-xl text-gray-600">
Simple file structure for bulk QR code generation
</p>
</div>
<Card className="overflow-hidden shadow-xl mb-8">
<table className="w-full">
<thead className="bg-gray-100">
<tr>
<th className="px-6 py-4 text-left text-gray-900 font-semibold">Column</th>
<th className="px-6 py-4 text-left text-gray-900 font-semibold">Description</th>
<th className="px-6 py-4 text-center text-gray-900 font-semibold">Required</th>
</tr>
</thead>
<tbody className="divide-y divide-gray-200">
{fileFormat.map((field, index) => (
<tr key={index}>
<td className="px-6 py-4">
<code className="bg-gray-100 px-2 py-1 rounded text-sm font-mono text-gray-900">
{field.column}
</code>
</td>
<td className="px-6 py-4 text-gray-600">{field.description}</td>
<td className="px-6 py-4 text-center">
{field.required ? (
<span className="text-red-500 font-semibold">Yes</span>
) : (
<span className="text-gray-400">No</span>
)}
</td>
</tr>
))}
</tbody>
</table>
</Card>
<Card className="p-6 bg-blue-50 border border-blue-200">
<h4 className="font-semibold text-gray-900 mb-2">Example CSV:</h4>
<pre className="bg-white p-4 rounded border border-blue-200 overflow-x-auto text-sm font-mono">
{`name,url,description,tags
Product A,https://example.com/product-a,Premium Widget,electronics,featured
Product B,https://example.com/product-b,Standard Widget,electronics
Product C,https://example.com/product-c,Budget Widget,electronics,sale`}
</pre>
</Card>
</div>
</section>
{/* Use Cases */}
<section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
Bulk QR Code Use Cases
</h2>
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
Industries and scenarios where bulk generation shines
</p>
</div>
<div className="grid md:grid-cols-2 gap-8">
{useCases.map((useCase, index) => (
<Card key={index} className="p-8">
<div className="flex items-start space-x-4">
<div className="text-4xl">{useCase.icon}</div>
<div className="flex-1">
<h3 className="text-2xl font-bold text-gray-900 mb-3">
{useCase.title}
</h3>
<p className="text-gray-600 mb-4">
{useCase.description}
</p>
<ul className="space-y-2"> <ul className="space-y-2">
{useCase.stats.map((stat, idx) => ( {useCase.points.map((point) => (
<li key={idx} className="flex items-center space-x-2"> <li key={point} className="flex items-center gap-2">
<svg className="w-5 h-5 text-green-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"> <svg className="h-5 w-5 flex-shrink-0 text-green-500" 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" /> <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> </svg>
<span className="text-gray-700">{stat}</span> <span className="text-gray-700">{point}</span>
</li> </li>
))} ))}
</ul> </ul>
</div>
</div>
</Card> </Card>
))} ))}
</div> </div>
@ -667,30 +464,35 @@ Product C,https://example.com/product-c,Budget Widget,electronics,sale`}
<GrowthLinksSection <GrowthLinksSection
eyebrow="Bulk-ready workflows" eyebrow="Bulk-ready workflows"
title="Where bulk QR creation becomes operationally useful" title="Where bulk QR creation becomes operationally useful"
description="Bulk generation is strongest when one spreadsheet feeds a real deployment workflow across campaigns, events, labels, or repeated placements." description="Bulk generation is strongest when one spreadsheet feeds a real deployment workflow across packaging, events, labels, or repeated print runs."
links={relatedUseCaseLinks} links={relatedUseCaseLinks}
pageType="commercial" pageType="commercial"
cluster="bulk-qr" cluster="bulk-qr"
/> />
{/* CTA Section */} <section className="bg-gradient-to-r from-green-600 to-blue-600 py-20 text-white">
<section className="py-20 bg-gradient-to-r from-green-600 to-blue-600 text-white"> <div className="container mx-auto max-w-4xl px-4 text-center sm:px-6 lg:px-8">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl text-center"> <h2 className="mb-6 text-4xl font-bold">Generate bulk QR codes without one-by-one setup</h2>
<h2 className="text-4xl font-bold mb-6"> <p className="mb-8 text-xl text-green-100">
Generate bulk QR codes without one-by-one setup Use the Business-plan bulk flow when you need a large static QR batch from a single spreadsheet.
</h2>
<p className="text-xl mb-8 text-green-100">
Save hours of manual work. Upload your file and get all QR codes ready instantly.
</p> </p>
<div className="flex flex-col sm:flex-row gap-4 justify-center"> <div className="flex flex-col justify-center gap-4 sm:flex-row">
<Link href="/signup"> <Link href="/pricing">
<Button size="lg" variant="secondary" className="text-lg px-8 py-4 w-full sm:w-auto bg-white text-green-600 hover:bg-gray-100"> <Button
Start Bulk Generation size="lg"
variant="secondary"
className="w-full bg-white px-8 py-4 text-lg text-green-600 hover:bg-gray-100 sm:w-auto"
>
View Business Plan
</Button> </Button>
</Link> </Link>
<Link href="/pricing"> <Link href="/signup">
<Button size="lg" variant="outline" className="text-lg px-8 py-4 w-full sm:w-auto border-white text-white hover:bg-white/10"> <Button
View Pricing size="lg"
variant="outline"
className="w-full border-white px-8 py-4 text-lg text-white hover:bg-white/10 sm:w-auto"
>
Sign Up
</Button> </Button>
</Link> </Link>
</div> </div>

View File

@ -5,6 +5,7 @@ import { Card } from '@/components/ui/Card';
import SeoJsonLd from '@/components/SeoJsonLd'; import SeoJsonLd from '@/components/SeoJsonLd';
import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs'; import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs';
import { breadcrumbSchema } from '@/lib/schema'; import { breadcrumbSchema } from '@/lib/schema';
import { FAQSection } from '@/components/aeo/FAQSection';
import { AnswerFirstBlock } from '@/components/marketing/AnswerFirstBlock'; import { AnswerFirstBlock } from '@/components/marketing/AnswerFirstBlock';
import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection'; import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection';
import { MarketingPageTracker, TrackedCtaLink } from '@/components/marketing/MarketingAnalytics'; import { MarketingPageTracker, TrackedCtaLink } from '@/components/marketing/MarketingAnalytics';
@ -14,8 +15,10 @@ export const metadata: Metadata = {
title: { title: {
absolute: 'Dynamic QR Code Generator - Edit Anytime', absolute: 'Dynamic QR Code Generator - Edit Anytime',
}, },
description: 'Create dynamic QR codes that can be edited after printing. Change destination URLs and track scans without reprinting. Free generator with advanced features.', description:
keywords: 'dynamic qr code generator, editable qr code, dynamic qr code, free dynamic qr code, qr code generator dynamic, best dynamic qr code generator', 'Create dynamic QR codes that can be updated after printing. Change destinations later, review scan context, and keep printed materials useful for longer.',
keywords:
'dynamic qr code generator, editable qr code, dynamic qr code, qr code tracking, update qr code after printing',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/dynamic-qr-code-generator', canonical: 'https://www.qrmaster.net/dynamic-qr-code-generator',
languages: { languages: {
@ -25,117 +28,132 @@ export const metadata: Metadata = {
}, },
openGraph: { openGraph: {
title: 'Dynamic QR Code Generator - Edit Anytime', title: 'Dynamic QR Code Generator - Edit Anytime',
description: 'Create dynamic QR codes that can be edited after printing. Change URLs, track scans, and update content anytime.', description:
'Create dynamic QR codes that can be updated after printing. Change destinations later and review scan context from one dashboard.',
url: 'https://www.qrmaster.net/dynamic-qr-code-generator', url: 'https://www.qrmaster.net/dynamic-qr-code-generator',
type: 'website', type: 'website',
images: ['/og-image.png'], images: ['/og-image.png'],
}, },
twitter: { twitter: {
title: 'Dynamic QR Code Generator - Edit Anytime', title: 'Dynamic QR Code Generator - Edit Anytime',
description: 'Create dynamic QR codes that can be edited after printing. Change URLs, track scans, and update content anytime.', description:
'Create dynamic QR codes that can be updated after printing. Change destinations later and review scan context from one dashboard.',
}, },
}; };
export default function DynamicQRCodeGeneratorPage() { const featureCards = [
const dynamicFeatures = [
{ {
icon: '✏️', title: 'Edit destination after print',
title: 'Edit Anytime', description:
description: 'Change the destination URL or content after your QR code is printed. No need to reprint!', 'Keep the same QR image on flyers, menus, packaging, or cards while the destination URL changes later.',
}, },
{ {
icon: '📊', title: 'Review scan context',
title: 'Advanced Analytics', description:
description: 'Track scans, locations, devices, and time patterns. Get insights to optimize your campaigns.', 'See scan information in your dashboard, including time, device, and location context.',
}, },
{ {
icon: '🎨', title: 'Apply brand styling',
title: 'Full Customization', description:
description: 'Add your logo, brand colors, custom shapes, and frames. Make your QR code stand out.', 'Use brand colors and logo styling so the QR code fits printed campaigns and product materials.',
}, },
{ {
icon: '🔄', title: 'Manage active codes',
title: 'A/B Testing', description:
description: 'Test different landing pages without changing the QR code. Optimize conversions easily.', 'Keep active dynamic QR codes in one dashboard instead of tracking versions across design files.',
}, },
{ {
icon: '⏰', title: 'Use one print asset longer',
title: 'Schedule Content', description:
description: 'Set time-based redirects. Show different content based on day, time, or season.', 'Dynamic QR is useful when the printed surface should stay stable even as the linked page changes.',
}, },
{ {
icon: '🌍', title: 'Scale by plan',
title: 'Geo-Targeting', description:
description: 'Redirect users to different pages based on their location. Perfect for multi-region campaigns.', 'The Free plan includes 3 active dynamic QR codes, Pro includes 50, and Business includes 500.',
}, },
]; ];
const staticVsDynamic = [ const staticVsDynamic = [
{ {
feature: 'Edit After Printing', feature: 'Change the destination after print',
static: false, static: false,
dynamic: true, dynamic: true,
}, },
{ {
feature: 'Track Scans', feature: 'Review scan analytics later',
static: false, static: false,
dynamic: true, dynamic: true,
}, },
{ {
feature: 'A/B Testing', feature: 'Keep one print asset across changing campaigns',
static: false, static: false,
dynamic: true, dynamic: true,
}, },
{ {
feature: 'Analytics Dashboard', feature: 'Manage active codes in a dashboard',
static: false, static: false,
dynamic: true, dynamic: true,
}, },
{ {
feature: 'Custom Domain', feature: 'Apply brand styling',
static: false, static: false,
dynamic: true, dynamic: true,
}, },
{ ];
feature: 'Password Protection',
static: false,
dynamic: true,
},
{
feature: 'Expiration Date',
static: false,
dynamic: true,
},
];
const useCases = [ const useCases = [
{ {
title: 'Marketing Campaigns', title: 'Marketing campaigns',
icon: '📢', description:
description: 'Update campaign landing pages without reprinting materials. Test different offers and track performance.', 'Update campaign landing pages without reprinting flyers, posters, inserts, or signs.',
example: 'Print QR codes on billboards, then test different promotions weekly.', example:
'Keep the printed QR live while the destination moves from teaser page to launch page.',
}, },
{ {
title: 'Product Packaging', title: 'Product packaging',
icon: '📦', description:
description: 'Link to product manuals, videos, or registration forms. Update information as products evolve.', 'Link packaging to manuals, onboarding pages, or support content and update that destination as stock stays in circulation.',
example: 'Update software download links without changing packaging.', example: 'Update a software download or setup page without changing the package artwork.',
}, },
{ {
title: 'Business Cards', title: 'Business cards',
icon: '💼', description:
description: 'Keep your contact information current. Update your vCard details without printing new cards.', 'Route contacts to a current landing page, booking page, or profile without printing new cards.',
example: 'Change job title, phone, or email anytime.', example: 'Keep the same printed card while your booking or profile destination changes.',
}, },
{ {
title: 'Restaurant Menus', title: 'Restaurant menus',
icon: '🍽️', description:
description: 'Update menu items, prices, and specials daily. Track which items get the most views.', 'Keep table cards useful when menu links, PDFs, or specials need to change after print.',
example: 'Show daily specials without printing new menus.', example: 'Update a menu destination for seasonal specials without replacing every table card.',
}, },
]; ];
const softwareSchema = { const faqItems = [
{
question: 'What is a dynamic QR code?',
answer:
'A dynamic QR code points to a redirect URL, which lets you change the final destination later without replacing the printed QR image.',
},
{
question: 'Can I change a dynamic QR code after printing?',
answer:
'Yes. You keep the same QR image and update the destination from your dashboard.',
},
{
question: 'How is it different from a static QR code?',
answer:
'A static QR code stores the destination directly in the code and stays fixed. A dynamic QR code routes through QR Master so the destination can be updated and scans can be reviewed later.',
},
{
question: 'How many dynamic QR codes can I create?',
answer:
'The Free plan includes 3 active dynamic QR codes. Pro includes 50 dynamic QR codes, and Business includes 500 dynamic QR codes.',
},
];
const softwareSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'SoftwareApplication', '@type': 'SoftwareApplication',
'@id': 'https://www.qrmaster.net/dynamic-qr-code-generator#software', '@id': 'https://www.qrmaster.net/dynamic-qr-code-generator#software',
@ -145,99 +163,77 @@ export default function DynamicQRCodeGeneratorPage() {
offers: { offers: {
'@type': 'Offer', '@type': 'Offer',
price: '0', price: '0',
priceCurrency: 'USD', priceCurrency: 'EUR',
availability: 'https://schema.org/InStock', availability: 'https://schema.org/InStock',
}, },
description:
description: 'Create dynamic QR codes that can be edited after printing. Change destination URLs, track scans, and update content without reprinting.', 'Create dynamic QR codes that can be updated after printing. Change destinations later and review scan context from one dashboard.',
featureList: [ featureList: [
'Edit QR codes after printing', 'Edit QR code destinations after printing',
'Real-time scan tracking', 'Review scan analytics in the dashboard',
'A/B testing capabilities', 'Apply brand styling with colors and logo',
'Custom branding and design', 'Manage active dynamic QR codes in one place',
'Geo-targeting options', 'Scale from 3 active dynamic QR codes on Free to 50 on Pro and 500 on Business',
'Scheduled content updates',
'Password protection',
'Expiration dates',
], ],
}; };
const howToSchema = { const howToSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'HowTo', '@type': 'HowTo',
'@id': 'https://www.qrmaster.net/dynamic-qr-code-generator#howto', '@id': 'https://www.qrmaster.net/dynamic-qr-code-generator#howto',
name: 'How to Create a Dynamic QR Code', name: 'How to create a dynamic QR code',
description: 'Learn how to create editable QR codes that can be updated after printing', description: 'Create a dynamic QR code and update the destination later without replacing the printed QR image.',
totalTime: 'PT3M', totalTime: 'PT3M',
step: [ step: [
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 1, position: 1,
name: 'Sign Up Free', name: 'Create an account',
text: 'Create a free QR Master account to start generating dynamic QR codes', text: 'Create a QR Master account and choose a dynamic QR workflow.',
url: 'https://www.qrmaster.net/signup', url: 'https://www.qrmaster.net/signup',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 2, position: 2,
name: 'Generate QR Code', name: 'Enter your destination',
text: 'Enter your destination URL and customize the design with your branding', text: 'Add the destination URL and style the QR code for print or digital use.',
url: 'https://www.qrmaster.net/signup', url: 'https://www.qrmaster.net/signup',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 3, position: 3,
name: 'Download and Print', name: 'Download and deploy',
text: 'Download your QR code in high resolution and add it to your marketing materials', text: 'Download the QR code and place it on printed or digital materials.',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 4, position: 4,
name: 'Update Anytime', name: 'Update later',
text: 'Log into your dashboard to change the destination URL whenever needed - no reprinting required', text: 'Change the destination from your dashboard without replacing the QR image.',
url: 'https://www.qrmaster.net/dashboard',
}, },
], ],
}; };
const faqSchema = { const faqSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'FAQPage', '@type': 'FAQPage',
'@id': 'https://www.qrmaster.net/dynamic-qr-code-generator#faq', '@id': 'https://www.qrmaster.net/dynamic-qr-code-generator#faq',
mainEntity: [ mainEntity: faqItems.map((item) => ({
{
'@type': 'Question', '@type': 'Question',
name: 'What is a dynamic QR code?', name: item.question,
acceptedAnswer: { acceptedAnswer: {
'@type': 'Answer', '@type': 'Answer',
text: 'A dynamic QR code is an editable QR code that redirects through a short URL, allowing you to change the destination without reprinting the code. Unlike static QR codes, dynamic codes can be tracked and updated anytime.', text: item.answer,
}, },
}, })),
{ };
'@type': 'Question',
name: 'Can I edit a QR code after printing?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes, with dynamic QR codes you can edit the destination URL anytime after printing. The QR code image stays the same, but the content it points to can be changed from your dashboard.',
},
},
{
'@type': 'Question',
name: 'Is dynamic QR code generator free?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes, QR Master offers a free plan for creating dynamic QR codes with basic tracking features. Premium plans include advanced analytics and customization options.',
},
},
],
};
const breadcrumbItems: BreadcrumbItem[] = [ const breadcrumbItems: BreadcrumbItem[] = [
{ name: 'Home', url: '/' }, { name: 'Home', url: '/' },
{ name: 'Dynamic QR Code Generator', url: '/dynamic-qr-code-generator' }, { name: 'Dynamic QR Code Generator', url: '/dynamic-qr-code-generator' },
]; ];
const relatedUseCaseLinks = [ const relatedUseCaseLinks = [
{ {
href: featuredUseCases[0].href, href: featuredUseCases[0].href,
title: featuredUseCases[0].title, title: featuredUseCases[0].title,
@ -247,7 +243,8 @@ export default function DynamicQRCodeGeneratorPage() {
{ {
href: '/use-cases/payment-qr-codes', href: '/use-cases/payment-qr-codes',
title: 'Payment QR Codes', title: 'Payment QR Codes',
description: 'Use one printed payment prompt that stays useful even when the checkout or provider path changes.', description:
'Use one printed payment prompt that stays useful even when the checkout or provider path changes.',
ctaLabel: 'Create your payment QR code', ctaLabel: 'Create your payment QR code',
}, },
{ {
@ -259,46 +256,52 @@ export default function DynamicQRCodeGeneratorPage() {
{ {
href: '/use-cases', href: '/use-cases',
title: 'Explore the use-case hub', title: 'Explore the use-case hub',
description: 'See how dynamic QR workflows connect to commercial pages, tools, and support content.', description:
'See how dynamic QR workflows connect to commercial pages, tools, and support content.',
ctaLabel: 'Explore QR code use cases', ctaLabel: 'Explore QR code use cases',
}, },
]; ];
export default function DynamicQRCodeGeneratorPage() {
return ( return (
<> <>
<SeoJsonLd data={[softwareSchema, howToSchema, faqSchema, breadcrumbSchema(breadcrumbItems)]} /> <SeoJsonLd data={[softwareSchema, howToSchema, faqSchema, breadcrumbSchema(breadcrumbItems)]} />
<MarketingPageTracker pageType="commercial" cluster="dynamic-qr" /> <MarketingPageTracker pageType="commercial" cluster="dynamic-qr" />
<div className="min-h-screen bg-white"> <div className="min-h-screen bg-white">
{/* Hero Section */}
<section className="relative overflow-hidden bg-gradient-to-br from-purple-50 via-white to-blue-50 py-20"> <section className="relative overflow-hidden bg-gradient-to-br from-purple-50 via-white to-blue-50 py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<Breadcrumbs items={breadcrumbItems} /> <Breadcrumbs items={breadcrumbItems} />
<div className="grid lg:grid-cols-2 gap-12 items-center"> <div className="grid items-center gap-12 lg:grid-cols-2">
<div className="space-y-8"> <div className="space-y-8">
<div className="inline-flex items-center space-x-2 bg-purple-100 text-purple-800 px-4 py-2 rounded-full text-sm font-semibold"> <div className="inline-flex items-center rounded-full bg-purple-100 px-4 py-2 text-sm font-semibold text-purple-800">
<span></span> Edit after printing
<span>Edit After Printing</span>
</div> </div>
<h1 className="text-5xl lg:text-6xl font-bold text-gray-900 leading-tight"> <div className="space-y-5">
<h1 className="text-5xl font-bold leading-tight text-gray-900 lg:text-6xl">
Dynamic QR Code Generator Dynamic QR Code Generator
</h1> </h1>
<p className="text-xl leading-relaxed text-gray-600">
<p className="text-xl text-gray-600 leading-relaxed"> Create QR codes you can update after printing. Change the destination later,
Create QR codes you can edit anytime - even after printing. Change URLs, track scans, and update content without reprinting. The smart choice for businesses. review scan context, and keep printed materials useful for longer.
</p> </p>
</div>
<div className="space-y-3"> <div className="space-y-3">
{[ {[
'Edit content after printing', 'Change the destination without replacing the printed QR image',
'Track scans and analytics', 'Review scan context in one dashboard',
'A/B test without reprinting', 'Apply logo and brand colors',
'Custom branding and design', 'Scale from 3 active dynamic QR codes on Free to 50 on Pro and 500 on Business',
].map((feature, index) => ( ].map((feature) => (
<div key={index} className="flex items-center space-x-3"> <div key={feature} className="flex items-center gap-3">
<div className="flex-shrink-0 w-5 h-5 bg-green-500 rounded-full flex items-center justify-center"> <div className="flex h-5 w-5 items-center justify-center rounded-full bg-green-500">
<svg className="w-3 h-3 text-white" fill="currentColor" viewBox="0 0 20 20"> <svg className="h-3 w-3 text-white" 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" /> <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> </svg>
</div> </div>
<span className="text-gray-700">{feature}</span> <span className="text-gray-700">{feature}</span>
@ -306,128 +309,135 @@ export default function DynamicQRCodeGeneratorPage() {
))} ))}
</div> </div>
<div className="flex flex-col sm:flex-row gap-4"> <div className="flex flex-col gap-4 sm:flex-row">
<TrackedCtaLink href="/signup" ctaLabel="Create Dynamic QR Code" ctaLocation="hero_primary" pageType="commercial" cluster="dynamic-qr"> <TrackedCtaLink
<Button size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> href="/signup"
ctaLabel="Create Dynamic QR Code"
ctaLocation="hero_primary"
pageType="commercial"
cluster="dynamic-qr"
>
<Button size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
Create Dynamic QR Code Create Dynamic QR Code
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
<TrackedCtaLink href="/pricing" ctaLabel="View Pricing" ctaLocation="hero_secondary" pageType="commercial" cluster="dynamic-qr"> <TrackedCtaLink
<Button variant="outline" size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> href="/pricing"
ctaLabel="View Pricing"
ctaLocation="hero_secondary"
pageType="commercial"
cluster="dynamic-qr"
>
<Button variant="outline" size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
View Pricing View Pricing
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
</div> </div>
</div> </div>
{/* Visual Demo */}
<div className="relative"> <div className="relative">
<Card className="p-8 shadow-2xl"> <Card className="p-8 shadow-2xl">
<div className="text-center mb-6"> <div className="mb-6 text-center">
<div className="inline-block bg-gray-200 rounded-lg p-8"> <div className="inline-block rounded-lg bg-gray-200 p-8">
<div className="w-48 h-48 bg-black rounded-lg flex items-center justify-center"> <div className="flex h-48 w-48 items-center justify-center rounded-lg bg-black">
<span className="text-white text-sm font-mono">QR Code</span> <span className="font-mono text-sm text-white">QR Code</span>
</div> </div>
</div> </div>
</div> </div>
<div className="space-y-3 text-sm"> <div className="space-y-3 text-sm">
<div className="flex items-center justify-between p-3 bg-blue-50 rounded-lg"> <div className="flex items-center justify-between rounded-lg bg-blue-50 p-3">
<span className="text-gray-700">Current URL:</span> <span className="text-gray-700">Current destination</span>
<span className="text-blue-600 font-mono">summer-sale.com</span> <span className="font-mono text-blue-600">launch.example</span>
</div> </div>
<div className="flex items-center justify-center"> <div className="flex justify-center">
<svg className="w-6 h-6 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <svg className="h-6 w-6 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" /> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" />
</svg> </svg>
</div> </div>
<div className="flex items-center justify-between p-3 bg-green-50 rounded-lg"> <div className="flex items-center justify-between rounded-lg bg-green-50 p-3">
<span className="text-gray-700">Updated URL:</span> <span className="text-gray-700">Updated destination</span>
<span className="text-green-600 font-mono">fall-sale.com</span> <span className="font-mono text-green-600">menu.example</span>
</div> </div>
</div> </div>
<p className="text-center text-sm text-gray-600 mt-4"> <p className="mt-4 text-center text-sm text-gray-600">
Same QR code, different destination! Same QR image, different destination later.
</p> </p>
</Card> </Card>
<div className="absolute -top-4 -right-4 bg-purple-500 text-white px-4 py-2 rounded-full text-sm font-semibold shadow-lg"> <div className="absolute -right-4 -top-4 rounded-full bg-purple-500 px-4 py-2 text-sm font-semibold text-white shadow-lg">
No Reprint Needed! No reprint needed
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
{/* Answer First Block (SEO/AEO) */} <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<AnswerFirstBlock <AnswerFirstBlock
whatIsIt="A dynamic QR code points to a redirect URL, allowing you to change the final destination anytime without reprinting. Unlike static codes, it enables real-time scan tracking (location, device, time) and advanced campaign management." whatIsIt="A dynamic QR code routes through QR Master before sending the scanner to the final destination. That makes it useful when you need to update the destination later and review scan context without replacing the printed QR code."
whenToUse={[ whenToUse={[
"Update destination URLs instantly (e.g., for menus, promotions, or out-of-stock items)", 'You expect menu links, campaign landing pages, or packaging destinations to change after print',
"Track precise scan metrics to measure campaign ROI (location, device type, unique scans)", 'You want scan analytics such as device, time, and location context in one dashboard',
"Keep the QR pattern simple and scannable, even for long, complex URLs" 'You need one reusable QR across flyers, posters, table cards, packaging, or business cards',
]} ]}
comparison={{ comparison={{
leftTitle: "Static QR", leftTitle: 'Static QR',
rightTitle: "Dynamic QR", rightTitle: 'Dynamic QR',
items: [ items: [
{ label: "Target URL", value: true, text: "Fixed" }, { label: 'Destination changes after print', value: true, text: 'Reprint required' },
{ label: "Scan Tracking", value: true, text: "None" }, { label: 'Scan analytics', value: true, text: 'Not available' },
{ label: "Printing", value: true, text: "One-time" } { label: 'Reusable across changing campaigns', value: true, text: 'Limited' },
] ],
}} }}
howTo={{ howTo={{
steps: [ steps: [
"Sign up for a free QR Master account (required for management)", 'Create a QR Master account and choose a dynamic QR workflow',
"Select 'Dynamic URL' and enter your destination link", 'Enter the destination, then download the QR code for print or digital use',
"Download the QR code and print it. Log in to dashboard to update the target URL anytime." 'Update the destination later from your dashboard without replacing the QR image',
] ],
}} }}
/> />
</div> </div>
{/* Static vs Dynamic */} <div className="container mx-auto max-w-5xl px-4 pb-8 sm:px-6 lg:px-8">
<section className="py-20 bg-gray-50"> <FAQSection items={faqItems} title="Dynamic QR code questions" />
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl"> </div>
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4"> <section className="bg-gray-50 py-20">
Dynamic vs Static QR Codes <div className="container mx-auto max-w-6xl px-4 sm:px-6 lg:px-8">
</h2> <div className="mb-16 text-center">
<p className="text-xl text-gray-600 max-w-3xl mx-auto"> <h2 className="mb-4 text-4xl font-bold text-gray-900">Dynamic vs static QR codes</h2>
Understand why dynamic QR codes are the smart choice for businesses <p className="mx-auto max-w-3xl text-xl text-gray-600">
Dynamic QR is the better fit when the destination may change after the printed code is already in use.
</p> </p>
</div> </div>
<Card className="overflow-hidden shadow-xl"> <Card className="overflow-hidden shadow-xl">
<div className="grid md:grid-cols-3"> <div className="grid md:grid-cols-3">
<div className="p-6 bg-white"> <div className="bg-white p-6">
<h3 className="font-semibold text-lg mb-4">Feature</h3> <h3 className="mb-4 text-lg font-semibold">Feature</h3>
{staticVsDynamic.map((item, index) => ( {staticVsDynamic.map((item) => (
<div key={index} className="py-4 border-b last:border-b-0"> <div key={item.feature} className="border-b py-4 last:border-b-0">
<p className="text-gray-900 font-medium">{item.feature}</p> <p className="font-medium text-gray-900">{item.feature}</p>
</div> </div>
))} ))}
</div> </div>
<div className="p-6 bg-gray-50"> <div className="bg-gray-50 p-6">
<h3 className="font-semibold text-lg mb-4 text-gray-600">Static QR</h3> <h3 className="mb-4 text-lg font-semibold text-gray-600">Static QR</h3>
{staticVsDynamic.map((item, index) => ( {staticVsDynamic.map((item) => (
<div key={index} className="py-4 border-b last:border-b-0 flex items-center justify-center"> <div key={item.feature} className="flex items-center justify-center border-b py-4 last:border-b-0">
{item.static ? ( <span className={item.static ? 'text-2xl text-green-500' : 'text-2xl text-red-500'}>
<span className="text-green-500 text-2xl"></span> {item.static ? 'Yes' : 'No'}
) : ( </span>
<span className="text-red-500 text-2xl"></span>
)}
</div> </div>
))} ))}
</div> </div>
<div className="p-6 bg-primary-50"> <div className="bg-primary-50 p-6">
<h3 className="font-semibold text-lg mb-4 text-primary-600">Dynamic QR</h3> <h3 className="mb-4 text-lg font-semibold text-primary-600">Dynamic QR</h3>
{staticVsDynamic.map((item, index) => ( {staticVsDynamic.map((item) => (
<div key={index} className="py-4 border-b last:border-b-0 flex items-center justify-center"> <div key={item.feature} className="flex items-center justify-center border-b py-4 last:border-b-0">
{item.dynamic ? ( <span className={item.dynamic ? 'text-2xl text-green-500' : 'text-2xl text-red-500'}>
<span className="text-green-500 text-2xl"></span> {item.dynamic ? 'Yes' : 'No'}
) : ( </span>
<span className="text-red-500 text-2xl"></span>
)}
</div> </div>
))} ))}
</div> </div>
@ -436,117 +446,51 @@ export default function DynamicQRCodeGeneratorPage() {
</div> </div>
</section> </section>
{/* Features */}
<section className="py-20"> <section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="text-center mb-16"> <div className="mb-16 text-center">
<h2 className="text-4xl font-bold text-gray-900 mb-4"> <h2 className="mb-4 text-4xl font-bold text-gray-900">What you can do with dynamic QR</h2>
Powerful Dynamic QR Features <p className="mx-auto max-w-3xl text-xl text-gray-600">
</h2> These are the core product benefits verified by the current QR Master flows and plan limits.
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
Everything you need to create, manage, and optimize your QR code campaigns
</p> </p>
</div> </div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8"> <div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
{dynamicFeatures.map((feature, index) => ( {featureCards.map((feature) => (
<Card key={index} className="p-6 hover:shadow-lg transition-shadow"> <Card key={feature.title} className="p-6 transition-shadow hover:shadow-lg">
<div className="text-4xl mb-4">{feature.icon}</div> <h3 className="mb-2 text-xl font-semibold text-gray-900">{feature.title}</h3>
<h3 className="text-xl font-semibold text-gray-900 mb-2"> <p className="text-gray-600">{feature.description}</p>
{feature.title}
</h3>
<p className="text-gray-600">
{feature.description}
</p>
</Card> </Card>
))} ))}
</div> </div>
</div> </div>
</section> </section>
{/* Use Cases */} <section className="bg-gray-50 py-20">
<section className="py-20 bg-gray-50"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="mb-16 text-center">
<div className="text-center mb-16"> <h2 className="mb-4 text-4xl font-bold text-gray-900">Where dynamic QR fits best</h2>
<h2 className="text-4xl font-bold text-gray-900 mb-4"> <p className="mx-auto max-w-3xl text-xl text-gray-600">
How Businesses Use Dynamic QR Codes Use dynamic QR where the destination may evolve after the printed material is already deployed.
</h2>
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
Real-world examples of dynamic QR code applications
</p> </p>
</div> </div>
<div className="grid md:grid-cols-2 gap-8"> <div className="grid gap-8 md:grid-cols-2">
{useCases.map((useCase, index) => ( {useCases.map((useCase) => (
<Card key={index} className="p-8"> <Card key={useCase.title} className="p-8">
<div className="flex items-start space-x-4"> <h3 className="mb-3 text-2xl font-bold text-gray-900">{useCase.title}</h3>
<div className="text-4xl">{useCase.icon}</div> <p className="mb-4 text-gray-600">{useCase.description}</p>
<div className="flex-1"> <div className="border-l-4 border-blue-500 bg-blue-50 p-4">
<h3 className="text-2xl font-bold text-gray-900 mb-3">
{useCase.title}
</h3>
<p className="text-gray-600 mb-4">
{useCase.description}
</p>
<div className="bg-blue-50 border-l-4 border-blue-500 p-4">
<p className="text-sm text-gray-700"> <p className="text-sm text-gray-700">
<strong>Example:</strong> {useCase.example} <strong>Example:</strong> {useCase.example}
</p> </p>
</div> </div>
</div>
</div>
</Card> </Card>
))} ))}
</div> </div>
</div> </div>
</section> </section>
{/* How It Works */}
<section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-5xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
How Dynamic QR Codes Work
</h2>
<p className="text-xl text-gray-600">
Simple technology, powerful results
</p>
</div>
<div className="grid md:grid-cols-3 gap-8">
<Card className="p-6 text-center">
<div className="w-16 h-16 bg-primary-100 rounded-full flex items-center justify-center mx-auto mb-4">
<span className="text-2xl font-bold text-primary-600">1</span>
</div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">Create QR Code</h3>
<p className="text-gray-600">
Generate a dynamic QR code with a short redirect URL
</p>
</Card>
<Card className="p-6 text-center">
<div className="w-16 h-16 bg-primary-100 rounded-full flex items-center justify-center mx-auto mb-4">
<span className="text-2xl font-bold text-primary-600">2</span>
</div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">Print Anywhere</h3>
<p className="text-gray-600">
Add to packaging, posters, cards, or anywhere you need
</p>
</Card>
<Card className="p-6 text-center">
<div className="w-16 h-16 bg-primary-100 rounded-full flex items-center justify-center mx-auto mb-4">
<span className="text-2xl font-bold text-primary-600">3</span>
</div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">Update Anytime</h3>
<p className="text-gray-600">
Change the destination URL from your dashboard whenever needed
</p>
</Card>
</div>
</div>
</section>
<GrowthLinksSection <GrowthLinksSection
eyebrow="Best next workflows" eyebrow="Best next workflows"
title="See where dynamic QR becomes most useful" title="See where dynamic QR becomes most useful"
@ -556,24 +500,41 @@ export default function DynamicQRCodeGeneratorPage() {
cluster="dynamic-qr" cluster="dynamic-qr"
/> />
{/* CTA Section */} <section className="bg-gradient-to-r from-purple-600 to-blue-600 py-20 text-white">
<section className="py-20 bg-gradient-to-r from-purple-600 to-blue-600 text-white"> <div className="container mx-auto max-w-4xl px-4 text-center sm:px-6 lg:px-8">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl text-center"> <h2 className="mb-6 text-4xl font-bold">Start creating dynamic QR codes today</h2>
<h2 className="text-4xl font-bold mb-6"> <p className="mb-8 text-xl text-purple-100">
Start Creating Dynamic QR Codes Today
</h2>
<p className="text-xl mb-8 text-purple-100">
Use one QR code that can keep working even when the destination behind it needs to change. Use one QR code that can keep working even when the destination behind it needs to change.
</p> </p>
<div className="flex flex-col sm:flex-row gap-4 justify-center"> <div className="flex flex-col justify-center gap-4 sm:flex-row">
<TrackedCtaLink href="/signup" ctaLabel="Get Started Free" ctaLocation="footer_primary" pageType="commercial" cluster="dynamic-qr"> <TrackedCtaLink
<Button size="lg" variant="secondary" className="text-lg px-8 py-4 w-full sm:w-auto bg-white text-purple-600 hover:bg-gray-100"> href="/signup"
ctaLabel="Get Started Free"
ctaLocation="footer_primary"
pageType="commercial"
cluster="dynamic-qr"
>
<Button
size="lg"
variant="secondary"
className="w-full bg-white px-8 py-4 text-lg text-purple-600 hover:bg-gray-100 sm:w-auto"
>
Get Started Free Get Started Free
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
<TrackedCtaLink href="/signup" ctaLabel="Create QR Code Now" ctaLocation="footer_secondary" pageType="commercial" cluster="dynamic-qr"> <TrackedCtaLink
<Button size="lg" variant="outline" className="text-lg px-8 py-4 w-full sm:w-auto border-white text-white hover:bg-white/10"> href="/pricing"
Create QR Code Now ctaLabel="View Pricing"
ctaLocation="footer_secondary"
pageType="commercial"
cluster="dynamic-qr"
>
<Button
size="lg"
variant="outline"
className="w-full border-white px-8 py-4 text-lg text-white hover:bg-white/10 sm:w-auto"
>
View Pricing
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
</div> </div>

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import Link from 'next/link';
import SeoJsonLd from '@/components/SeoJsonLd'; import SeoJsonLd from '@/components/SeoJsonLd';
import { faqPageSchema } from '@/lib/schema'; import { faqPageSchema } from '@/lib/schema';
import { Card, CardContent } from '@/components/ui/Card'; import { Card, CardContent } from '@/components/ui/Card';
@ -13,9 +14,9 @@ function truncateAtWord(text: string, maxLength: number): string {
} }
export async function generateMetadata(): Promise<Metadata> { export async function generateMetadata(): Promise<Metadata> {
const title = truncateAtWord('QR Master FAQ: Dynamic & Bulk QR', 60); const title = truncateAtWord('QR Master FAQ: Dynamic, Tracking, Bulk, and Print', 60);
const description = truncateAtWord( const description = truncateAtWord(
'All answers: dynamic QR, security, analytics, bulk, events & print.', 'Answers about dynamic QR codes, scan tracking, privacy, bulk creation, and print setup.',
160 160
); );
@ -39,10 +40,9 @@ export async function generateMetadata(): Promise<Metadata> {
url: 'https://www.qrmaster.net/og-image.png', url: 'https://www.qrmaster.net/og-image.png',
width: 1200, width: 1200,
height: 630, height: 630,
alt: 'QR Master - Dynamic QR Code Generator and Analytics Platform', alt: 'QR Master FAQ',
}, },
], ],
}, },
twitter: { twitter: {
title, title,
@ -51,132 +51,146 @@ export async function generateMetadata(): Promise<Metadata> {
}; };
} }
import Link from 'next/link';
// Extended type for UI with Rich Text support
type FAQItemWithRichText = { type FAQItemWithRichText = {
question: string; question: string;
answer: string; // Plain text for Schema answer: string;
answerRich?: React.ReactNode; // JSX for UI answerRich?: React.ReactNode;
}; };
const faqs: FAQItemWithRichText[] = [ const faqs: FAQItemWithRichText[] = [
{ {
question: 'What is a dynamic QR code?', question: 'What is a dynamic QR code?',
answer: 'A dynamic QR code points to a redirect URL, so you can change the final destination later without reprinting. Key benefits: Update the destination anytime, Track scans (time, device, location), Pause/disable campaigns.', answer:
'A dynamic QR code points to a redirect URL, so you can change the final destination later without replacing the printed QR image.',
answerRich: ( answerRich: (
<> <>
A dynamic QR code points to a redirect URL, so you can change the final destination later without reprinting. A dynamic QR code points to a redirect URL, so you can change the final destination later without replacing the printed QR image.
<br /><br /> <br />
<strong>Key benefits:</strong> <br />
<ul className="list-disc pl-5 mt-2 space-y-1"> <strong>Why teams use it:</strong>
<li>Update the destination anytime</li> <ul className="mt-2 list-disc space-y-1 pl-5">
<li>Track scans (time, device, location) via <Link href="/guide/tracking-analytics" className="text-blue-600 hover:underline">Analytics</Link></li> <li>Update the destination after print</li>
<li>Pause/disable campaigns without changing the printed code</li> <li>Review scan analytics later</li>
<li>Keep one printed QR in use across changing campaigns or content</li>
</ul> </ul>
</> </>
), ),
}, },
{ {
question: 'How do I track QR scans?', question: 'How do I track QR scans?',
answer: 'QR Master tracks scan events in real-time via the short URL redirect. Metrics included: Total and unique scans, Device type, Geographic location, and Time of day.', answer:
'QR Master tracks scans through the dynamic QR redirect step. The analytics views can report time, device, location context, and total or unique scan activity.',
answerRich: ( answerRich: (
<> <>
QR Master tracks scan events in real-time via the short URL redirect. QR Master tracks scans through the dynamic QR redirect step.
<br /><br /> <br />
<strong>Metrics included:</strong> <br />
<ul className="list-disc pl-5 mt-2 space-y-1"> <strong>Current analytics context:</strong>
<li>Total and unique scans</li> <ul className="mt-2 list-disc space-y-1 pl-5">
<li>Device type (iOS, Android, Desktop)</li> <li>Total and unique scan reporting</li>
<li>Geographic location (Country, City)</li> <li>Device type</li>
<li>Time of day</li> <li>Location context</li>
<li>Time-based scan activity</li>
</ul> </ul>
<br /> <br />
<Link href="/qr-code-tracking" className="text-blue-600 hover:underline font-medium">Learn more about Tracking </Link> <Link href="/qr-code-tracking" className="font-medium text-blue-600 hover:underline">
Learn more about tracking
</Link>
</> </>
), ),
}, },
{ {
question: 'What security measures are in place?', question: 'What security measures are in place?',
answer: 'We prioritize data security through standard industry practices. Security features: HTTPS/TLS encryption, Automated link validation, and Rate limiting.', answer:
'QR Master uses HTTPS/TLS, CSRF protection for relevant write actions, and rate limiting on API routes.',
answerRich: ( answerRich: (
<> <>
We prioritize data security through standard industry practices. QR Master uses standard protective controls that are visible in the current codebase.
<br /><br /> <br />
<strong>Security features:</strong> <br />
<ul className="list-disc pl-5 mt-2 space-y-1"> <strong>Security-related controls:</strong>
<ul className="mt-2 list-disc space-y-1 pl-5">
<li>HTTPS/TLS encryption for all connections</li> <li>HTTPS/TLS encryption for all connections</li>
<li>Automated link validation to prevent malicious redirects</li> <li>CSRF protection for relevant write actions</li>
<li>Rate limiting to prevent abuse</li> <li>Rate limiting on API routes</li>
</ul> </ul>
</> </>
), ),
}, },
{ {
question: 'Bulk QR codes: Print, Marketing, and API?', question: 'How does bulk QR creation work today?',
answer: 'You can generate thousands of codes via CSV upload or API for scalable campaigns. Features: CSV Upload (1,000+ codes), Customization, and API access.', answer:
'QR Master currently supports bulk QR creation through spreadsheet upload in the Business plan. The flow accepts CSV, XLS, and XLSX files, supports up to 1,000 rows per upload, and generates static QR codes.',
answerRich: ( answerRich: (
<> <>
You can generate thousands of codes via CSV upload or API for scalable campaigns. QR Master currently supports bulk QR creation through spreadsheet upload in the Business plan.
<br /><br /> <br />
<strong>Features:</strong> <br />
<ul className="list-disc pl-5 mt-2 space-y-1"> <strong>Current bulk flow facts:</strong>
<li><strong>CSV Upload:</strong> Create up to 1,000 codes at once (<Link href="/bulk-qr-code-generator" className="text-blue-600 hover:underline">Bulk Generator</Link>)</li> <ul className="mt-2 list-disc space-y-1 pl-5">
<li><strong>Customization:</strong> Apply branding to all batch codes</li> <li>CSV, XLS, and XLSX uploads are supported</li>
<li><strong>API:</strong> Programmatic generation for internal systems</li> <li>Up to 1,000 rows per upload</li>
<li>Output is static QR codes, not dynamic tracking batches</li>
</ul> </ul>
<br />
<Link href="/bulk-qr-code-generator" className="font-medium text-blue-600 hover:underline">
See the bulk QR workflow
</Link>
</> </>
), ),
}, },
{ {
question: 'What are the best practices for printing QR codes?', question: 'What are the best practices for printing QR codes?',
answer: 'Ensure high scannability by following these rules: Minimum size 2x2 cm, High contrast (dark on light), Vector formats (SVG/EPS) for large print, and maintain a quiet zone border.', answer:
'For reliable scanning, keep the QR code at least 2x2 cm for close-range use, maintain strong contrast, leave a quiet zone around the code, and use SVG or a high-resolution PNG for output.',
answerRich: ( answerRich: (
<> <>
Ensure high scannability by following these rules: For reliable scanning, follow these print-first basics:
<br /><br /> <br />
<strong>Print Guidelines:</strong> <br />
<ul className="list-disc pl-5 mt-2 space-y-1"> <ul className="mt-2 list-disc space-y-1 pl-5">
<li><strong>Size:</strong> Minimum 2x2 cm (0.8x0.8 inch) for close range</li> <li>Minimum size around 2x2 cm for close-range scans</li>
<li><strong>Format:</strong> Use <span className="font-semibold">SVG/EPS</span> (Vector) for professional print quality</li> <li>Dark foreground on a light background</li>
<li><strong>Contrast:</strong> Always use dark foreground on light background</li> <li>Leave a quiet zone around the QR code</li>
<li><strong>Quiet Zone:</strong> Leave a margin around the code</li> <li>Use SVG or a high-resolution PNG depending on the print workflow</li>
</ul> </ul>
</> </>
), ),
}, },
{ {
question: 'Is the service GDPR aligned?', question: 'Is the service privacy-conscious?',
answer: 'Yes, we minimize data collection to ensure privacy compliance. Privacy measures: IP anonymization, No PII storage, and EU-based servers.', answer:
'QR Master minimizes scanner data collection. Privacy-related measures visible in the product context include hashed or anonymized IP handling and no scanner PII storage.',
answerRich: ( answerRich: (
<> <>
Yes, we minimize data collection to ensure privacy compliance. QR Master is built around minimal scanner data collection.
<br /><br /> <br />
<strong>Privacy measures:</strong> <br />
<ul className="list-disc pl-5 mt-2 space-y-1"> <strong>Privacy-related measures:</strong>
<ul className="mt-2 list-disc space-y-1 pl-5">
<li>IP addresses are anonymized or hashed</li> <li>IP addresses are anonymized or hashed</li>
<li>No personal data (PII) is stored from scanners</li> <li>No scanner PII storage</li>
<li>Servers located in EU regions (for EU customers)</li>
</ul> </ul>
<br /> <br />
<Link href="/privacy" className="text-blue-600 hover:underline font-medium">Read Privacy Policy </Link> <Link href="/privacy" className="font-medium text-blue-600 hover:underline">
Read the privacy policy
</Link>
</> </>
), ),
}, },
{ {
question: 'Dynamic vs Static QR Codes?', question: 'What is the difference between static and dynamic QR codes?',
answer: 'Static codes are fixed forever; Dynamic codes can be edited and tracked. Comparison: Static (free, permanent, no tracking) vs Dynamic (editable, analytics, campaign logic).', answer:
'Static QR codes store the destination directly in the image and stay fixed. Dynamic QR codes route through QR Master so the destination can be changed later and scan analytics can be reviewed.',
answerRich: ( answerRich: (
<> <>
Static codes are fixed forever; Dynamic codes can be edited and tracked. Static QR codes store the destination directly in the image and stay fixed.
<br /><br /> Dynamic QR codes route through QR Master so the destination can be changed later and scan analytics can be reviewed.
<strong>Comparison:</strong>
<ul className="list-disc pl-5 mt-2 space-y-1">
<li><strong>Static:</strong> content embedded directly, no tracking, free forever</li>
<li><strong>Dynamic:</strong> redirect link, editable destination, scan analytics</li>
</ul>
<br /> <br />
<Link href="/dynamic-qr-code-generator" className="text-blue-600 hover:underline font-medium">Create Dynamic QR </Link> <br />
<Link href="/dynamic-qr-code-generator" className="font-medium text-blue-600 hover:underline">
Create a dynamic QR code
</Link>
</> </>
), ),
}, },
@ -186,44 +200,39 @@ export default function FAQPage() {
return ( return (
<> <>
<SeoJsonLd data={faqPageSchema(faqs.map(({ question, answer }) => ({ question, answer })))} /> <SeoJsonLd data={faqPageSchema(faqs.map(({ question, answer }) => ({ question, answer })))} />
<div className="py-20 bg-gradient-to-b from-gray-50 to-white"> <div className="bg-gradient-to-b from-gray-50 to-white py-20">
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto"> <div className="mx-auto max-w-4xl">
<div className="text-center mb-16"> <div className="mb-16 text-center">
<h1 className="text-4xl lg:text-5xl font-bold text-gray-900 mb-6"> <h1 className="mb-6 text-4xl font-bold text-gray-900 lg:text-5xl">
Frequently Asked Questions Frequently Asked Questions
</h1> </h1>
<p className="text-xl text-gray-600 mb-4"> <p className="mb-4 text-xl text-gray-600">
Everything you need to know about dynamic QR codes, security, analytics, bulk generation, events, and print quality. Answers about dynamic QR codes, scan tracking, privacy, bulk creation, and print setup.
</p>
<p className="text-sm text-gray-500">
Last updated: January 25, 2025
</p> </p>
<p className="text-sm text-gray-500">Last updated: March 12, 2026</p>
</div> </div>
<div className="space-y-6"> <div className="space-y-6">
{faqs.map((faq, index) => ( {faqs.map((faq) => (
<Card key={index} className="border-l-4 border-blue-500"> <Card key={faq.question} className="border-l-4 border-blue-500">
<CardContent className="p-8"> <CardContent className="p-8">
<h2 className="text-2xl font-semibold mb-4 text-gray-900"> <h2 className="mb-4 text-2xl font-semibold text-gray-900">{faq.question}</h2>
{faq.question} <div className="text-lg leading-relaxed text-gray-700">{faq.answerRich || faq.answer}</div>
</h2>
<div className="text-lg text-gray-700 leading-relaxed">
{faq.answerRich || faq.answer}
</div>
</CardContent> </CardContent>
</Card> </Card>
))} ))}
</div> </div>
<div className="mt-16 bg-blue-50 border-l-4 border-blue-500 p-8 rounded-r-lg"> <div className="mt-16 rounded-r-lg border-l-4 border-blue-500 bg-blue-50 p-8">
<h2 className="text-2xl font-bold mb-4 text-gray-900"> <h2 className="mb-4 text-2xl font-bold text-gray-900">Still have questions?</h2>
Still have questions? <p className="text-lg leading-relaxed text-gray-700">
</h2>
<p className="text-lg text-gray-700 mb-6 leading-relaxed">
Our support team is here to help. Contact us at{' '} Our support team is here to help. Contact us at{' '}
<ObfuscatedMailto email="support@qrmaster.net" className="text-blue-600 hover:text-blue-700 font-semibold" />{' '} <ObfuscatedMailto
or reach out through our live chat. email="support@qrmaster.net"
className="font-semibold text-blue-600 hover:text-blue-700"
/>{' '}
and include the workflow you are trying to build.
</p> </p>
</div> </div>
</div> </div>

View File

@ -5,35 +5,22 @@ import { Button } from '@/components/ui/Button';
import { Card } from '@/components/ui/Card'; import { Card } from '@/components/ui/Card';
import SeoJsonLd from '@/components/SeoJsonLd'; import SeoJsonLd from '@/components/SeoJsonLd';
import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs'; import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs';
import { breadcrumbSchema } from '@/lib/schema'; import { breadcrumbSchema, faqPageSchema } from '@/lib/schema';
import { import { AnswerFirstBlock } from '@/components/marketing/AnswerFirstBlock';
LayoutDashboard, import { FAQSection } from '@/components/aeo/FAQSection';
FolderTree,
Edit3,
Users,
BarChart3,
Bell,
CheckCircle2,
XCircle,
Store,
UtensilsCrossed,
CalendarDays,
Megaphone,
} from 'lucide-react';
export const metadata: Metadata = { export const metadata: Metadata = {
title: { title: {
absolute: 'QR Code Management Software Organize, Edit & Scale', absolute: 'Manage QR Codes - Dashboard, Edits, and Analytics',
}, },
description: 'Manage QR codes at scale with folders, bulk editing, team collaboration, and campaign organization. Centralized dashboard for businesses. Free trial available.', description:
'Manage QR codes in one dashboard. Review active codes, edit dynamic destinations, see scan totals and unique scans, and work within current Free, Pro, or Business limits.',
keywords: [ keywords: [
'manage qr codes', 'manage qr codes',
'qr code management software',
'qr code management system',
'bulk qr code management',
'qr code campaign management',
'qr code dashboard', 'qr code dashboard',
'organize qr codes', 'edit dynamic qr codes',
'qr code analytics dashboard',
'qr code management',
], ],
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/manage-qr-codes', canonical: 'https://www.qrmaster.net/manage-qr-codes',
@ -43,206 +30,119 @@ export const metadata: Metadata = {
}, },
}, },
openGraph: { openGraph: {
title: 'QR Code Management Software Organize, Edit & Scale', title: 'Manage QR Codes - Dashboard, Edits, and Analytics',
description: 'Manage QR codes at scale with folders, bulk editing, team collaboration, and campaign organization.', description:
'Use one dashboard to review QR codes, edit dynamic destinations, and check scan totals and unique scans.',
url: 'https://www.qrmaster.net/manage-qr-codes', url: 'https://www.qrmaster.net/manage-qr-codes',
type: 'website', type: 'website',
images: [{ images: [
{
url: '/images/og/og-manage-qr-codes.png', url: '/images/og/og-manage-qr-codes.png',
width: 1200, width: 1200,
height: 630 height: 630,
}] },
],
}, },
twitter: { twitter: {
title: 'QR Code Management Software Organize, Edit & Scale', title: 'Manage QR Codes - Dashboard, Edits, and Analytics',
description: 'Manage QR codes at scale with folders, bulk editing, team collaboration, and campaign organization.', description:
'Use one dashboard to review QR codes, edit dynamic destinations, and check scan totals and unique scans.',
}, },
}; };
export default function ManageQRCodesPage() { const verifiedCapabilities = [
const problems = [
{ {
icon: BarChart3, title: 'Central dashboard',
title: 'No Visibility', description:
issues: [ 'The dashboard lists your QR codes in one place instead of forcing you to manage separate files or links manually.',
'Can\'t find QR codes across campaigns',
'No central place to see all codes',
'Hard to track which ones are active',
],
}, },
{ {
icon: Edit3, title: 'Dynamic destination edits',
title: 'Can\'t Update or Organize', description:
issues: [ 'Dynamic QR codes can be edited after print. Static QR codes remain fixed.',
'Printed QR codes are permanent (static)',
'No way to organize by campaign/location',
'Manual spreadsheet tracking',
],
}, },
{ {
icon: Users, title: 'Scan reporting',
title: 'No Team Collaboration', description:
issues: [ 'The current dashboard reports total scans, active codes, and unique scans, with analytics pages adding more context.',
'QR codes scattered across devices',
'No centralized management system',
'No permissions or access control',
'Can\'t track who created/edited what',
],
}, },
]; {
title: 'Plan-based limits',
description:
'Free includes 3 dynamic QR codes, Pro includes 50, and Business includes 500. Static QR codes remain unlimited.',
},
{
title: 'Tags and status',
description:
'QR code records support tags and active status, which helps keep batches and single-code workflows easier to review.',
},
{
title: 'Download and delete actions',
description:
'Each QR code card supports view, download, edit for dynamic QR codes, and delete actions from the dashboard surface.',
},
];
const features = [ const operationalUseCases = [
{ {
icon: LayoutDashboard, title: 'Marketing campaigns',
title: 'Centralized Dashboard', description:
description: 'All QR codes in one place. Search, filter, sort by campaign/date/type. Quick performance overview.', 'Review active dynamic QR codes, compare scan totals, and update destinations when campaigns or landing pages change.',
points: ['One list of active codes', 'Scan totals and unique scans', 'Edit dynamic destinations'],
}, },
{ {
icon: FolderTree, title: 'Restaurants and hospitality',
title: 'Campaign Organization', description:
description: 'Create folders and tags. Group by location, product, event. Archive old campaigns.', 'Keep menu or table-card QR codes current from the dashboard instead of reprinting every time the destination changes.',
points: ['Update menu destinations', 'Monitor scan activity', 'Keep print assets in use longer'],
}, },
{ {
icon: Edit3, title: 'Product and packaging workflows',
title: 'Bulk Editing', description:
description: 'Edit multiple QR destinations at once. Bulk export, duplicate, archive. Schedule URL changes in advance.', 'Track which QR codes are active, save batches to the dashboard, and separate static bulk output from dynamic campaign codes.',
points: ['Save generated QR codes', 'Review active status', 'Manage static and dynamic codes separately'],
}, },
{ {
icon: Users, title: 'Small team or solo workflows',
title: 'Team Collaboration', description:
description: 'Invite team members. Set roles (viewer, editor, admin). Activity log for accountability.', 'Use one account to keep QR code creation, edits, downloads, and analytics in one operational place.',
points: ['Single dashboard view', 'No spreadsheet-only workflow', 'Clear plan limits'],
}, },
{ ];
icon: BarChart3,
title: 'Performance Tracking',
description: 'Track scans per QR code. See locations, devices, timestamps. Export analytics to CSV.',
},
{
icon: Bell,
title: 'Smart Alerts',
description: 'Get notified on high scan activity. Alert when errors occur. Weekly performance summaries.',
},
];
const useCases = [ const faqItems = [
{ {
icon: Store, question: 'What does it mean to manage QR codes?',
title: 'Retail & E-Commerce', answer:
description: 'Manage product QR codes across locations. Track in-store vs online performance. Update promo URLs seasonally.', 'In QR Master, managing QR codes means using one dashboard to review your QR codes, edit dynamic destinations, download files, and check scan activity instead of tracking everything manually.',
},
{
icon: UtensilsCrossed,
title: 'Restaurants & Hospitality',
description: 'Manage digital menu QR codes. Update locations/specials easily. Track table/location-specific scans.',
},
{
icon: CalendarDays,
title: 'Events & Conferences',
description: 'Manage attendee/session QR codes. Track check-ins in real-time. Organize by event, date, venue.',
},
{
icon: Megaphone,
title: 'Marketing Agencies',
description: 'Manage multiple client campaigns. Team permissions and white-label reports. Client-specific analytics.',
},
];
const comparison = [
{ feature: 'Create QR Codes', free: 'Static only', qrMaster: 'Static + Dynamic' },
{ feature: 'Central Dashboard', free: false, qrMaster: true },
{ feature: 'Edit After Deploy', free: false, qrMaster: true },
{ feature: 'Organize Campaigns', free: false, qrMaster: true },
{ feature: 'Team Collaboration', free: false, qrMaster: true },
{ feature: 'Bulk Operations', free: false, qrMaster: true },
{ feature: 'Analytics', free: false, qrMaster: true },
{ feature: 'API Access', free: false, qrMaster: true },
];
const plans = [
{
name: 'Free',
price: '€0',
period: 'forever',
features: [
'3 Dynamic QR Codes',
'Basic Dashboard',
'Basic Analytics',
'Perfect for trying',
],
cta: 'Start Free',
href: '/signup',
highlighted: false,
},
{
name: 'Pro',
price: '€9',
period: 'per month',
features: [
'50 Dynamic QR Codes',
'Advanced Analytics',
'Team Collaboration (3 users)',
'Priority Support',
],
cta: 'Start Free Trial',
href: '/signup?plan=pro',
highlighted: true,
},
{
name: 'Business',
price: '€29',
period: 'per month',
features: [
'500 Dynamic QR Codes',
'Full Analytics + CSV Export',
'Unlimited Team Members',
'API Access',
],
cta: 'Start Free Trial',
href: '/signup?plan=business',
highlighted: false,
},
];
const faqs = [
{
question: 'What does "manage QR codes" mean?',
answer: 'QR code management means having a central dashboard to create, organize, edit, track, and analyze all your QR codes in one place instead of scattered files.',
}, },
{ {
question: 'Can I edit a QR code after printing it?', question: 'Can I edit a QR code after printing it?',
answer: 'Yes, with dynamic QR codes. QR Master uses a redirect URL, so you can change the destination anytime. The printed QR code image stays the same.', answer:
'Yes, if it is a dynamic QR code. Static QR codes stay fixed after creation.',
}, },
{ {
question: 'How many QR codes can I manage?', question: 'How many dynamic QR codes can I manage?',
answer: 'Pro plan: 50 dynamic QR codes. Business plan: 500. Enterprise: Unlimited. All plans include unlimited static QR codes.', answer:
'Free includes 3 dynamic QR codes, Pro includes 50, and Business includes 500. Static QR codes are unlimited.',
}, },
{ {
question: 'Can my team access and edit QR codes?', question: 'What analytics are visible today?',
answer: 'Yes! Invite team members on Business and Enterprise plans. Set permissions (viewer, editor, admin) for each member.', answer:
'The current dashboard shows total scans, active QR codes, and unique scans. Additional analytics views add more scan context such as time, device, and location.',
}, },
{ {
question: 'What analytics can I track?', question: 'Does the current product include team roles or API-based QR management?',
answer: 'Total scans, unique scans, locations (city/country), devices (iOS/Android), browsers, timestamps, referrers. Export to CSV.', answer:
'This page only reflects the verified current surface: dashboard management, dynamic edits, analytics, downloads, tags, and plan limits. It does not claim team roles or public API-based QR management as current verified capabilities.',
}, },
{ ];
question: 'Can I organize QR codes by campaign?',
answer: 'Absolutely. Use folders, tags, and custom labels to organize by campaign, location, product, or any criteria.',
},
{
question: 'What happens to my dynamic QR codes if I cancel?',
answer: 'Dynamic QR codes require an active subscription to redirect. Check our terms for data retention policies. You can always export your data and download static versions.',
},
{
question: 'Is there an API for bulk management?',
answer: 'Yes, Business and Enterprise plans include full API access for creating, editing, and tracking QR codes programmatically.',
},
];
const softwareSchema = { const softwareSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'SoftwareApplication', '@type': 'SoftwareApplication',
'@id': 'https://www.qrmaster.net/manage-qr-codes#software', '@id': 'https://www.qrmaster.net/manage-qr-codes#software',
name: 'QR Master - QR Code Management Platform', name: 'QR Master - QR Code Management Dashboard',
applicationCategory: 'BusinessApplication', applicationCategory: 'BusinessApplication',
offers: { offers: {
'@type': 'AggregateOffer', '@type': 'AggregateOffer',
@ -251,116 +151,116 @@ export default function ManageQRCodesPage() {
priceCurrency: 'EUR', priceCurrency: 'EUR',
}, },
featureList: [ featureList: [
'Centralized QR code dashboard', 'Central QR code dashboard',
'Campaign organization with folders and tags', 'Edit dynamic QR code destinations',
'Bulk editing and operations', 'Review total and unique scan counts',
'Team collaboration with permissions', 'Download QR codes as PNG or SVG',
'Real-time scan analytics', 'Tag QR code records and review active status',
'API access for automation', 'Manage current plan limits for dynamic QR codes',
], ],
}; };
const breadcrumbItems: BreadcrumbItem[] = [ const breadcrumbItems: BreadcrumbItem[] = [
{ name: 'Home', url: '/' }, { name: 'Home', url: '/' },
{ name: 'Manage QR Codes', url: '/manage-qr-codes' }, { name: 'Manage QR Codes', url: '/manage-qr-codes' },
]; ];
export default function ManageQRCodesPage() {
return ( return (
<> <>
<SeoJsonLd data={[softwareSchema, breadcrumbSchema(breadcrumbItems)]} /> <SeoJsonLd
data={[
softwareSchema,
breadcrumbSchema(breadcrumbItems),
faqPageSchema(faqItems),
]}
/>
<div className="min-h-screen bg-white"> <div className="min-h-screen bg-white">
{/* Hero Section */}
<section className="relative overflow-hidden bg-gradient-to-br from-green-50 via-white to-blue-50 py-20"> <section className="relative overflow-hidden bg-gradient-to-br from-green-50 via-white to-blue-50 py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<Breadcrumbs items={breadcrumbItems} /> <Breadcrumbs items={breadcrumbItems} />
<div className="grid lg:grid-cols-2 gap-12 items-center mt-8"> <div className="mt-8 grid items-center gap-12 lg:grid-cols-2">
<div className="space-y-8"> <div className="space-y-8">
<div className="inline-flex items-center space-x-2 bg-green-100 text-green-800 px-4 py-2 rounded-full text-sm font-semibold"> <div className="inline-flex items-center rounded-full bg-green-100 px-4 py-2 text-sm font-semibold text-green-800">
<span></span> Dashboard-first QR management
<span>Get Started Free</span>
</div> </div>
<h1 className="text-5xl lg:text-6xl font-bold text-gray-900 leading-tight"> <div className="space-y-5">
QR Code Management Software Organize, Edit & Scale <h1 className="text-5xl font-bold leading-tight text-gray-900 lg:text-6xl">
Manage QR Codes from one dashboard
</h1> </h1>
<p className="text-xl leading-relaxed text-gray-600">
<p className="text-xl text-gray-600 leading-relaxed"> Review active QR codes, edit dynamic destinations, download files, and
The complete QR code management platform for businesses. Organize campaigns, edit in bulk, collaborate with teams, and track performance from one central dashboard. monitor scan totals from one place instead of managing printed QR workflows manually.
</p> </p>
</div>
<div className="space-y-3"> <div className="space-y-3">
{[ {[
'No Credit Card Required', 'See QR codes in one dashboard',
'Full Features', 'Edit dynamic destinations after print',
'Cancel Anytime', 'Review total scans, active codes, and unique scans',
].map((feature, index) => ( 'Work within the current Free, Pro, and Business dynamic QR limits',
<div key={index} className="flex items-center space-x-3"> ].map((feature) => (
<div className="flex-shrink-0 w-5 h-5 bg-green-500 rounded-full flex items-center justify-center"> <div key={feature} className="flex items-center gap-3">
<CheckCircle2 className="w-3 h-3 text-white" /> <div className="flex h-5 w-5 items-center justify-center rounded-full bg-green-500">
<svg className="h-3 w-3 text-white" 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>
</div> </div>
<span className="text-gray-700">{feature}</span> <span className="text-gray-700">{feature}</span>
</div> </div>
))} ))}
</div> </div>
<div className="flex flex-col sm:flex-row gap-4"> <div className="flex flex-col gap-4 sm:flex-row">
<Link href="/signup"> <Link href="/signup">
<Button size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> <Button size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
Get Started Free Get Started Free
</Button> </Button>
</Link> </Link>
<Link <Link href="/pricing">
href="#dashboard-preview" <Button variant="outline" size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
className="inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 border border-gray-300 text-gray-700 hover:bg-gray-50 focus:ring-gray-500 px-6 py-3 text-lg w-full sm:w-auto" View Pricing
> </Button>
See Dashboard Demo
</Link> </Link>
</div> </div>
</div> </div>
{/* Dashboard Preview Card */}
<div className="relative"> <div className="relative">
<Card className="p-6 shadow-2xl"> <Card className="p-6 shadow-2xl">
<h3 className="font-semibold text-lg mb-4">Dashboard Overview</h3> <h3 className="mb-4 text-lg font-semibold">Dashboard snapshot</h3>
<div className="space-y-3"> <div className="space-y-3">
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4"> <div className="rounded-lg border border-blue-200 bg-blue-50 p-4">
<div className="flex items-center justify-between mb-2"> <div className="mb-2 flex items-center justify-between">
<span className="text-sm font-semibold text-gray-700">All QR Codes</span> <span className="text-sm font-semibold text-gray-700">Active QR codes</span>
<span className="text-2xl font-bold text-blue-600">127</span> <span className="text-2xl font-bold text-blue-600">3 / 50 / 500</span>
</div> </div>
<div className="text-xs text-gray-600">Across 12 campaigns</div> <div className="text-xs text-gray-600">Plan-based dynamic QR capacity</div>
</div> </div>
<div className="grid grid-cols-2 gap-3"> <div className="grid grid-cols-2 gap-3">
<div className="bg-green-50 border border-green-200 rounded-lg p-3"> <div className="rounded-lg border border-green-200 bg-green-50 p-3">
<div className="text-xs text-gray-600 mb-1">Active</div> <div className="mb-1 text-xs text-gray-600">Total scans</div>
<div className="text-xl font-bold text-green-600">94</div> <div className="text-xl font-bold text-green-600">Dashboard metric</div>
</div> </div>
<div className="bg-gray-100 border border-gray-200 rounded-lg p-3"> <div className="rounded-lg border border-purple-200 bg-purple-50 p-3">
<div className="text-xs text-gray-600 mb-1">Archived</div> <div className="mb-1 text-xs text-gray-600">Unique scans</div>
<div className="text-xl font-bold text-gray-600">33</div> <div className="text-xl font-bold text-purple-600">Dashboard metric</div>
</div> </div>
</div> </div>
<div className="bg-purple-50 border border-purple-200 rounded-lg p-3"> <div className="rounded-lg border border-gray-200 bg-gray-50 p-3">
<div className="text-xs text-gray-600 mb-2">Recent Activity</div> <div className="mb-2 text-xs text-gray-600">Available actions</div>
<div className="space-y-1 text-xs"> <div className="flex flex-wrap gap-2 text-xs text-gray-700">
<div className="flex items-center justify-between"> <span className="rounded-full bg-white px-3 py-1">View details</span>
<span className="text-gray-700">Campaign "Summer Sale" edited</span> <span className="rounded-full bg-white px-3 py-1">Download PNG</span>
<span className="text-gray-500">2m ago</span> <span className="rounded-full bg-white px-3 py-1">Download SVG</span>
</div> <span className="rounded-full bg-white px-3 py-1">Edit dynamic QR</span>
<div className="flex items-center justify-between"> <span className="rounded-full bg-white px-3 py-1">Delete</span>
<span className="text-gray-700">Bulk update: 12 codes</span>
<span className="text-gray-500">1h ago</span>
</div>
</div>
</div>
</div>
<div className="mt-4 pt-4 border-t border-gray-200">
<div className="flex items-center justify-between text-sm">
<span className="text-gray-600">Team Members</span>
<div className="flex -space-x-2">
{[1, 2, 3].map((i) => (
<div key={i} className="w-8 h-8 rounded-full bg-gradient-to-br from-blue-400 to-purple-500 border-2 border-white" />
))}
</div> </div>
</div> </div>
</div> </div>
@ -370,56 +270,50 @@ export default function ManageQRCodesPage() {
</div> </div>
</section> </section>
{/* Problem Statement */} <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<section className="py-20 bg-gray-50"> <AnswerFirstBlock
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> whatIsIt="QR Master management is a dashboard workflow for reviewing QR codes, editing dynamic destinations, downloading files, and checking scan activity from one place. It is most useful when your QR program is active enough that single-file handling becomes messy."
<div className="text-center mb-16"> whenToUse={[
<h2 className="text-4xl font-bold text-gray-900 mb-4"> 'You need one place to review active QR codes and their scan totals',
Why Managing QR Codes Manually is Chaos 'You want to edit dynamic QR destinations after print without replacing the QR image',
</h2> 'You need to keep static and dynamic QR workflows organized around current plan limits',
]}
comparison={{
leftTitle: 'Manual handling',
rightTitle: 'Dashboard management',
items: [
{ label: 'See active QR codes in one place', value: true, text: 'Scattered across files or exports' },
{ label: 'Edit dynamic destinations later', value: true, text: 'Not possible outside dynamic QR management' },
{ label: 'Review scan totals and unique scans', value: true, text: 'No unified dashboard view' },
],
}}
howTo={{
steps: [
'Create or save QR codes into your QR Master account',
'Open the dashboard to review active codes, scans, and available actions',
'Edit dynamic destinations or download the QR files you need for the next workflow',
],
}}
/>
</div> </div>
<div className="grid md:grid-cols-3 gap-8"> <div className="container mx-auto max-w-5xl px-4 pb-8 sm:px-6 lg:px-8">
{problems.map((problem, index) => ( <FAQSection items={faqItems} title="QR management questions" />
<Card key={index} className="p-6">
<problem.icon className="w-12 h-12 text-red-600 mb-4" />
<h3 className="text-xl font-bold text-gray-900 mb-4">{problem.title}</h3>
<ul className="space-y-2">
{problem.issues.map((issue, idx) => (
<li key={idx} className="flex items-start space-x-2">
<XCircle className="w-5 h-5 text-red-500 flex-shrink-0 mt-0.5" />
<span className="text-gray-600">{issue}</span>
</li>
))}
</ul>
</Card>
))}
</div> </div>
<div className="text-center mt-12"> <section className="bg-gray-50 py-20">
<p className="text-2xl font-semibold text-gray-700"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
A Complete Management Platform Solves All of This <div className="mb-16 text-center">
<h2 className="mb-4 text-4xl font-bold text-gray-900">What the current dashboard supports</h2>
<p className="mx-auto max-w-3xl text-xl text-gray-600">
These capabilities are tied to the present product surface rather than future or inferred roadmap features.
</p> </p>
</div> </div>
</div>
</section>
{/* Core Features */} <div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
<section className="py-20"> {verifiedCapabilities.map((feature) => (
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <Card key={feature.title} className="p-6 transition-shadow hover:shadow-lg">
<div className="text-center mb-16"> <h3 className="mb-2 text-xl font-semibold text-gray-900">{feature.title}</h3>
<h2 className="text-4xl font-bold text-gray-900 mb-4">
Everything You Need to Manage QR Codes at Scale
</h2>
</div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{features.map((feature, index) => (
<Card key={index} className="p-6 hover:shadow-lg transition-shadow">
<feature.icon className="w-10 h-10 text-primary-600 mb-4" />
<h3 className="text-xl font-semibold text-gray-900 mb-2">
{feature.title}
</h3>
<p className="text-gray-600">{feature.description}</p> <p className="text-gray-600">{feature.description}</p>
</Card> </Card>
))} ))}
@ -427,313 +321,66 @@ export default function ManageQRCodesPage() {
</div> </div>
</section> </section>
{/* Workflow Diagram */}
<section className="py-20 bg-blue-50">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
Your QR Code Management Workflow
</h2>
</div>
<div className="space-y-6">
{[
{
step: 1,
title: 'Create & Customize',
description: 'Upload CSV or create individually',
},
{
step: 2,
title: 'Organize',
description: 'Tag, folder, assign to campaigns',
},
{
step: 3,
title: 'Deploy',
description: 'Download, print, distribute',
},
{
step: 4,
title: 'Track & Analyze',
description: 'Monitor scans, locations, devices',
},
{
step: 5,
title: 'Optimize',
description: 'Edit URLs, A/B test, improve',
},
].map((step, index) => (
<div key={index}>
<Card className="p-6">
<div className="flex items-center space-x-4">
<div className="flex-shrink-0 w-12 h-12 bg-primary-600 text-white rounded-full flex items-center justify-center text-xl font-bold">
{step.step}
</div>
<div className="flex-1">
<h3 className="text-xl font-bold text-gray-900">{step.title}</h3>
<p className="text-gray-600">{step.description}</p>
</div>
</div>
</Card>
{index < 4 && (
<div className="flex justify-center my-2">
<div className="w-1 h-8 bg-primary-300" />
</div>
)}
</div>
))}
</div>
</div>
</section>
{/* Dashboard Preview */}
<section id="dashboard-preview" className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
See Your Dashboard in Action
</h2>
</div>
<Card className="p-8 bg-gradient-to-br from-gray-50 to-white">
<div className="space-y-6">
<div className="flex items-center justify-between pb-4 border-b border-gray-200">
<h3 className="text-xl font-bold">QR Code Management</h3>
<Link href="/signup">
<Button size="sm">Sign Up</Button>
</Link>
</div>
<div className="grid gap-4">
{[
{ name: 'Summer Campaign 2024', scans: 1247, status: 'Active', folder: 'Marketing' },
{ name: 'Product Launch - Widget Pro', scans: 892, status: 'Active', folder: 'Products' },
{ name: 'Event Check-in - TechConf', scans: 2341, status: 'Complete', folder: 'Events' },
].map((qr, index) => (
<div key={index} className="flex items-center justify-between p-4 bg-white border border-gray-200 rounded-lg hover:shadow-md transition-shadow">
<div className="flex-1">
<div className="font-semibold text-gray-900">{qr.name}</div>
<div className="text-sm text-gray-500">📁 {qr.folder}</div>
</div>
<div className="flex items-center space-x-6">
<div className="text-center">
<div className="text-2xl font-bold text-primary-600">{qr.scans.toLocaleString()}</div>
<div className="text-xs text-gray-500">scans</div>
</div>
<div className={`px-3 py-1 rounded-full text-xs font-semibold ${qr.status === 'Active'
? 'bg-green-100 text-green-800'
: 'bg-gray-100 text-gray-600'
}`}>
{qr.status}
</div>
<Button variant="ghost" size="sm">
<Edit3 className="w-4 h-4" />
</Button>
</div>
</div>
))}
</div>
<div className="flex items-center justify-center space-x-8 pt-6 border-t border-gray-200 text-sm text-gray-600">
<div className="flex items-center space-x-2">
<CheckCircle2 className="w-4 h-4 text-green-500" />
<span>View all codes at a glance</span>
</div>
<div className="flex items-center space-x-2">
<CheckCircle2 className="w-4 h-4 text-green-500" />
<span>Click to edit destination instantly</span>
</div>
<div className="flex items-center space-x-2">
<CheckCircle2 className="w-4 h-4 text-green-500" />
<span>Filter by campaign or folder</span>
</div>
</div>
</div>
</Card>
</div>
</section>
{/* Use Cases by Industry */}
<section className="py-20 bg-gray-50">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
QR Code Management for Every Business
</h2>
</div>
<div className="grid md:grid-cols-2 gap-8">
{useCases.map((useCase, index) => (
<Card key={index} className="p-8">
<useCase.icon className="w-12 h-12 text-primary-600 mb-4" />
<h3 className="text-2xl font-bold text-gray-900 mb-3">{useCase.title}</h3>
<p className="text-gray-600">{useCase.description}</p>
</Card>
))}
</div>
</div>
</section>
{/* Feature Comparison */}
<section className="py-20"> <section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-5xl"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="text-center mb-16"> <div className="mb-16 text-center">
<h2 className="text-4xl font-bold text-gray-900 mb-4"> <h2 className="mb-4 text-4xl font-bold text-gray-900">Where QR management is most useful</h2>
Free QR Tools vs QR Code Management Platform <p className="mx-auto max-w-3xl text-xl text-gray-600">
</h2> Use the dashboard when your QR workflows need ongoing edits, downloads, and visibility instead of one-off creation.
</p>
</div> </div>
<Card className="overflow-hidden"> <div className="grid gap-8 md:grid-cols-2">
<table className="w-full"> {operationalUseCases.map((useCase) => (
<thead className="bg-gray-100"> <Card key={useCase.title} className="p-8">
<tr> <h3 className="mb-3 text-2xl font-bold text-gray-900">{useCase.title}</h3>
<th className="px-6 py-4 text-left text-gray-900 font-semibold">Feature</th> <p className="mb-6 text-gray-600">{useCase.description}</p>
<th className="px-6 py-4 text-center text-gray-900 font-semibold">Free QR Tool</th> <ul className="space-y-2">
<th className="px-6 py-4 text-center text-primary-600 font-semibold">QR Master Manage</th> {useCase.points.map((point) => (
</tr> <li key={point} className="flex items-center gap-2">
</thead> <svg className="h-5 w-5 flex-shrink-0 text-green-500" fill="currentColor" viewBox="0 0 20 20">
<tbody className="divide-y divide-gray-200"> <path
{comparison.map((row, index) => ( fillRule="evenodd"
<tr key={index}> 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"
<td className="px-6 py-4 text-gray-900 font-medium">{row.feature}</td> clipRule="evenodd"
<td className="px-6 py-4 text-center"> />
{typeof row.free === 'boolean' ? ( </svg>
row.free ? ( <span className="text-gray-700">{point}</span>
<span className="text-green-500 text-2xl"></span>
) : (
<span className="text-red-500 text-2xl"></span>
)
) : (
<span className="text-gray-600">{row.free}</span>
)}
</td>
<td className="px-6 py-4 text-center">
{typeof row.qrMaster === 'boolean' ? (
<span className="text-green-500 text-2xl"></span>
) : (
<span className="text-primary-600 font-semibold">{row.qrMaster}</span>
)}
</td>
</tr>
))}
</tbody>
</table>
</Card>
</div>
</section>
{/* FAQ Section */}
<section className="py-20 bg-gray-50">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
Frequently Asked Questions
</h2>
</div>
<div className="space-y-6">
{faqs.map((faq, index) => (
<Card key={index} className="p-6">
<h3 className="text-lg font-semibold text-gray-900 mb-3">
{faq.question}
</h3>
<p className="text-gray-600">{faq.answer}</p>
</Card>
))}
</div>
</div>
</section>
{/* Pricing Teaser */}
<section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
Start Managing Your QR Codes Today
</h2>
</div>
<div className="grid md:grid-cols-3 gap-8">
{plans.map((plan, index) => (
<Card
key={index}
className={`p-8 ${plan.highlighted
? 'border-2 border-primary-600 shadow-xl relative'
: ''
}`}
>
{plan.highlighted && (
<div className="absolute -top-4 left-1/2 transform -translate-x-1/2 bg-primary-600 text-white px-4 py-1 rounded-full text-sm font-semibold">
Most Popular
</div>
)}
<div className="text-center mb-6">
<h3 className="text-2xl font-bold text-gray-900 mb-2">{plan.name}</h3>
<div className="flex items-baseline justify-center">
<span className="text-4xl font-bold text-gray-900">{plan.price}</span>
<span className="text-gray-600 ml-2">/{plan.period}</span>
</div>
</div>
<ul className="space-y-3 mb-8">
{plan.features.map((feature, idx) => (
<li key={idx} className="flex items-start space-x-3">
<CheckCircle2 className="w-5 h-5 text-green-500 flex-shrink-0 mt-0.5" />
<span className="text-gray-600">{feature}</span>
</li> </li>
))} ))}
</ul> </ul>
<Link href={plan.href}>
<Button
size="lg"
variant={plan.highlighted ? undefined : 'outline'}
className="w-full"
>
{plan.cta}
</Button>
</Link>
</Card> </Card>
))} ))}
</div> </div>
<div className="text-center mt-8 text-sm text-gray-600">
No credit card required Full features Cancel anytime
</div>
</div> </div>
</section> </section>
{/* Trust & CTA */} <section className="bg-gradient-to-r from-green-600 to-blue-600 py-20 text-white">
<section className="py-20 bg-gradient-to-r from-green-600 to-blue-600 text-white"> <div className="container mx-auto max-w-5xl px-4 text-center sm:px-6 lg:px-8">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-5xl text-center"> <h2 className="mb-6 text-4xl font-bold">Start managing your QR codes with one account</h2>
<h2 className="text-4xl font-bold mb-6"> <p className="mb-8 text-xl text-green-100">
Built for Teams and Businesses Keep dynamic updates, downloads, and scan reporting in one dashboard instead of spreading the workflow across files and ad hoc links.
</h2>
<p className="text-xl mb-8 text-green-100">
QR Master helps marketing teams, agencies, event organizers, and businesses manage their QR codes efficiently.
</p> </p>
<div className="flex flex-wrap justify-center gap-8 mb-8"> <div className="flex flex-col justify-center gap-4 sm:flex-row">
<div className="flex items-center space-x-2">
<CheckCircle2 className="w-6 h-6" />
<span>Built for retail, events, hospitality, and more</span>
</div>
<div className="flex items-center space-x-2">
<CheckCircle2 className="w-6 h-6" />
<span>Secure data handling</span>
</div>
<div className="flex items-center space-x-2">
<CheckCircle2 className="w-6 h-6" />
<span>Reliable uptime and performance</span>
</div>
</div>
<Link href="/signup"> <Link href="/signup">
<Button <Button
size="lg" size="lg"
variant="secondary" variant="secondary"
className="text-lg px-8 py-4 bg-white text-green-600 hover:bg-gray-100" className="w-full bg-white px-8 py-4 text-lg text-green-600 hover:bg-gray-100 sm:w-auto"
> >
Start Free Trial Get Started Free
</Button> </Button>
</Link> </Link>
<Link href="/pricing">
<Button
size="lg"
variant="outline"
className="w-full border-white px-8 py-4 text-lg text-white hover:bg-white/10 sm:w-auto"
>
View Pricing
</Button>
</Link>
</div>
</div> </div>
</section> </section>
</div> </div>

View File

@ -28,7 +28,7 @@ export default function PressPage() {
bullets: [ bullets: [
"Advanced customization options (colors, shapes, logos)", "Advanced customization options (colors, shapes, logos)",
"No hidden fees or mandatory subscriptions", "No hidden fees or mandatory subscriptions",
"High-resolution vector downloads (SVG, EPS, PDF)", "High-resolution downloads for print workflows",
"Privacy-focused with no data selling" "Privacy-focused with no data selling"
], ],
link: "https://www.1888pressrelease.com/qrmaster-net-launches-free-professional-qr-code-generator-f-pr-762219.html", link: "https://www.1888pressrelease.com/qrmaster-net-launches-free-professional-qr-code-generator-f-pr-762219.html",
@ -55,7 +55,7 @@ export default function PressPage() {
excerpt: "Duesseldorf-based startup unveils qrmaster.net, a comprehensive, free online QR code generator designed to serve as the ultimate bridge between the physical and digital worlds.", excerpt: "Duesseldorf-based startup unveils qrmaster.net, a comprehensive, free online QR code generator designed to serve as the ultimate bridge between the physical and digital worlds.",
bullets: [ bullets: [
"Advanced tracking capabilities with UTM builder for GA4 integration", "Advanced tracking capabilities with UTM builder for GA4 integration",
"100% Free professional templates and design customization", "Free templates and design options",
"Privacy-focused architecture with no data selling", "Privacy-focused architecture with no data selling",
"Dynamic QR codes that can be edited after printing" "Dynamic QR codes that can be edited after printing"
], ],

View File

@ -1,12 +1,17 @@
import React from 'react'; import React from 'react';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import PricingClient from './PricingClient'; import PricingClient from './PricingClient';
import SeoJsonLd from '@/components/SeoJsonLd';
import { AnswerFirstBlock } from '@/components/marketing/AnswerFirstBlock';
import { FAQSection } from '@/components/aeo/FAQSection';
import { breadcrumbSchema, faqPageSchema } from '@/lib/schema';
export const metadata: Metadata = { export const metadata: Metadata = {
title: { title: {
absolute: 'Pricing Plans | QR Master' absolute: 'Pricing Plans | QR Master',
}, },
description: 'Choose the perfect QR code plan for your needs. Free, Pro, and Business plans with dynamic QR codes, analytics, bulk generation, and custom branding.', description:
'Compare QR Master pricing plans. Free includes 3 active dynamic QR codes, Pro includes 50, and Business includes 500 plus bulk QR creation.',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/pricing', canonical: 'https://www.qrmaster.net/pricing',
}, },
@ -16,7 +21,8 @@ export const metadata: Metadata = {
}, },
openGraph: { openGraph: {
title: 'Pricing Plans | QR Master', title: 'Pricing Plans | QR Master',
description: 'Choose the perfect QR code plan for your needs.', description:
'Compare QR Master pricing plans. Free includes 3 active dynamic QR codes, Pro includes 50, and Business includes 500 plus bulk QR creation.',
url: 'https://www.qrmaster.net/pricing', url: 'https://www.qrmaster.net/pricing',
type: 'website', type: 'website',
images: [ images: [
@ -30,15 +36,83 @@ export const metadata: Metadata = {
}, },
}; };
const faqItems = [
{
question: 'How many dynamic QR codes are included in each plan?',
answer:
'Free includes 3 active dynamic QR codes. Pro includes 50 dynamic QR codes. Business includes 500 dynamic QR codes.',
},
{
question: 'Do all plans include static QR codes?',
answer:
'Yes. All plans include unlimited static QR codes.',
},
{
question: 'Which plan includes bulk QR creation?',
answer:
'Bulk QR creation is included in the Business plan.',
},
{
question: 'Which plans include analytics and branding?',
answer:
'The Free plan includes basic scan tracking. Pro adds advanced analytics and custom branding. Business includes everything from Pro plus bulk QR creation and priority email support.',
},
];
const breadcrumbItems = [
{ name: 'Home', url: '/' },
{ name: 'Pricing', url: '/pricing' },
];
export default function PricingPage() { export default function PricingPage() {
return ( return (
<> <>
<SeoJsonLd data={[breadcrumbSchema(breadcrumbItems), faqPageSchema(faqItems)]} />
<div className="bg-white">
<div className="container mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
<AnswerFirstBlock
whatIsIt="QR Master pricing is organized around how many active dynamic QR codes you need and whether you need advanced analytics, branding, or bulk creation. Free includes 3 active dynamic QR codes, Pro includes 50, and Business includes 500 plus bulk QR creation."
whenToUse={[
'Choose Free when you need a small number of active dynamic QR codes and unlimited static QR codes',
'Choose Pro when you need more active dynamic QR codes plus advanced analytics and custom branding',
'Choose Business when you need 500 active dynamic QR codes and the bulk QR creation workflow',
]}
comparison={{
leftTitle: 'Lower plans',
rightTitle: 'Higher plan adds',
items: [
{ label: 'Dynamic QR capacity', value: true, text: '3 or 50 active codes' },
{ label: 'Bulk QR creation', value: true, text: 'Not included before Business' },
{ label: 'Advanced analytics and branding', value: true, text: 'Basic or Pro-level only' },
],
}}
howTo={{
steps: [
'Estimate how many active dynamic QR codes you need at one time',
'Decide whether you also need advanced analytics, branding, or bulk creation',
'Choose the plan that matches the current workflow instead of paying for unused capacity',
],
}}
/>
</div>
<div className="container mx-auto max-w-5xl px-4 pb-4 sm:px-6 lg:px-8">
<FAQSection items={faqItems} title="Pricing questions" />
</div>
<div className="sr-only"> <div className="sr-only">
<h2>Compare our plans</h2> <h2>Compare our plans</h2>
<p>Find the best QR code solution for your business. From free personal tiers to enterprise-grade dynamic code management.</p> <p>
Free includes 3 active dynamic QR codes and unlimited static QR codes. Pro
includes 50 dynamic QR codes, advanced analytics, and custom branding.
Business includes 500 dynamic QR codes, everything from Pro, bulk QR creation
up to 1,000, and priority email support.
</p>
</div> </div>
<PricingClient /> <PricingClient />
</div>
</> </>
); );
} }

View File

@ -5,6 +5,8 @@ import { Card } from '@/components/ui/Card';
import SeoJsonLd from '@/components/SeoJsonLd'; import SeoJsonLd from '@/components/SeoJsonLd';
import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs'; import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs';
import { breadcrumbSchema } from '@/lib/schema'; import { breadcrumbSchema } from '@/lib/schema';
import { AnswerFirstBlock } from '@/components/marketing/AnswerFirstBlock';
import { FAQSection } from '@/components/aeo/FAQSection';
import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection'; import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection';
import { MarketingPageTracker, TrackedCtaLink } from '@/components/marketing/MarketingAnalytics'; import { MarketingPageTracker, TrackedCtaLink } from '@/components/marketing/MarketingAnalytics';
@ -12,8 +14,10 @@ export const metadata: Metadata = {
title: { title: {
absolute: 'QR Code Tracking & Analytics - Track Every Scan', absolute: 'QR Code Tracking & Analytics - Track Every Scan',
}, },
description: 'Track QR code scans with real-time analytics. Monitor location, device, time, and user behavior. Free QR code tracking software with detailed reports.', description:
keywords: 'qr code tracking, qr code analytics, track qr scans, qr code statistics, free qr tracking, qr code monitoring', 'Track QR code scans with analytics for time, device, and location context. Use dynamic QR codes to measure placements and keep printed campaigns accountable.',
keywords:
'qr code tracking, qr code analytics, track qr scans, dynamic qr tracking, qr scan analytics',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/qr-code-tracking', canonical: 'https://www.qrmaster.net/qr-code-tracking',
languages: { languages: {
@ -23,318 +27,430 @@ export const metadata: Metadata = {
}, },
openGraph: { openGraph: {
title: 'QR Code Tracking & Analytics - Track Every Scan', title: 'QR Code Tracking & Analytics - Track Every Scan',
description: 'Track QR code scans with real-time analytics. Monitor location, device, time, and user behavior.', description:
'Track QR code scans with analytics for time, device, and location context. Use dynamic QR codes to measure placements and campaigns.',
url: 'https://www.qrmaster.net/qr-code-tracking', url: 'https://www.qrmaster.net/qr-code-tracking',
type: 'website', type: 'website',
images: ['/og-image.png'], images: ['/og-image.png'],
}, },
twitter: { twitter: {
title: 'QR Code Tracking & Analytics - Track Every Scan', title: 'QR Code Tracking & Analytics - Track Every Scan',
description: 'Track QR code scans with real-time analytics. Monitor location, device, time, and user behavior.', description:
'Track QR code scans with analytics for time, device, and location context. Use dynamic QR codes to measure placements and campaigns.',
}, },
}; };
export default function QRCodeTrackingPage() { const trackingFeatures = [
const trackingFeatures = [
{ {
icon: '📊', title: 'Time-based scan activity',
title: 'Real-Time Analytics', description:
description: 'See scan data instantly as it happens. Monitor your QR code performance in real-time with live dashboards.', 'Review when scans happen so you can compare campaign bursts, peak service windows, or event timing.',
}, },
{ {
icon: '🌍', title: 'Location context',
title: 'Location Tracking', description:
description: 'Know exactly where your QR codes are being scanned. Track by country, city, and region.', 'See country, city, and region-level scan context in the dashboard to understand where scans are coming from.',
}, },
{ {
icon: '📱', title: 'Device mix',
title: 'Device Detection', description:
description: 'Identify which devices scan your codes. Track iOS, Android, desktop, and browser types.', 'Understand whether scans are happening on phone or desktop-heavy traffic patterns and adapt landing pages accordingly.',
}, },
{ {
icon: '🕐', title: 'Total and unique scan reporting',
title: 'Time-Based Reports', description:
description: 'Analyze scan patterns by hour, day, week, or month. Optimize your campaigns with timing insights.', 'Use scan counts to understand overall activity and compare repeated scans with broader reach.',
}, },
{ {
icon: '👥', title: 'Placement-ready measurement',
title: 'Unique vs Total Scans', description:
description: 'Distinguish between unique users and repeat scans. Measure true reach and engagement.', 'Track scans from print surfaces such as flyers, menus, signs, packaging, and event materials.',
}, },
{ {
icon: '📈', title: 'Dynamic QR workflow',
title: 'Campaign Performance', description:
description: 'Track ROI with UTM parameters. Measure conversion rates and campaign effectiveness.', 'Tracking works with dynamic QR codes that route through QR Master before the scanner reaches the final destination.',
}, },
]; ];
const useCases = [ const trackingUseCases = [
{ {
title: 'Marketing Campaigns', title: 'Marketing campaigns',
description: 'Track print ads, billboards, and product packaging to measure marketing ROI.', description:
benefits: ['Measure ad performance', 'A/B test campaigns', 'Track conversions'], 'Measure how printed placements such as flyers, signs, packaging inserts, or booth materials perform over time.',
benefits: ['Compare placements', 'Review campaign timing', 'See scan context in one dashboard'],
}, },
{ {
title: 'Event Management', title: 'Events',
description: 'Monitor event check-ins, booth visits, and attendee engagement in real-time.', description:
benefits: ['Live attendance tracking', 'Booth analytics', 'Engagement metrics'], 'Track which event materials drive scans before, during, and after the event instead of treating every print touchpoint the same.',
benefits: ['Compare booth and signage scans', 'Watch event-day traffic', 'Keep destinations updateable'],
}, },
{ {
title: 'Product Labels', title: 'Product and packaging',
description: 'Track product authenticity scans, manual downloads, and warranty registrations.', description:
benefits: ['Anti-counterfeiting', 'User registration tracking', 'Product analytics'], 'Measure which labels, inserts, or support links are getting scans after products leave the warehouse.',
benefits: ['Track support content usage', 'Compare packaging placements', 'Keep links current'],
}, },
{ {
title: 'Restaurant Menus', title: 'Restaurant and in-store surfaces',
description: 'See how many customers scan your menu QR codes and when peak times occur.', description:
benefits: ['Customer insights', 'Peak time analysis', 'Menu engagement'], 'Review scans from menus, table cards, windows, or counters and compare when in-store prompts actually get used.',
benefits: ['Spot peak scan periods', 'Compare service surfaces', 'Keep menu links current'],
}, },
]; ];
const comparisonData = [ const trackingComparison = [
{ feature: 'Real-Time Analytics', free: true, qrMaster: true }, { feature: 'Destination can change later', static: false, dynamic: true },
{ feature: 'Location Tracking', free: false, qrMaster: true }, { feature: 'Scan analytics', static: false, dynamic: true },
{ feature: 'Device Detection', free: false, qrMaster: true }, { feature: 'Placement comparison after print', static: false, dynamic: true },
{ feature: 'Unlimited Scans', free: false, qrMaster: true }, { feature: 'Reusable for campaigns that evolve', static: false, dynamic: true },
{ feature: 'Historical Data', free: '7 days', qrMaster: 'Unlimited' }, ];
{ feature: 'Export Reports', free: false, qrMaster: true },
{ feature: 'API Access', free: false, qrMaster: true },
];
const softwareSchema = { const faqItems = [
{
question: 'Can I track a static QR code?',
answer:
'Static QR codes store the destination directly in the image, so QR Master cannot add the redirect step needed for tracking. Tracking requires a dynamic QR workflow.',
},
{
question: 'What can I measure with QR code tracking?',
answer:
'QR Master can report scan activity such as time, device, and location context, along with total and unique scan reporting in the analytics views.',
},
{
question: 'Why does tracking use a dynamic QR code?',
answer:
'Tracking happens during the redirect step. A dynamic QR code routes the scan through QR Master first, which makes scan reporting possible before the user reaches the final destination.',
},
{
question: 'When is QR code tracking most useful?',
answer:
'It is most useful when you need to compare placements, campaign timing, or printed surfaces and want a measurable record instead of guessing which QR code prompt worked.',
},
];
const softwareSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'SoftwareApplication', '@type': 'SoftwareApplication',
'@id': 'https://www.qrmaster.net/qr-code-tracking#software', '@id': 'https://www.qrmaster.net/qr-code-tracking#software',
name: 'QR Master - QR Code Tracking & Analytics', name: 'QR Master - QR Code Tracking & Analytics',
applicationCategory: 'BusinessApplication', applicationCategory: 'BusinessApplication',
operatingSystem: 'Web Browser, iOS, Android', operatingSystem: 'Web Browser',
offers: { offers: {
'@type': 'Offer', '@type': 'Offer',
price: '0', price: '0',
priceCurrency: 'USD', priceCurrency: 'EUR',
availability: 'https://schema.org/InStock', availability: 'https://schema.org/InStock',
}, },
description:
description: 'Track QR code scans with real-time analytics. Monitor location, device, time, and user behavior with our free QR code tracking software.', 'Track QR code scans with analytics for time, device, and location context. Use dynamic QR codes to measure placements and campaigns.',
features: [ featureList: [
'Real-time analytics dashboard', 'Time-based scan reporting',
'Location tracking by country and city', 'Location context in analytics',
'Device detection (iOS, Android, Desktop)', 'Device mix reporting',
'Time-based scan reports', 'Total and unique scan reporting',
'Unique vs total scan tracking', 'Dynamic QR workflow for trackable printed placements',
'Campaign performance metrics',
'Unlimited scans',
'Export detailed reports',
], ],
}; };
const howToSchema = { const howToSchema = {
'@context': 'https://schema.org', '@context': 'https://schema.org',
'@type': 'HowTo', '@type': 'HowTo',
'@id': 'https://www.qrmaster.net/qr-code-tracking#howto', '@id': 'https://www.qrmaster.net/qr-code-tracking#howto',
name: 'How to Track QR Code Scans', name: 'How to track QR code scans',
description: 'Learn how to track and analyze QR code scans with real-time analytics', description: 'Create a dynamic QR code, deploy it, and review scan analytics from the QR Master dashboard.',
totalTime: 'PT5M', totalTime: 'PT5M',
step: [ step: [
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 1, position: 1,
name: 'Create QR Code', name: 'Create a dynamic QR code',
text: 'Sign up for free and create a dynamic QR code with tracking enabled', text: 'Create a dynamic QR code in QR Master so the scan can route through the tracking step first.',
url: 'https://www.qrmaster.net/signup', url: 'https://www.qrmaster.net/signup',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 2, position: 2,
name: 'Deploy QR Code', name: 'Deploy the QR code',
text: 'Download and place your QR code on marketing materials, products, or digital platforms', text: 'Place the QR code on the flyer, menu, sign, package, or event material you want to measure.',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 3, position: 3,
name: 'Monitor Analytics', name: 'Review analytics',
text: 'View real-time scan data including location, device, and time patterns in your dashboard', text: 'Open the dashboard to review scan context such as time, device, location, and total activity.',
url: 'https://www.qrmaster.net/analytics',
}, },
{ {
'@type': 'HowToStep', '@type': 'HowToStep',
position: 4, position: 4,
name: 'Optimize Campaigns', name: 'Improve the next placement',
text: 'Use insights to optimize placement, timing, and targeting of your QR code campaigns', text: 'Use the scan patterns to improve your next campaign, placement, or destination update.',
}, },
], ],
}; };
const breadcrumbItems: BreadcrumbItem[] = [ const faqSchema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
'@id': 'https://www.qrmaster.net/qr-code-tracking#faq',
mainEntity: faqItems.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
const breadcrumbItems: BreadcrumbItem[] = [
{ name: 'Home', url: '/' }, { name: 'Home', url: '/' },
{ name: 'QR Code Tracking', url: '/qr-code-tracking' }, { name: 'QR Code Tracking', url: '/qr-code-tracking' },
]; ];
const relatedUseCaseLinks = [ const relatedUseCaseLinks = [
{ {
href: '/use-cases/real-estate-sign-qr-codes', href: '/use-cases/real-estate-sign-qr-codes',
title: 'Real Estate Sign QR Codes', title: 'Real Estate Sign QR Codes',
description: 'Compare sign, brochure, and open-house scans without blending every property source together.', description:
'Compare sign, brochure, and open-house scans without blending every property source together.',
ctaLabel: 'Create your real estate QR code', ctaLabel: 'Create your real estate QR code',
}, },
{ {
href: '/use-cases/feedback-qr-codes', href: '/use-cases/feedback-qr-codes',
title: 'Feedback QR Codes', title: 'Feedback QR Codes',
description: 'Measure which service surfaces and follow-up prompts actually generate customer responses.', description:
'Measure which service surfaces and follow-up prompts actually generate customer responses.',
ctaLabel: 'Create your feedback QR code', ctaLabel: 'Create your feedback QR code',
}, },
{ {
href: '/use-cases/coupon-qr-codes', href: '/use-cases/coupon-qr-codes',
title: 'Coupon QR Codes', title: 'Coupon QR Codes',
description: 'Tie printed discount placements to measurable scans so you can compare promotion performance.', description:
'Tie printed discount placements to measurable scans so you can compare promotion performance.',
ctaLabel: 'Create your coupon QR code', ctaLabel: 'Create your coupon QR code',
}, },
{ {
href: '/use-cases', href: '/use-cases',
title: 'Explore the use-case hub', title: 'Explore the use-case hub',
description: 'Browse the first commercial workflows built around dynamic updates and measurable scans.', description:
'Browse the first commercial workflows built around dynamic updates and measurable scans.',
ctaLabel: 'Explore QR code use cases', ctaLabel: 'Explore QR code use cases',
}, },
]; ];
export default function QRCodeTrackingPage() {
return ( return (
<> <>
<SeoJsonLd data={[softwareSchema, howToSchema, breadcrumbSchema(breadcrumbItems)]} /> <SeoJsonLd data={[softwareSchema, howToSchema, faqSchema, breadcrumbSchema(breadcrumbItems)]} />
<MarketingPageTracker pageType="commercial" cluster="qr-tracking" /> <MarketingPageTracker pageType="commercial" cluster="qr-tracking" />
<div className="min-h-screen bg-white"> <div className="min-h-screen bg-white">
{/* Hero Section */}
<section className="relative overflow-hidden bg-gradient-to-br from-blue-50 via-white to-purple-50 py-20"> <section className="relative overflow-hidden bg-gradient-to-br from-blue-50 via-white to-purple-50 py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<Breadcrumbs items={breadcrumbItems} /> <Breadcrumbs items={breadcrumbItems} />
<div className="grid lg:grid-cols-2 gap-12 items-center"> <div className="grid items-center gap-12 lg:grid-cols-2">
<div className="space-y-8"> <div className="space-y-8">
<div className="inline-flex items-center space-x-2 bg-blue-100 text-blue-800 px-4 py-2 rounded-full text-sm font-semibold"> <div className="inline-flex items-center rounded-full bg-blue-100 px-4 py-2 text-sm font-semibold text-blue-800">
<span>📊</span> Trackable dynamic QR workflows
<span>Free QR Code Tracking</span>
</div> </div>
<h1 className="text-5xl lg:text-6xl font-bold text-gray-900 leading-tight"> <div className="space-y-5">
Track Every QR Code Scan with Powerful Analytics <h1 className="text-5xl font-bold leading-tight text-gray-900 lg:text-6xl">
Track every QR code scan with useful context
</h1> </h1>
<p className="text-xl leading-relaxed text-gray-600">
<p className="text-xl text-gray-600 leading-relaxed"> Use dynamic QR codes to measure scans by time, device, and location context,
Monitor your QR code performance in real-time. Get detailed insights on location, device, time, and user behavior. Make data-driven decisions with our free tracking software. so printed campaigns and physical placements stop being guesswork.
</p> </p>
</div>
<div className="flex flex-col sm:flex-row gap-4"> <div className="space-y-3">
<TrackedCtaLink href="/signup" ctaLabel="Start Tracking Free" ctaLocation="hero_primary" pageType="commercial" cluster="qr-tracking"> {[
<Button size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> 'Track printed placements with a dynamic QR workflow',
'Review time, device, and location context',
'Compare total and unique scan activity',
'Use one dashboard to improve the next campaign or placement',
].map((feature) => (
<div key={feature} className="flex items-center gap-3">
<div className="flex h-5 w-5 items-center justify-center rounded-full bg-green-500">
<svg className="h-3 w-3 text-white" 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>
</div>
<span className="text-gray-700">{feature}</span>
</div>
))}
</div>
<div className="flex flex-col gap-4 sm:flex-row">
<TrackedCtaLink
href="/signup"
ctaLabel="Start Tracking Free"
ctaLocation="hero_primary"
pageType="commercial"
cluster="qr-tracking"
>
<Button size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
Start Tracking Free Start Tracking Free
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
<TrackedCtaLink href="/signup" ctaLabel="Create Trackable QR Code" ctaLocation="hero_secondary" pageType="commercial" cluster="qr-tracking"> <TrackedCtaLink
<Button variant="outline" size="lg" className="text-lg px-8 py-4 w-full sm:w-auto"> href="/dynamic-qr-code-generator"
Create Trackable QR Code ctaLabel="Create Dynamic QR Code"
ctaLocation="hero_secondary"
pageType="commercial"
cluster="qr-tracking"
>
<Button variant="outline" size="lg" className="w-full px-8 py-4 text-lg sm:w-auto">
Create Dynamic QR Code
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
</div> </div>
<div className="flex items-center space-x-6 text-sm text-gray-600">
<div className="flex items-center space-x-2">
<svg className="w-5 h-5 text-green-500" 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>No credit card required</span>
</div>
<div className="flex items-center space-x-2">
<svg className="w-5 h-5 text-green-500" 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>Placement-ready reports</span>
</div>
</div>
</div> </div>
{/* Analytics Preview */}
<div className="relative"> <div className="relative">
<Card className="p-6 shadow-2xl"> <Card className="p-6 shadow-2xl">
<h3 className="font-semibold text-lg mb-4">Live Analytics Dashboard</h3> <h3 className="mb-4 text-lg font-semibold">Analytics overview</h3>
<div className="space-y-4"> <div className="space-y-4">
<div className="flex justify-between items-center pb-3 border-b"> <div className="flex items-center justify-between border-b pb-3">
<span className="text-gray-600">Placement view</span> <span className="text-gray-600">Placement view</span>
<span className="text-base font-semibold text-primary-600">Flyer vs booth vs table card</span> <span className="font-semibold text-primary-600">Flyer, sign, menu, package</span>
</div> </div>
<div className="flex justify-between items-center pb-3 border-b"> <div className="flex items-center justify-between border-b pb-3">
<span className="text-gray-600">Time trend</span> <span className="text-gray-600">Time trend</span>
<span className="text-base font-semibold text-primary-600">Lunch, event day, or campaign burst</span> <span className="font-semibold text-primary-600">Hourly and daily patterns</span>
</div> </div>
<div className="flex justify-between items-center pb-3 border-b"> <div className="flex items-center justify-between border-b pb-3">
<span className="text-gray-600">Location context</span> <span className="text-gray-600">Location context</span>
<span className="font-semibold">Region and city level view</span> <span className="font-semibold">Country, city, region</span>
</div> </div>
<div className="flex justify-between items-center"> <div className="flex items-center justify-between">
<span className="text-gray-600">Device context</span> <span className="text-gray-600">Device mix</span>
<span className="font-semibold">Phone, desktop, and scan mix</span> <span className="font-semibold">Phone or desktop traffic</span>
</div> </div>
</div> </div>
</Card> </Card>
<div className="absolute -top-4 -right-4 bg-green-500 text-white px-4 py-2 rounded-full text-sm font-semibold shadow-lg animate-pulse"> <div className="absolute -right-4 -top-4 rounded-full bg-green-500 px-4 py-2 text-sm font-semibold text-white shadow-lg">
Live Updates Dynamic QR required
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
{/* Tracking Features */} <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<section className="py-20 bg-gray-50"> <AnswerFirstBlock
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> whatIsIt="QR code tracking works when a dynamic QR code routes the scan through QR Master before the scanner reaches the final destination. That redirect step is what makes analytics such as time, device, and location context possible."
<div className="text-center mb-16"> whenToUse={[
<h2 className="text-4xl font-bold text-gray-900 mb-4"> 'You want to compare placements such as flyers, signs, menus, packaging, or event surfaces',
Powerful QR Code Tracking Features 'You need a measurable record of scans instead of relying on guesswork after print is deployed',
</h2> 'You expect the destination to change while keeping the same printed QR code in use',
<p className="text-xl text-gray-600 max-w-3xl mx-auto"> ]}
Get complete visibility into your QR code performance with our comprehensive analytics suite comparison={{
leftTitle: 'Static QR only',
rightTitle: 'Dynamic QR with tracking',
items: [
{ label: 'Destination can change later', value: true, text: 'Not available' },
{ label: 'Scan analytics', value: true, text: 'Not available' },
{ label: 'Placement comparison after print', value: true, text: 'Limited' },
],
}}
howTo={{
steps: [
'Create a dynamic QR code in QR Master',
'Place it on the print surface or campaign you want to measure',
'Review analytics and improve the next placement or destination update',
],
}}
/>
</div>
<div className="container mx-auto max-w-5xl px-4 pb-8 sm:px-6 lg:px-8">
<FAQSection items={faqItems} title="QR tracking questions" />
</div>
<section className="bg-gray-50 py-20">
<div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mb-16 text-center">
<h2 className="mb-4 text-4xl font-bold text-gray-900">What QR tracking helps you measure</h2>
<p className="mx-auto max-w-3xl text-xl text-gray-600">
These are the analytics surfaces the current product experience already supports without inventing extra claims.
</p> </p>
</div> </div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8"> <div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
{trackingFeatures.map((feature, index) => ( {trackingFeatures.map((feature) => (
<Card key={index} className="p-6 hover:shadow-lg transition-shadow"> <Card key={feature.title} className="p-6 transition-shadow hover:shadow-lg">
<div className="text-4xl mb-4">{feature.icon}</div> <h3 className="mb-2 text-xl font-semibold text-gray-900">{feature.title}</h3>
<h3 className="text-xl font-semibold text-gray-900 mb-2"> <p className="text-gray-600">{feature.description}</p>
{feature.title}
</h3>
<p className="text-gray-600">
{feature.description}
</p>
</Card> </Card>
))} ))}
</div> </div>
</div> </div>
</section> </section>
{/* Use Cases */}
<section className="py-20"> <section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto max-w-5xl px-4 sm:px-6 lg:px-8">
<div className="text-center mb-16"> <div className="mb-16 text-center">
<h2 className="text-4xl font-bold text-gray-900 mb-4"> <h2 className="mb-4 text-4xl font-bold text-gray-900">Tracking setup comparison</h2>
QR Code Tracking Use Cases <p className="text-xl text-gray-600">
</h2> Tracking is a dynamic QR workflow, not a static QR workflow with retroactive reporting.
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
See how businesses use QR code tracking to improve their operations
</p> </p>
</div> </div>
<div className="grid md:grid-cols-2 gap-8"> <Card className="overflow-hidden">
{useCases.map((useCase, index) => ( <table className="w-full">
<Card key={index} className="p-8"> <thead className="bg-gray-100">
<h3 className="text-2xl font-bold text-gray-900 mb-3"> <tr>
{useCase.title} <th className="px-6 py-4 text-left font-semibold text-gray-900">Capability</th>
</h3> <th className="px-6 py-4 text-center font-semibold text-gray-900">Static QR</th>
<p className="text-gray-600 mb-6"> <th className="px-6 py-4 text-center font-semibold text-primary-600">Dynamic QR tracking</th>
{useCase.description} </tr>
</thead>
<tbody className="divide-y divide-gray-200">
{trackingComparison.map((row) => (
<tr key={row.feature}>
<td className="px-6 py-4 font-medium text-gray-900">{row.feature}</td>
<td className="px-6 py-4 text-center text-gray-600">{row.static ? 'Yes' : 'No'}</td>
<td className="px-6 py-4 text-center font-semibold text-primary-600">
{row.dynamic ? 'Yes' : 'No'}
</td>
</tr>
))}
</tbody>
</table>
</Card>
</div>
</section>
<section className="bg-gray-50 py-20">
<div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mb-16 text-center">
<h2 className="mb-4 text-4xl font-bold text-gray-900">Where tracking is most useful</h2>
<p className="mx-auto max-w-3xl text-xl text-gray-600">
Use tracking where physical surfaces or campaigns need measurable follow-through after they are deployed.
</p> </p>
</div>
<div className="grid gap-8 md:grid-cols-2">
{trackingUseCases.map((useCase) => (
<Card key={useCase.title} className="p-8">
<h3 className="mb-3 text-2xl font-bold text-gray-900">{useCase.title}</h3>
<p className="mb-6 text-gray-600">{useCase.description}</p>
<ul className="space-y-2"> <ul className="space-y-2">
{useCase.benefits.map((benefit, idx) => ( {useCase.benefits.map((benefit) => (
<li key={idx} className="flex items-center space-x-2"> <li key={benefit} className="flex items-center gap-2">
<svg className="w-5 h-5 text-green-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"> <svg className="h-5 w-5 flex-shrink-0 text-green-500" 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" /> <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> </svg>
<span className="text-gray-700">{benefit}</span> <span className="text-gray-700">{benefit}</span>
</li> </li>
@ -346,57 +462,6 @@ export default function QRCodeTrackingPage() {
</div> </div>
</section> </section>
{/* Comparison Table */}
<section className="py-20 bg-gray-50">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-5xl">
<div className="text-center mb-16">
<h2 className="text-4xl font-bold text-gray-900 mb-4">
QR Master vs Free Tools
</h2>
<p className="text-xl text-gray-600">
See why businesses choose QR Master for QR code tracking
</p>
</div>
<Card className="overflow-hidden">
<table className="w-full">
<thead className="bg-gray-100">
<tr>
<th className="px-6 py-4 text-left text-gray-900 font-semibold">Feature</th>
<th className="px-6 py-4 text-center text-gray-900 font-semibold">Free Tools</th>
<th className="px-6 py-4 text-center text-primary-600 font-semibold">QR Master</th>
</tr>
</thead>
<tbody className="divide-y divide-gray-200">
{comparisonData.map((row, index) => (
<tr key={index}>
<td className="px-6 py-4 text-gray-900 font-medium">{row.feature}</td>
<td className="px-6 py-4 text-center">
{typeof row.free === 'boolean' ? (
row.free ? (
<span className="text-green-500 text-2xl"></span>
) : (
<span className="text-red-500 text-2xl"></span>
)
) : (
<span className="text-gray-600">{row.free}</span>
)}
</td>
<td className="px-6 py-4 text-center">
{typeof row.qrMaster === 'boolean' ? (
<span className="text-green-500 text-2xl"></span>
) : (
<span className="text-primary-600 font-semibold">{row.qrMaster}</span>
)}
</td>
</tr>
))}
</tbody>
</table>
</Card>
</div>
</section>
<GrowthLinksSection <GrowthLinksSection
eyebrow="Tracking-led workflows" eyebrow="Tracking-led workflows"
title="Where scan visibility matters most" title="Where scan visibility matters most"
@ -406,24 +471,41 @@ export default function QRCodeTrackingPage() {
cluster="qr-tracking" cluster="qr-tracking"
/> />
{/* CTA Section */} <section className="bg-gradient-to-r from-primary-600 to-purple-600 py-20 text-white">
<section className="py-20 bg-gradient-to-r from-primary-600 to-purple-600 text-white"> <div className="container mx-auto max-w-4xl px-4 text-center sm:px-6 lg:px-8">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-4xl text-center"> <h2 className="mb-6 text-4xl font-bold">Start tracking your QR codes today</h2>
<h2 className="text-4xl font-bold mb-6"> <p className="mb-8 text-xl text-primary-100">
Start Tracking Your QR Codes Today
</h2>
<p className="text-xl mb-8 text-primary-100">
Measure scans with enough context to improve the next placement, campaign, or printed workflow. Measure scans with enough context to improve the next placement, campaign, or printed workflow.
</p> </p>
<div className="flex flex-col sm:flex-row gap-4 justify-center"> <div className="flex flex-col justify-center gap-4 sm:flex-row">
<TrackedCtaLink href="/signup" ctaLabel="Create Free Account" ctaLocation="footer_primary" pageType="commercial" cluster="qr-tracking"> <TrackedCtaLink
<Button size="lg" variant="secondary" className="text-lg px-8 py-4 w-full sm:w-auto bg-white text-primary-600 hover:bg-gray-100"> href="/signup"
ctaLabel="Create Free Account"
ctaLocation="footer_primary"
pageType="commercial"
cluster="qr-tracking"
>
<Button
size="lg"
variant="secondary"
className="w-full bg-white px-8 py-4 text-lg text-primary-600 hover:bg-gray-100 sm:w-auto"
>
Create Free Account Create Free Account
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
<TrackedCtaLink href="/pricing" ctaLabel="View Pricing" ctaLocation="footer_secondary" pageType="commercial" cluster="qr-tracking"> <TrackedCtaLink
<Button size="lg" variant="outline" className="text-lg px-8 py-4 w-full sm:w-auto border-white text-white hover:bg-white/10"> href="/dynamic-qr-code-generator"
View Pricing ctaLabel="Create Dynamic QR Code"
ctaLocation="footer_secondary"
pageType="commercial"
cluster="qr-tracking"
>
<Button
size="lg"
variant="outline"
className="w-full border-white px-8 py-4 text-lg text-white hover:bg-white/10 sm:w-auto"
>
Create Dynamic QR Code
</Button> </Button>
</TrackedCtaLink> </TrackedCtaLink>
</div> </div>

View File

@ -8,7 +8,7 @@ import en from '@/i18n/en.json';
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'QR Master Features | Tracking, Analytics & Bulk Generation', title: 'QR Master Features | Tracking, Analytics & Bulk Generation',
description: 'Explore QR Master features: Dynamic QR codes, real-time analytics, bulk generation, custom branding, and API access.', description: 'Explore QR Master features: dynamic QR codes, scan analytics, bulk generation, custom branding, and print-ready exports.',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/features', canonical: 'https://www.qrmaster.net/features',
}, },

View File

@ -29,9 +29,10 @@ export const AnswerFirstBlock: React.FC<AnswerFirstBlockProps> = ({
howTo, howTo,
className, className,
}) => { }) => {
const leftValueFor = (item: ComparisonItem) => item.text ?? 'No';
return ( return (
<div className={`my-8 space-y-8 ${className || ''}`}> <section className={`my-8 space-y-8 ${className || ''}`} aria-label="Quick answer">
{/* 1. Definition */}
<div className="prose max-w-none"> <div className="prose max-w-none">
<h2 className="text-2xl font-bold text-gray-900 mb-4">Quick Summary</h2> <h2 className="text-2xl font-bold text-gray-900 mb-4">Quick Summary</h2>
<p className="text-lg text-gray-700 leading-relaxed font-medium"> <p className="text-lg text-gray-700 leading-relaxed font-medium">
@ -40,7 +41,6 @@ export const AnswerFirstBlock: React.FC<AnswerFirstBlockProps> = ({
</div> </div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6"> <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
{/* 2. Usage Reasons */}
<Card className="p-6 bg-blue-50 border-blue-100"> <Card className="p-6 bg-blue-50 border-blue-100">
<h3 className="font-semibold text-lg text-blue-900 mb-4">When to use this?</h3> <h3 className="font-semibold text-lg text-blue-900 mb-4">When to use this?</h3>
<ul className="space-y-3"> <ul className="space-y-3">
@ -53,41 +53,48 @@ export const AnswerFirstBlock: React.FC<AnswerFirstBlockProps> = ({
</ul> </ul>
</Card> </Card>
{/* 3. Mini Comparison */}
<Card className="p-6 bg-white border-gray-200"> <Card className="p-6 bg-white border-gray-200">
<h3 className="font-semibold text-lg text-gray-900 mb-4">Comparison</h3> <h3 className="font-semibold text-lg text-gray-900 mb-4">Comparison</h3>
<div className="space-y-4 text-sm"> <div className="overflow-x-auto">
<div className="grid grid-cols-3 gap-2 font-medium text-gray-500 text-xs uppercase tracking-wider pb-2 border-b"> <table className="w-full text-sm">
<span>Feature</span> <thead>
<span className="text-center">{comparison.leftTitle}</span> <tr className="border-b text-xs uppercase tracking-wider text-gray-500">
<span className="text-center">{comparison.rightTitle}</span> <th scope="col" className="py-2 pr-3 text-left font-medium">Feature</th>
</div> <th scope="col" className="px-3 py-2 text-center font-medium">{comparison.leftTitle}</th>
<th scope="col" className="pl-3 py-2 text-center font-medium">{comparison.rightTitle}</th>
</tr>
</thead>
<tbody>
{comparison.items.map((item, idx) => ( {comparison.items.map((item, idx) => (
<div key={idx} className="grid grid-cols-3 gap-2 items-center"> <tr key={idx} className="border-b last:border-b-0">
<span className="text-gray-700 font-medium">{item.label}</span> <th scope="row" className="py-3 pr-3 text-left font-medium text-gray-700">
<div className="flex justify-center"> {item.label}
{/* Logic for Left Side (usually Static/Free) might be false/X or true/Check based on context. </th>
But user said "Static vs Dynamic / Free vs Pro". <td className="px-3 py-3 text-center text-gray-600">
Let's assume the comparison object passes explicit logic or we simplify. {leftValueFor(item)}
For now, assuming ComparisonItem has a single boolean for the 'right' side vs left? </td>
Actually, let's make it simpler: Items have label, and we show check/x for both columns? <td className="pl-3 py-3">
Wait, the user requirement is "Mini-Vergleich ... (3-5 Zeilen)". <div className="flex items-center justify-center text-gray-700">
Let's keep it simple: Feature | A | B {item.value ? (
*/} <>
{/* Placeholder logic: Assuming 'value' applies to the Right Side (Pro/Dynamic) usually being better? <Check className="w-4 h-4 text-green-600" aria-hidden="true" />
Actually, let's request structure: `leftValue`, `rightValue`. <span className="sr-only">Included</span>
*/} </>
{item.text ? <span className="text-gray-600">{item.text}</span> : <X className="w-4 h-4 text-gray-400" />} ) : (
</div> <>
<div className="flex justify-center"> <X className="w-4 h-4 text-red-400" aria-hidden="true" />
{item.value ? <Check className="w-4 h-4 text-green-600" /> : <X className="w-4 h-4 text-red-400" />} <span className="sr-only">Not included</span>
</div> </>
)}
</div> </div>
</td>
</tr>
))} ))}
</tbody>
</table>
</div> </div>
</Card> </Card>
{/* 4. How To Steps */}
<Card className="p-6 bg-green-50 border-green-100"> <Card className="p-6 bg-green-50 border-green-100">
<h3 className="font-semibold text-lg text-green-900 mb-4">How it works</h3> <h3 className="font-semibold text-lg text-green-900 mb-4">How it works</h3>
<ol className="space-y-4"> <ol className="space-y-4">
@ -102,6 +109,6 @@ export const AnswerFirstBlock: React.FC<AnswerFirstBlockProps> = ({
</ol> </ol>
</Card> </Card>
</div> </div>
</div> </section>
); );
}; };