Compare commits

..

No commits in common. "master" and "dynamisch" have entirely different histories.

378 changed files with 9917 additions and 27715 deletions

0
..md Normal file
View File

View File

@ -1,98 +0,0 @@
# Product Marketing Context
*Last updated: 03. März 2026*
## Product Overview
**One-liner:** Professionelle dynamische QR-Codes mit Fokus auf Analytics, Bulk-Erstellung und Datenschutz.
**What it does:** QR Master ermöglicht es Unternehmen und Marketern, QR-Codes zu erstellen, deren Zieladresse auch nach dem Druck geändert werden kann (Dynamic QRs). Es bietet detaillierte Scan-Statistiken, Bulk-Generierung für große Mengen und spezifische Tools für WiFi, Menüs, vCards etc.
**Product category:** QR Code Management Platform / Marketing Analytics Tool.
**Product type:** SaaS (Next.js/Prisma Stack).
**Business model:** Freemium (Abonnement-Modell über Stripe).
- **FREE:** 8 dynamische Codes, unlimitierte statische Codes.
- **PRO:** 50 dynamische Codes, Custom Branding, erweiterte Analytics.
- **BUSINESS:** 500 dynamische Codes, Bulk-Upload, API-Zugriff.
## Target Audience
**Target companies:** Gastronomie (Restaurants, Cafés), Marketing-Agenturen, Event-Veranstalter, Einzelhandel (Packaging/Labels).
**Decision-makers:** Marketing Manager, Restaurant-Inhaber, Betriebsleiter, IT-Verantwortliche (wegen DSGVO/Security).
**Primary use case:** Aktualisierbare QR-Codes für Print-Materialien, um Druckkosten bei Änderungen zu sparen.
**Jobs to be done:**
- "Ersetze meine gedruckte Speisekarte digital, ohne bei jeder Preisänderung neu drucken zu müssen."
- "Miss den Erfolg meiner Flyer-Kampagne durch genaue Scan-Daten."
- "Erstelle 1.000 individuelle QR-Codes für meine Produktverpackungen in einem Rutsch."
**Use cases:**
- Digitale Speisekarten (PDF QR).
- Kontaktlose Vernetzung (vCard).
- WLAN-Zugang für Kunden (WiFi QR).
- Marketing-Kampagnen mit Tracking (UTM-Support).
## Personas
| Persona | Cares about | Challenge | Value we promise |
|---------|-------------|-----------|------------------|
| Restaurant-Inhaber | Kosten, Einfachheit | Menüänderungen erfordern Neudruck | Ein QR-Code für immer, Menü online ändern |
| Marketing Manager | Daten, ROI | Erfolg von Print-Kampagnen ist schwer messbar | Detaillierte Analytics (Scans, Location, Device) |
| Logistik/Retail | Skalierung, Zeit | Tausende Codes manuell erstellen | Bulk-Generierung via Excel/CSV (bis 1.000 Stk.) |
| IT-Sicherheitsbeauftragter | Datenschutz, DSGVO | Tracking von IPs ist rechtlich kritisch | Hashed IPs & Anonymisierung (GDPR-ready) |
## Problems & Pain Points
**Core problem:** Statische QR-Codes sind nach dem Druck "tot", wenn sich der Link ändert. Das führt zu teuren Nachdrucken und Müll.
**Why alternatives fall short:**
- Viele kostenlose Generatoren leiten nach einiger Zeit auf Werbung um oder verlangen plötzlich Geld.
- Enterprise-Lösungen (Beaconstac etc.) sind für KMUs oft zu teuer und überladen.
- Mangelnder Datenschutz bei vielen US-Anbietern.
**What it costs them:** Zeit für manuelle Erstellung, hohe Druckkosten bei Fehlern, verlorene Tracking-Daten.
**Emotional tension:** Stress bei Fehlern im Druck; Sorge vor Abmahnungen (Datenschutz).
## Competitive Landscape
**Direct:** QR-Code-Generator.com, Beaconstac, Flowcode.
**Secondary:** Canva (QR Feature), Adobe Express.
**Indirect:** Linktree, NFC-Tags.
**Unterschied:** QR Master ist spezialisierter als Design-Tools, aber preiswerter und datenschutzfreundlicher als US-Enterprise-Lösungen.
## Differentiation
**Key differentiators:**
- **Privacy-First:** Hashed IPs (DSGVO-konform), kein PII-Storage.
- **Bulk-Power:** Excel/CSV-Import bis zu 1.000 Zeilen im Business Plan.
- **Nischen-Tools:** Hochspezialisierte Generatoren für WiFi, Crypto, Feedback etc.
**How we do it differently:** Wir trennen die Erstellung (Tools) klar vom Management (Dashboard) und bieten für beides optimierte Flows.
**Why that's better:** Nutzer finden sofort das richtige Tool für ihr Problem und können später nahtlos ins Management-System wechseln.
## Objections
| Objection | Response |
|-----------|----------|
| "Warum für QR-Codes bezahlen?" | Statische sind kostenlos, aber dynamische sparen Druckkosten bei Link-Änderungen und bieten Tracking. |
| "Ist Tracking erlaubt?" | Ja, wir nutzen Hashed IPs und IP-Anonymisierung, um DSGVO-konform zu bleiben. |
| "Was passiert, wenn ich kündige?" | Statische Codes bleiben ewig aktiv. Dynamische werden pausiert, können aber jederzeit reaktiviert werden. |
## Switching Dynamics
**Push:** Frust über teure Nachdrucke oder unzuverlässige Gratis-Generatoren.
**Pull:** Wunsch nach professionellen Analytics und einfacher Bulk-Verarbeitung.
**Habit:** "Wir drucken einfach neue Flyer" (Teuer und ineffizient).
**Anxiety:** Sorge, dass QR-Codes nach dem Wechsel nicht mehr funktionieren.
## Customer Language
**How they describe the problem:**
- "Link ändern nach Druck"
- "QR-Code Tracking DSGVO"
- "Bulk QR Code erstellen Excel"
**Words to use:** "Dynamisch", "Trackbar", "DSGVO-konform", "Änderbar nach Druck", "Bulk-Power".
**Words to avoid:** "Permanent" (wenn dynamisch gemeint ist), "Tracking" (ohne Datenschutz-Hinweis).
## Brand Voice
**Tone:** Professionell, vertrauenswürdig, effizient.
**Style:** Direkt, technisch versiert, aber einfach verständlich.
**Personality:** Der zuverlässige Partner für moderne Print-Digital-Workflows.
## Proof Points
**Metrics:** Bis zu 1.000 Codes pro Upload, 8 kostenlose dynamische QRs.
**Testimonials:** (Noch zu ergänzen basierend auf User-Feedback)
**Value themes:**
| Theme | Proof |
|-------|-------|
| Kosten sparen | Reprint-Calculator zeigt Ersparnis bei dynamischen Codes. |
| Datenschutz | Hashed IP Implementation im Codebase (`src/lib/hash.ts`). |
| Skalierung | Bulk-Feature im Business Plan (`src/app/(main)/(app)/bulk-creation`). |
## Goals
**Business goal:** Erhöhung der PRO- und BUSINESS-Abonnements.
**Conversion action:** Account-Erstellung (Signup) oder Start eines Free-Trials.

View File

@ -52,4 +52,4 @@ logs
*.log
# Prisma
# prisma/migrations # Now included in Docker image for deployment
prisma/migrations

View File

@ -1,12 +1,7 @@
# Database credentials (used by both db and web services in docker-compose.yml)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=qrmaster
# Note: DATABASE_URL and DIRECT_URL are auto-generated from POSTGRES_* vars in docker-compose.yml
# You don't need to set them here when using Docker Compose
NODE_ENV=production
PORT=3000
DATABASE_URL=postgresql://postgres:postgres@db:5432/qrmaster?schema=public
DIRECT_URL=postgresql://postgres:postgres@db:5432/qrmaster?schema=public
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=CHANGE_ME
NEXT_PUBLIC_APP_URL=http://localhost:3000

View File

@ -1,6 +0,0 @@
{
"extends": [
"next/core-web-vitals",
"next/typescript"
]
}

2
.gitignore vendored
View File

@ -36,7 +36,7 @@ yarn-error.log*
next-env.d.ts
# prisma
# /prisma/migrations/ # Now tracked in Git for deployment
/prisma/migrations/
# docker
docker-compose.override.yml

View File

@ -1,331 +0,0 @@
# AEO/GEO Implementation Plan — 22 Blog Posts
## Status: Template Created, Ready for Batch Implementation
**Date**: 2026-03-06
**Objective**: Optimize all 22 QR Master blog posts for AI search visibility (Perplexity, ChatGPT, Claude, Google AI Overviews)
---
## What Was Done
**POST #1: `trackable-qr-codes`** — Schema + Author Bio + Inline Citations
**POSTS #2-3**: Ready for implementation (see template below)
📋 **POSTS #4-22**: Use standardized template below
---
## AEO/GEO Optimization Template
### For Each Blog Post, Add:
#### **1. Schema Markup (JSON-LD)**
```javascript
// Add new "schema" field to post object:
schema: {
article: {
"@context": "https://schema.org",
"@type": "Article",
"headline": post.title,
"description": post.description,
"image": post.image,
"datePublished": post.datePublished,
"dateModified": post.dateModified,
"author": {
"@type": "Person",
"name": "Timo Schmidt",
"jobTitle": "QR Code & Marketing Expert",
"url": "https://www.qrmaster.net"
},
"publisher": {
"@type": "Organization",
"name": "QR Master",
"logo": {
"@type": "ImageObject",
"url": "https://www.qrmaster.net/logo.svg"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": `https://www.qrmaster.net/blog/${post.slug}`
}
},
// IF post has FAQ section:
faqPage: {
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": post.faq.map(item => ({
"@type": "Question",
"name": item.question,
"acceptedAnswer": {
"@type": "Answer",
"text": item.answer.replace(/<[^>]*>/g, '')
}
}))
},
// IF post is a How-To (like utm-parameter-qr-codes):
howTo: {
"@context": "https://schema.org",
"@type": "HowTo",
"name": post.title,
"step": post.keySteps.map((step, idx) => ({
"@type": "HowToStep",
"position": idx + 1,
"name": `Step ${idx + 1}`,
"text": step
}))
}
}
```
#### **2. Author Metadata**
```javascript
// Add to post object:
authorName: "Timo Schmidt",
authorTitle: "Product Lead & QR Code Expert",
```
#### **3. Content Structure Additions**
Add this block at the **very beginning** of the `content` field (after `<div class="blog-content">`):
```html
<div class="post-metadata bg-blue-50 p-3 rounded mb-6 border-l-4 border-blue-500">
<p class="text-sm text-gray-700">
<strong>Author:</strong> Timo Schmidt, QR Code & Marketing Expert at QR Master<br/>
📅 <strong>Published:</strong> [Full Date] | <strong>Last updated:</strong> [Full Date]
</p>
</div>
```
#### **4. Inline Citation Format**
For every statistic or claim from `sources[]`, convert to:
```html
<!-- Before: -->
<!-- Just a claim with no source -->
<!-- After: -->
<p>According to <a href="[source-url]" target="_blank" rel="noopener noreferrer">
<cite>[Source Name & Year]</cite></a>, [claim with stat].</p>
<!-- OR for blockquotes: -->
<blockquote>
"[Quote here]"
<footer><cite><a href="[url]" target="_blank">[Source]</a></cite></footer>
</blockquote>
```
#### **5. Freshness Signal**
In `dateModified` and `updatedAt` — already correct from previous fixes
In content metadata div — show the date clearly (see above)
---
## Priority Implementation Order
### **TIER 1: Immediate (High AI Citation Impact)**
1. ✅ **trackable-qr-codes** — Schema + Author + Citations (DONE)
2. ⏳ **qr-code-scan-statistics-2026** — Many stats, needs inline citations
3. ⏳ **dynamic-vs-static-qr-codes** — Comparison post, needs structure
4. ⏳ **utm-parameter-qr-codes** — How-to, needs HowTo schema
### **TIER 2: High Impact (10 Posts)**
- qr-code-tracking-guide-2025
- qr-code-analytics
- qr-code-marketing
- bulk-qr-code-generator-excel
- qr-code-security
- qr-code-events
- business-card-qr-code
- qr-code-api-documentation
- free-vs-paid-qr-generator
- whatsapp-qr-code-generator
### **TIER 3: Medium Impact (8 Posts)**
- vcard-qr-code-generator
- qr-code-small-business
- qr-code-print-size-guide
- qr-code-restaurant-menu
- instagram-qr-code-generator
- spotify-code-generator-guide
- barcode-generator-tool
- best-qr-code-generator-2026
---
## Implementation Details by Post Type
### **Type A: Posts with FAQ (Use FAQPage Schema)**
```
Posts: trackable-qr-codes, dynamic-vs-static-qr-codes, utm-parameter-qr-codes, etc.
Action: Add schema.faqPage with all FAQ items
```
### **Type B: How-To Posts (Use HowTo Schema)**
```
Posts: utm-parameter-qr-codes, qr-code-tracking-guide-2025, qr-code-print-size-guide
Action: Add schema.howTo with keySteps mapped to HowToStep
```
### **Type C: Statistics/Research Posts (Focus on Citations)**
```
Posts: qr-code-scan-statistics-2026, qr-code-analytics
Action:
1. Add inline <cite> for every statistic
2. Add "According to [Source]" statements
3. Use blockquotes for key data points
```
### **Type D: Tool/Generator Posts (Focus on Clarity)**
```
Posts: vcard-qr-code-generator, spotify-code-generator-guide, etc.
Action:
1. Add clear definition in first paragraph
2. Add tool comparison if relevant
3. Add step-by-step usage (HowTo schema)
```
---
## Citation Formatting Examples
### **Before (Weak for AI):**
```html
<p>QR codes are popular. According to market research, adoption is growing.</p>
```
### **After (AI-Friendly):**
```html
<p>QR codes are popular. According to <cite><a href="https://www.mordorintelligence.com/..."
target="_blank" rel="noopener noreferrer">Mordor Intelligence's QR Codes Market Report
(2026)</a></cite>, adoption increased 238% from 2021-2023.</p>
```
### **For Statistics:**
```html
<!-- Weak -->
<p>85% of users scan QR codes.</p>
<!-- Strong -->
<p><strong>Key Statistic:</strong> <cite><a href="https://bitly.com/blog/..." target="_blank">
Bitly's 2026 QR Code Study</a></cite> found that <strong>85% of smartphone users</strong>
have scanned a QR code at least once.</p>
```
### **For Expert Quotes:**
```html
<!-- Add to posts where applicable -->
<blockquote class="bg-gray-50 p-4 border-l-4 border-blue-500 my-6">
<p>"QR codes are now a standard marketing channel, not a trend."</p>
<footer>
<strong>Timo Schmidt</strong>,
<cite><a href="https://www.qrmaster.net">Product Lead at QR Master</a></cite>
</footer>
</blockquote>
```
---
## Expected AEO/GEO Impact
Based on Princeton GEO research:
| Optimization | Impact | QR Master Potential |
|-------------|--------|-------------------|
| Article Schema | +5-10% | Apply to all 22 posts |
| FAQ Schema | +15-20% | 12 posts have FAQ |
| HowTo Schema | +12-15% | 8 posts are how-tos |
| Inline Citations | +40% | Stats posts: +40% |
| Author Attribution | +25% | All posts: +25% |
| Combined Effect | **+80-120%** | Full implementation |
**Conservative estimate**: 12-15 posts with full implementation could see **3-5x improvement** in AI citation likelihood.
---
## Monitoring & Validation
### **After Implementation, Check:**
1. **Manual AI Search Test** (monthly):
```
Test these queries on ChatGPT, Perplexity, Google:
- "What are trackable QR codes?" → Expect: qrmaster cite
- "How to create dynamic QR codes?" → Expect: qrmaster cite
- "Best QR code generator for tracking?" → Expect: qrmaster cite
```
2. **Schema Validation**:
```
Use: https://schema.org/validator
Check each post has valid Article + FAQ/HowTo schema
```
3. **Citation Tracking Tools**:
- Peec AI — Track ChatGPT citations
- Otterly AI — Perplexity + Google AI Overviews
- ZipTie — Multi-platform monitoring
4. **Analytics**:
- GA4: Monitor referral traffic from ai.google.com, perplexity.ai, openai.com
- Look for uptick in branded queries + QR-related queries
---
## Next Steps
### **Immediate (This Week)**
1. ✅ Template created (trackable-qr-codes as example)
2. ⏳ **Action**: Apply schema + citations to TIER 1 posts (4 posts)
3. ⏳ **Action**: Test with Perplexity for 5 key queries
### **Short-term (Next 2 Weeks)**
1. Apply schema to TIER 2 (10 posts)
2. Add inline citations across all 22 posts
3. Test again on ChatGPT + Google
### **Ongoing**
1. Monitor AI citations monthly
2. Update outdated stats/citations quarterly
3. Refresh "Last updated" dates regularly
---
## Files to Modify
**Primary**: `src/lib/blog-data.ts`
- Add `schema` field to each post object
- Add `authorName` and `authorTitle` fields
- Enhance `content` with metadata div + inline citations
**Secondary** (Future): `src/components/BlogPost.tsx` or similar
- Render schema as `<script type="application/ld+json">` tags
- Display author metadata visually
- Show "Last updated" date prominently
---
## Template Code (Ready to Use)
See `trackable-qr-codes` post in `blog-data.ts` for the full implementation example.
**Key additions made:**
- ✅ `schema` field with article + faqPage
- ✅ `authorName` and `authorTitle`
- ✅ Post metadata div with author + dates
- ✅ Inline `<cite>` tags with sources
**Copy this pattern for remaining posts.**
---
**Status**: Template ready. Awaiting implementation across remaining 21 posts.
**Estimated Time**: 6-8 hours for full implementation (can parallelize with developer)
**Expected ROI**: 3-5x improvement in AI citation likelihood for competitive QR queries

307
AGENTS.md
View File

@ -1,307 +0,0 @@
# Universal AI Coding Agent Workflow (Codex / Gemini / Claude)
## Workflow Orchestration
### 1. Plan Mode Default
- Enter planning mode for ANY non-trivial task (3+ steps or architecture decisions)
- Analyze the codebase before making changes
- Break problems into clear subtasks
- Produce an implementation plan before writing code
- If assumptions are uncertain, inspect files or run tools first
- Prefer incremental progress over large rewrites
Plan format:
PLAN
1. Understand the task
2. Identify affected files
3. Design the implementation
4. Implement step-by-step
5. Verify results
---
# Multi-Agent Strategy
### 2. Agent Decomposition
Use specialized agents for complex work.
Core roles:
- Orchestrator Agent
- Research Agent
- Implementation Agent
- Test Agent
- Code Review Agent
- Debug Agent
- Documentation Agent
Rules:
- One responsibility per agent
- Prefer parallel execution
- Agents should operate on independent files when possible
- The orchestrator coordinates execution
---
# Agent Responsibilities
### Orchestrator Agent
- analyzes the user request
- creates task list
- assigns tasks to agents
- merges results
### Research Agent
- scans repository
- searches dependencies
- analyzes architecture
- produces context summary
### Implementation Agent
- writes code
- edits files
- follows project conventions
- implements features
### Test Agent
- writes tests
- verifies functionality
- checks edge cases
### Code Review Agent
- reviews diffs
- checks maintainability
- suggests improvements
### Debug Agent
- analyzes logs
- identifies root causes
- implements fixes
### Documentation Agent
- updates docs
- writes README sections
- explains new features
---
# Execution Pipeline
### 3. Execution Phases
PHASE 1 — Discovery
- explore repository
- load relevant files
- understand architecture
PHASE 2 — Planning
- generate implementation plan
- break plan into tasks
PHASE 3 — Task Creation
Create tasks like:
[ ] analyze codebase
[ ] implement feature
[ ] add tests
[ ] review code
[ ] update documentation
PHASE 4 — Implementation
- execute tasks sequentially or in parallel
- commit progress
PHASE 5 — Verification
- run tests
- check logs
- verify feature works
PHASE 6 — Review
- review code quality
- refactor if necessary
PHASE 7 — Documentation
- document changes
---
# Verification System
### 4. Verification Before Done
Never mark a task complete without proof.
Checks:
- code compiles
- feature works
- tests pass
- no new errors introduced
Ask:
"Would a senior engineer approve this implementation?"
---
# Autonomous Debugging
### 5. Autonomous Bug Fixing
When encountering a bug:
1. analyze error message
2. inspect stack trace
3. identify root cause
4. implement fix
5. verify with tests
Rules:
- Never apply random fixes
- Always understand the root cause first
---
# Context Management
### 6. Context Awareness
Before implementing anything:
- load relevant files
- inspect dependencies
- understand architecture
- read configuration files
Always maintain awareness of:
- system architecture
- data flow
- dependencies
---
# Memory System
### 7. Persistent Memory
Store long-term knowledge in:
memory/
- project_summary.md
- architecture.md
- lessons.md
- coding_standards.md
This prevents repeated mistakes.
---
# Learning Loop
### 8. Self-Improvement
After errors or corrections:
Update:
tasks/lessons.md
Include:
- mistake pattern
- root cause
- prevention rule
Example:
Lesson:
Always validate API responses before processing them.
---
# Safety Rules
### 9. Safety
Never perform dangerous actions automatically.
Rules:
- never delete files without confirmation
- avoid modifying production configuration automatically
- create backups before large refactors
- avoid irreversible operations
---
# Iteration Control
### 10. Infinite Loop Protection
If the same error happens more than 3 times:
STOP
- re-evaluate the strategy
- re-plan the solution
- choose a different debugging approach
---
# Core Engineering Principles
### Simplicity First
Prefer the simplest solution that works.
### Root Cause Fixes
Always fix the underlying problem, not symptoms.
### Minimal Impact
Touch the smallest amount of code possible.
### Maintainability
Code should remain readable and maintainable.
---
# Final Rule
Before delivering a solution ask:
Is this solution correct, maintainable, and verifiable?
If not:
Refine it before presenting it.
---
# Recommended File Usage
You can place this workflow in one of the following files:
AGENT_WORKFLOW.md
CLAUDE.md
AGENTS.md
This allows it to be used by:
- Claude Code Agent Teams
- Codex CLI
- Gemini Code Assist
- Cursor Agents

187
CHANGELOG.md Normal file
View File

@ -0,0 +1,187 @@
# Changelog - PostgreSQL Migration
## [2.0.0] - 2024-10-13
### 🎉 Major Changes - Supabase to PostgreSQL Migration
#### Removed
- ❌ **Supabase dependency** - Removed all Supabase-specific configurations
- ❌ **DIRECT_URL** - Removed connection pooling URL (Supabase-specific)
- ❌ **External database dependency** - Now fully self-hosted
#### Added
- ✅ **PostgreSQL 16 in Docker** - Local PostgreSQL database with Docker support
- ✅ **Redis 7** - Caching and rate limiting with Redis
- ✅ **Adminer** - Database management UI (http://localhost:8080)
- ✅ **Docker Compose setups** - Both development and production configurations
- ✅ **Database initialization** - Automated database setup with extensions
- ✅ **Complete documentation** - Multiple guides for setup and migration
- ✅ **Setup scripts** - Automated setup for both Linux/Mac and Windows
- ✅ **npm scripts** - Convenient Docker commands via npm
#### Modified Files
- 📝 `prisma/schema.prisma` - Removed directUrl field
- 📝 `src/lib/env.ts` - Removed DIRECT_URL, updated DATABASE_URL default
- 📝 `docker-compose.yml` - Complete rewrite with PostgreSQL, Redis, and networking
- 📝 `Dockerfile` - Enhanced with proper PostgreSQL support
- 📝 `package.json` - Added Docker scripts and tsx dependency
- 📝 `README.md` - Updated with new setup instructions
#### New Files
- 📄 `docker-compose.dev.yml` - Development environment (database only)
- 📄 `docker/init-db.sh` - PostgreSQL initialization script
- 📄 `docker/README.md` - Docker-specific documentation
- 📄 `DOCKER_SETUP.md` - Comprehensive Docker setup guide
- 📄 `MIGRATION_FROM_SUPABASE.md` - Step-by-step migration guide
- 📄 `env.example` - Environment variable template
- 📄 `.dockerignore` - Docker build optimization
- 📄 `scripts/setup.sh` - Quick setup script (Linux/Mac)
- 📄 `scripts/setup.ps1` - Quick setup script (Windows)
- 📄 `CHANGELOG.md` - This file
### 📦 Docker Services
#### PostgreSQL Database
- **Image**: postgres:16-alpine
- **Port**: 5432
- **Features**:
- Health checks
- Volume persistence
- UTF-8 encoding
- Extensions: uuid-ossp, pg_trgm
#### Redis Cache
- **Image**: redis:7-alpine
- **Port**: 6379
- **Features**:
- AOF persistence
- 256MB max memory with LRU eviction
- Health checks
#### Next.js Application
- **Port**: 3000
- **Features**:
- Multi-stage build
- Production optimization
- Health checks
- Automatic Prisma generation
#### Adminer (Development)
- **Port**: 8080
- **Features**:
- Database management UI
- Optional (dev profile)
- Pre-configured for PostgreSQL
### 🚀 Quick Start
#### Development Mode
```bash
npm run docker:dev # Start database
npm run db:migrate # Run migrations
npm run dev # Start app
```
#### Production Mode
```bash
npm run docker:prod # Start all services
```
### 📚 Documentation
- **README.md** - Main documentation with quick start
- **DOCKER_SETUP.md** - Complete Docker guide with troubleshooting
- **MIGRATION_FROM_SUPABASE.md** - Migration guide from Supabase
- **docker/README.md** - Docker commands and operations
- **env.example** - Environment variable reference
### 🔧 New npm Scripts
```bash
# Docker commands
npm run docker:dev # Start development services
npm run docker:dev:stop # Stop development services
npm run docker:prod # Start production stack
npm run docker:stop # Stop all services
npm run docker:logs # View all logs
npm run docker:db # PostgreSQL CLI
npm run docker:redis # Redis CLI
npm run docker:backup # Backup database
```
### 🔐 Environment Variables
#### Required
- `DATABASE_URL` - PostgreSQL connection string
- `NEXTAUTH_SECRET` - NextAuth.js secret (generate with openssl)
- `NEXTAUTH_URL` - Application URL
- `IP_SALT` - Salt for IP hashing (generate with openssl)
#### Optional
- `GOOGLE_CLIENT_ID` - Google OAuth client ID
- `GOOGLE_CLIENT_SECRET` - Google OAuth secret
- `REDIS_URL` - Redis connection string
- `ENABLE_DEMO` - Enable demo mode
### 🎯 Benefits
1. **Full Control** - Own your data and infrastructure
2. **No Vendor Lock-in** - Standard PostgreSQL
3. **Lower Latency** - Local network speed
4. **Cost Effective** - No monthly database fees
5. **Privacy** - Data stays on your infrastructure
6. **Development** - Easy local testing
7. **Offline Capable** - Works without internet
### 🔄 Migration Path
1. Backup Supabase data
2. Update codebase
3. Start local PostgreSQL
4. Restore data or run migrations
5. Update environment variables
6. Deploy
See [MIGRATION_FROM_SUPABASE.md](MIGRATION_FROM_SUPABASE.md) for detailed steps.
### ⚠️ Breaking Changes
- `DIRECT_URL` environment variable removed
- Database now requires Docker or local PostgreSQL
- Supabase-specific features removed
### 📊 Performance Improvements
- Local database reduces latency
- Redis caching improves response times
- Connection pooling via Prisma
- Optimized Docker images
### 🐛 Bug Fixes
- Fixed database connection handling
- Improved error messages
- Better health checks
### 🔜 Future Enhancements
- [ ] PostgreSQL replication for HA
- [ ] Redis Sentinel for failover
- [ ] Automated backup scripts
- [ ] Monitoring and alerting
- [ ] Database performance tuning
- [ ] Multi-region deployment
### 📝 Notes
- Default PostgreSQL password should be changed in production
- Always backup data before migration
- Review security settings before deployment
- Set up automated backups in production
---
**Migration completed successfully!** 🎉
For support, see documentation or open an issue on GitHub.

266
CLAUDE.md
View File

@ -1,266 +0,0 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
**QR Master** is a production-ready SaaS application for creating and managing QR codes with advanced analytics, Stripe payment integration, and multi-tier subscription plans (FREE, PRO, BUSINESS).
## Tech Stack
- **Frontend**: Next.js 14 (App Router), React 18, TypeScript, Tailwind CSS, Framer Motion
- **Backend**: Next.js API Routes, Prisma ORM, PostgreSQL
- **Authentication**: NextAuth.js v4 (Credentials + Google OAuth)
- **Payments**: Stripe (subscriptions, webhooks)
- **Cache**: Redis (optional)
- **Analytics**: PostHog (optional), QR scan tracking with IP hashing
- **QR Generation**: qrcode, qr-code-styling libraries
- **Bulk Operations**: Papa Parse (CSV), ExcelJS, JSZip
- **Storage**: AWS S3 (via @aws-sdk)
## Quick Development Commands
```bash
# Setup
npm install
npm run docker:dev # Start PostgreSQL & Redis in Docker
npx prisma migrate dev # Run migrations
npm run db:seed # Seed demo data
# Development
npm run dev # Start dev server (port 3050)
npm run lint # Run ESLint
# Database
npm run db:migrate # Run pending migrations (dev mode)
npm run db:deploy # Apply migrations (production)
npm run db:studio # Open Prisma Studio UI
npx prisma migrate reset # Reset database (drops, recreates, seeds)
# Docker
npm run docker:prod # Start full production stack
npm run docker:dev:stop # Stop dev services
npm run docker:logs # View logs
npm run docker:db # PostgreSQL CLI
npm run docker:redis # Redis CLI
npm run docker:backup # Backup database to SQL file
# Build & Deploy
npm run build # Production build
npm run start # Start production server
```
## Project Structure
```
src/
├── app/
│ └── (main)/
│ ├── (app)/ # Authenticated app pages (dashboard, bulk-creation, settings)
│ ├── (auth)/ # Auth pages (login, signup, forgot-password)
│ ├── (marketing)/ # Public pages & marketing tools
│ │ └── tools/ # QR code type-specific generators (20+ tools)
│ └── api/ # API routes organized by domain
│ ├── auth/ # Authentication (signin, signup, OAuth, password reset)
│ ├── qrs/ # QR code CRUD (GET, POST, PATCH, DELETE)
│ ├── analytics/ # Analytics summary endpoint
│ ├── stripe/ # Payment webhooks & session management
│ ├── user/ # User profile, plan, stats, password
│ ├── newsletter/ # Subscription management
│ └── [other]/ # admin, feedback, leads, bulk, etc.
├── components/
│ ├── ui/ # Reusable UI primitives (Card, Dialog, Input, etc.)
│ ├── generator/ # QR code generator components
│ ├── analytics/ # Charts, maps, data visualization
│ ├── dashboard/ # Dashboard-specific components
│ ├── settings/ # Settings & account components
│ └── SessionProvider.tsx # NextAuth session provider
├── lib/
│ ├── auth.ts # NextAuth configuration
│ ├── db.ts # Prisma client
│ ├── stripe.ts # Stripe utilities
│ ├── email.ts # Email sending (Resend)
│ ├── qr.ts # QR code generation utilities
│ ├── geo.ts # Geolocation utilities
│ ├── hash.ts # IP hashing (privacy)
│ ├── csrf.ts # CSRF token generation/validation
│ ├── rateLimit.ts # Rate limiting utilities
│ ├── schema.ts # Zod validation schemas
│ ├── validationSchemas.ts # Additional validation
│ └── cookieConfig.ts # Cookie configuration
├── hooks/
│ ├── useCsrf.ts # CSRF token hook
│ └── useTranslation.ts # i18n hook
└── types/
└── analytics.ts # Analytics type definitions
```
## Database Architecture
**Key Models** (see `prisma/schema.prisma`):
- **User**: User accounts with Stripe subscription fields
- **QRCode**: QR code records (static/dynamic, multiple content types)
- **QRScan**: Analytics data (ts, ipHash, device, os, country, UTM params)
- **Account/Session**: NextAuth authentication tables
- **Integration**: Third-party integrations
- **NewsletterSubscription**: Email subscribers
- **Lead**: Lead generation data
**QR Code Types**: URL, VCARD, GEO, PHONE, SMS, TEXT, WHATSAPP, PDF, APP, COUPON, FEEDBACK
## API Architecture
### Authentication Flow
- Credentials-based login/signup via `/api/auth/signup` and `/api/auth/simple-login`
- Google OAuth via `/api/auth/google`
- NextAuth.js session management at `/api/auth/[...nextauth]`
- Password reset: `/api/auth/forgot-password` + `/api/auth/reset-password`
### QR Code Operations
- **CRUD**: `GET/POST /api/qrs`, `GET/PATCH/DELETE /api/qrs/[id]`
- **Static Generation**: `POST /api/qrs/static`
- **Bulk Operations**: `POST /api/bulk/*` for CSV/Excel import
- **Public Redirect**: `GET /r/[slug]` (redirect + analytics tracking)
### Payments
- Stripe webhooks: `POST /api/stripe/webhook`
- Checkout session: `POST /api/stripe/checkout` or `/api/stripe/create-checkout-session`
- Customer portal: `POST /api/stripe/portal`
- Subscription sync: `POST /api/stripe/sync-subscription`
- Cancellation: `POST /api/stripe/cancel-subscription`
### Analytics
- Summary endpoint: `GET /api/analytics/summary?qrId=<id>`
- Scan tracking with hashed IP (GDPR-compliant)
## Key Implementation Patterns
### Authentication & Authorization
- NextAuth.js v4 with Prisma adapter
- Sessions stored in database
- CSRF protection on all mutations (check `useCsrf` hook)
- Password hashing with bcryptjs
### API Security
- Rate limiting on sensitive endpoints (auth, payments)
- CSRF tokens validated on POST/PATCH/DELETE
- IP hashing for privacy (IP_SALT environment variable)
- DNT header respected for analytics
### Database Operations
- Prisma ORM for all database access
- Migrations stored in `prisma/migrations/`
- Seed script for demo data in `prisma/seed.ts`
- Database indexes on frequently queried fields (userId, createdAt, etc.)
### QR Code Generation
- `qrcode` library for basic generation
- `qr-code-styling` for advanced customization
- `qrcode.react` for inline React components
- Canvas/SVG export via `html-to-image`, `jspdf`, `jszip`
### State & Validation
- Zod schemas in `/lib/schema.ts` for runtime validation
- TypeScript strict mode enabled
- Prisma provides type safety at database layer
## Environment Variables
**Required**:
- `DATABASE_URL` - PostgreSQL connection string
- `NEXTAUTH_SECRET` - JWT encryption secret
- `NEXTAUTH_URL` - Application URL (default: `http://localhost:3050`)
- `IP_SALT` - Salt for IP hashing
**Optional but Important**:
- `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY`
- `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` - OAuth
- `REDIS_URL` - Redis connection
- `NEXT_PUBLIC_POSTHOG_KEY`, `NEXT_PUBLIC_POSTHOG_HOST` - Analytics
- `NEXT_PUBLIC_INDEXABLE` - Set to `true` for production (enables search engine indexing)
**Generate Secrets**:
```bash
openssl rand -base64 32 # NEXTAUTH_SECRET and IP_SALT
```
## Common Tasks
### Adding a New QR Code Type
1. Add type to `ContentType` enum in `prisma/schema.prisma`
2. Create generator component in `src/components/generator/` or `src/app/(main)/(marketing)/tools/`
3. Add validation schema in `src/lib/schema.ts`
4. Create API endpoint if needed in `src/app/(main)/api/qrs/`
### Creating a New Marketing Tool Page
1. Create page at `src/app/(main)/(marketing)/tools/[tool-name]/page.tsx`
2. Create generator component in same directory
3. Add SEO metadata in page component
4. Tool should be static (no database) or use public API endpoints
### Adding a New API Endpoint
1. Create route file in appropriate directory under `src/app/(main)/api/`
2. Add Zod validation schema in `src/lib/schema.ts`
3. Check authentication with `getServerSession()` if needed
4. Implement rate limiting for sensitive operations
5. Return typed responses with proper status codes
### Database Schema Changes
1. Update `prisma/schema.prisma`
2. Run `npx prisma migrate dev --name <migration-name>`
3. This creates migration file and updates Prisma client
4. Test with `npm run db:seed` if demo data affected
## Testing & Debugging
- Demo account (after seed): email: `demo@qrmaster.com`, password: `demo123`
- Prisma Studio: `npm run db:studio` - visual database browser
- API testing: Check `/src/app/(main)/api/` for examples
- Frontend: Pages hot-reload on changes during `npm run dev`
## Performance Considerations
- PostgreSQL indexes on `QRCode(userId, createdAt)` and `QRScan(qrId, ts)`
- Redis optional but recommended for caching analytics
- Static export for marketing pages when possible
- Image optimization enabled in `next.config.mjs`
- Prisma connection pooling recommended for production
## Common Pitfalls
1. **Database Connection**: If "Can't reach database server", ensure Docker is running (`npm run docker:dev`)
2. **Prisma Out of Sync**: Run `npx prisma generate` if TypeScript errors appear
3. **Migration Conflicts**: Use `npx prisma migrate reset` to start fresh
4. **Port 3050 in Use**: Change port in `package.json` dev script or kill process
5. **Build Failures**: Check `NODE_OPTIONS='--max-old-space-size=4096'` in build script - set higher if needed
## SEO & Content
- Schema.org structured data implemented for products, organizations, FAQs
- Breadcrumb navigation for UX/SEO
- Meta tags configured per page
- Open Graph images at `/api/og`
- Sitemap generation via next-sitemap
- Google Indexing API + IndexNow submission scripts available
## Deployment Notes
### Docker (Self-Hosted)
```bash
npm run docker:prod # Builds and starts full stack
docker-compose exec web npx prisma migrate deploy # Run migrations in container
```
### Vercel
- Push to GitHub and import in Vercel dashboard
- Set environment variables in Vercel settings
- Requires external PostgreSQL database (Vercel Postgres, Supabase, etc.)
- Redis is optional
## Additional Resources
- README.md - Detailed setup and feature overview
- DOCKER_SETUP.md - Complete Docker deployment guide
- prisma/schema.prisma - Database schema and relationships
- env.example - Environment variable template

269
DEPLOYMENT_CHECKLIST.md Normal file
View File

@ -0,0 +1,269 @@
# 🚀 Deployment Checklist für QR Master
Diese Checkliste enthält alle notwendigen Änderungen vor dem Push nach Gitea und dem Production Deployment.
---
## ✅ 1. Environment Variables (.env)
### Basis URLs ändern
```bash
# Von:
NEXT_PUBLIC_APP_URL=http://localhost:3050
NEXTAUTH_URL=http://localhost:3050
# Zu:
NEXT_PUBLIC_APP_URL=https://www.qrmaster.net
NEXTAUTH_URL=https://www.qrmaster.net
```
### Secrets generieren (falls noch nicht geschehen)
```bash
# NEXTAUTH_SECRET (für JWT/Session Encryption)
openssl rand -base64 32
# IP_SALT (für DSGVO-konforme IP-Hashing)
openssl rand -base64 32
```
Bereits generiert:
- ✅ NEXTAUTH_SECRET: `PT8XVydC4v7QluCz/mV1yb7Y3docSFZeFDioJz4ZE98=`
- ✅ IP_SALT: `j/aluIpzsgn5Z6cbF4conM6ApK5cj4jDagkswzfgQPc=`
### Database URLs
```bash
# Development (localhost):
DATABASE_URL="postgresql://postgres:postgres@localhost:5435/qrmaster?schema=public"
DIRECT_URL="postgresql://postgres:postgres@localhost:5435/qrmaster?schema=public"
# Production (anpassen an deinen Server):
DATABASE_URL="postgresql://USER:PASSWORD@HOST:5432/qrmaster?schema=public"
DIRECT_URL="postgresql://USER:PASSWORD@HOST:5432/qrmaster?schema=public"
```
---
## 🔐 2. Google OAuth Configuration
### Redirect URIs in Google Cloud Console hinzufügen
1. Gehe zu: https://console.cloud.google.com/apis/credentials
2. Wähle deine OAuth 2.0 Client ID: `683784117141-ci1d928jo8f9g6i1isrveflmrinp92l4.apps.googleusercontent.com`
3. Füge folgende **Authorized redirect URIs** hinzu:
```
https://www.qrmaster.net/api/auth/callback/google
```
**Optional** (für Staging/Testing):
```
http://localhost:3050/api/auth/callback/google
https://staging.qrmaster.net/api/auth/callback/google
```
---
## 💳 3. Stripe Configuration
### ⚠️ WICHTIG: Von Test Mode zu Live Mode wechseln
#### Current (Test Mode):
```bash
STRIPE_SECRET_KEY=sk_test_51QYL7gP9xM...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_51QYL7gP9xM...
```
#### Production (Live Mode):
1. Gehe zu: https://dashboard.stripe.com/
2. Wechsle von **Test Mode** zu **Live Mode** (Toggle oben rechts)
3. Hole dir die **Live Keys**:
- `API Keys``Secret key` (beginnt mit `sk_live_`)
- `API Keys``Publishable key` (beginnt mit `pk_live_`)
```bash
# Production Keys:
STRIPE_SECRET_KEY=sk_live_XXXXX
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_XXXXX
```
#### Webhook Secret (Production)
1. Erstelle einen neuen Webhook Endpoint: https://dashboard.stripe.com/webhooks
2. Endpoint URL: `https://www.qrmaster.net/api/webhooks/stripe`
3. Events to listen:
- `checkout.session.completed`
- `customer.subscription.updated`
- `customer.subscription.deleted`
- `invoice.payment_succeeded`
- `invoice.payment_failed`
4. Kopiere den **Signing Secret** (beginnt mit `whsec_`)
```bash
STRIPE_WEBHOOK_SECRET=whsec_XXXXX
```
#### Price IDs aktualisieren
Erstelle Produkte und Preise in **Live Mode**:
1. https://dashboard.stripe.com/products
2. Erstelle "Pro" und "Business" Pläne
3. Kopiere die Price IDs (beginnen mit `price_`)
```bash
STRIPE_PRICE_ID_PRO_MONTHLY=price_XXXXX
STRIPE_PRICE_ID_PRO_YEARLY=price_XXXXX
STRIPE_PRICE_ID_BUSINESS_MONTHLY=price_XXXXX
STRIPE_PRICE_ID_BUSINESS_YEARLY=price_XXXXX
```
---
## 📧 4. Resend Email Configuration
### Domain Verification
1. Gehe zu: https://resend.com/domains
2. Füge Domain hinzu: `qrmaster.net`
3. Konfiguriere DNS Records (SPF, DKIM, DMARC)
4. Warte auf Verification
### From Email anpassen
Aktuell verwendet alle Emails: `onboarding@resend.dev` (Resend's Test Domain)
Nach Domain Verification in `src/lib/email.ts` ändern:
```typescript
// Von:
from: 'Timo from QR Master <onboarding@resend.dev>',
// Zu:
from: 'Timo from QR Master <hello@qrmaster.net>',
// oder
from: 'Timo from QR Master <noreply@qrmaster.net>',
```
---
## 🔍 5. SEO Configuration
### Bereits korrekt konfiguriert ✅
```bash
NEXT_PUBLIC_INDEXABLE=true # ✅ Bereits gesetzt
```
### Sitemap & robots.txt prüfen
- Sitemap: `https://www.qrmaster.net/sitemap.xml`
- Robots: `https://www.qrmaster.net/robots.txt`
Nach Deployment testen!
---
## 📊 6. PostHog Analytics (Optional)
Falls du PostHog nutzt:
```bash
NEXT_PUBLIC_POSTHOG_KEY=phc_XXXXX
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
```
---
## 🐳 7. Docker Deployment
### docker-compose.yml prüfen
Stelle sicher, dass alle ENV Variables korrekt gemappt sind:
```yaml
environment:
NEXTAUTH_URL: https://www.qrmaster.net
NEXT_PUBLIC_APP_URL: https://www.qrmaster.net
# ... weitere vars
```
### Deployment Commands
```bash
# Build & Deploy
docker-compose up -d --build
# Database Migration (nach erstem Deploy)
docker-compose exec web npm run db:migrate
# Logs checken
docker-compose logs -f web
# Health Check
curl https://www.qrmaster.net
```
---
## 🔒 8. Security Checklist
- [ ] ✅ NEXTAUTH_SECRET ist gesetzt und sicher (32+ Zeichen)
- [ ] ✅ IP_SALT ist gesetzt und sicher
- [ ] ⚠️ Stripe ist auf **Live Mode** umgestellt
- [ ] ⚠️ Google OAuth Redirect URIs enthalten Production URL
- [ ] ⚠️ Resend Domain ist verifiziert
- [ ] ⚠️ Webhook Secrets sind für Production gesetzt
- [ ] ⚠️ Database URLs zeigen auf Production DB
- [ ] ⚠️ Keine Test/Dev Secrets in Production
---
## 📝 9. Vor dem Git Push
### Files prüfen
```bash
# .env sollte NICHT committet werden!
git status
# Falls .env in Git ist:
git rm --cached .env
echo ".env" >> .gitignore
```
### Sensible Daten entfernen
- [ ] Keine API Keys im Code
- [ ] Keine Secrets in Config Files
- [ ] `.env` ist in `.gitignore`
---
## 🎯 10. Nach dem Deployment testen
### Funktionen testen
1. **Google OAuth Login**: https://www.qrmaster.net/login
2. **QR Code erstellen**: https://www.qrmaster.net/create
3. **Stripe Checkout**: Testprodukt kaufen mit echten Stripe Test Cards
4. **Email Delivery**: Password Reset testen
5. **Analytics**: PostHog Events tracken
### Monitoring
```bash
# Server Logs
docker-compose logs -f
# Database Status
docker-compose exec db psql -U postgres -d qrmaster -c "SELECT COUNT(*) FROM \"User\";"
# Redis Status
docker-compose exec redis redis-cli PING
```
---
## 📞 Support Kontakte
- **Stripe Support**: https://support.stripe.com
- **Google Cloud Support**: https://support.google.com/cloud
- **Resend Support**: https://resend.com/docs
- **Next.js Docs**: https://nextjs.org/docs
---
## ✨ Deployment erfolgreich!
Nach erfolgreichem Deployment:
1. ✅ Teste alle wichtigen Features
2. ✅ Monitor Logs für Fehler
3. ✅ Prüfe Analytics Dashboard
4. ✅ Backup der Production Database erstellen
**Good luck! 🚀**

View File

@ -1,64 +1,64 @@
# ---- deps ----
FROM node:20-alpine AS deps
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
COPY package.json package-lock.json* pnpm-lock.yaml* yarn.lock* .npmrc* ./
# Copy prisma schema for postinstall script
COPY prisma ./prisma
RUN \
if [ -f pnpm-lock.yaml ]; then \
npm i -g pnpm && pnpm i --frozen-lockfile; \
elif [ -f yarn.lock ]; then \
yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then \
npm ci; \
else \
npm install --legacy-peer-deps; \
fi
# ---- builder ----
FROM node:20-alpine AS builder
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
# Add build-time environment variables with defaults
ENV NEXTAUTH_URL="https://www.qrmaster.net"
ENV NEXTAUTH_SECRET="build-time-secret"
ENV IP_SALT="build-time-salt"
ENV STRIPE_SECRET_KEY="sk_test_placeholder_for_build"
ENV RESEND_API_KEY="re_placeholder_for_build"
ENV NEXT_PUBLIC_APP_URL="https://www.qrmaster.net"
# PostHog Analytics - REQUIRED at build time for client-side bundle
ENV NEXT_PUBLIC_POSTHOG_KEY="phc_97JBJVVQlqqiZuTVRHuBnnG9HasOv3GSsdeVjossizJ"
ENV NEXT_PUBLIC_POSTHOG_HOST="https://us.i.posthog.com"
ENV NEXT_PUBLIC_INDEXABLE="true"
ENV NEXT_PUBLIC_FACEBOOK_PIXEL_ID="1601718491252690"
RUN npx prisma generate
RUN npm run build
# ---- runner ----
FROM node:20-alpine AS runner
# Install OpenSSL for Prisma runtime
RUN apk add --no-cache openssl
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
USER nextjs
EXPOSE 3000
# ---- deps ----
FROM node:20-alpine AS deps
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
COPY package.json package-lock.json* pnpm-lock.yaml* yarn.lock* .npmrc* ./
# Copy prisma schema for postinstall script
COPY prisma ./prisma
RUN \
if [ -f pnpm-lock.yaml ]; then \
npm i -g pnpm && pnpm i --frozen-lockfile; \
elif [ -f yarn.lock ]; then \
yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then \
npm ci; \
else \
npm install --legacy-peer-deps; \
fi
# ---- builder ----
FROM node:20-alpine AS builder
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
# Add build-time environment variables with defaults
ENV DATABASE_URL="postgresql://postgres:postgres@db:5432/qrmaster?schema=public"
ENV NEXTAUTH_URL="https://www.qrmaster.net"
ENV NEXTAUTH_SECRET="build-time-secret"
ENV IP_SALT="build-time-salt"
ENV STRIPE_SECRET_KEY="sk_test_placeholder_for_build"
ENV RESEND_API_KEY="re_placeholder_for_build"
ENV NEXT_PUBLIC_APP_URL="https://www.qrmaster.net"
# PostHog Analytics - REQUIRED at build time for client-side bundle
ENV NEXT_PUBLIC_POSTHOG_KEY="phc_97JBJVVQlqqiZuTVRHuBnnG9HasOv3GSsdeVjossizJ"
ENV NEXT_PUBLIC_POSTHOG_HOST="https://us.i.posthog.com"
ENV NEXT_PUBLIC_INDEXABLE="true"
RUN npx prisma generate
RUN npm run build
# ---- runner ----
FROM node:20-alpine AS runner
# Install OpenSSL for Prisma runtime
RUN apk add --no-cache openssl
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]

321
MIGRATION_FROM_SUPABASE.md Normal file
View File

@ -0,0 +1,321 @@
# Migration Guide: From Supabase to Local PostgreSQL
This guide helps you migrate your QR Master application from Supabase to a local PostgreSQL database with Docker.
## What Changed
### ✅ Removed
- Supabase connection pooling (`DIRECT_URL` environment variable)
- Supabase-specific configurations
- External database dependency
### ✨ Added
- Local PostgreSQL 16 database in Docker
- Redis cache for better performance
- Adminer database management UI
- Complete Docker setup with docker-compose
- Database initialization scripts
- Development and production Docker configurations
## Migration Steps
### 1. Backup Your Supabase Database (IMPORTANT!)
Before making any changes, backup your existing data:
```bash
# If you have access to Supabase CLI
supabase db dump > backup_$(date +%Y%m%d).sql
# Or use pg_dump directly with your Supabase credentials
pg_dump "postgresql://postgres:[PASSWORD]@[PROJECT_REF].supabase.co:5432/postgres" > backup.sql
```
### 2. Update Your Codebase
Pull the latest changes or update these files:
#### Updated Files:
- ✏️ `prisma/schema.prisma` - Removed `directUrl` field
- ✏️ `src/lib/env.ts` - Removed `DIRECT_URL` variable
- ✏️ `docker-compose.yml` - Updated with PostgreSQL setup
- ✏️ `Dockerfile` - Enhanced with PostgreSQL support
- ✏️ `package.json` - Added Docker scripts and tsx
#### New Files:
- 📄 `docker-compose.dev.yml` - Development setup
- 📄 `docker/init-db.sh` - Database initialization
- 📄 `docker/README.md` - Docker documentation
- 📄 `DOCKER_SETUP.md` - Complete Docker guide
- 📄 `env.example` - Environment template
- 📄 `.dockerignore` - Docker build optimization
### 3. Set Up Environment Variables
1. Remove Supabase-specific variables:
```bash
# Remove these from .env:
# DIRECT_URL=...
# SUPABASE_URL=...
# SUPABASE_ANON_KEY=...
```
2. Update database connection:
```bash
# For Docker (default):
DATABASE_URL=postgresql://postgres:postgres@db:5432/qrmaster?schema=public
# For local development (without Docker):
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/qrmaster?schema=public
```
3. Copy from template:
```bash
cp env.example .env
```
4. Generate secure secrets:
```bash
# Linux/Mac
openssl rand -base64 32 # Use for NEXTAUTH_SECRET
openssl rand -base64 32 # Use for IP_SALT
# Windows PowerShell
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Maximum 256 }))
```
### 4. Start Local PostgreSQL
#### Option A: Development Mode (Recommended)
```bash
# Start database only (run app on host)
npm run docker:dev
# Wait for database to be ready
docker-compose -f docker-compose.dev.yml logs -f db
```
#### Option B: Full Docker
```bash
# Start all services
npm run docker:prod
# Wait for all services to be ready
docker-compose logs -f
```
### 5. Restore Your Data
#### Option 1: Using Prisma Migrations (Clean Start)
```bash
# Generate Prisma client
npm run db:generate
# Run migrations
npm run db:migrate
# Seed with demo data
npm run db:seed
```
#### Option 2: Restore from Backup (Preserve Data)
```bash
# Restore your Supabase backup
cat backup.sql | docker-compose exec -T db psql -U postgres qrmaster
# Or if running locally
psql -U postgres -d qrmaster < backup.sql
# Then run migrations to update schema
npm run db:deploy
```
### 6. Verify Migration
1. **Check Database Connection:**
```bash
# Connect to database
npm run docker:db
# Or manually
docker-compose exec db psql -U postgres -d qrmaster
# Run test query
SELECT COUNT(*) FROM "User";
SELECT COUNT(*) FROM "QRCode";
```
2. **Access Adminer (Database UI):**
- URL: http://localhost:8080
- System: PostgreSQL
- Server: db
- Username: postgres
- Password: postgres
- Database: qrmaster
3. **Test Your Application:**
```bash
# Start the app (if using dev mode)
npm run dev
# Access: http://localhost:3050
```
### 7. Update Your Deployment
#### For Docker Production:
```bash
# Build and deploy
docker-compose up -d --build
# Run migrations
docker-compose exec web npx prisma migrate deploy
# Check logs
docker-compose logs -f web
```
#### For Other Platforms (Vercel, Railway, etc.):
Update your environment variables in the platform's dashboard:
- Remove: `DIRECT_URL`
- Update: `DATABASE_URL` to your new PostgreSQL connection string
## Troubleshooting
### Issue: Connection Refused
```bash
# Check if database is running
docker-compose ps
# Check database logs
docker-compose logs db
# Restart database
docker-compose restart db
```
### Issue: Migration Errors
```bash
# Reset migrations (⚠️ deletes data!)
npm run db:migrate reset
# Or manually reset
docker-compose down -v
docker-compose up -d db
npm run db:migrate
```
### Issue: Prisma Client Not Generated
```bash
# Regenerate Prisma client
npm run db:generate
# Or
npx prisma generate
```
### Issue: Data Not Migrated
```bash
# Check if backup was restored correctly
docker-compose exec db psql -U postgres -d qrmaster -c "
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
"
```
## Differences: Supabase vs Local PostgreSQL
| Feature | Supabase | Local PostgreSQL |
|---------|----------|------------------|
| Hosting | Cloud (managed) | Self-hosted (Docker) |
| Connection Pooling | Built-in (Supavisor) | Prisma built-in |
| Database UI | Supabase Studio | Adminer (included) |
| Backups | Automatic | Manual (or scripted) |
| Cost | Free tier + paid | Free (infrastructure cost only) |
| Latency | Internet dependent | Local network |
| Setup | Account required | Docker only |
| Scaling | Automatic | Manual |
## Benefits of Local PostgreSQL
**Full Control**: Own your data and infrastructure
**No Vendor Lock-in**: Standard PostgreSQL
**Lower Latency**: Local network speed
**Cost**: No monthly fees
**Privacy**: Data stays on your infrastructure
**Development**: Easy local testing
**Offline**: Works without internet
## Next Steps
1. ✅ Verify all data migrated correctly
2. ✅ Test all application features
3. ✅ Update your CI/CD pipelines
4. ✅ Set up automated backups:
```bash
# Create backup script
cat > backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="./backups"
mkdir -p $BACKUP_DIR
docker-compose exec -T db pg_dump -U postgres qrmaster > "$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql"
EOF
chmod +x backup.sh
# Run daily backups (cron example)
# 0 2 * * * /path/to/backup.sh
```
5. ✅ Monitor your application
6. ✅ Update documentation
## Rollback Plan
If you need to rollback to Supabase:
1. Keep your Supabase project active during testing
2. Keep your backup files safe
3. To rollback, simply change `DATABASE_URL` back to Supabase
4. Add back `DIRECT_URL` to `prisma/schema.prisma`:
```prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
```
## Support
For issues:
1. Check [DOCKER_SETUP.md](DOCKER_SETUP.md) for detailed Docker help
2. Check [docker/README.md](docker/README.md) for Docker commands
3. Review logs: `docker-compose logs -f`
4. Open an issue on GitHub
---
🎉 **Congratulations!** You've successfully migrated from Supabase to local PostgreSQL!

View File

@ -284,9 +284,9 @@ qr-master/
| Variable | Description | Required | Default |
| ------------------------------------ | ----------------------------- | -------- | ---------------------------------------------------------------------- |
| `DATABASE_URL` | PostgreSQL connection string | Yes | - |
| `DATABASE_URL` | PostgreSQL connection string | Yes | `postgresql://postgres:postgres@localhost:5435/qrmaster?schema=public` |
| `NEXTAUTH_URL` | Application URL | Yes | `http://localhost:3050` |
| `NEXTAUTH_SECRET` | Secret for JWT encryption | Yes | - (Generate with `openssl rand -base64 32`) |
| `NEXTAUTH_SECRET` | Secret for JWT encryption | Yes | Generate with `openssl rand -base64 32` |
| `IP_SALT` | Salt for IP hashing (privacy) | Yes | Generate with `openssl rand -base64 32` |
| `GOOGLE_CLIENT_ID` | Google OAuth client ID | No | - |
| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | No | - |
@ -473,10 +473,3 @@ For support, email support@qrmaster.net or open an issue on GitHub.
---
Built with ❤️ by QR Master Team
Führe diese im Terminal aus:
IndexNow (Bing/Yandex + Partner): npm run submit:indexnow
Google Indexing API: npm run trigger:indexing

301
SETUP_COMPLETE.md Normal file
View File

@ -0,0 +1,301 @@
# ✅ Setup Complete - PostgreSQL Migration
## 🎉 What Was Done
Your QR Master application has been successfully migrated from Supabase to a local PostgreSQL database with Docker!
### ✅ Completed Tasks
1. **Removed Supabase Dependencies**
- ❌ Removed `DIRECT_URL` from Prisma schema
- ❌ Removed `DIRECT_URL` from environment validation
- ❌ Cleaned up all Supabase-specific configurations
2. **Created Docker Infrastructure**
- ✅ Production Docker Compose (`docker-compose.yml`)
- ✅ Development Docker Compose (`docker-compose.dev.yml`)
- ✅ Optimized Dockerfile for Next.js
- ✅ PostgreSQL 16 Alpine with persistence
- ✅ Redis 7 Alpine with AOF persistence
- ✅ Adminer database UI (optional)
- ✅ Custom bridge network for services
3. **Database Setup**
- ✅ PostgreSQL initialization script
- ✅ UUID and pg_trgm extensions
- ✅ Health checks for all services
- ✅ Volume persistence
4. **Documentation**
- ✅ Updated README.md
- ✅ Created DOCKER_SETUP.md (comprehensive guide)
- ✅ Created MIGRATION_FROM_SUPABASE.md
- ✅ Created docker/README.md
- ✅ Created CHANGELOG.md
- ✅ Created env.example template
5. **Developer Tools**
- ✅ Setup script for Linux/Mac (`scripts/setup.sh`)
- ✅ Setup script for Windows (`scripts/setup.ps1`)
- ✅ npm Docker scripts
- ✅ .dockerignore for optimization
6. **Environment Configuration**
- ✅ Created env.example template
- ✅ Updated environment validation
- ✅ Simplified configuration
## 🚀 How to Get Started
### Option 1: Quick Setup (Recommended)
#### Windows:
```powershell
cd scripts
.\setup.ps1
```
#### Linux/Mac:
```bash
chmod +x scripts/setup.sh
./scripts/setup.sh
```
### Option 2: Manual Setup
#### Development Mode (Database in Docker, App on Host)
```bash
# 1. Copy environment file
cp env.example .env
# 2. Edit .env and set NEXTAUTH_SECRET and IP_SALT
# Generate with: openssl rand -base64 32
# 3. Install dependencies
npm install
# 4. Start database services
npm run docker:dev
# 5. Run migrations
npm run db:migrate
# 6. Seed database
npm run db:seed
# 7. Start development server
npm run dev
```
#### Production Mode (Full Stack in Docker)
```bash
# 1. Copy and configure environment
cp env.example .env
# Edit .env with your settings
# 2. Build and start
npm run docker:prod
# 3. Run migrations
docker-compose exec web npx prisma migrate deploy
# 4. Access at http://localhost:3050
```
## 📍 Access Points
After setup, you can access:
- **🌐 Application**: http://localhost:3050
- **🗄️ Database UI (Adminer)**: http://localhost:8080
- System: PostgreSQL
- Server: db
- Username: postgres
- Password: postgres
- Database: qrmaster
- **💾 PostgreSQL**: localhost:5432
- **🔴 Redis**: localhost:6379
## 📦 What's Included
### Docker Services
| Service | Image | Port | Purpose |
|---------|-------|------|---------|
| web | Next.js (custom) | 3050 | Application |
| db | postgres:16-alpine | 5432 | Database |
| redis | redis:7-alpine | 6379 | Cache |
| adminer | adminer:latest | 8080 | DB UI |
### File Structure
```
QRMASTER/
├── docker/
│ ├── init-db.sh # PostgreSQL initialization
│ └── README.md # Docker commands
├── scripts/
│ ├── setup.sh # Quick setup (Linux/Mac)
│ └── setup.ps1 # Quick setup (Windows)
├── src/ # Application code
├── prisma/
│ └── schema.prisma # Updated schema (no directUrl)
├── docker-compose.yml # Production setup
├── docker-compose.dev.yml # Development setup
├── Dockerfile # Application container
├── env.example # Environment template
├── .dockerignore # Docker build optimization
├── DOCKER_SETUP.md # Complete Docker guide
├── MIGRATION_FROM_SUPABASE.md # Migration guide
├── CHANGELOG.md # What changed
└── README.md # Updated main docs
```
## 🛠️ Useful Commands
### Development
```bash
npm run dev # Start dev server
npm run docker:dev # Start database only
npm run docker:dev:stop # Stop database
```
### Database
```bash
npm run db:migrate # Run migrations
npm run db:seed # Seed database
npm run db:studio # Open Prisma Studio
npm run docker:db # PostgreSQL CLI
```
### Docker
```bash
npm run docker:prod # Start all services
npm run docker:stop # Stop all services
npm run docker:logs # View logs
npm run docker:backup # Backup database
```
### Management
```bash
docker-compose ps # Check status
docker-compose logs -f # Follow logs
docker-compose restart web # Restart app
docker-compose exec db psql -U postgres -d qrmaster # DB CLI
```
## 📚 Documentation
- **[README.md](README.md)** - Main documentation with quick start
- **[DOCKER_SETUP.md](DOCKER_SETUP.md)** - Complete Docker guide with troubleshooting
- **[MIGRATION_FROM_SUPABASE.md](MIGRATION_FROM_SUPABASE.md)** - Migration guide from Supabase
- **[docker/README.md](docker/README.md)** - Docker commands and operations
- **[CHANGELOG.md](CHANGELOG.md)** - What changed in this version
## 🔐 Security Checklist
Before deploying to production:
- [ ] Change PostgreSQL password in docker-compose.yml
- [ ] Set strong NEXTAUTH_SECRET (generate with `openssl rand -base64 32`)
- [ ] Set strong IP_SALT (generate with `openssl rand -base64 32`)
- [ ] Update NEXTAUTH_URL to your domain
- [ ] Enable HTTPS/SSL
- [ ] Set up firewall rules
- [ ] Configure automated backups
- [ ] Review and test all environment variables
## 🎯 Next Steps
1. **Test the Application**
```bash
npm run docker:dev
npm run dev
# Visit http://localhost:3050
```
2. **Review Configuration**
- Check `.env` file
- Verify database connection
- Test authentication
3. **Set Up Backups**
```bash
# Manual backup
npm run docker:backup
# Or create automated backup script
# See DOCKER_SETUP.md for examples
```
4. **Customize**
- Update database passwords
- Configure OAuth providers
- Adjust resource limits
- Set up monitoring
## 🆘 Need Help?
### Common Issues
**Database won't start:**
```bash
docker-compose logs db
docker-compose restart db
```
**Port already in use:**
```bash
# Windows
netstat -ano | findstr :3050
# Change port in docker-compose.yml if needed
```
**Prisma errors:**
```bash
npm run db:generate
npm run db:migrate
```
### Resources
- **DOCKER_SETUP.md** - Comprehensive troubleshooting
- **docker/README.md** - Common Docker commands
- **MIGRATION_FROM_SUPABASE.md** - Migration help
### Support
1. Check the documentation files
2. Review logs: `docker-compose logs -f`
3. Check service health: `docker-compose ps`
4. Open an issue on GitHub
## ✨ Features
Your application now has:
- ✅ **Self-hosted PostgreSQL** - Full control over your data
- ✅ **Redis caching** - Improved performance
- ✅ **Docker Compose** - Easy deployment
- ✅ **Health checks** - Automatic monitoring
- ✅ **Data persistence** - Volumes for data safety
- ✅ **Database UI** - Adminer for easy management
- ✅ **Development mode** - Run only what you need
- ✅ **Production ready** - Optimized Docker builds
- ✅ **Complete docs** - Multiple guides and references
## 🎊 Success!
You're now ready to develop and deploy QR Master with your own PostgreSQL database!
**Demo Credentials:**
- Email: demo@qrmaster.com
- Password: demo123
---
**Happy coding!** 🚀
Need more help? Check the documentation or run the setup scripts.

1218
blog-posts-seo-guide.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,83 +0,0 @@
📅 Blog Content Roadmap (Q1 2026)
Goal: Publish 20 high-quality SEO posts over 60 days (Jan 29 - Mar 27). Cadence: Every 3 days. Strategy: "Strict 404 Gate" (Future posts are invisible/404 until publish date).
✅ Completed (Ready to Ship)
Jan 29:
Free Barcode Generator (Online)
Status: 🟢 Ready (Content Complete + SEO Optimized + Hero Image Generated).
Key Feature: Quick Answer Box, SVG/PNG Comparison, FAQ.
🚀 Next Priority: Feb 01
🎵 Spotify Code Generator: Share Music Instantly
Target Audience: Artists, bands, podcasters, playlist curators. SEO Focus: spotify code generator, create spotify code, music marketing qr, spotify uri to code.
Drafting Blueprint:
H1: Spotify Code Generator: Share Songs, Albums & Playlists
Quick Answer: How to get a code (3-step process).
Visual Guide: Where to find the "Spotify URI".
Use Cases:
Merch: T-shirts with album link.
Posters: Gig promotion.
Socials: Instagram Stories overlay.
Critical Comparison (Pro Tip):
Spotify Codes = Cool look, but NO analytics.
Dynamic QR Codes = Less "native" look, but FULL tracking (scans, location, etc.).
Recommendation: Use QR for marketing campaigns where ROI matters; use Spotify Codes for pure branding on merch.
FAQ: Vector download? Do they expire? High-res printing?
CTA: "Generate Music QR Code" (Link to main generator).
Image Concept:
Style: Neon, vibrant, "Spotify Green" accents, dark mode aesthetic.
Subject: A stylized soundwave transforming into a scannable code, or a vinyl record with a code center.
📋 Upcoming Schedule (Backlog)
Publish Date Topic / Slug Category Status
Feb 04 WhatsApp QR Code (Direct Chat Link) Social ⚪ Pending
Feb 07 Instagram QR Code (Grow Following) Social ⚪ Pending
Feb 10 vCard QR Code (Digital Business Card) Business ⚪ Pending
Feb 13 QR Code Analytics Guide (Deep Dive) Analytics ⚪ Pending
Feb 16 Trackable QR Codes (How-to) Tracking ⚪ Pending
Feb 19 Dynamic vs Static QR (Ultimate Guide) Basics ⚪ Pending
Feb 22 UTM Tracking with QR Codes Marketing ⚪ Pending
Feb 25 QR Code Statistics 2026 Trends ⚪ Pending
Feb 28 Restaurant Menu QR Codes Hospitality ⚪ Pending
Mar 03 QR Codes for Events Events ⚪ Pending
Mar 06 Business Card QR Codes Business ⚪ Pending
Mar 09 Marketing Strategy Examples Marketing ⚪ Pending
Mar 12 Bulk QR Code Generator (Excel/CSV) Bulk ⚪ Pending
Mar 15 Google QR Alternative Comparison ⚪ Pending
Mar 18 Security & Quishing Security ⚪ Pending
Mar 21 Best QR Generator 2026 Review Reviews ⚪ Pending
Mar 24 QR Code API Documentation Developer ⚪ Pending
Mar 27 Free vs Paid Generator Comparison ⚪ Pending
🛠️ Execution Workflow (Repeat for each post)
Select Topic: Take next item from list.
SEO & Outline: Define title, keywords, and H2 structure (use User/Expert persona).
Implement: Replace placeholder content in
src/lib/blog-data.ts
.
Asset: Generate hero image (public/blog/[slug].png) via DALL-E.
Verify: Ensure no build errors and correct 404 behavior if date > now.
✅ SEO Validation Checklist (Target Score: 80+)
1. Page Title
Focus keyword used at the beginning.
Length: ~60 characters (0 characters available is perfect).
2. Meta Description
Focus keyword included.
Length: ~160 characters.
3. Content Structure
H1 contains focus keyword.
First Paragraph contains focus keyword.
Word count: > 600 words (Aim for comprehensive coverage).
Keyword Density: ~2% (e.g., used 4-5 times in 600 words).
4. Assets (Images)
Image Filename contains focus keyword (e.g.,
free-barcode-generator-guide.png
).
Image Alt Tag contains focus keyword.
5. Links
Add relevant internal links to tools/pricing/other posts.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

134
claude-artifact-template.md Normal file
View File

@ -0,0 +1,134 @@
# Claude Artifact Template for QR Master Backlinks
Use this template when creating Claude artifacts that link back to qrmaster.net.
---
## How to Use
1. Copy this template into Claude
2. Customize for your specific topic
3. Click "Publish Artifact"
4. Add `www.qrmaster.net` to allowed domains
5. Share the published link
---
## Template: Dynamic QR Codes Guide
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic QR Codes: The Complete 2025 Guide</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
max-width: 800px;
margin: 0 auto;
padding: 40px 20px;
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
color: #1e293b;
}
h1 { color: #0f172a; border-bottom: 3px solid #3b82f6; padding-bottom: 10px; }
h2 { color: #1e40af; margin-top: 2em; }
a { color: #2563eb; text-decoration: none; }
a:hover { text-decoration: underline; }
.cta {
background: linear-gradient(135deg, #3b82f6, #2563eb);
color: white;
padding: 20px 30px;
border-radius: 12px;
text-align: center;
margin: 30px 0;
}
.cta a { color: white; font-weight: bold; font-size: 1.1em; }
ul { margin: 1em 0; }
li { margin: 0.5em 0; }
.highlight { background: #dbeafe; padding: 15px; border-radius: 8px; margin: 20px 0; }
</style>
</head>
<body>
<h1>Dynamic QR Codes: The Complete 2025 Guide</h1>
<p>Dynamic QR codes have revolutionized how businesses connect offline and online experiences. Unlike static codes, dynamic QR codes can be edited after printing, tracked in real-time, and optimized based on performance data.</p>
<h2>What Makes Dynamic QR Codes Different?</h2>
<ul>
<li><strong>Editable:</strong> Change the destination URL anytime without reprinting</li>
<li><strong>Trackable:</strong> Monitor scans, locations, devices, and timing</li>
<li><strong>Smaller:</strong> Short redirect URLs create cleaner QR patterns</li>
<li><strong>Flexible:</strong> Perfect for campaigns where content may change</li>
</ul>
<div class="highlight">
<strong>Pro Tip:</strong> Always use dynamic QR codes for printed materials. If your URL changes after printing 10,000 flyers, you won't need to reprint them.
</div>
<h2>Best Use Cases</h2>
<ul>
<li>Restaurant menus that change seasonally</li>
<li>Event tickets with real-time updates</li>
<li>Product packaging with warranty info</li>
<li>Marketing campaigns with A/B testing</li>
<li>Business cards with contact details</li>
</ul>
<h2>How to Create Dynamic QR Codes</h2>
<p>The easiest way is using a dedicated platform like <a href="https://www.qrmaster.net" target="_blank">QR Master</a>. Here's the process:</p>
<ol>
<li>Sign up for a free account</li>
<li>Click "Create QR Code" and select "Dynamic"</li>
<li>Enter your destination URL</li>
<li>Customize colors and add your logo</li>
<li>Download in SVG or PNG format</li>
<li>Track scans in your analytics dashboard</li>
</ol>
<div class="cta">
<a href="https://www.qrmaster.net/signup" target="_blank">Create Your Free Dynamic QR Code →</a>
</div>
<h2>Tracking & Analytics</h2>
<p>With dynamic QR codes, you get access to powerful analytics:</p>
<ul>
<li>Total and unique scan counts</li>
<li>Geographic distribution (city/country)</li>
<li>Device breakdown (iOS vs Android)</li>
<li>Time-based patterns (peak hours)</li>
<li>Conversion tracking integration</li>
</ul>
<p>Learn more about <a href="https://www.qrmaster.net/qr-code-tracking" target="_blank">QR code tracking</a> and <a href="https://www.qrmaster.net/blog/qr-code-analytics" target="_blank">analytics best practices</a>.</p>
<h2>Pricing</h2>
<p>Most platforms offer tiered pricing. <a href="https://www.qrmaster.net/pricing" target="_blank">QR Master pricing</a> starts with a free tier (3 dynamic codes) and scales up for businesses needing more codes and features.</p>
<hr>
<p><em>This guide is provided by <a href="https://www.qrmaster.net" target="_blank">QR Master</a> - Free Dynamic QR Code Generator with Analytics.</em></p>
</body>
</html>
```
---
## Topic Ideas for More Artifacts
1. **"QR Codes for Restaurants: Complete Setup Guide"** - Link to /blog/qr-code-restaurant-menu
2. **"Digital Business Cards with QR Codes"** - Link to /blog/vcard-qr-code-generator
3. **"QR Code Print Size Calculator"** - Link to /blog/qr-code-print-size-guide
4. **"Small Business QR Code Marketing Playbook"** - Link to /blog/qr-code-small-business
5. **"Static vs Dynamic QR Codes Comparison"** - Link to /blog/dynamic-vs-static-qr-codes
---
## Publishing Steps
1. Create artifact in Claude with HTML content above
2. Click "Publish" button
3. In "Allowed domains" field, enter: `www.qrmaster.net, qrmaster.net`
4. Copy the embed code or share URL
5. The links inside will count as backlinks once indexed

180
claude-seo-prompts.md Normal file
View File

@ -0,0 +1,180 @@
# Claude Artifact Prompts for Parasite SEO
**Goal:** Publish educational content on claude.ai that naturally links to qrmaster.net
**Strategy:** Informative, helpful content that does NOT look like advertising
---
## 🎯 Prompt 1: Restaurant QR Menu Guide
```
Create an informative HTML article titled "Restaurant Menu QR Codes: A Practical Guide for Restaurant Owners (2025)"
The article should:
- Be 1500-2000 words long
- Contain practical tips for restaurant owners
- Cover the following topics:
1. Why digital menus are the new standard
2. PDF vs. online menu - pros and cons
3. Optimal placement of QR codes in restaurants
4. Mistakes restaurants should avoid
5. Using tracking and analytics
Naturally incorporate these keywords:
- "restaurant menu qr code" (main keyword)
- "digital menu"
- "touchless menu"
- "qr code for restaurants"
Link ONCE naturally to https://www.qrmaster.net as "a free tool for creating restaurant QR codes"
Tone: Friendly, helpful, like an experienced consultant. NOT salesy.
HTML with clean CSS, mobile-friendly. No external dependencies.
```
---
## 🎯 Prompt 2: Dynamic vs Static QR Comparison
```
Create a technical comparison article as HTML: "Static vs Dynamic QR Codes: What's the Difference and When to Use Each"
Structure:
1. Brief explanation of what QR codes are technically
2. Static QR codes - how they work
3. Dynamic QR codes - how they work
4. Comparison table (very important!)
5. Decision guide: When to use which type
6. Realistic use cases for both
The article should be NEUTRAL and EDUCATIONAL, like a Wikipedia article but more readable.
Keywords:
- "dynamic vs static qr code" (main keyword)
- "editable qr code"
- "trackable qr code"
- "qr code types"
At the end, include a short "Tools for Creating QR Codes" section with 3-4 options. One of them is https://www.qrmaster.net - listed as an equal entry, NOT as a recommendation.
HTML with professional, minimalist design.
```
---
## 🎯 Prompt 3: Small Business Marketing Guide
```
Create a comprehensive HTML guide: "10 Ways Small Businesses Can Use QR Codes in 2025"
The article is aimed at small businesses without technical knowledge.
The 10 use cases:
1. Digital business cards (vCard)
2. Collecting Google reviews
3. Contactless payments
4. Sharing Wi-Fi access
5. Growing social media followers
6. Linking product information
7. Simplifying appointment booking
8. Discount promotions & coupons
9. Event tickets & check-in
10. Feedback & surveys
For each point: Brief explanation + concrete example + one tip.
Keywords:
- "qr code for small business"
- "qr code marketing"
- "qr code uses"
- "business qr codes"
Link ONCE naturally in the context of vCard creation to https://www.qrmaster.net/blog/vcard-qr-code-generator
Tone: Enthusiastic but not over the top. Like a helpful friend explaining technology.
```
---
## 🎯 Prompt 4: Print Size Technical Guide
```
Create a technical reference article as HTML: "QR Code Print Size Guide: Minimum Dimensions for Reliable Scanning"
This article should become THE reference for QR code print sizes.
Content:
1. The science behind QR scanning (brief)
2. The golden formula: Size = Distance ÷ 10
3. LARGE table with applications, distances, min/recommended sizes
4. Factors affecting scannability:
- Data density
- Error Correction Level
- Print quality (DPI)
- Contrast
5. Quiet zone requirements
6. File formats for printing (SVG vs PNG vs PDF)
7. Checklist before printing
Keywords:
- "qr code size for printing"
- "minimum qr code size"
- "qr code dimensions"
- "qr code print quality"
Link ONCE to https://www.qrmaster.net/blog/qr-code-print-size-guide as "detailed guide with more examples"
Tone: Technically precise, reference-style. For designers and marketers.
```
---
## 🎯 Prompt 5: QR Analytics Beginner Guide
```
Create a beginner's guide as HTML: "QR Code Analytics Explained: What You Can Track and Why It Matters"
The article is aimed at marketing beginners who have never used QR tracking before.
Structure:
1. What is QR tracking and why is it important?
2. What data can you track? (list with explanations)
- Scan count
- Geolocation
- Device types
- Timestamps
- Unique vs Total Scans
3. How does it work technically? (simplified)
4. Privacy & GDPR considerations
5. Practical application: Measuring campaign ROI
6. Common mistakes in QR tracking
Keywords:
- "qr code tracking"
- "qr code analytics"
- "track qr code scans"
- "qr code scan data"
Link ONCE naturally to https://www.qrmaster.net/blog/qr-code-analytics as an example: "For a deeper dive into analytics dashboards, see this comprehensive guide."
Tone: Friendly and explanatory, like a teacher. No jargon without explanation.
```
---
## 📋 Usage Instructions
1. **Copy prompt** → Paste into claude.ai
2. **Let it create the artifact**
3. **Click "Publish"** in Claude
4. **Allowed Domain:** Add `www.qrmaster.net, qrmaster.net`
5. **Share link** - Google indexes these!
## 💡 Tips for Maximum Effectiveness
- **Don't publish all on the same day**
- About **1 article per week** for natural growth
- Publish the **more neutral articles first** (Prompt 2 & 4)
- **Share on social media** for faster indexing
- Register the published URLs in Google Search Console

View File

@ -5,9 +5,9 @@ services:
container_name: qrmaster-db-dev
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: qrmaster
POSTGRES_INITDB_ARGS: "-E UTF8 --locale=en_US.utf8"
ports:
- "5435:5432"

View File

@ -1,121 +1,115 @@
services:
# PostgreSQL Database
db:
image: postgres:16-alpine
container_name: qrmaster-db
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_INITDB_ARGS: "-E UTF8 --locale=en_US.utf8"
ports:
- "5435:5432"
volumes:
- dbdata:/var/lib/postgresql/data
- ./docker/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres -d qrmaster" ]
interval: 5s
timeout: 5s
retries: 10
networks:
- qrmaster-network
# Redis Cache
redis:
image: redis:7-alpine
container_name: qrmaster-redis
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
ports:
- "6379:6379"
volumes:
- redisdata:/data
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
timeout: 3s
retries: 5
networks:
- qrmaster-network
# Next.js Application
web:
build:
context: .
dockerfile: Dockerfile
container_name: qrmaster-web
restart: unless-stopped
ports:
- "3050:3000"
environment:
NODE_ENV: production
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public
DIRECT_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public
REDIS_URL: redis://redis:6379
NEXTAUTH_URL: ${NEXTAUTH_URL}
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3050}
IP_SALT: ${IP_SALT:-your-salt-change-in-production}
ENABLE_DEMO: ${ENABLE_DEMO:-false}
NEXT_PUBLIC_INDEXABLE: ${NEXT_PUBLIC_INDEXABLE:-true}
# Google OAuth
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
# Stripe
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY:-}
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET:-}
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: ${NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY:-}
STRIPE_PRICE_ID_PRO_MONTHLY: ${STRIPE_PRICE_ID_PRO_MONTHLY:-}
STRIPE_PRICE_ID_PRO_YEARLY: ${STRIPE_PRICE_ID_PRO_YEARLY:-}
STRIPE_PRICE_ID_BUSINESS_MONTHLY: ${STRIPE_PRICE_ID_BUSINESS_MONTHLY:-}
STRIPE_PRICE_ID_BUSINESS_YEARLY: ${STRIPE_PRICE_ID_BUSINESS_YEARLY:-}
# Email & Analytics
RESEND_API_KEY: ${RESEND_API_KEY:-}
NEXT_PUBLIC_POSTHOG_KEY: ${NEXT_PUBLIC_POSTHOG_KEY:-}
NEXT_PUBLIC_POSTHOG_HOST: ${NEXT_PUBLIC_POSTHOG_HOST:-https://us.i.posthog.com}
# Cloudflare R2 Storage
R2_ACCOUNT_ID: ${R2_ACCOUNT_ID:-}
R2_ACCESS_KEY_ID: ${R2_ACCESS_KEY_ID:-}
R2_SECRET_ACCESS_KEY: ${R2_SECRET_ACCESS_KEY:-}
R2_BUCKET_NAME: ${R2_BUCKET_NAME:-qrmaster-menus}
R2_PUBLIC_URL: ${R2_PUBLIC_URL:-}
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: [ "CMD", "node", "-e", "require('http').get('http://localhost:3000',()=>process.exit(0)).on('error',()=>process.exit(1))" ]
interval: 10s
timeout: 3s
retries: 10
networks:
- qrmaster-network
# Adminer - Database Management UI (Optional)
adminer:
image: adminer:latest
container_name: qrmaster-adminer
restart: unless-stopped
ports:
- "8080:8080"
environment:
ADMINER_DEFAULT_SERVER: db
depends_on:
- db
networks:
- qrmaster-network
profiles:
- dev
volumes:
dbdata:
driver: local
redisdata:
driver: local
networks:
qrmaster-network:
driver: bridge
services:
# PostgreSQL Database
db:
image: postgres:16-alpine
container_name: qrmaster-db
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: qrmaster
POSTGRES_INITDB_ARGS: "-E UTF8 --locale=en_US.utf8"
ports:
- "5435:5432"
volumes:
- dbdata:/var/lib/postgresql/data
- ./docker/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres -d qrmaster" ]
interval: 5s
timeout: 5s
retries: 10
networks:
- qrmaster-network
# Redis Cache
redis:
image: redis:7-alpine
container_name: qrmaster-redis
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
ports:
- "6379:6379"
volumes:
- redisdata:/data
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
timeout: 3s
retries: 5
networks:
- qrmaster-network
# Next.js Application
web:
build:
context: .
dockerfile: Dockerfile
container_name: qrmaster-web
restart: unless-stopped
ports:
- "3050:3000"
environment:
NODE_ENV: production
DATABASE_URL: postgresql://postgres:postgres@db:5432/qrmaster?schema=public
DIRECT_URL: postgresql://postgres:postgres@db:5432/qrmaster?schema=public
REDIS_URL: redis://redis:6379
NEXTAUTH_URL: ${NEXTAUTH_URL:-http://localhost:3050}
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:-your-secret-key-change-in-production}
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3050}
IP_SALT: ${IP_SALT:-your-salt-change-in-production}
ENABLE_DEMO: ${ENABLE_DEMO:-false}
NEXT_PUBLIC_INDEXABLE: ${NEXT_PUBLIC_INDEXABLE:-true}
# Google OAuth
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
# Stripe
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY:-}
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET:-}
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: ${NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY:-}
STRIPE_PRICE_ID_PRO_MONTHLY: ${STRIPE_PRICE_ID_PRO_MONTHLY:-}
STRIPE_PRICE_ID_PRO_YEARLY: ${STRIPE_PRICE_ID_PRO_YEARLY:-}
STRIPE_PRICE_ID_BUSINESS_MONTHLY: ${STRIPE_PRICE_ID_BUSINESS_MONTHLY:-}
STRIPE_PRICE_ID_BUSINESS_YEARLY: ${STRIPE_PRICE_ID_BUSINESS_YEARLY:-}
# Email & Analytics
RESEND_API_KEY: ${RESEND_API_KEY:-}
NEXT_PUBLIC_POSTHOG_KEY: ${NEXT_PUBLIC_POSTHOG_KEY:-}
NEXT_PUBLIC_POSTHOG_HOST: ${NEXT_PUBLIC_POSTHOG_HOST:-https://us.i.posthog.com}
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: [ "CMD", "node", "-e", "require('http').get('http://localhost:3000',()=>process.exit(0)).on('error',()=>process.exit(1))" ]
interval: 10s
timeout: 3s
retries: 10
networks:
- qrmaster-network
# Adminer - Database Management UI (Optional)
adminer:
image: adminer:latest
container_name: qrmaster-adminer
restart: unless-stopped
ports:
- "8080:8080"
environment:
ADMINER_DEFAULT_SERVER: db
depends_on:
- db
networks:
- qrmaster-network
profiles:
- dev
volumes:
dbdata:
driver: local
redisdata:
driver: local
networks:
qrmaster-network:
driver: bridge

View File

@ -3,10 +3,6 @@ NODE_ENV=development
PORT=3000
# Database Configuration (PostgreSQL)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=qrmaster
# For local development (without Docker):
# DATABASE_URL=postgresql://postgres:postgres@localhost:5435/qrmaster?schema=public
# For Docker Compose (internal Docker network):

View File

@ -1,24 +0,0 @@
# Neue Features und Updates für QR Master (DE)
## Übersicht
Wir haben unser Angebot aktualisiert, um noch mehr Wert für unsere Nutzer zu bieten. Hier sind die neuesten Ergänzungen und Verbesserungen:
### 1. Erweiterte QR Code Typen
Wir haben spezifische QR Code Lösungen für verschiedene Anwendungsfälle hinzugefügt:
- **Feedback QR Code**: Sammeln Sie direkt Kundenfeedback. Scans führen zu einem anpassbaren Feedback-Formular.
- **PDF QR Code**: Teilen Sie Dokumente, Speisekarten oder Broschüren als PDF. Ideal für Restaurants und Unternehmen.
- **Coupon QR Code**: Bieten Sie Rabatte und Gutscheine via QR Code an. Perfekt für Marketingkampagnen im Einzelhandel.
- **App Store QR Code**: Ein intelligenter QR Code, der Nutzer basierend auf ihrem Gerät (iOS oder Android) automatisch zum richtigen App Store leitet.
### 2. Mehr Dynamik im Kostenlosen Plan
Um den Einstieg zu erleichtern, haben wir das Limit für den kostenlosen Plan erhöht:
- **Neu**: 8 Dynamische QR Codes kostenlos (statt bisher 3).
- **Vorteil**: Mehr Flexibilität für kleine Unternehmen und Startups, um verschiedene Kampagnen gleichzeitig zu testen.
### 3. SEO Optimierung
Alle neuen QR Code Typen sind jetzt vollständig in unsere Plattform integriert und für Suchmaschinen optimiert, damit Nutzer die richtige Lösung für ihr Problem finden.
---
*Erstellt am 22.01.2026*

View File

@ -1,14 +0,0 @@
{
"mcpServers": {
"firecrawl": {
"command": "npx",
"args": [
"-y",
"firecrawl-mcp"
],
"env": {
"FIRECRAWL_API_KEY": "fc-268826f038ad4bf0a38c48690ba9c1fa"
}
}
}
}

View File

@ -1,58 +0,0 @@
# Google Disavow File for qrmaster.net
# Generated on: 2026-02-09
# Updated with additional domains from specific user report
domain:your-directory.com
domain:webdirectory11.com
domain:worlds-directory.com
domain:robustdirectory.com
domain:directory-nation.com
domain:free-directory.com
domain:top-directory-list.com
domain:seo-directory.org
domain:site-submission.net
domain:link-directory.com
domain:pro-directory.com
domain:best-web-directory.com
domain:directory-portal.com
domain:web-listings.org
domain:online-directories.net
domain:business-list.com
domain:global-directory.com
domain:easy-directory.com
domain:fast-directory.com
domain:quality-links.org
domain:spam-links.net
domain:low-quality-directories.com
domain:link-farm-site.org
domain:auto-submit-directory.com
domain:free-bookmarks.com
domain:social-bookmarking-spam.net
domain:toxic-link-source.com
domain:directory-submission-tool.com
domain:instant-backlinks.org
domain:buy-backlinks-fast.com
domain:cheap-seo-links.net
domain:unnatural-links.com
domain:manipulative-linking.org
domain:black-hat-seo-spam.com
domain:link-scheme-site.net
domain:paid-links-directory.com
domain:spammy-web-resource.org
domain:irrelevant-links.com
domain:non-contextual-backlinks.net
domain:automated-link-building.com
domain:bulk-link-submission.org
domain:spam-anchor-text.com
domain:toxic-backlink-profile.net
domain:seo-manipulation.com
# Newly identified from report
domain:aboutyoublog.com
domain:blogdigy.com
domain:blog-gold.com
domain:activoblog.com
domain:pointblog.net
domain:runningwebsites.net
domain:uaewebdirectory.info
domain:hebagh.cv

File diff suppressed because one or more lines are too long

View File

@ -1,71 +0,0 @@
# QR Master: 90-Day Go-To-Market Plan (Real Estate Wedge)
## 📌 Executive Summary
- **Nische:** Immobilienmakler & Broker-Teams (Fokus: DACH-Region).
- **Core Edge:** Dynamische QR-Codes für Print-Materialien (Exposés, Flyer, Schilder). Makler sparen Zeit & Druckkosten, da Links ohne Neudruck aktualisiert werden können.
- **Go-To-Market Engine:** Social Media Content (Fokus auf Instagram oder LinkedIn) optimiert auf Saves, Shares und DMs, um organische Reichweite direkt in eine kontrollierte Lead-Pipeline zu verwandeln.
- **Ziel (Tag 90):** Profitables MRR-Wachstum (Monthly Recurring Revenue) durch eine wiederholbare, messbare Pipeline, bevor weitere Nischen erschlossen werden.
- **Kapazität:** Solo-Founder, 10-15h pro Woche.
---
## 🛠️ Die Social Distribution Engine (Content Funnel)
Anstatt nur auf organischen Traffic (Suchen) zu warten, wird aktiv Pipeline über Social Media generiert.
### Die 3 Content-Säulen (Pillars)
*Springe nicht zwischen Themen. Bleibe strikt bei der Nische und diesen 3 Pillars:*
1. **QR Marketing Tactics:** Checklisten, Best Practices, Do's und Don'ts bei QR-Code-Platzierungen (z.B. auf Makler-Schildern).
2. **Analytics & ROI Proof:** Fallstudien, wie aus simplen Scans echte Leads und Conversions werden.
3. **Teardowns / Audits:** "Roast my QR" Bestehende Flyer analysieren, Fehler aufzeigen und direkt fixen.
### Die 3 Performance-Formate (Wöchentlich)
Um das "Blank Page Syndrome" zu vermeiden, greife auf diese replizierbaren Formate zurück:
| Format | Ziel-Metrik | Konzept & Beispiel | Call-to-Action (CTA) |
| :--- | :--- | :--- | :--- |
| **Das Checklist-Carousel** | **Saves** (starkes Ranking-Signal) | "7-Punkte Checkliste: So platzierst du QR-Codes auf Exposés richtig." | *"Speichere diese Checkliste für deinen nächsten Druckauftrag."* |
| **Das Fehler-Reel** | **Shares** (Viralität im Team) | "Wenn dein QR-Code keine Leads bringt, liegt es meistens hieran..." | *"Teile das mit deinem Makler-Team, bevor ihr Flyer druckt."* |
| **Der Community-Roast** | **Replies** (höchstes Engagement) | 3 Beispiele zeigen: "Welcher Immobilien-QR ist am schlimmsten?" | *"Schreib 1, 2 oder 3 in die Kommentare und verrate warum."* |
### Der DM-Growth-Hack (Lead Capture)
Organische Viewer müssen in qualifizierte Leads verwandelt werden.
- **Mechanik:** Biete dein wertvollstes Asset for free an (z.B. "UTM Naming Template" oder "QR Campaign Tracking Sheet").
- **CTA:** *"Kommentiere 'UTM' und ich schicke dir das Template per DM."*
- **Der Hook:** In dem versendeten Sheet muss subtil der nächste Schritt stecken (z.B. *"Erstelle und tracke diese kampagnen noch einfacher direkt in QR Master: [1-Klick Real-Estate Setup]"*).
---
## 🗓️ Der 30/60/90 Tage Execution Plan
### 🚀 Phase 1: Tag 030 (Manual Proof & Distribution Setup)
*Fokus: Manuelles Setup, Tracking-Grundlagen und erste Content-Tests.*
- **Setup:** Real-Estate Landingpage & "Safety Intercept" bauen.
- **Onboarding:** Manuelles Onboarding von 510 Maklern (Concierge Setup). Erfassen der Baseline-Metriken (Zeit-Ersparnis, Müllvermeidung bei Druck-Updates).
- **Social Setup:** Fokus auf **eine** Haupt-Plattform (Instagram für B2C/Solo-Makler *oder* LinkedIn für Broker-Owner).
- **Content-Sprint:** Wöchentlich (2 Carousels, 1 Reel, 1 Roast). A/B-Tests der CTAs.
- **Zielschwelle:** Mindestens 1 Pillar erreicht eine starke Save-Rate; Lead-Generierung über erste DMs startet.
### ⚙️ Phase 2: Tag 3160 (Automation & Amplification)
*Fokus: Workflows automatisieren und Gewinner-Content pushen.*
- **Produkt:** "Real Estate QR Workspace" (Starter-Template) und wöchentliche Performance-Digests (automatisierte Emails) launchen.
- **Marketing:** 3 hochkonvertierende "Proof-Assets" publizieren (z.B. "Wie Makler X seine Flyer-Druckkosten halbierte").
- **Amplification:** Paid-Ad Budget auf das beste organische Proof-Asset der letzten Wochen legen.
- **Prozess:** Sobald händische DMs zu aufwendig werden -> Auto-DM Tool (z.B. ManyChat) einrichten.
### 💰 Phase 3: Tag 6190 (Monetization & Repeatability)
*Fokus: Monetarisierung, Retention und Outbound Sales.*
- **Produkt:** "Staleness Alerts" (warnt Makler bei verwaisten Listings/URLs) & CRM-Handoff integrieren.
- **Sales:** Aus den Learnings eine klare "Case-Study Salespage" bauen und Outbound-Mails an ähnliche Broker-Teams starten.
- **Pricing:** Evaluieren, ob ein Hybrid-Pricing (Base Fee + "Per-Active-Listing" Fee) Sinn für Makler-Büros macht.
- **Zielschwelle:** Mindestens 10 zahlende **MRR-Accounts** allein aus der Immobilien-Wedge.
---
## ⚠️ Top Risiken & Mitigations
| Risiko | Lösungsansatz (Mitigation) |
| :--- | :--- |
| **Abbruch im DM-Funnel** | Das per DM versendete Gratis-Material (Templates) muss eine wasserdichte, direkte "Brücke" zum Signup in QR Master haben. |
| **Schwache Attribution (Scan → Revenue)** | Standard-UTM-Parameter im Tool erzwingen, sodass Makler genau sehen können, woher der Lead kam. |
| **Zu breiter Fokus (Zeitfalle)** | Extreme Disziplin: Keine "Nice-to-have" Features für komplett andere Branchen (z.B. Speisekarten) vor Ablauf der 90 Tage. |
| **Plattform-Verzettelung** | Kein Cross-Posting Chaos: Fokus auf *nur eine* Plattform (z.B. LinkedIn), um den Algorithmus wirklich zu knacken. |

41
ideen.md Normal file
View File

@ -0,0 +1,41 @@
🚀 Neue Content-Typen
Feature Beschreibung
WiFi QR SSID, Passwort, Verschlüsselungstyp perfekt für Cafés/Hotels
Event (VEVENT) Kalendereinträge direkt ins Handy importieren
App Store Links Smart-Links die iOS/Android erkennen
PayPal/Bitcoin Zahlungsaufforderungen per QR
WhatsApp/Telegram Direkt-Chat mit vordefinierter Nachricht
📊 Analytics-Erweiterungen
Feature Beschreibung
UTM-Parameter Automatische Kampagnen-Tags für Google Analytics
Conversion Tracking Ziel-URLs definieren und Conversion messen
A/B Testing Zwei Ziel-URLs testen, welche besser performt
Scheduled Reports Wöchentliche/monatliche E-Mail-Reports
Export (CSV/PDF) Analytics-Daten exportieren
🎨 QR Design & Styling
Feature Beschreibung
Design Templates Vorgefertigte Farb-/Logo-Kombinationen
Frames & CTA "Scan me!" Rahmen um den QR Code
Dot Styles Runde Punkte, Diamanten, etc.
Eye Shapes Custom Corner-Marker Designs
Gradient Colors Farbverläufe statt Vollfarben
🗂️ Organisation & Teamwork
Feature Beschreibung
Folders/Projekte QR Codes in Ordner organisieren
Tags & Filter Flexibles Tagging-System
Team Workspaces Mehrere User pro Account (BUSINESS)
Activity Log Wer hat was wann geändert
QR Code Archiv Soft-Delete statt Löschen
⚙️ Pro Features
Feature Beschreibung
Passwortschutz QR führt zu Passwort-geschützter Seite
Ablaufdatum QR Code deaktiviert sich automatisch
Scan-Limit Max. X Scans erlauben
Geo-Targeting Verschiedene URLs je nach Standort
Device Detection Desktop vs. Mobile unterschiedliche URLs
🔌 Integrationen
Feature Beschreibung
Zapier/Make Webhooks bei Scans triggern
Google Sheets Scan-Daten automatisch exportieren
Slack Notifications Benachrichtigung bei X Scans
API für Entwickler Public API mit Token-Auth

View File

@ -1,127 +0,0 @@
# QR Master: The Growth Masterpiece
## Implementations-Idee (Integrated Strategy V1.1)
## Executive Summary
Dieses Dokument integriert Conversion-, Copywriting- und Content-Strategie, um QR Master von einem simplen Utility-Tool zu einer Vertical Operations Platform zu entwickeln.
**Kernthese:** Wir gewinnen nicht durch einen "besseren" Generator, sondern als die **einzige Versicherung gegen physische Marketingverschwendung**.
## 1. Conversion Architecture (CRO)
### 1.1 Ziel
Die Value Gap schliessen: Nutzer verstehen den Wert von **Dynamic QR Codes** oft erst *nach* dem Druckfehler.
### 1.2 Funnel-Diagnose & Leak
Aktuelles Problem:
1. Nutzer suchen nach `free qr code generator` (High Volume).
2. Erstellen statischen Code & laden PNG herunter.
3. Drucken Material.
4. Link ändert sich -> Code tot -> Frust & Churn.
### 1.3 Safety Intercept (Pre-Download Modal)
**Hypothese:** Ein "Angst-basiertes" Intercept vor dem Download konvertiert Free-User zu Dynamic-Usern, indem es das Risiko von statischen Codes aufzeigt.
**Trigger:** Klick auf `Download PNG` / `Download SVG` bei statischem Code.
**Modal-Inhalt (Optimiert):**
- **Headline:** `Wait! You are creating a Permanent, Static Code.`
- **Body:** `Once printed, this code cannot be changed. If your link breaks, your flyers are trash. 80% of businesses switch to a **Dynamic QR Code Generator** to stay safe.`
- **CTA Primary:** `Yes, make it Editable (Free Dynamic)`
- **CTA Secondary:** `No, I risk the Static Code`
### 1.4 Experiment-Setup (A/B Test)
- **Control:** Direkter Download.
- **Variant:** Safety Intercept Modal.
- **Primary KPI:** `intercept_upgrade_rate` (Ziel: >15%).
---
## 2. Direct Response Copywriting (Real Estate Vertical)
Fokus auf das Keyword Cluster: `qr codes for business` und `real estate qr codes`.
### 2.1 Zielseite: `/solutions/real-estate`
**Hero Section (SEO & Conversion Optimized):**
- **H1 (SEO):** `Real Estate QR Code Generator: The "Forever Code" for Agents`
- **Subhead:** `Sold the listing? Don't trash the flyers. Just reroute your **Dynamic QR Code** to the next property in 1 click.`
- **CTA:** `Create Free Real Estate QR Code`
- **Micro-Copy:** `Works with Canva & Zillow. Trusted by top agents.`
### 2.2 Nurture Bridge Email Sequence
**Trigger:** Download `Real Estate Toolkit`.
**Email 1 (The Hook):**
- **Subject:** `Your "Forever Flyer" Templates are here`
- **Body:** "Stop printing single-use codes. Use this template with a **Dynamic QR Code** that you recycle for every open house."
**Email 2 (The Fear):**
- **Subject:** `The $300 mistake 90% of agents make`
- **Body:** Story über 500 weggeworfene Flyer, weil der statische Code nicht auf das neue Listing umgeleitet werden konnte. Lösung: "The Editable QR Code".
---
## 3. Content Strategy & SEO Operations
Basierend auf `keyword_planer_google.md` (High Volume & High CPC Opportunities).
### 3.1 Keyword-Prioritäten
Wir attackieren drei Ebenen gleichzeitig:
1. **Volume Layer (Top of Funnel):**
- `qr code generator free` (500k Search Volume) -> Homepage & Tool Pages
- `create qr code` (50k SV) -> Tutorial Hub
2. **Value Layer (High Intent/CPC):**
- `dynamic qr code generator` (5k SV, High Value) -> Feature Page
- `qr code for business` (5k SV, High CPC) -> Solutions Hub
3. **Feature Layer (Longtail):**
- `qr code generator with logo` (5k SV) -> Customization Page
- `vcard qr code generator` (5k SV) -> vCard Tool
### 3.2 Content-Pillars & Hubs
| Hub Page | Target Keyword | Content Angle (H1 Idea) |
| :--- | :--- | :--- |
| **Real Estate** | `real estate qr codes` | "The Only QR Code Generator for Real Estate Agents" |
| **Business** | `qr codes for business` | "Enterprise-Grade QR Code Generator for Business Growth" |
| **Dynamic** | `dynamic qr code generator` | "Create Editable & Trackable Dynamic QR Codes (Free)" |
| **vCard** | `vcard qr code` | "Digital Business Card & vCard QR Code Generator" |
### 3.3 SEO-Protokoll & On-Page Execution
Für *jede* neue Seite gilt strikt:
1. **URL-Struktur:** Sprechend & hierarchisch (`/tools/dynamic-qr-code-generator`).
2. **Title Tag:** `[Main Keyword] - [Benefit] | QR Master`
- *Bsp:* `Dynamic QR Code Generator - Edit Links After Printing | QR Master`
3. **H1:** Muss das Main Keyword exakt enthalten.
4. **FAQ Schema:** Fragen aus "People Also Ask" integrieren (z.B. "Can I edit a QR code after printing?").
---
## 4. Execution Roadmap (Next 4 Weeks)
### Woche 1: Foundation & "Safety Net"
- [Dev] **Safety Intercept Modal** auf der Homepage deployen.
- [Content] Optimierung der Homepage Meta-Daten für `free qr code generator` und `dynamic qr code`.
### Woche 2: Vertical Attack (Real Estate)
- [Page] `/solutions/real-estate` live bringen (Copy siehe 2.1).
- [Lead Magnet] "Forever Flyer" Canva Templates erstellen.
### Woche 3: High-Value Content
- [Blog] Comparison Post: `Bitly vs. QR Master for Business` (Targeting `qr code for business`).
- [Tool] Polishing der `vcard` Seite für das Keyword `vcard qr code generator`.
### Woche 4: Review & Amplify
- Analyse der `intercept_upgrade_rate`.
- Backlink-Outreach für Real Estate Artikel.
---
## 5. Risiken & Mitigation
- **Risk:** User sind genervt vom Modal.
- **Fix:** "Don't show again" Option nach 2x Anzeigen.
- **Risk:** SEO dauert zu lange (3-6 Monate).
- **Fix:** Parallel "Programmatic SEO" für Longtail-Keywords (z.B. `qr code for [city]`) aufbauen, um schnelleren Traffic zu holen.
## 6. Definition of Done (V1.1)
- Safety Intercept ist live und trackt Upgrades.
- Real Estate Landingpage rankt für Longtail-Keywords.
- Die Top-5 Keywords aus dem Plan (`dynamic`, `free`, `business`, `custom`, `vcard`) haben dedizierte, optimierte Landingpages.

View File

@ -1,828 +0,0 @@
Keyword Stats 2026-01-22 at 10_55_20
1. Januar 2025 - 31. Dezember 2025
Keyword Currency Avg. monthly searches Änderung über drei Monate Änderung im Jahresvergleich Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share Organic impression share Organic average position In account? In plan? Searches: Jan 2025 Searches: Feb 2025 Searches: Mar 2025 Searches: Apr 2025 Searches: May 2025 Searches: Jun 2025 Searches: Jul 2025 Searches: Aug 2025 Searches: Sep 2025 Searches: Oct 2025 Searches: Nov 2025 Searches: Dec 2025
dynamic qr code generator EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
dynamic qr codes EUR 5000 -90% 0% Mittel 38 "2,58" "17,08"
dynamic qr EUR 500 0% 0% Mittel 34 "1,85" "11,67"
generate qr EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
create qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
dynamic qr code generator free EUR 500 0% 0% Hoch 82 "1,69" "4,97"
qr code generator free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
code generator EUR 5000 0% 0% Niedrig 32 "1,29" "3,97"
free qr generator EUR 5000 0% 0% Hoch 76 "1,21" "3,62"
create qr code free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
custom qr code generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
qr code free EUR 5000 0% 0% Hoch 84 "0,94" "3,33"
make qr code EUR 50000 -90% 0% Hoch 82 "0,89" "3,63"
create dynamic qr code EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
make qr code free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
static qr code generator EUR 5000 0% 900% Hoch 71 "1,06" "3,50"
my qr code generator EUR 500 0% 0% Hoch 81 "1,45" "3,51"
qr code generator with analytics EUR 500 0% -90% Mittel 65 "3,63" "27,08"
dynamic qr codes free EUR 500 0% 0% Hoch 79 "1,27" "4,58"
scan code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
url qr code generator EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
dynamic qr generator EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
create a dynamic qr code EUR 50 0% 0% Hoch 83 "4,10" "13,65"
get a qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
create qr code generator EUR 50000 0% 0% Hoch 81 "0,86" "3,52"
qr code generator with tracking EUR 500 0% 0% Hoch 72 "2,77" "19,03"
bulk qr code generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
create custom qr code EUR 500 0% 0% Mittel 51 "2,44" "7,89"
qr codes for business EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
custom qr code EUR 5000 0% 0% Mittel 57 "1,83" "6,10"
make qr EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
qr code tracking EUR 5000 -90% -90% Mittel 64 "1,62" "14,63"
free qr code generator for business cards EUR 500 0% 0% Hoch 85 "2,04" "4,44"
qr creation EUR 50000 0% 0% Hoch 72 "0,71" "3,34"
qr code generator for business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
create qr code for business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
create qr code for business EUR 50 0% 0% Hoch 96 "2,97" "5,82"
qr code generator pricing EUR 500 -90% -90% Mittel 49 "2,33" "17,90"
static qr code generator free EUR 50 0% 900% Hoch 87 "0,91" "3,24"
qr codes on business cards EUR 50000 -90% -90% Hoch 100 "2,19" "6,72"
static qr codes EUR 500 -90% 0% Mittel 62 "0,90" "3,64"
free qr code for business card EUR 500 0% 0% Hoch 100 "2,40" "4,89"
professional qr code generator EUR 50000 0% 0% Mittel 53 "0,91" "10,80"
dynamic qr code tracking EUR 50 0% 0% Mittel 55 "1,52" "18,26"
qr barcode generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
free qr code generator with logo EUR 500 0% 0% Hoch 80 "1,31" "4,47"
qr code generator for business EUR 500 0% 900% Niedrig 17 "1,81" "7,00"
vcard qr code generator EUR 5000 0% 0% Mittel 60 "1,08" "4,10"
free qr code generator with tracking EUR 500 -90% 0% Hoch 80 "2,43" "9,97"
qr code with analytics EUR 500 0% 0% Mittel 56 "4,85" "22,14"
my qr code EUR 5000 0% 0% Mittel 59 "0,97" "3,79"
qr code designer EUR 500 0% 0% Mittel 64 "0,91" "3,63"
create dynamic qr code free EUR 500 0% 0% Hoch 82 "1,69" "4,97"
qr code for business card free EUR 500 -90% -90% Hoch 96 "2,28" "4,93"
free custom qr code generator EUR 500 0% 0% Hoch 91 "1,69" "4,83"
completely free qr code generator EUR 500 0% 0% Hoch 90 "0,92" "3,04"
vcard qr code EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
custom qr code free EUR 500 0% 0% Hoch 88 "1,86" "4,97"
get a free qr code EUR 500 0% 900% Hoch 86 "1,10" "4,78"
qr gen EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
create qr free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
trackable qr code generator EUR 500 0% 0% Hoch 72 "2,77" "19,03"
free code generator EUR 500 0% 0% Mittel 40 "1,00" "3,98"
custom qr EUR 500 0% 0% Hoch 87 "1,51" "4,43"
qr code for location EUR 500 -90% -90% Mittel 37 "0,79" "3,42"
create qr code for business card free EUR 50 0% 0% Hoch 100 "0,98" "4,46"
free create a qr code EUR 500 0% 0% Hoch 87 "1,28" "4,10"
qr code generator with logo EUR 5000 0% 0% Mittel 64 "1,51" "5,12"
free qr code for business EUR 50 0% 0% Hoch 88 "1,95" "4,50"
qr maker free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
facebook qr code generator EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
create free qr code for business card EUR 50 0% 0% Hoch 98 "3,34" "4,97"
qr code com EUR 500 0% 0% Mittel 62 "0,82" "3,73"
qr code for restaurant menu EUR 500 900% 900% Hoch 73 "1,89" "8,11"
trackable qr codes EUR 500 0% 0% Hoch 70 "5,57" "34,95"
create website qr code EUR 50 0% 0% Hoch 88 "2,22" "6,88"
qr business card generator EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
qr code generator and tracking EUR 500 0% 0% Hoch 72 "2,77" "19,03"
qr code restaurant menu EUR 500 -90% -90% Hoch 82 "2,81" "11,90"
qr tracking EUR 500 0% 0% Niedrig 11 "1,66" "12,51"
custom qr generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
v card qr code EUR 50 0% 0% Hoch 79 "1,10" "4,16"
cool qr code generator EUR 500 0% 0% Mittel 63 "1,19" "3,87"
make a qr code for business card EUR 50 0% 0% Hoch 85 "3,17" "7,50"
qr generator for business cards EUR 50 0% 0% Hoch 84 "3,18" "5,18"
branded qr code generator EUR 50 0% 0% Hoch 83 "2,63" "10,80"
website to qr code EUR 5000 0% 0% Mittel 49 "0,68" "3,48"
create qr code with tracking EUR 50 0% 0% Niedrig 18 "3,65" "7,01"
vcard qr code free EUR 500 -90% 0% Hoch 80 "0,83" "3,58"
vcard qr EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
make custom qr code EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
create static qr code EUR 50 0% 0% Hoch 90 "1,31" "4,10"
qr code for your business EUR 50 0% 0% Hoch 99 "2,16" "5,79"
get a qr code for my business EUR 50 0% 0% Hoch 95 "2,89" "8,41"
generate dynamic qr codes EUR 5000 0% 0% Mittel 38 "2,34" "14,52"
restaurant qr code EUR 500 0% 0% Hoch 80 "1,61" "11,55"
vcard qr code generator free EUR 500 0% 0% Hoch 81 "1,30" "4,00"
my qr EUR 5000 0% 0% Mittel 59 "0,97" "3,79"
qr code generator and analytics EUR 50 ∞ 0% Hoch 88 "6,49" "27,63"
unique qr code generator EUR 500 0% 0% Mittel 57 "1,51" "4,32"
url qr generator EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
free qr code generator free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
free qr code tracking EUR 500 0% 0% Hoch 73 "1,62" "9,39"
menu qr code generator EUR 50 0% 0% Hoch 84 "2,58" "5,01"
generate static qr code EUR 50 0% 0% Hoch 90 "1,22" "3,11"
unlimited qr code generator EUR 500 -90% -90% Hoch 82 "1,33" "3,70"
vcard qr generator EUR 5000 0% 0% Mittel 60 "1,08" "4,10"
qr code generator phone number EUR 500 -90% 0% Hoch 75 "0,74" "3,88"
create qr code from url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
business qr code generator free EUR 50 0% 0% Hoch 93 "1,96" "4,72"
make qr code for business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
create a website qr code EUR 50 0% 0% Hoch 88 "2,61" "7,92"
qr card EUR 5000 -90% 0% Hoch 100 "1,35" "4,74"
dynamic qr code pricing EUR 50 0% -90% Mittel 62 "1,89" "11,48"
ai qr code generator EUR 500 0% 0% Mittel 39 "0,87" "3,54"
qr code de EUR 50 -90% 0% Mittel 55 "0,59" "5,28"
qr code create free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
make a dynamic qr code EUR 50 0% 0% Hoch 88 "1,80" "7,05"
create my qr code EUR 500 -90% -90% Hoch 88 "1,08" "4,05"
qr code menu free EUR 50 0% -90% Mittel 56 "1,77" "5,39"
creating a qr code for business EUR 50 0% 0% Hoch 86 "2,30" "8,64"
create qr barcode EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
qr card generator EUR 50 0% 0% Hoch 75 "1,26" "3,70"
dynamic qr free EUR 50 0% 0% Hoch 86 "0,46" "3,73"
free barcode EUR 5000 0% 0% Niedrig 6 "0,64" "3,16"
generate qr codes for free EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
create a qr code for my business EUR 50 0% 0% Hoch 89 "4,10" "9,04"
vcard qr code business card EUR 50 0% 0% Mittel 53 "3,35" "7,32"
create a qr code for your business EUR 50 0% 0% Hoch 93 "2,54" "5,08"
edit qr code EUR 500 0% 0% Mittel 37 "0,90" "6,55"
url code generator EUR 500 0% 0% Mittel 66 "1,19" "3,61"
qr qr code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
free unlimited qr code generator EUR 500 0% 0% Hoch 89 "0,93" "3,06"
event qr code EUR 500 0% 0% Mittel 43 "1,48" "7,61"
qr code generator contact card EUR 500 0% 0% Mittel 46 "2,35" "6,17"
free code qr generator EUR 50 0% 0% Hoch 73 "0,89" "3,63"
make a qr code for business EUR 50 0% 0% Hoch 88 "1,76" "5,26"
create a static qr code EUR 50 0% 0% Hoch 85 "1,51" "4,36"
create trackable qr code EUR 50 0% 0% Hoch 74 "5,22" "22,03"
produce qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
make dynamic qr code EUR 50 0% 0% Hoch 86 "3,06" "6,45"
qr code generator from url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
qr code for my business EUR 50 0% 0% Hoch 97 "2,46" "7,58"
my qr generator EUR 50 0% 0% Hoch 93 "0,85" "3,31"
free qr code generator with analytics EUR 50 0% 0% Hoch 93 "2,73" "7,89"
make your own qr code free EUR 500 0% 0% Hoch 86 "1,43" "4,11"
static qr codes generator EUR 50 0% 0% Mittel 51 "1,10" "3,70"
create your own qr code free EUR 500 0% 0% Hoch 86 "1,43" "4,11"
design qr code generator EUR 500 0% 0% Niedrig 32 "0,95" "3,36"
static qr generator EUR 50 0% 0% Hoch 87 "0,91" "4,14"
qr codes pro EUR 500 0% 0% Niedrig 28 "1,23" "8,93"
qr code with tracking free EUR 500 0% 0% Hoch 73 "1,62" "9,39"
website to qr code generator EUR 50 -90% 0% Hoch 77 "0,95" "4,10"
facebook qr code generator free EUR 500 0% 0% Niedrig 15 "1,27" "3,63"
make your qr code EUR 500 0% 0% Hoch 69 "1,35" "5,19"
smart qr code generator EUR 50 0% 0% Mittel 44 "1,09" "5,84"
creating qr code business card EUR 5000 0% 0% Mittel 42 "2,95" "7,03"
qr barcode generator free EUR 5000 0% 0% Hoch 76 "1,21" "3,62"
create qr code from website EUR 50 0% 0% Hoch 93 "1,13" "4,59"
branded qr codes EUR 500 0% 0% Mittel 54 "1,84" "10,35"
create free dynamic qr code EUR 50 0% 0% Hoch 90 "1,84" "5,87"
free url qr code generator EUR 50 0% 0% Hoch 87 "1,18" "3,63"
generate website qr code EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
create your qr code EUR 500 0% 0% Hoch 69 "1,35" "5,19"
create the qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
make my qr code EUR 500 -90% -90% Hoch 88 "1,08" "4,05"
event qr code generator EUR 50 0% 0% Mittel 57 "1,38" "4,25"
paypal qr code EUR 5000 0% 0% Niedrig 9 "1,03" "6,79"
unique qr codes EUR 500 0% 0% Niedrig 30 "1,21" "5,02"
generate qr code for url free EUR 50 0% 0% Hoch 86 "1,27" "3,63"
create business qr code EUR 50 0% 0% Hoch 96 "2,97" "5,82"
generate the qr code EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
qr code generator free business card EUR 50 0% 0% Mittel 60 "1,72" "4,10"
qr code generator business EUR 500 0% 0% Hoch 75 "3,51" "7,51"
qr code generator for business card free EUR 50 0% 0% Hoch 92 "2,60" "4,10"
cool qr codes EUR 500 0% 0% Niedrig 25 "1,16" "3,82"
create custom qr code free EUR 50 0% 0% Hoch 89 "2,02" "5,06"
qr code for EUR 500 0% 0% Niedrig 12 "1,04" "3,52"
qr code generator ai EUR 500 0% 900% Mittel 53 "0,87" "3,63"
barcode create EUR 5000 0% 0% Mittel 35 "0,78" "3,15"
create a qr code for a url free EUR 50 0% 0% Hoch 90 "1,51" "4,86"
url to qr code generator free EUR 50 0% 0% Hoch 81 "1,22" "3,11"
create a qr code for business card free EUR 50 0% 0% Hoch 93 "3,63" "5,66"
generate a qr EUR 50000 0% 0% Hoch 81 "0,86" "3,52"
free qr code designer EUR 50 0% 0% Hoch 90 "1,27" "3,34"
dynamic qr code cost EUR 50 0% 0% Mittel 60 "1,62" "10,52"
custom logo qr code EUR 500 0% 0% Hoch 98 "2,27" "7,67"
instant qr code generator EUR 50 0% 0% Hoch 78 "1,30" "3,63"
create menu qr code free EUR 50 0% 0% Hoch 74 "4,10" "6,74"
qr code generator qr code generator qr code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
create vcard qr code EUR 5000 0% 0% Mittel 60 "1,08" "4,10"
get qr code for business EUR 50 0% 0% Hoch 100 "3,61" "4,62"
qr code sign up EUR 50 0% 0% Mittel 52 "1,44" "9,17"
with qr code EUR 50 0% 0% Niedrig 22 "1,00" "3,92"
create a business qr code EUR 50 0% 0% Hoch 96 "4,50" "11,66"
create qr for free EUR 50 0% 0% Hoch 89 "1,31" "3,63"
free make a qr code EUR 50 0% 0% Hoch 83 "1,28" "3,32"
qr code for menu free EUR 50 0% 0% Hoch 80 "2,31" "5,12"
qr code pricing EUR 500 0% 0% Mittel 58 "0,99" "5,66"
qr code generator permanent EUR 500 0% 900% Hoch 78 "1,22" "4,10"
free trackable qr code EUR 500 0% 0% Hoch 73 "1,62" "9,39"
create free qr code business card EUR 500 0% 0% Hoch 85 "2,04" "4,44"
create free qr code generator EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
instagram qr code generator free EUR 50 0% 0% Hoch 91 "1,09" "3,63"
develop a qr code EUR 50 0% 0% Hoch 83 "1,60" "5,88"
free business card qr code EUR 500 -90% 0% Hoch 97 "1,92" "4,84"
free qr code generator contact card EUR 50 0% 0% Hoch 88 "1,37" "4,04"
qr code qr code generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
create static qr code free EUR 50 0% 0% Hoch 81 "0,93" "3,36"
qr code from website EUR 50 0% 0% Hoch 85 "0,82" "3,20"
qr code generator for phone number EUR 500 -90% 0% Mittel 56 "0,79" "3,27"
create a qr code for an event EUR 50 0% 0% Hoch 74 "1,64" "5,94"
create qr scan code EUR 50 0% 0% Hoch 88 "1,27" "3,71"
create business card qr code free EUR 50 0% 0% Hoch 92 "2,66" "4,59"
advanced qr code generator EUR 50 0% 0% Mittel 42 "1,29" "6,91"
to create a qr code EUR 50 0% 0% Hoch 89 "2,93" "6,04"
make a qr code generator EUR 50 0% 0% Hoch 68 "1,27" "3,44"
qr restaurant menu EUR 50 0% 0% Mittel 35 "2,52" "28,99"
qr code vcard free EUR 50 0% 0% Hoch 84 "0,86" "4,96"
create barcode free EUR 500 0% 0% Mittel 39 "0,93" "3,34"
free business qr code EUR 50 0% 0% Hoch 95 "2,29" "4,10"
produce a qr code EUR 50000 0% 0% Hoch 84 "1,20" "3,94"
create qr code for event EUR 50 0% 0% Hoch 90 "1,12" "9,73"
website to qr code free EUR 50 0% 0% Hoch 85 "0,86" "3,61"
free qr code vcard EUR 50 0% 0% Hoch 99 "1,87" "3,63"
create qr generator EUR 50000 0% 0% Hoch 81 "0,86" "3,52"
qr design EUR 5000 -90% -90% Hoch 93 "0,93" "3,20"
free qr code menu EUR 50 0% 0% Niedrig 29 "1,57" "4,96"
custom free qr code EUR 50 0% 0% Hoch 95 "1,79" "4,64"
difference between static and dynamic qr code EUR 50 0% 0% Niedrig 24 "0,32" "10,47"
bulk qr generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
create cool qr codes EUR 50 0% 0% Hoch 94 "1,19" "5,18"
create unique qr code EUR 500 0% 0% Mittel 57 "1,51" "4,32"
produce qr code free EUR 50 0% 0% Hoch 100 "2,55" "4,54"
free contact qr code generator EUR 50 0% 0% Hoch 92 "1,31" "3,63"
professional qr code EUR 50 0% 0% Mittel 38 "1,75" "6,26"
menu qr codes EUR 500 0% 0% Hoch 71 "1,63" "5,60"
free qr code contact card EUR 50 0% 0% Hoch 86 "1,85" "3,80"
bulk create qr codes EUR 50 0% 0% Hoch 83 "3,25" "7,78"
generate qr code from website EUR 50 0% 0% Hoch 98 "1,47" "3,63"
create qr code from url free EUR 500 -90% 0% Hoch 92 "1,42" "3,70"
sign in qr code generator EUR 50 0% 0% Hoch 71 "2,16" "4,34"
custom design qr codes EUR 500 0% 0% Hoch 74 "1,38" "5,00"
tracking qr code scans EUR 500 0% -90% Mittel 52 "3,03" "16,93"
unlimited qr codes EUR 50 0% 0% Hoch 86 "1,04" "4,16"
create branded qr code EUR 50 0% 0% Hoch 79 "2,53" "17,43"
qr code generator business card free EUR 50 0% ∞ Hoch 95 "2,55" "5,69"
tracking barcode EUR 5000 0% -90% Mittel 47 "1,35" "4,34"
static qr EUR 500 -90% 0% Mittel 62 "0,90" "3,64"
generate qr code for business EUR 50 0% 0% Hoch 95 "4,11" "11,03"
free url to qr code EUR 50 0% 0% Hoch 87 "1,01" "3,63"
qr business code EUR 50 0% 0% Hoch 91 "3,30" "9,11"
v card qr code generator EUR 50 0% 0% Hoch 82 "1,28" "4,10"
free dynamic qr EUR 500 0% 0% Hoch 79 "1,27" "4,58"
create facebook qr code free EUR 50 0% 0% Hoch 94 "1,04" "4,43"
create my qr code free EUR 50 0% 0% Hoch 89 "2,43" "11,68"
basic qr code generator EUR 50 0% 0% Hoch 87 "1,08" "3,12"
need a qr code EUR 50 0% 0% Hoch 79 "1,18" "5,62"
purchase qr codes EUR 500 0% 0% Hoch 78 "2,78" "11,52"
qr location EUR 500 -90% -90% Mittel 37 "0,79" "3,42"
create free static qr code EUR 50 0% 0% Hoch 80 "1,06" "3,13"
ai qr code EUR 500 0% 0% Niedrig 14 "0,76" "4,66"
qr code generator with analytics free EUR 50 0% 0% Hoch 90 "3,15" "5,12"
need qr code EUR 50 0% 0% Hoch 76 "1,33" "4,97"
buy dynamic qr code EUR 50 ∞ 0% Niedrig 25 "1,87" "12,81"
to make a qr code EUR 50 0% 0% Mittel 65 "1,58" "3,63"
qr tracking code EUR 50 0% 0% Hoch 82 "1,10" "3,60"
sms qr code EUR 500 0% 0% Niedrig 17 "0,60" "3,35"
qr code tools EUR 500 900% 900% Mittel 34 "0,71" "4,11"
dynamic code generator EUR 50 0% 0% Niedrig 17 "3,82" "15,61"
qr code for business free EUR 50 0% 0% Hoch 91 "1,46" "3,63"
free qr code contact generator EUR 50 0% 0% Hoch 84 "1,06" "3,34"
free qr code generator no subscription EUR 50 0% 0% Hoch 90 "0,79" "3,09"
create your qr code free EUR 50 0% 0% Hoch 79 "1,79" "4,10"
free dynamic qr code generator with logo EUR 50 0% 0% Mittel 43 "0,48" "3,97"
sms qr code generator EUR 500 0% 0% Niedrig 18 "0,66" "3,11"
create a qr free EUR 50 0% 0% Hoch 94 "2,12" "3,63"
qr code generator generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
qr code generator account EUR 50 0% 0% Mittel 44 "1,51" "7,59"
make your own qr codes EUR 5000 0% 0% Hoch 79 "1,38" "4,11"
qr tag generator EUR 500000 -90% 0% Hoch 74 "0,63" "3,12"
free trackable qr code generator EUR 500 -90% 0% Hoch 80 "2,43" "9,97"
dynamic qr code free generator EUR 50 0% 0% Hoch 95 "2,50" "4,88"
create a unique qr code EUR 50 0% 0% Hoch 96 "2,58" "4,89"
free menu qr code generator EUR 50 0% 0% Hoch 95 "2,35" "3,38"
trackable qr code generator free EUR 50 0% 0% Hoch 95 "4,38" "8,26"
free code qr EUR 50000 0% 0% Hoch 86 "1,25" "3,63"
create qr code with url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
difference between static and dynamic qr codes EUR 50 0% 0% Hoch 89 "0,61" "18,51"
free dynamic qr generator EUR 500 0% 0% Hoch 82 "1,69" "4,97"
my qr code generator free EUR 50 0% 0% Hoch 83 "1,51" "4,92"
qr code provider EUR 50 0% 0% Mittel 40 "1,85" "7,42"
qr analytics EUR 500 0% 0% Mittel 56 "4,85" "22,14"
qr code generator with custom logo EUR 50 0% 0% Hoch 88 "3,95" "10,07"
to make qr code EUR 50 0% 0% Mittel 52 "1,46" "4,59"
static and dynamic qr codes EUR 50 0% 0% Mittel 64 "0,42" "5,07"
get qr code generator EUR 50 0% 0% Hoch 80 "1,02" "3,86"
qr code generator with url EUR 50 0% 0% Hoch 90 "2,65" "5,00"
create code qr free EUR 50 0% 0% Hoch 93 "1,96" "3,63"
create qr code of website EUR 50 0% 0% Hoch 97 "2,15" "4,93"
qr code generator free unlimited EUR 50 0% 0% Hoch 94 "1,18" "3,63"
create qr code for EUR 50 0% 0% Hoch 68 "1,14" "3,63"
the qr generator EUR 50 0% 0% Mittel 60 "0,98" "3,99"
bulk qr code generator from excel EUR 50 0% 0% Mittel 42 "1,22" "4,36"
make url qr code EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
qr code and tracking EUR 5000 -90% -90% Mittel 64 "1,62" "14,63"
make qr code for location EUR 50 0% 0% Hoch 86 "1,37" "4,01"
sign up qr code EUR 50 0% 0% Niedrig 23 "1,81" "5,80"
custom branded qr codes EUR 50 0% 0% Hoch 100 "2,33" "13,48"
build qr code generator EUR 50 0% 0% Hoch 80 "1,02" "3,86"
free qr code business card generator EUR 50 0% 0% Mittel 60 "1,72" "4,10"
generate qr code with url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
qr create free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
make qr code from website EUR 50 0% 0% Hoch 92 "1,48" "3,53"
qr bulk generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
qr code s EUR 500 0% 0% Niedrig 27 "0,57" "4,92"
create your own qr codes EUR 5000 0% 0% Hoch 79 "1,38" "4,11"
restaurant menu qr code free EUR 50 0% 0% Hoch 95 "1,78" "8,90"
event qr code generator free EUR 50 0% 0% Hoch 73 "1,55" "4,53"
qr signs EUR 5000 -90% -90% Hoch 100 "0,65" "4,49"
log in qr code generator EUR 5000 0% 0% Niedrig 15 "0,67" "3,07"
instant qr code EUR 50 0% 0% Hoch 77 "1,86" "4,80"
custom qr code designer EUR 50 0% 0% Hoch 90 "3,13" "4,88"
create a url qr code EUR 50 0% 0% Hoch 89 "2,80" "5,01"
the qr code generator free EUR 50 0% 0% Hoch 82 "1,06" "3,63"
new qr code generator EUR 50 0% 0% Hoch 79 "1,51" "4,58"
trackable qr code free EUR 50 0% 0% Hoch 88 "3,62" "12,45"
free personalized qr code generator EUR 50 0% 0% Hoch 93 "0,81" "3,63"
qr code generator from website EUR 50 0% 0% Hoch 98 "1,28" "4,12"
create qr code for instagram free EUR 50 0% 0% Hoch 95 "1,51" "4,46"
digital qr code generator EUR 50 0% 0% Mittel 45 "1,84" "4,17"
qr png generator EUR 50 0% 0% Hoch 74 "1,28" "3,33"
create custom qr EUR 500 0% 0% Mittel 51 "2,44" "7,89"
make qr code for business EUR 50 0% 0% Hoch 100 "2,49" "3,36"
contact card qr code generator EUR 50 0% 0% Hoch 89 "1,68" "4,94"
qr printing EUR 500 0% 0% Mittel 46 "0,74" "7,53"
qr for business EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
permanent qr code generator free EUR 500 0% 900% Hoch 85 "1,03" "3,57"
free menu qr code EUR 50 0% 0% Hoch 97 "1,94" "4,53"
generate qr code for a url EUR 50 0% 0% Hoch 94 "2,17" "5,95"
manage qr codes EUR 500 0% -90% Niedrig 30 "2,11" "18,77"
qr generator custom EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
qr code to phone number EUR 50 0% 0% Hoch 75 "0,74" "3,16"
customer qr code EUR 50 0% 0% Mittel 53 "1,80" "3,72"
website url qr code generator EUR 50 0% 0% Hoch 77 "1,65" "4,23"
square barcode generator EUR 500 0% 0% Mittel 45 "0,84" "8,47"
website to create qr code EUR 50 0% 0% Hoch 87 "1,89" "4,62"
scan barcode generator EUR 500 0% 0% Niedrig 27 "0,84" "5,11"
obtain a qr code EUR 50000 -90% 0% Hoch 82 "0,89" "3,63"
qr code generator for my website EUR 500 0% 0% Hoch 87 "4,10" "10,77"
generate your qr code EUR 500 0% 0% Hoch 69 "1,35" "5,19"
generate qr code from url free EUR 50 0% 0% Hoch 84 "0,38" "3,93"
create qr code for menu free EUR 50 0% ∞ Hoch 86 "2,03" "5,10"
qr business EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
qr code generator site EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
code create EUR 50 -90% 0% Niedrig 3 "0,62" "6,98"
dynamic codes EUR 500 0% 0% Niedrig 12 "0,78" "4,21"
qr code analytics free EUR 50 0% 0% Hoch 86 "1,32" "5,57"
free url to qr code generator EUR 50 0% 0% Hoch 91 "0,94" "3,65"
personalized qr code generator EUR 50 0% 0% Hoch 90 "1,75" "6,74"
custom logo qr code generator EUR 500 0% 0% Hoch 68 "2,73" "7,71"
restaurant qr EUR 500 0% 0% Hoch 80 "1,61" "11,55"
generate facebook qr code EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
qr contact card generator EUR 500 0% 0% Mittel 46 "2,35" "6,17"
free qr generator code EUR 50 0% 0% Hoch 90 "1,69" "4,10"
dynamic url qr code EUR 50 0% 0% Hoch 82 "5,45" "18,45"
free qr code analytics EUR 50 0% 0% Hoch 86 "1,32" "5,57"
generate qr code for phone number EUR 50 0% 0% Hoch 79 "0,76" "3,37"
free qr code generator and tracking EUR 500 -90% 0% Hoch 80 "2,43" "9,97"
generate unique qr code EUR 500 0% 0% Mittel 57 "1,51" "4,32"
youtube qr code generator free EUR 50 0% 0% Hoch 96 "1,21" "3,63"
customize qr code generator EUR 50 0% 0% Hoch 83 "1,16" "6,79"
make a qr scan code EUR 50 0% 0% Hoch 88 "1,27" "3,71"
create a qr code for location EUR 50 0% 0% Hoch 100 "1,91" "3,60"
url to qr generator EUR 50 0% 0% Hoch 89 "0,20" "9,36"
business qr EUR 5000 0% 0% Hoch 97 "2,57" "7,95"
edit a qr code EUR 500 0% 0% Mittel 37 "0,90" "6,55"
generate qr codes in bulk EUR 50 0% 0% Hoch 100 "2,07" "8,02"
qr code generator freeware EUR 500000 -90% 0% Hoch 86 "1,24" "3,64"
automated qr code generator EUR 50 0% 0% Hoch 86 "0,93" "3,18"
create qr code to email EUR 50 0% 0% Hoch 82 "0,86" "4,06"
free png qr code generator EUR 50 0% 0% Hoch 88 "1,55" "5,87"
free qr code generator for url EUR 50 0% 0% Hoch 89 "1,51" "4,10"
create a qr code from website EUR 50 0% 0% Hoch 77 "2,58" "6,51"
qr code qr EUR 5000 0% 0% Niedrig 0 "1,03" "3,01"
make qr code generator free EUR 500 0% 0% Hoch 83 "1,51" "3,63"
qr code generator custom logo EUR 500 0% 0% Hoch 68 "2,73" "7,71"
make your qr code free EUR 50 0% 0% Hoch 79 "1,79" "4,10"
free qr business cards EUR 500 -90% 0% Hoch 97 "1,92" "4,84"
create qr barcode free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
qr code generator barcode EUR 50 0% 0% Mittel 43 "0,97" "4,06"
free sms qr code generator EUR 50 0% 0% Niedrig 32 "0,81" "3,03"
difference between dynamic and static qr code EUR 50 0% 0% Hoch 70 "0,23" "5,71"
qr code generator free for phone number EUR 50 0% ∞ Hoch 100 "0,37" "3,63"
creating scan codes EUR 50000 0% 0% Hoch 84 "1,68" "4,83"
create scan code free EUR 500 0% 0% Hoch 87 "1,28" "4,10"
free qr code generator for vcard EUR 500 0% 0% Hoch 81 "1,30" "4,00"
qr code generator for contact card EUR 500 0% 0% Mittel 46 "2,35" "6,17"
qr contact code generator EUR 500 0% 0% Hoch 75 "1,32" "4,73"
create own qr code free EUR 50 0% 0% Hoch 85 "0,87" "4,15"
qr to code EUR 50 0% 0% Niedrig 21 "1,00" "3,78"
free branded qr code generator EUR 50 0% 0% Hoch 100 "1,81" "3,52"
qr code free tracking EUR 500 0% 0% Hoch 73 "1,62" "9,39"
free qr code generator unlimited EUR 50 0% 0% Hoch 85 "1,08" "3,27"
create your own free qr code EUR 500 0% 0% Hoch 86 "1,43" "4,11"
customize a qr code EUR 5000 0% 0% Mittel 57 "1,83" "6,10"
modify qr code EUR 500 0% 0% Mittel 37 "0,90" "6,55"
create youtube qr code EUR 50 0% 0% Hoch 71 "0,86" "3,17"
vcard qr free EUR 50 0% 0% Hoch 95 "1,56" "3,63"
build qr codes EUR 50 -90% 0% Hoch 89 "0,95" "4,10"
create qr code free from url EUR 500 0% 900% Hoch 89 "1,74" "4,85"
barcode and qr code generator EUR 50 0% 0% Mittel 43 "0,97" "4,06"
make free qr EUR 50 0% 0% Hoch 89 "0,85" "4,10"
digital restaurant menu qr code EUR 50 0% 0% Hoch 95 "1,68" "5,15"
qr code generator for EUR 50 0% 0% Hoch 96 "0,93" "3,00"
make qr barcode EUR 50000 0% 0% Hoch 72 "0,71" "3,34"
generate a qr code from a url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
generator free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
qr campaign EUR 50 0% -90% Niedrig 19 "1,45" "10,66"
free qr code editor EUR 50 0% 0% Hoch 75 "1,32" "3,18"
square codes EUR 5000 0% 0% Niedrig 5 "0,83" "3,42"
free qr code for my business EUR 50 0% 0% Hoch 90 "2,15" "4,10"
generate qr code in bulk EUR 50 0% 0% Hoch 100 "2,07" "8,02"
create custom qr codes free EUR 50 0% 0% Hoch 100 "2,23" "6,61"
smart qr codes EUR 500 900% 900% Mittel 36 "1,13" "6,17"
create qr code for url free EUR 50 0% 0% Hoch 90 "1,51" "4,86"
qr code with brand logo EUR 50 0% 0% Hoch 88 "2,39" "4,41"
barcode to qr code generator EUR 50 0% 0% Niedrig 27 "1,89" "8,80"
i qr code EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
qr code generator with logo for free EUR 500 0% 0% Hoch 80 "1,31" "4,47"
qr code generator no tracking EUR 50 0% 0% Hoch 76 "0,96" "3,93"
qr code unlimited EUR 500 0% 0% Mittel 66 "1,00" "6,13"
csv qr code generator EUR 50 0% 0% Mittel 65 "1,02" "5,95"
design qr code free EUR 50 0% 0% Hoch 97 "1,45" "4,05"
qr code generator card EUR 50 0% 0% Hoch 75 "1,26" "3,70"
qr design generator EUR 500 0% 0% Niedrig 32 "0,95" "3,36"
qr code permanent generator EUR 50 0% 0% Hoch 74 "0,56" "5,09"
free generate qr code for url EUR 50 0% 0% Mittel 48 "1,27" "3,19"
qr code i EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
every qr code EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
view qr code EUR 50 0% 0% Niedrig 13 "0,65" "3,23"
code creation EUR 50 -90% 0% Niedrig 12 "2,14" "5,68"
create own qr code generator EUR 50 0% -90% Hoch 79 "1,21" "3,71"
credit card qr code EUR 50 0% 0% Niedrig 7 "2,64" "9,81"
digital qr codes EUR 500 -90% 0% Mittel 63 "1,15" "4,49"
qr generator for url EUR 50 0% 0% Hoch 91 "1,10" "7,17"
qr code bulk generator free EUR 50 0% 0% Hoch 95 "0,74" "3,18"
dynamic barcode EUR 50 0% 0% Niedrig 33 "1,44" "5,12"
event qr EUR 500 0% 0% Mittel 43 "1,48" "7,61"
custom code generator EUR 50 0% 0% Niedrig 32 "1,79" "8,74"
qr codes marketing EUR 500 0% 0% Niedrig 33 "1,61" "10,10"
recommended qr code generator EUR 5000 0% 0% Hoch 78 "1,63" "8,36"
create a scan qr code EUR 50 0% 0% Hoch 96 "2,22" "4,68"
qr code with vcard EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
make a qr code for text EUR 50 0% 0% Hoch 71 "1,28" "3,34"
logo qr generator EUR 5000 0% 0% Mittel 64 "1,51" "5,12"
contact card qr generator EUR 50 0% 0% Hoch 82 "1,46" "3,63"
qr barcode free EUR 50000 0% 0% Hoch 86 "1,25" "3,63"
qr code scan device EUR 500 0% -90% Hoch 100 "0,37" "3,50"
all qr codes EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
cost for qr code EUR 500 0% 0% Mittel 58 "0,99" "5,66"
free qr tracking EUR 50 0% 0% Hoch 86 "1,49" "8,90"
generator for free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
create paypal qr code EUR 50 0% 0% Mittel 36 "1,79" "4,70"
generate qr code of url EUR 5000 0% -90% Hoch 84 "1,43" "4,85"
generate paypal qr code EUR 50 0% 0% Niedrig 30 "1,54" "4,76"
email qr code free EUR 50 0% 0% Hoch 68 "0,50" "3,48"
cost of qr codes EUR 500 0% 0% Mittel 58 "0,99" "5,66"
the best qr code generator free EUR 50 0% 0% Hoch 82 "1,00" "3,63"
qr code brand EUR 500 0% 0% Niedrig 4 "1,55" "8,10"
qr all EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
create qr reader EUR 50 0% 0% Hoch 82 "1,28" "3,60"
generate barcode qr EUR 50 0% 0% Mittel 43 "0,97" "4,06"
create barcode url EUR 50 0% 0% Hoch 77 "0,83" "3,43"
logos in qr codes EUR 5000 0% 0% Hoch 86 "1,20" "4,78"
create a paypal qr code EUR 50 0% 0% Mittel 45 "0,95" "5,00"
qr code save EUR 50 0% 0% Niedrig 19 "0,83" "3,47"
make a qr scanner EUR 500 0% 0% Mittel 56 "0,99" "4,22"
qr code freeware EUR 5000 0% 0% Hoch 84 "0,94" "3,33"
barcode scan code EUR 500 0% 0% Hoch 97 "0,81" "3,80"
qr code digital EUR 50 0% 0% Mittel 45 "0,59" "6,18"
qr code from vcard EUR 5000 0% 0% Hoch 74 "0,97" "3,63"
qr generator vcard free EUR 500 0% 0% Hoch 81 "1,30" "4,00"
make cool qr code EUR 50 0% 0% Hoch 83 "1,45" "3,96"
all qr EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
qr do EUR 50 0% 0% Niedrig 15 "0,85" "4,10"
qr events EUR 500 0% 0% Mittel 43 "1,48" "7,61"
call qr EUR 50 0% 0% Mittel 37 "1,00" "4,12"
Keyword Stats 2026-01-22 at 11_03_27
1. Januar 2025 - 31. Dezember 2025
Keyword Currency Avg. monthly searches Änderung über drei Monate Änderung im Jahresvergleich Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share Organic impression share Organic average position In account? In plan? Searches: Jan 2025 Searches: Feb 2025 Searches: Mar 2025 Searches: Apr 2025 Searches: May 2025 Searches: Jun 2025 Searches: Jul 2025 Searches: Aug 2025 Searches: Sep 2025 Searches: Oct 2025 Searches: Nov 2025 Searches: Dec 2025
custom qr code generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
qr barcode EUR 50000 0% 900% Niedrig 3 "0,42" "1,93"
bulk qr code generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
bar code generator EUR 500000 0% 0% Niedrig 3 "0,67" "2,58"
qr code generator for business EUR 500 0% 900% Niedrig 17 "1,81" "7,01"
this is a qr code EUR 5000 0% 0% Niedrig 9 "0,47" "1,33"
get a qr code for business EUR 50 0% 0% Niedrig 20
a qr code EUR 500 0% 0% Niedrig 23 "0,49" "2,01"
qr dynamic code generator EUR 50 -100% -100% Unbekannt
facebook qr code generator EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
whatsapp qr code generator EUR 500 0% 0% Niedrig 19 "0,51" "1,89"
qr tracking EUR 500 0% 0% Niedrig 11 "1,66" "12,51"
custom qr generator EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
create qr code with tracking EUR 50 0% 0% Niedrig 18 "3,65" "7,01"
qr code generator sign in EUR 500 -90% -90% Niedrig 6
make custom qr code EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
qr code qr code EUR 500 -90% -90% Niedrig 27 "0,26" "1,28"
free barcode EUR 5000 0% 0% Niedrig 6 "0,64" "3,16"
youtube qr code EUR 5000 0% 0% Niedrig 16 "0,52" "2,21"
paypal qr code generator EUR 500 0% 0% Niedrig 19 "0,66" "2,58"
code qr code EUR 500 0% 0% Niedrig 18 "0,29" "1,03"
qr code to text EUR 500 0% 0% Niedrig 4 "0,50" "2,20"
code to qr code EUR 50 0% 0% Niedrig 30 "0,43" "1,51"
qr code location generator EUR 50 0% 0% Niedrig 17
restaurant menu qr code generator EUR 50 0% 0% Niedrig 0
bulk qr code EUR 500 0% 0% Niedrig 13 "0,07" "2,85"
qr code instagram generator EUR 50 0% 0% Niedrig 29 "0,71" "1,75"
qr codes pro EUR 500 0% 0% Niedrig 28 "1,23" "8,93"
facebook qr code generator free EUR 500 0% 0% Niedrig 15 "1,27" "3,63"
generate website qr code EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
paypal qr code EUR 5000 0% 0% Niedrig 9 "1,03" "6,79"
unique qr codes EUR 500 0% 0% Niedrig 30 "1,21" "5,02"
the qr code EUR 500 0% 0% Niedrig 23 "0,66" "2,21"
scan location qr code EUR 50 0% 0% Niedrig 24
cool qr codes EUR 500 0% 0% Niedrig 25 "1,16" "3,82"
qr code for EUR 500 0% 0% Niedrig 12 "1,04" "3,53"
to create qr code EUR 50 -100% -100% Unbekannt
qr code for phone number EUR 500 0% 0% Niedrig 28 "0,70" "2,56"
qr wifi EUR 500 0% 0% Niedrig 2 "0,12" "1,00"
with qr code EUR 50 0% 0% Niedrig 22 "1,00" "3,93"
free bulk qr code generator EUR 500 900% 900% Niedrig 27 "0,91" "2,85"
cost of qr code generator EUR 50 -100% -100% Unbekannt
qr code analytics tracking EUR 50 0% 0% Niedrig 9
free qr code for restaurant menu EUR 50 0% -100% Unbekannt
qr code time tracking EUR 50 0% 0% Niedrig 0
qr code with text EUR 500 0% 0% Niedrig 15 "0,13" "1,40"
free qr code menu EUR 50 0% 0% Niedrig 29 "1,57" "4,96"
qr code generator for restaurant menu EUR 500 0% 0% Niedrig 5
difference between static and dynamic qr code EUR 50 0% 0% Niedrig 24 "0,32" "10,47"
bulk qr generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
barcode code generator EUR 500000 0% 0% Niedrig 3 "0,67" "2,58"
generate dynamic qr code free EUR 50 -100% -100% Unbekannt
qr code contact generator free EUR 50 0% -100% Unbekannt
scan qr code for location EUR 50 0% 0% Niedrig 17
ai qr code EUR 500 0% 0% Niedrig 14 "0,76" "4,66"
buy dynamic qr code EUR 50 ∞ 0% Niedrig 25 "1,87" "12,81"
sms qr code EUR 500 0% 0% Niedrig 17 "0,60" "3,35"
dynamic code generator EUR 50 0% 0% Niedrig 17 "3,82" "15,62"
qr code restaurant menu free EUR 50 0% -100% Unbekannt
vcard qr code generator with logo EUR 50 -100% -100% Unbekannt
bulk qr code generator free EUR 500 900% 900% Niedrig 27 "0,91" "2,85"
sms qr code generator EUR 500 0% 0% Niedrig 18 "0,66" "3,11"
phone qr code EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
create your dynamic qr code EUR 50 -100% -100% Unbekannt
qr code as a business card EUR 50 -100% -100% Unbekannt
generate free barcode EUR 50000 0% 0% Niedrig 5 "0,67" "2,52"
qr code barcode generator EUR 500 0% 0% Niedrig 15 "0,58" "1,51"
bulk qr code generator with logo EUR 50 0% 0% Niedrig 0
qr restaurant EUR 500 0% 0% Niedrig 7
sign up qr code EUR 50 0% 0% Niedrig 23 "1,81" "5,80"
create qr code menu free EUR 50 -100% -100% Unbekannt
bulk qr code generator excel EUR 50 0% 0% Niedrig 21
qr code options EUR 50 0% 900% Niedrig 15 "1,10" "2,91"
qr bulk generator EUR 5000 0% 0% Niedrig 13 "0,69" "3,63"
qr code s EUR 500 0% 0% Niedrig 27 "0,57" "4,93"
qr code to qr code EUR 50 ∞ ∞ Niedrig 14
log in qr code generator EUR 5000 0% 0% Niedrig 15 "0,67" "3,08"
create whatsapp qr code EUR 500 0% 0% Niedrig 19 "0,51" "1,89"
qr code in EUR 50 0% 0% Niedrig 22 "0,31" "1,88"
twitter qr code generator EUR 50 0% 0% Niedrig 4
care code EUR 500 0% 0% Niedrig 2
create qr code gratuit EUR 50 -100% -100% Unbekannt
restaurants with qr codes EUR 50 0% 0% Niedrig 11
master qr EUR 50 0% ∞ Niedrig 0
manage qr codes EUR 500 0% -90% Niedrig 30 "2,11" "18,77"
qr generator custom EUR 5000 0% 0% Niedrig 14 "1,91" "6,43"
qr code generator it EUR 50 0% 0% Niedrig 11
bulk qr EUR 500 0% 0% Niedrig 13 "0,07" "2,85"
master qr code EUR 50 0% 0% Niedrig 2
qr code generator in bulk EUR 50 0% 0% Niedrig 7
scan barcode generator EUR 500 0% 0% Niedrig 27 "0,84" "5,11"
static qr and dynamic qr EUR 50 -100% -100% Unbekannt
barcode make EUR 5000 900% 900% Niedrig 15 "0,64" "2,78"
qr code generator site EUR 50000 0% 0% Niedrig 17 "1,88" "6,16"
code create EUR 50 -90% 0% Niedrig 3 "0,62" "6,98"
dynamic codes EUR 500 0% 0% Niedrig 12 "0,78" "4,21"
scan qr code for restaurant menu EUR 50 0% 0% Unbekannt
qr code tracking analytics EUR 50 0% 0% Niedrig 0
generate facebook qr code EUR 5000 -90% 0% Niedrig 19 "1,26" "4,10"
create qr code location EUR 50 -100% 0% Unbekannt
qr code of location EUR 50 -100% -100% Unbekannt
qr code with EUR 50 0% 0% Niedrig 7
code to qr EUR 50 0% 0% Niedrig 30 "0,43" "1,51"
make your own qr code for business EUR 50 0% -100% Unbekannt
scan your qr code EUR 50 0% 0% Niedrig 27 "0,56" "2,47"
for qr code generator EUR 50 -100% -100% Unbekannt
qr code what is qr EUR 5000 0% 0% Niedrig 15 "0,05" "0,64"
qr code with location EUR 50 -100% -100% Unbekannt
qr code qr EUR 5000 0% 0% Niedrig 0 "1,03" "3,01"
qr code generator bulk free EUR 50 0% 0% Niedrig 24
qr code and EUR 500 0% 0% Niedrig 18 "0,29" "1,03"
qr number EUR 500 0% 900% Niedrig 5 "0,07" "0,94"
credit card qr code generator EUR 50 0% -100% Unbekannt
about qr code generator EUR 50 0% 0% Unbekannt
whatsapp qr generator EUR 500 0% 0% Niedrig 19 "0,51" "1,89"
generate to qr code EUR 50 -100% -100% Unbekannt
qr codes work EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
qr to code EUR 50 0% 0% Niedrig 21 "1,00" "3,78"
in qr code EUR 50 0% 0% Niedrig 22 "0,31" "1,88"
create qr business card free EUR 50 -100% -100% Unbekannt
qr code it EUR 50 0% 0% Niedrig 29 "1,21" "2,25"
qr marketing EUR 50 0% 0% Niedrig 3
it qr code EUR 50 0% 0% Niedrig 5
and qr code EUR 500 0% 0% Niedrig 18 "0,29" "1,03"
qr code is EUR 50 0% 0% Niedrig 17 "0,09" "1,83"
bulk code generator EUR 50 0% 0% Niedrig 5
qr code calculator EUR 50 0% 0% Niedrig 23
qr bulk EUR 500 0% 0% Niedrig 13 "0,07" "2,85"
generator qr barcode EUR 50 -100% -100% Unbekannt
generator free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
code generator code EUR 50 ∞ 0% Niedrig 14
qr number generator EUR 50 0% 0% Niedrig 14
qr code generator bulk create EUR 50 -100% -100% Unbekannt
qr campaign EUR 50 0% -90% Niedrig 19 "1,45" "10,66"
square codes EUR 5000 0% 0% Niedrig 5 "0,83" "3,42"
generator create EUR 500 0% 0% Niedrig 1
code for qr code EUR 50 ∞ 0% Niedrig 14
qr bulk code generator EUR 50 0% 0% Niedrig 11
qr code generator with location EUR 50 -100% 0% Unbekannt
qr code scanner qr code generator EUR 50 ∞ 0% Niedrig 29
youtube qr EUR 5000 0% 0% Niedrig 16 "0,52" "2,21"
qr code generator custom design EUR 50 -100% -100% Unbekannt
your code generator EUR 50 0% -100% Unbekannt
free dynamic code generator EUR 50 0% -100% Unbekannt
qr scan code free EUR 50 0% 0% Niedrig 0
edit qr EUR 50 0% 0% Niedrig 2
qr code scan qr code EUR 50 0% 0% Niedrig 25
sozdat qr code EUR 50 -100% 0% Unbekannt
barcode to qr code generator EUR 50 0% 0% Niedrig 27 "1,89" "8,80"
qr codes that work EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
i qr code EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
free barcode code generator EUR 50000 0% 0% Niedrig 5 "0,67" "2,52"
work qr code EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
qr code on device EUR 50 0% 0% Niedrig 1
barcode code generator free EUR 50 0% -90% Niedrig 6 "0,20" "2,34"
device qr code EUR 50 0% 0% Niedrig 22 "0,58" "2,52"
code barcode EUR 500 0% 900% Niedrig 10 "0,19" "1,55"
all qr code generator EUR 50 0% 0% Unbekannt
advanced qr code EUR 50 0% 0% Niedrig 2
qr generator bulk EUR 50 0% 0% Niedrig 14
information qr code generator EUR 50 -100% -100% Unbekannt
device qr EUR 50 0% -100% Unbekannt
type qr code EUR 50 0% 0% Niedrig 9 "0,52" "1,66"
qr edit EUR 50 0% 0% Niedrig 21
no qr codes EUR 500 0% 0% Niedrig 3 "0,26" "1,28"
qr code na EUR 50 0% 0% Unbekannt
qr code & EUR 50 0% ∞ Niedrig 0
qr code a EUR 500 0% 0% Niedrig 23 "0,49" "2,01"
qr generator location EUR 50 ∞ 0% Niedrig 0
qr code an EUR 50 0% 0% Niedrig 19
qr code on EUR 50 0% 0% Niedrig 12
qr code i EUR 50 0% 0% Niedrig 11 "1,25" "3,95"
qr code of EUR 50 0% 0% Niedrig 9 "0,50" "2,07"
qr code on this phone EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
your qr EUR 50 0% 0% Niedrig 20
qr code what is EUR 5000 0% 0% Niedrig 15 "0,05" "0,64"
qr code generator vcard business card EUR 50 -100% -100% Unbekannt
every qr code EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
at qr code EUR 50 0% 0% Niedrig 4
qr code what is it EUR 50 0% 0% Niedrig 17 "0,05" "0,44"
qr code where is it EUR 50 0% 0% Niedrig 0
view qr code EUR 50 0% 0% Niedrig 13 "0,65" "3,23"
code creation EUR 50 -90% 0% Niedrig 12 "2,14" "5,68"
qr code from EUR 50 0% 0% Niedrig 14 "0,58" "1,45"
write qr code EUR 50 0% 0% Niedrig 0
credit card qr code EUR 50 0% 0% Niedrig 7 "2,64" "9,81"
qr code about EUR 50 0% 0% Niedrig 18
www com qr code EUR 50 0% 0% Unbekannt
this qr code EUR 50 0% 0% Niedrig 8
by qr code EUR 50 0% 0% Niedrig 19
qr code to location EUR 50 -100% -100% Unbekannt
location qr generator EUR 50 0% 0% Niedrig 0
business card qr code generator with logo EUR 50 0% 0% Niedrig 0
qr work EUR 50 900% 900% Niedrig 1
generate bulk qr code from excel EUR 50 ∞ ∞ Niedrig 14
any qr code EUR 500 0% 0% Niedrig 0
generate qr code bulk EUR 50 -100% 0% Unbekannt
qr code qr scanner EUR 500 0% 0% Niedrig 0
get qr code for location EUR 50 -100% -100% Unbekannt
scan code for EUR 50 0% 0% Niedrig 19
generator barcode qr EUR 50 0% -100% Unbekannt
free qr code for location EUR 50 -100% 0% Unbekannt
open a qr code EUR 500 0% 0% Niedrig 23 "0,41" "1,51"
phone qr EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
barcode to qr generator EUR 50 -100% -100% Unbekannt
static code generator EUR 50 0% 0% Niedrig 26
location qr code creation EUR 50 0% 0% Unbekannt
location scan qr code EUR 50 ∞ ∞ Niedrig 0
create location qr code free EUR 50 -100% 0% Unbekannt
generator qr code vcard EUR 50 0% 0% Unbekannt
bulk generator EUR 50 0% 0% Niedrig 4 "0,27" "1,33"
qr code of this device EUR 50 0% ∞ Niedrig 20
qr code generator location free EUR 50 0% 0% Niedrig 0
qr location code EUR 50 0% -100% Unbekannt
account qr code EUR 50 0% 0% Niedrig 13
qr code to code EUR 50 0% 0% Niedrig 0
free qr scan generator EUR 50 0% 0% Niedrig 26 "0,89" "1,51"
dynamic qr code generator with logo EUR 50 0% 0% Niedrig 0
qr code to barcode generator EUR 50 0% 0% Niedrig 5
qr code of a location EUR 50 0% -100% Unbekannt
the code generator EUR 50 0% 0% Niedrig 27
create qr code of location EUR 50 0% -100% Unbekannt
bulk qr barcode generator EUR 50 0% 0% Niedrig 3
qr hunt EUR 50 0% 0% Niedrig 4
bulk qr generator free EUR 50 -100% -100% Unbekannt
dynamic qr code display EUR 50 900% 900% Niedrig 6
location qr code free EUR 50 0% -100% Unbekannt
location qr scanner EUR 50 -100% 0% Unbekannt
qr quotes EUR 500 0% 0% Niedrig 5 "0,61" "2,17"
qr c9de EUR 50 -90% 0% Niedrig 2
you are code generator EUR 50 0% -100% Unbekannt
make a qr code for location EUR 50 -100% -100% Unbekannt
qr code generator from csv EUR 50 0% 0% Niedrig 0
generate qr code from barcode EUR 50 0% 0% Niedrig 29
make generator EUR 500 0% 0% Niedrig 9 "0,46" "2,62"
all qr codes EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
bulk qr code generator with logo free EUR 50 0% ∞ Unbekannt
whatsapp qr code business card EUR 50 -100% 0% Unbekannt
qr code with phone EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
generator for free EUR 500 0% 0% Niedrig 16 "0,82" "5,79"
generate url from qr code EUR 500 -90% 0% Niedrig 4 "2,05" "2,69"
barcode and qr codes EUR 50000 0% 900% Niedrig 3 "0,42" "1,93"
qr code menu restaurant free EUR 50 0% 0% Unbekannt
qr code features EUR 500 0% 900% Niedrig 2 "0,33" "1,29"
generate qr code for location free EUR 50 0% -100% Unbekannt
location in qr code EUR 50 0% 0% Unbekannt
generate qr code by url EUR 50 -100% -100% Unbekannt
qr code required EUR 50 0% 0% Niedrig 11 "0,94" "2,61"
qr code from phone EUR 50 0% 0% Niedrig 11 "0,49" "1,03"
location qr code scan EUR 50 -100% -100% Unbekannt
no qr EUR 500 0% 0% Niedrig 3 "0,26" "1,28"
qr code scan for location EUR 50 0% -100% Unbekannt
generate url to qr code EUR 50 -100% -100% Unbekannt
get code from qr code EUR 50 0% 0% Niedrig 10
scan the qr code for location EUR 50 ∞ ∞ Niedrig 0
kod generator EUR 50 0% 0% Niedrig 0
qr code in text EUR 50 0% 0% Niedrig 2
restaurant menu scan code EUR 50 0% 0% Niedrig 0
location qr code free generator EUR 50 0% 0% Unbekannt
url from qr code EUR 50 0% 0% Niedrig 4
scan tracking EUR 50 900% 0% Niedrig 24 "0,31" "2,42"
qr code of this phone EUR 50 0% 0% Niedrig 0
qr code brand EUR 500 0% 0% Niedrig 4 "1,55" "8,10"
qr code in phone EUR 500 0% 0% Niedrig 28 "0,45" "1,61"
www the qr code generator scan EUR 50 -100% 0% Unbekannt
create qr code from barcode EUR 50 0% 0% Niedrig 29
qr all EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
bulk qr code barcode generator EUR 50 ∞ 0% Niedrig 0
qr scan location EUR 50 0% 0% Niedrig 0
qr code no EUR 500 0% 0% Niedrig 3 "0,26" "1,28"
qr code that works EUR 500 0% 0% Niedrig 11 "0,63" "2,06"
qr code randomizer EUR 5000 0% 0% Niedrig 13 "0,60" "1,71"
qr code marketing campaigns EUR 50 0% 0% Niedrig 3
qr code generator create your qr code for free EUR 50 -100% -100% Unbekannt
account qr EUR 50 0% ∞ Niedrig 0
qr code for credit card EUR 50 -100% -100% Unbekannt
qr cost EUR 50 0% 0% Niedrig 5
qr code on the phone EUR 50 0% 0% Niedrig 13
scan qr code scan qr code EUR 50 0% 0% Niedrig 25
qr kodlari EUR 50 -100% -100% Unbekannt
qr code scan code EUR 50 0% 0% Niedrig 17
scan by qr code EUR 50 0% 0% Niedrig 0
3 qr code EUR 50 0% 0% Niedrig 0
scan qr code location EUR 50 0% 0% Niedrig 17
qr scanner in EUR 50 0% 0% Niedrig 18
create qr code to whatsapp EUR 50 -100% -100% Unbekannt
qr code on email EUR 50 0% 0% Niedrig 25
create qr code for whatsapp free EUR 50 0% -100% Unbekannt
make qr code of location EUR 50 -100% 0% Unbekannt
qr code save EUR 50 0% 0% Niedrig 19 "0,83" "3,47"
no to qr code EUR 50 0% -100% Unbekannt
call qr code EUR 50000 0% 0% Niedrig 0 "0,57" "2,59"
free barcode code EUR 500 0% 0% Niedrig 18 "0,65" "2,84"
qr code for scan EUR 50 0% 0% Niedrig 14 "0,52" "1,56"
bar code s EUR 50 0% 0% Niedrig 24 "1,26" "1,72"
qr code as text EUR 500 0% 0% Niedrig 15 "0,13" "1,40"
qr view EUR 50 0% 0% Niedrig 3
qr code generator device EUR 50 0% 0% Niedrig 8
qr scanner for EUR 50 0% 0% Niedrig 14 "0,52" "1,56"
qr code generator full EUR 50 0% 0% Unbekannt
qr code generator for visiting card free EUR 50 0% 0% Unbekannt
qr coe3 EUR 50 -100% -100% Unbekannt
qr text code EUR 50 0% 0% Niedrig 29
scan qr free EUR 50 0% 0% Niedrig 25
cole generator EUR 50 0% 0% Niedrig 24
into qr code EUR 50 0% 0% Niedrig 22 "0,31" "1,88"
qr code how does it work EUR 50 0% 0% Niedrig 25 "0,10" "0,52"
any qr EUR 500 0% 0% Niedrig 0
menu card qr code generator EUR 50 0% 0% Unbekannt
url to code generator EUR 50 ∞ 0% Niedrig 14
website qr scanner EUR 500 0% 0% Niedrig 6 "0,03" "1,77"
all in qr code EUR 50 0% 0% Unbekannt
all qr EUR 50 0% 0% Niedrig 5 "0,50" "6,33"
qr scanner location EUR 50 0% 0% Niedrig 0
qr how to use EUR 50 0% 0% Niedrig 0
qr scanner for location EUR 50 -100% 0% Unbekannt
scan qr code for EUR 50 0% 0% Niedrig 11
scan the qr code for EUR 50 0% 0% Niedrig 0
scan this qr code for EUR 50 ∞ ∞ Niedrig 29
the qr barcode generator EUR 50 -100% -100% Unbekannt
trackable codes EUR 50 0% 0% Niedrig 0
scan qr code in EUR 50 0% 0% Niedrig 0
qr do EUR 50 0% 0% Niedrig 15 "0,86" "4,10"
qr code login generator EUR 50 0% 0% Niedrig 16

View File

@ -1,96 +0,0 @@
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

@ -1,443 +0,0 @@
# 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

@ -1,168 +0,0 @@
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

@ -1,166 +0,0 @@
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

@ -1,457 +0,0 @@
# 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

View File

@ -1,272 +0,0 @@
# 30-Day X/Twitter Content Plan for QR Master
Use this as a `30-day X/Twitter content plan` for a founder-led QR Master account. It is written in English and optimized for reach first, with product relevance built in.
## Positioning for the Month
`Dynamic QR codes for measurable offline marketing, without creepy tracking.`
## Audience Focus
Primary audience for Days 1-15:
`Restaurants / hospitality`
Secondary audience for Days 16-30:
`Agencies / offline marketers / retail operators`
## CTA Rule for the Whole Month
- Most posts: `Reply with a keyword`, `follow for more`, or `DM me`
- Only light link usage
- Put direct product CTA mainly in replies, profile, and pinned post
## 30-Day Plan
### Day 1
**Post type:** Founder positioning post
**Hook:** `Most QR codes are dead the moment they get printed.`
**Angle:** Static QR codes create reprint costs and broken customer journeys.
**CTA:** `If you run offline marketing, follow this account. I'm breaking down how to fix it.`
### Day 2
**Post type:** Short insight post
**Hook:** `A restaurant menu should not require a reprint every time one dish changes.`
**Angle:** Dynamic QR codes for menus and specials.
**CTA:** `Reply "menu" if you want me to post the exact setup.`
### Day 3
**Post type:** Teardown
**Hook:** `3 mistakes I see on restaurant QR menus all the time:`
**Angle:** Bad placement, no fallback page, no analytics.
**CTA:** `Want me to roast your menu QR? Reply with a screenshot.`
### Day 4
**Post type:** Thread
**Hook:** `How restaurants can update menus without reprinting tables, flyers, or window signs:`
**Angle:** 5-step workflow using one dynamic QR.
**CTA:** `I can turn this into a checklist if people want it.`
### Day 5
**Post type:** Contrarian post
**Hook:** `Unpopular opinion: "free QR code generators" are expensive.`
**Angle:** Hidden cost is reprints, lost scans, no attribution.
**CTA:** `Agree or disagree?`
### Day 6
**Post type:** Demo video
**Hook:** `Change the destination after print. That's the whole game.`
**Angle:** Quick screen recording showing edit-after-print.
**CTA:** `DM me "edit" and I'll send the workflow.`
### Day 7
**Post type:** Founder story
**Hook:** `We started building QR Master because most QR tools felt like toys.`
**Angle:** Needed analytics, bulk creation, privacy-first tracking.
**CTA:** `What's one thing you hate about current QR tools?`
### Day 8
**Post type:** Pain-to-fix post
**Hook:** `If your flyer has a QR code but no tracking, you're guessing.`
**Angle:** Offline campaigns need measurable scans.
**CTA:** `Reply "track" if you want a simple attribution template.`
### Day 9
**Post type:** Restaurant-specific post
**Hook:** `Today's special changes. Your printed QR shouldn't.`
**Angle:** Daily menu operations.
**CTA:** `Restaurant owners: how often do you update menus?`
### Day 10
**Post type:** Roast / audit
**Hook:** `This QR code placement is killing conversions.`
**Angle:** Explain why low-visibility placements fail.
**CTA:** `Send me your flyer/menu/poster and I'll break it down.`
### Day 11
**Post type:** Thread
**Hook:** `5 QR code mistakes that make restaurant marketing look cheap:`
**Angle:** Visual clutter, dead links, bad landing pages, no tracking, wrong CTA.
**CTA:** `I'll post 5 fixes tomorrow if this gets traction.`
### Day 12
**Post type:** Build in public
**Hook:** `One thing founders underestimate: people don't want "a QR code." They want a workflow.`
**Angle:** Product insight from building.
**CTA:** `What simple tool became critical in your business?`
### Day 13
**Post type:** Short proof post
**Hook:** `One QR code. Multiple seasonal campaigns. Zero reprints.`
**Angle:** Reuse same printed asset with changing destination.
**CTA:** `This is one of the biggest underrated offline growth hacks.`
### Day 14
**Post type:** Demo video
**Hook:** `From printed table card to measurable scan funnel in under 30 seconds:`
**Angle:** Show QR creation + analytics preview.
**CTA:** `If you want more product breakdowns, follow.`
### Day 15
**Post type:** Summary / recap
**Hook:** `The biggest restaurant QR lesson so far:`
**Angle:** Most businesses don't need more print, they need more flexibility.
**CTA:** `Next week I'm switching to agencies and offline marketers.`
### Day 16
**Post type:** Agency-focused post
**Hook:** `If your agency runs flyer or poster campaigns without QR attribution, you're underreporting impact.`
**Angle:** Agencies need scan data to prove ROI.
**CTA:** `Reply "agency" if you want my offline attribution framework.`
### Day 17
**Post type:** Contrarian post
**Hook:** `The problem is not the QR code. The problem is the dead destination behind it.`
**Angle:** Static link is the failure point.
**CTA:** `This is where most campaigns quietly lose money.`
### Day 18
**Post type:** Thread
**Hook:** `How to make offline campaigns actually measurable:`
**Angle:** QR + UTM + landing page + analytics naming structure.
**CTA:** `I can turn this into a swipe file.`
### Day 19
**Post type:** Audit post
**Hook:** `3 reasons most poster QR campaigns don't convert:`
**Angle:** Weak CTA, poor mobile page, no tracking structure.
**CTA:** `Want a poster teardown series?`
### Day 20
**Post type:** Demo video
**Hook:** `Bulk-create hundreds of QR codes from a spreadsheet.`
**Angle:** Show CSV/Excel workflow for agencies or retail.
**CTA:** `DM me "bulk" if that would save your team time.`
### Day 21
**Post type:** Founder hot take
**Hook:** `"Just put a QR code on it" is bad marketing advice.`
**Angle:** QR is distribution, not strategy.
**CTA:** `What matters more: placement, offer, or landing page?`
### Day 22
**Post type:** Mini case format
**Hook:** `Campaign idea: one printed asset, three different destinations over 30 days.`
**Angle:** Explain how one QR can support multiple campaign phases.
**CTA:** `This is why dynamic matters more than design.`
### Day 23
**Post type:** Thread
**Hook:** `How I'd structure QR tracking for an agency campaign with flyers, packaging, and in-store signage:`
**Angle:** Naming conventions, attribution logic, reporting.
**CTA:** `If useful, I'll post the naming template.`
### Day 24
**Post type:** Privacy wedge post
**Hook:** `You can measure scans without turning people into surveillance data.`
**Angle:** Privacy-first analytics as a business advantage.
**CTA:** `Too many teams think analytics has to mean creepy.`
### Day 25
**Post type:** Teardown
**Hook:** `This flyer has a QR code. But it still won't tell you what worked.`
**Angle:** Missing attribution structure.
**CTA:** `Reply with "audit" and I'll post a fixed version.`
### Day 26
**Post type:** Retail / packaging post
**Hook:** `Packaging QR codes get interesting when you can change the destination later.`
**Angle:** Product updates, campaigns, support pages, seasonal promos.
**CTA:** `Retail operators: are you using QR for support, promo, or repeat purchase?`
### Day 27
**Post type:** Build in public
**Hook:** `One thing we keep seeing: people buy QR tools for "generation" and stay for "management."`
**Angle:** Product-market insight.
**CTA:** `That distinction matters more than most founders think.`
### Day 28
**Post type:** Demo video
**Hook:** `Here's what "measurable offline workflow" actually looks like in practice:`
**Angle:** Create, edit, track, compare placements.
**CTA:** `If this kind of content is useful, I'll make it a weekly series.`
### Day 29
**Post type:** Hero thread
**Hook:** `Most offline marketing teams don't have a traffic problem. They have a measurement problem.`
**Angle:** Big thesis thread connecting restaurants, agencies, retail, and dynamic QR logic.
**CTA:** `If you work in offline marketing, this is the framework.`
### Day 30
**Post type:** Month-end recap + soft CTA
**Hook:** `30 days of talking to people about QR workflows taught me this:`
**Angle:** Summarize 5 strongest lessons from the month.
**CTA:** `If you want, next I'll publish the full playbook: hooks, setup, and attribution templates.`
## Weekly Cadence
- `Mon`: strong opinion or positioning
- `Tue`: practical educational post
- `Wed`: teardown or audit
- `Thu`: thread
- `Fri`: product proof or demo
- `Sat`: founder insight / build in public
- `Sun`: recap or lighter conversation post
## Content Mix
- `8 threads`
- `6 teardown/audit posts`
- `5 demo videos`
- `6 short contrarian/value posts`
- `5 founder/build-in-public posts`
## Reply Strategy
Every day, add:
- `10-15 replies` to founders, marketers, restaurant-tech, local business, retail ops, and agency accounts
- Focus on posts about: offline marketing, menus, customer journeys, attribution, retail campaigns, print, local growth
- Use replies to seed your core themes:
- reprint cost
- edit after print
- measurable offline
- privacy-first analytics
- bulk workflows
## Optional Next Step
If needed, this can be expanded into:
1. fully written tweets for all 30 days
2. 8 full threads written out
3. a Notion-style content calendar with posting times and CTAs

View File

@ -1,48 +0,0 @@
{
"project_name": "QRMaster Global Visibility",
"domain": "qrmaster.net",
"market_language": "en",
"offer": "a free dynamic QR cost calculator and professional management guide",
"keywords": [
{
"query": "dynamic qr code generator",
"intent": "commercial"
},
{
"query": "create dynamic qr code free",
"intent": "informational"
},
{
"query": "qr code for restaurant menu",
"intent": "commercial"
},
{
"query": "qr code marketing analytics",
"intent": "informational"
},
{
"query": "bulk qr code generator from csv",
"intent": "commercial"
}
],
"backlink": {
"seed_queries": [
"restaurant marketing ideas intitle:resources",
"digital menu setup guide intitle:links",
"retail marketing tools inurl:blog",
"qr code best practices 2026",
"hospitality tech trends intitle:guide",
"small business marketing resources inurl:links"
],
"outreach": {
"allow_send_emails": false,
"from_name": "QRMaster Outreach Team",
"templates": {
"en": {
"subject": "Valuable resource for your QR code guide",
"body": "Hi,\n\nI was reading your article about [Topic] and found it very insightful. We recently developed a free Static vs. Dynamic QR Cost Calculator at qrmaster.net that helps businesses visualize the ROI of their campaigns. I thought it might be a great resource for your readers to complement your current content.\n\nBest regards,\nThe QRMaster Team"
}
}
}
}
}

42
next-sitemap.config.js Normal file
View File

@ -0,0 +1,42 @@
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://www.qrmaster.net',
generateRobotsTxt: true,
robotsTxtOptions: {
policies: [
{
userAgent: '*',
allow: '/',
},
],
},
transform: async (config, path) => {
// Custom priority and changefreq based on path
let priority = 0.7;
let changefreq = 'weekly';
if (path === '/') {
priority = 0.9;
changefreq = 'daily';
} else if (path === '/blog') {
priority = 0.7;
changefreq = 'daily';
} else if (path === '/pricing') {
priority = 0.8;
changefreq = 'weekly';
} else if (path === '/faq') {
priority = 0.6;
changefreq = 'weekly';
} else if (path.startsWith('/blog/')) {
priority = 0.6;
changefreq = 'weekly';
}
return {
loc: path,
changefreq,
priority,
lastmod: new Date().toISOString(),
};
},
};

View File

@ -20,45 +20,6 @@ const nextConfig = {
pagesBufferLength: 2,
},
poweredByHeader: false,
async redirects() {
return [
{
source: '/create-qr',
destination: '/dynamic-qr-code-generator',
permanent: true,
},
{
source: '/guide/tracking-analytics',
destination: '/learn/tracking',
permanent: true,
},
{
source: '/guide/bulk-qr-code-generation',
destination: '/learn/developer',
permanent: true,
},
{
source: '/guide/qr-code-best-practices',
destination: '/learn/basics',
permanent: true,
},
{
source: '/tools/phone-qr-code',
destination: '/tools/call-qr-code-generator',
permanent: true,
},
{
source: '/barcode-generator',
destination: '/tools/barcode-generator',
permanent: true,
},
{
source: '/bar-code-generator',
destination: '/tools/barcode-generator',
permanent: true,
},
];
},
};
export default nextConfig;

1646
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,12 +5,9 @@
"private": true,
"scripts": {
"dev": "next dev -p 3050",
"build": "node scripts/build.js",
"trigger:indexing": "tsx scripts/trigger-indexing.ts",
"submit:indexnow": "tsx scripts/submit-indexnow.ts",
"build": "prisma generate && next build",
"start": "next start",
"lint": "next lint",
"indexnow": "tsx scripts/submit-indexnow.ts",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev",
"db:deploy": "prisma migrate deploy",
@ -35,41 +32,34 @@
"@prisma/client": "^5.7.0",
"@stripe/stripe-js": "^8.0.0",
"@types/d3-scale": "^4.0.9",
"axios": "^1.13.2",
"bcryptjs": "^2.4.3",
"chart.js": "^4.4.0",
"clsx": "^2.0.0",
"copy-image-clipboard": "^2.1.2",
"d3-scale": "^4.0.2",
"dayjs": "^1.11.10",
"dotenv": "^17.2.3",
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
"framer-motion": "^12.24.10",
"googleapis": "^170.1.0",
"html-to-image": "^1.11.13",
"i18next": "^23.7.6",
"ioredis": "^5.3.2",
"jspdf": "^4.0.0",
"jszip": "^3.10.1",
"lucide-react": "^0.562.0",
"next": "^14.2.35",
"next-auth": "^4.24.5",
"papaparse": "^5.4.1",
"posthog-js": "^1.332.0",
"posthog-js": "^1.276.0",
"qr-code-styling": "^1.9.2",
"qrcode": "^1.5.3",
"qrcode.react": "^3.1.0",
"react": "^18.2.0",
"react-barcode": "^1.6.1",
"react-chartjs-2": "^5.2.0",
"react-dom": "^18.2.0",
"react-dropzone": "^14.2.3",
"react-facebook-pixel": "^1.0.4",
"react-i18next": "^13.5.0",
"react-simple-maps": "^3.0.0",
"resend": "^6.4.2",
"sanitize-html": "^2.17.1",
"sharp": "^0.33.1",
"stripe": "^19.1.0",
"tailwind-merge": "^2.2.0",
"uuid": "^13.0.0",
@ -83,15 +73,13 @@
"@types/qrcode": "^1.5.5",
"@types/react": "^18.2.45",
"@types/react-dom": "^18.2.18",
"@types/sanitize-html": "^2.16.0",
"autoprefixer": "^10.4.16",
"cross-env": "^10.1.0",
"eslint": "^8.56.0",
"eslint-config-next": "16.1.5",
"eslint-config-next": "^16.1.1",
"next-sitemap": "^4.2.3",
"postcss": "^8.4.32",
"prettier": "^3.1.1",
"prisma": "^5.7.0",
"sharp": "^0.34.5",
"tailwindcss": "^3.3.6",
"tsx": "^4.7.0",
"typescript": "^5.3.3"

View File

@ -1,146 +0,0 @@
-- CreateEnum
CREATE TYPE "QRType" AS ENUM ('STATIC', 'DYNAMIC');
-- CreateEnum
CREATE TYPE "ContentType" AS ENUM ('URL', 'WIFI', 'VCARD', 'PHONE', 'EMAIL', 'SMS', 'TEXT', 'WHATSAPP');
-- CreateEnum
CREATE TYPE "QRStatus" AS ENUM ('ACTIVE', 'PAUSED');
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"name" TEXT,
"password" TEXT,
"image" TEXT,
"emailVerified" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Account" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"type" TEXT NOT NULL,
"provider" TEXT NOT NULL,
"providerAccountId" TEXT NOT NULL,
"refresh_token" TEXT,
"access_token" TEXT,
"expires_at" INTEGER,
"token_type" TEXT,
"scope" TEXT,
"id_token" TEXT,
"session_state" TEXT,
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Session" (
"id" TEXT NOT NULL,
"sessionToken" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"expires" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "VerificationToken" (
"identifier" TEXT NOT NULL,
"token" TEXT NOT NULL,
"expires" TIMESTAMP(3) NOT NULL
);
-- CreateTable
CREATE TABLE "QRCode" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"title" TEXT NOT NULL,
"type" "QRType" NOT NULL DEFAULT 'DYNAMIC',
"contentType" "ContentType" NOT NULL DEFAULT 'URL',
"content" JSONB NOT NULL,
"tags" TEXT[],
"status" "QRStatus" NOT NULL DEFAULT 'ACTIVE',
"style" JSONB NOT NULL,
"slug" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QRCode_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QRScan" (
"id" TEXT NOT NULL,
"qrId" TEXT NOT NULL,
"ts" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"ipHash" TEXT NOT NULL,
"userAgent" TEXT,
"device" TEXT,
"os" TEXT,
"country" TEXT,
"referrer" TEXT,
"utmSource" TEXT,
"utmMedium" TEXT,
"utmCampaign" TEXT,
"isUnique" BOOLEAN NOT NULL DEFAULT false,
CONSTRAINT "QRScan_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Integration" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"provider" TEXT NOT NULL,
"status" TEXT NOT NULL DEFAULT 'inactive',
"config" JSONB NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Integration_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- CreateIndex
CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId");
-- CreateIndex
CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken");
-- CreateIndex
CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token");
-- CreateIndex
CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token");
-- CreateIndex
CREATE UNIQUE INDEX "QRCode_slug_key" ON "QRCode"("slug");
-- CreateIndex
CREATE INDEX "QRCode_userId_createdAt_idx" ON "QRCode"("userId", "createdAt");
-- CreateIndex
CREATE INDEX "QRScan_qrId_ts_idx" ON "QRScan"("qrId", "ts");
-- AddForeignKey
ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QRCode" ADD CONSTRAINT "QRCode_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QRScan" ADD CONSTRAINT "QRScan_qrId_fkey" FOREIGN KEY ("qrId") REFERENCES "QRCode"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Integration" ADD CONSTRAINT "Integration_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,22 +0,0 @@
/*
Warnings:
- A unique constraint covering the columns `[stripeCustomerId]` on the table `User` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[stripeSubscriptionId]` on the table `User` will be added. If there are existing duplicate values, this will fail.
*/
-- CreateEnum
CREATE TYPE "Plan" AS ENUM ('FREE', 'PRO', 'BUSINESS');
-- AlterTable
ALTER TABLE "User" ADD COLUMN "plan" "Plan" NOT NULL DEFAULT 'FREE',
ADD COLUMN "stripeCurrentPeriodEnd" TIMESTAMP(3),
ADD COLUMN "stripeCustomerId" TEXT,
ADD COLUMN "stripePriceId" TEXT,
ADD COLUMN "stripeSubscriptionId" TEXT;
-- CreateIndex
CREATE UNIQUE INDEX "User_stripeCustomerId_key" ON "User"("stripeCustomerId");
-- CreateIndex
CREATE UNIQUE INDEX "User_stripeSubscriptionId_key" ON "User"("stripeSubscriptionId");

View File

@ -1,67 +0,0 @@
/*
Warnings:
- The values [WIFI,EMAIL] on the enum `ContentType` will be removed. If these variants are still used in the database, this will fail.
- A unique constraint covering the columns `[resetPasswordToken]` on the table `User` will be added. If there are existing duplicate values, this will fail.
*/
-- AlterEnum
BEGIN;
CREATE TYPE "ContentType_new" AS ENUM ('URL', 'VCARD', 'GEO', 'PHONE', 'SMS', 'TEXT', 'WHATSAPP');
ALTER TABLE "QRCode" ALTER COLUMN "contentType" DROP DEFAULT;
ALTER TABLE "QRCode" ALTER COLUMN "contentType" TYPE "ContentType_new" USING ("contentType"::text::"ContentType_new");
ALTER TYPE "ContentType" RENAME TO "ContentType_old";
ALTER TYPE "ContentType_new" RENAME TO "ContentType";
DROP TYPE "ContentType_old";
ALTER TABLE "QRCode" ALTER COLUMN "contentType" SET DEFAULT 'URL';
COMMIT;
-- AlterTable
ALTER TABLE "User" ADD COLUMN "resetPasswordExpires" TIMESTAMP(3),
ADD COLUMN "resetPasswordToken" TEXT;
-- CreateTable
CREATE TABLE "NewsletterSubscription" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"source" TEXT NOT NULL DEFAULT 'ai-coming-soon',
"status" TEXT NOT NULL DEFAULT 'subscribed',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "NewsletterSubscription_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Lead" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"source" TEXT NOT NULL DEFAULT 'reprint-calculator',
"reprintCost" DOUBLE PRECISION,
"updatesPerYear" INTEGER,
"annualSavings" DOUBLE PRECISION,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "Lead_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "NewsletterSubscription_email_key" ON "NewsletterSubscription"("email");
-- CreateIndex
CREATE INDEX "NewsletterSubscription_email_idx" ON "NewsletterSubscription"("email");
-- CreateIndex
CREATE INDEX "NewsletterSubscription_createdAt_idx" ON "NewsletterSubscription"("createdAt");
-- CreateIndex
CREATE INDEX "Lead_email_idx" ON "Lead"("email");
-- CreateIndex
CREATE INDEX "Lead_createdAt_idx" ON "Lead"("createdAt");
-- CreateIndex
CREATE INDEX "Lead_source_idx" ON "Lead"("source");
-- CreateIndex
CREATE UNIQUE INDEX "User_resetPasswordToken_key" ON "User"("resetPasswordToken");

View File

@ -1,31 +0,0 @@
/*
Warnings:
- Added the required column `updatedAt` to the `Lead` table without a default value. This is not possible if the table is not empty.
*/
-- AlterEnum
-- This migration adds more than one value to an enum.
-- With PostgreSQL versions 11 and earlier, this is not possible
-- in a single migration. This can be worked around by creating
-- multiple migrations, each migration adding only one value to
-- the enum.
ALTER TYPE "ContentType" ADD VALUE 'PDF';
ALTER TYPE "ContentType" ADD VALUE 'APP';
ALTER TYPE "ContentType" ADD VALUE 'COUPON';
ALTER TYPE "ContentType" ADD VALUE 'FEEDBACK';
-- DropIndex
DROP INDEX "Lead_createdAt_idx";
-- DropIndex
DROP INDEX "Lead_email_idx";
-- DropIndex
DROP INDEX "Lead_source_idx";
-- AlterTable
ALTER TABLE "Lead" ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL,
ALTER COLUMN "updatesPerYear" SET DATA TYPE DOUBLE PRECISION;

View File

@ -1,3 +0,0 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"

View File

@ -1,10 +1,10 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-3.0.x"]
}
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-3.0.x"]
}
datasource db {
provider = "postgresql"
@ -165,15 +165,4 @@ model NewsletterSubscription {
@@index([email])
@@index([createdAt])
}
model Lead {
id String @id @default(cuid())
email String
source String @default("reprint-calculator")
reprintCost Float?
updatesPerYear Float?
annualSavings Float?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
}

View File

@ -1,4 +0,0 @@
Contact: mailto:security@qrmaster.net
Expires: 2027-01-01T00:00:00.000Z
Strategies: https://www.qrmaster.net/.well-known/security.txt
Preferred-Languages: en, de

Binary file not shown.

View File

@ -1 +0,0 @@
google.com, pub-2782770414424875, DIRECT, f08c47fec0942fa0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 KiB

View File

@ -1 +0,0 @@
bb6dfaacf1ed41a880281c426c54ed7c

BIN
public/blog/1-boy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

BIN
public/blog/1-hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

BIN
public/blog/2-body.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

BIN
public/blog/2-hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

BIN
public/blog/3-body.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

BIN
public/blog/3-hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

BIN
public/blog/4-body.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

BIN
public/blog/4-hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 737 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 601 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 865 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 672 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 966 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 726 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 584 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 B

View File

@ -1 +0,0 @@
google-site-verification: googleccd5315437d68a49.html

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24 0H0V24" stroke="currentColor" stroke-width="0.5" stroke-opacity="0.1"/>
</svg>

Before

Width:  |  Height:  |  Size: 193 B

View File

@ -1,13 +0,0 @@
/* TEAM */
Founder: Timo Knuth
Site: https://qrmaster.net
Twitter: @qrmaster
/* THANKS */
Thanks to: Next.js, Vercel, Tailwind CSS, Stripe, Supabase
/* SITE */
Last update: 2026/01/12
Language: English, German
Doctype: HTML5
IDE: VS Code

Some files were not shown because too many files have changed in this diff Show More