11 seo pages

This commit is contained in:
2026-07-06 21:50:34 +02:00
committed by Timo
parent 192c186027
commit 68b2ac0089
139 changed files with 30953 additions and 56321 deletions

View File

@@ -31,9 +31,5 @@
],
"deny": [],
"ask": []
},
"enabledMcpjsonServers": [
"firecrawl",
"apify"
]
}
}

View File

@@ -1,60 +0,0 @@
---
name: awesome-design-md
description: Use VoltAgent's awesome-design-md collection when the user wants UI inspired by a specific brand or asks for a DESIGN.md reference, visual system, or brand-style implementation such as Stripe, Linear, Vercel, Claude, or Supabase. Resolve the brand slug from the installed `design-md/` folder, fetch the matching `getdesign.md` design document for that slug, and apply it as the design-system reference for implementation.
---
# Awesome DESIGN.md
Use this skill to turn the installed `awesome-design-md` collection into a practical design reference workflow.
The local `design-md/` directory is the index of supported brand slugs. Its per-brand `README.md` files are only pointers. The actual design-system document lives at:
```text
https://getdesign.md/<slug>/design-md
```
## Workflow
1. Identify the target brand or closest visual reference.
2. Resolve the brand slug from the local `design-md/` folder.
3. Prefer exact folder names for dotted brands such as `linear.app`, `mistral.ai`, `opencode.ai`, `together.ai`, and `x.ai`.
4. Fetch `https://getdesign.md/<slug>/design-md`.
5. Use the fetched document in one of two ways:
- write or update the project's root `DESIGN.md`
- keep it as an external design reference while implementing UI
6. Preserve the user's product semantics and content model. Borrow visual language, spacing, typography, motion, and component patterns, not product-specific copy.
## Local Source Of Truth
Use the installed folder below to confirm which slugs exist before fetching:
```text
C:\Users\a931627\.claude\skills\awesome-design-md\design-md
```
If needed, list the available slugs with:
```powershell
Get-ChildItem -Name C:\Users\a931627\.claude\skills\awesome-design-md\design-md
```
## Practical Rules
- Treat `DESIGN.md` as a visual system reference, not as code to mirror verbatim.
- If the user asks for "something like X, but lighter, warmer, or more minimal", adapt the reference instead of cloning it literally.
- If multiple brands fit, choose the closest one and state the choice.
- If a slug is missing locally or the remote fetch fails, pick the nearest available brand or ask the user for a replacement target.
- When working inside an existing design system, merge the borrowed visual cues with the established component structure instead of replacing everything.
## Common Slug Examples
- `stripe`
- `vercel`
- `claude`
- `cursor`
- `supabase`
- `linear.app`
- `mistral.ai`
- `opencode.ai`
- `together.ai`
- `x.ai`

11
.gitignore vendored
View File

@@ -59,3 +59,14 @@ dev-server.js
.gstack/
.env.meta
# Local temporary files, test scripts, and reports
tmp/
.codex-temp/
*.report.html
*.report.json
tmp_*.js
test_email.py
meta-fix.js
read-inbox.mjs
quora_antwort_statisch_dynamisch.txt

View File

@@ -1,23 +0,0 @@
import { config } from 'dotenv';
config();
const TOKEN = process.env.META_ACCESS_TOKEN;
const BASE = 'https://graph.facebook.com/v21.0';
async function api(path, method = 'GET', body) {
const url = new URL(`${BASE}/${path}`);
url.searchParams.set('access_token', TOKEN);
const res = await fetch(url.toString(), {
method,
headers: body ? { 'Content-Type': 'application/json' } : undefined,
body: body ? JSON.stringify(body) : undefined,
});
const data = await res.json();
if (!res.ok) throw new Error(JSON.stringify(data));
return data;
}
console.log('Pausing orphaned ad sets...');
await api('6968509692127', 'POST', { status: 'PAUSED' });
await api('6958800756527', 'POST', { status: 'PAUSED' });
console.log('Done: Paused 2 orphaned ad sets (New Sales Ad Set, New Sales ad set)');

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,45 +0,0 @@
Frage: Was ist der Unterschied zwischen statischen und dynamischen QR-Codes, und welche eignen sich am besten für welche Zwecke?
---
Kurz gesagt: Der Unterschied liegt darin, was im QR-Code steckt.
Ein statischer QR-Code kodiert die Ziel-URL direkt ins Muster. Einmal gedruckt, ist alles fest — du kannst nichts mehr ändern. Ändert sich deine URL, ist der Code wertlos.
Ein dynamischer QR-Code kodiert nur eine kurze Weiterleitungs-URL (z.B. qrmaster.net/r/xyz). Wo die hinführt, steuerst du jederzeit über ein Dashboard — ohne den gedruckten Code anzufassen.
---
Wann statisch reicht:
- WLAN-Passwort, das sich nie ändert
- Einmalige Events (z.B. Einlass-Scan)
- Visitenkarte mit fixer vCard
- Alles, wo du sicher bist, dass sich die URL nie ändert
Wann dynamisch die bessere Wahl ist:
- Restaurantmenüs, Flyer, Plakate — alles was länger gedruckt bleibt
- Marketingkampagnen mit wechselnden Landingpages
- Wenn du wissen willst, wer, wann und womit gescannt hat
- Wenn du nach dem Druck noch einen Tippfehler in der URL korrigieren willst
---
Was viele unterschätzen — die Druckkosten:
Statische Codes wirken erstmal kostenlos. Aber sobald sich die URL ändert, musst du alles neu drucken.
Beispiel: 500 Flyer à 0,18 € = 90 € pro Neudruck. Wer das zweimal im Jahr macht, hat den Preis eines Jahresabos für dynamische Codes längst überschritten.
---
Was dynamische Codes zusätzlich bieten:
- Scan-Statistiken: Gerät, Land, Uhrzeit
- UTM-Parameter für Google Analytics
- Zentrale Verwaltung aller Codes im Dashboard
Für eigene Kampagnen nutze ich den dynamischen QR-Code-Generator von QR Master (https://www.qrmaster.net/dynamic-qr-code-generator) — Ziele lassen sich nach dem Druck in Sekunden ändern, und man sieht genau welcher Code wie performt.
Fazit: Für einmaligen Privatgebrauch reicht statisch völlig. Sobald QR-Codes gedruckt werden und länger im Einsatz sind, ist dynamisch fast immer die günstigere Wahl.

View File

@@ -1,49 +0,0 @@
import tls from 'node:tls';
function readMessages(seqs) {
return new Promise((resolve, reject) => {
const socket = tls.connect({ host: 'imap.qrmaster.net', port: 993 }, () => {
let buf = '';
let step = 0;
const results = {};
socket.on('data', (chunk) => {
buf += chunk.toString();
const lines = buf.split('\r\n');
buf = lines.pop();
for (const line of lines) {
if (step === 0 && line.includes('* OK')) {
socket.write(`A1 LOGIN timo@qrmaster.net fiesta\r\n`);
step = 1;
} else if (step === 1 && line.startsWith('A1 OK')) {
socket.write(`A2 SELECT INBOX\r\n`);
step = 2;
} else if (step === 2 && line.startsWith('A2 OK')) {
socket.write(`A3 FETCH ${seqs.join(',')} (BODY.PEEK[1])\r\n`);
step = 3;
} else if (step === 3) {
if (line.startsWith('A3 OK')) {
socket.write(`A4 LOGOUT\r\n`);
resolve(results);
}
const m = line.match(/^\* (\d+) FETCH/);
if (m) results[m[1]] = { body: '' };
const curr = Object.keys(results).at(-1);
if (curr && line && !line.match(/^\* \d+ FETCH/) && !line.startsWith('A3') && line !== ')') {
results[curr].body += line + '\n';
}
}
}
});
socket.on('error', reject);
});
});
}
const r = await readMessages([954, 990, 997]);
for (const [seq, msg] of Object.entries(r)) {
console.log(`\n=== SEQ ${seq} ===`);
console.log(msg.body.slice(0, 1500));
}

View File

@@ -33,64 +33,39 @@ const CAMPAIGN_SIGNUP =
"/signup?utm_source=meta&utm_medium=paid_social&utm_campaign=restaurant_menu_landing&utm_content=restaurants_page_cta";
const FAQ = [
{
question: "What is a dynamic QR code for restaurant menus?",
question: "What is a restaurant menu QR code?",
answer:
"A dynamic QR code lets a restaurant keep the same printed QR code while changing the destination behind it. You can update a menu PDF, menu page, or ordering link without replacing table tents, flyers, or window signs.",
},
{
question: "Can I change menu prices after the QR code is printed?",
answer:
"Yes. With QR Master, the printed QR code points to a managed redirect. When prices, dishes, or PDFs change, you update the destination in the dashboard and keep the same printed code.",
},
{
question: "Is QR Master useful for small restaurants?",
answer:
"Yes. Small restaurants can start with a free account, create a dynamic menu QR code, and use scan analytics to see whether guests actually use the menu link.",
},
{
question: "Do I need to reprint my menu QR code every time the PDF changes?",
answer:
"No. If the code is dynamic, the printed QR code can stay on the table while the destination changes online.",
"A restaurant menu QR code lets guests open a digital menu from a table, flyer, or window sign. A dynamic menu QR code is better for restaurants because the printed code stays the same while the menu PDF, menu page, or ordering link can change later.",
},
{
question: "Should a restaurant menu QR code be static or dynamic?",
answer:
"A static QR code is acceptable only when the destination will never change. Restaurants usually need a dynamic QR code because menus, prices, PDFs, opening hours, and ordering links change after print.",
"Static QR codes work only if the destination never changes. Restaurants usually need a dynamic QR code because menus, prices, PDFs, opening hours, and ordering links change after print.",
},
{
question: "What should a restaurant menu QR code link to?",
answer:
"Point it to a mobile-friendly destination guests can actually use: a current menu page, PDF, ordering link, or daily specials page. The best choice depends on whether the QR is for tables, ads, flyers, or takeaway inserts.",
},
{
question: "Can I use one restaurant QR code in multiple places?",
answer:
"Yes, if you use dynamic QR Master codes. You can reuse the same printed code across tables, flyers, receipts, and signs, while still updating the destination when the menu changes.",
},
{
question: "Can I use a QR code for a menu PDF?",
answer:
"Yes. You can point a dynamic QR code to a menu PDF and replace that PDF later. The QR code on the table can stay the same while the file or destination is updated in QR Master.",
"Yes. You can point a dynamic QR code to a menu PDF and replace that PDF later. The printed QR code can stay the same while the file or destination is updated in QR Master.",
},
{
question: "Can I track scans from table tents, flyers, and window signs separately?",
question: "Do I need to reprint my menu QR code every time the PDF changes?",
answer:
"Yes. Use separate dynamic QR codes or tagged destination URLs for each placement. That lets you compare tables, flyers, receipts, window signs, and campaign materials instead of treating every scan as the same source.",
},
{
question: "Does a restaurant menu QR code need a landing page?",
answer:
"If the QR code is for guests at the table, it can open the menu directly. If the QR code is used in ads or flyers, a focused landing page often works better because it can explain the offer before asking visitors to sign up or order.",
},
{
question: "Can I add UTM parameters to restaurant QR codes?",
answer:
"Yes. UTM parameters are useful when you want to measure traffic from different printed placements or Meta ad campaigns. QR Master can point dynamic codes to tagged URLs so analytics tools can separate sources and campaigns.",
},
{
question: "Is scan analytics privacy-friendly for restaurant guests?",
answer:
"QR Master is designed for privacy-conscious scan analytics. Restaurant teams can see practical scan context such as timing and device patterns without turning a menu QR code into intrusive guest tracking.",
},
{
question: "What should a restaurant put on a QR code table tent?",
answer:
"Use short, direct wording such as Scan for our menu, View today's menu, or Order from your table. Keep the QR code large enough to scan, leave quiet space around it, and test it from normal table distance before printing.",
"No. If the code is dynamic, the printed QR code can stay on the table, flyer, or sign while the destination changes online.",
},
{
question: "How much can a dynamic menu QR code save on reprints?",
answer:
"It depends on your print volume and how often the menu changes. As a simple example, 30 table tents at EUR 2.50 each reprinted twice per year equals EUR 150 before flyers, window signs, design time, or staff coordination are included.",
"It depends on your print volume and change frequency. As an example, 30 table tents at EUR 2.50 each reprinted twice per year equals EUR 150 before flyers, window signs, design time, and staff coordination are included.",
},
];
@@ -117,6 +92,12 @@ const relatedResources = [
},
];
const authoritySignals = [
"Built around real print workflows, not generic QR theory.",
"Written for operators who care about menu changes, table tents, and scan quality.",
"Focused on dynamic QR destinations, not just QR code generation.",
];
const schemaData = [
breadcrumbSchema([
{ name: "Home", url: "/" },
@@ -491,6 +472,43 @@ export default function RestaurantsPage() {
menu PDF, menu page, or ordering link can change later.
</p>
</div>
<div className="mx-auto max-w-7xl px-4 pb-10 sm:px-6 lg:px-8">
<div className="grid gap-4 md:grid-cols-2">
<div className="rounded-xl border border-slate-200 bg-slate-50 p-5">
<h3 className="text-sm font-semibold uppercase tracking-[0.18em] text-slate-700">
Static QR code
</h3>
<p className="mt-2 text-base leading-7 text-slate-600">
Fine only when the destination never changes. With menus,
prices, dishes, or PDFs, the QR code usually becomes outdated
quickly.
</p>
</div>
<div className="rounded-xl border border-blue-200 bg-blue-50 p-5">
<h3 className="text-sm font-semibold uppercase tracking-[0.18em] text-blue-700">
Dynamic QR code
</h3>
<p className="mt-2 text-base leading-7 text-slate-800">
Better fit for restaurants because the printed QR stays fixed
while the destination can be updated later. That keeps table
cards, flyers, and signs useful for longer.
</p>
</div>
</div>
<div className="mt-8 grid gap-4 sm:grid-cols-3">
{authoritySignals.map((item) => (
<div
key={item}
className="flex items-start gap-3 rounded-lg border border-slate-200 bg-white px-4 py-3 text-sm text-slate-700"
>
<Check className="mt-0.5 h-4 w-4 shrink-0 text-blue-700" />
<span>{item}</span>
</div>
))}
</div>
</div>
</section>
<section className="mx-auto max-w-7xl px-4 py-20 sm:px-6 lg:px-8">

View File

@@ -72,6 +72,8 @@ export default function UseCaseDetailPage({
faq={page.faq}
heroImage={page.heroImage}
heroImageAlt={page.heroImageAlt}
authoritySignals={page.authoritySignals}
directAnswer={page.directAnswer}
/>
);
}

View File

@@ -10,9 +10,9 @@ export function FAQSection({ items, title = "Frequently Asked Questions" }: Prop
if (!items?.length) return null;
return (
<section className="rounded-xl border border-gray-100 bg-gray-50/50 p-6 my-8">
<h2 className="text-xl font-bold text-gray-900 mb-6">{title}</h2>
<div className="space-y-4">
<section className="rounded-2xl border border-slate-200/60 bg-white p-6 sm:p-8 my-12 shadow-sm">
<h2 className="text-2xl font-semibold text-slate-900 mb-8 tracking-tight">{title}</h2>
<div className="divide-y divide-slate-100">
{items.map((f) => {
const cleanAnswer = sanitizeHtml(f.answer, {
allowedTags: ['p', 'strong', 'em', 'ul', 'ol', 'li', 'a', 'br', 'code'],
@@ -20,12 +20,18 @@ export function FAQSection({ items, title = "Frequently Asked Questions" }: Prop
});
return (
<details key={f.question} className="group rounded-lg border border-gray-200 bg-white p-4 open:shadow-sm open:border-blue-200 transition-all">
<summary className="cursor-pointer font-semibold text-gray-800 flex justify-between items-center group-open:text-blue-700">
{f.question}
<span className="text-gray-400 group-open:rotate-180 transition-transform"></span>
<details key={f.question} className="group py-5 first:pt-0 last:pb-0 transition-all">
<summary className="list-none [&::-webkit-details-marker]:hidden cursor-pointer font-semibold text-slate-800 flex justify-between items-center group-open:text-indigo-600 hover:text-indigo-600 transition-colors">
<span className="pr-4 leading-snug">{f.question}</span>
<span className="relative flex h-5 w-5 shrink-0 items-center justify-center text-slate-400 group-open:text-indigo-650 transition-colors">
<span className="absolute h-3.5 w-0.5 bg-current transition-transform duration-300 group-open:rotate-90" />
<span className="absolute h-0.5 w-3.5 bg-current" />
</span>
</summary>
<div className="prose max-w-none mt-3 text-gray-600 border-t border-gray-100 pt-3" dangerouslySetInnerHTML={{ __html: cleanAnswer }} />
<div
className="prose max-w-none mt-3.5 text-slate-500 text-sm leading-relaxed border-t border-slate-50 pt-3.5"
dangerouslySetInnerHTML={{ __html: cleanAnswer }}
/>
</details>
);
})}

View File

@@ -1,6 +1,6 @@
import React from 'react';
import { Card } from '@/components/ui/Card';
import { Check, X } from 'lucide-react';
import { Check, X, HelpCircle, ArrowRight, Play } from 'lucide-react';
interface ComparisonItem {
label: string;
@@ -32,54 +32,62 @@ export const AnswerFirstBlock: React.FC<AnswerFirstBlockProps> = ({
const leftValueFor = (item: ComparisonItem) => item.text ?? 'No';
return (
<section className={`my-8 space-y-8 ${className || ''}`} aria-label="Quick answer">
<div className="prose max-w-none">
<h2 className="text-2xl font-bold text-gray-900 mb-4">Quick Summary</h2>
<p className="text-lg text-gray-700 leading-relaxed font-medium">
<section className={`my-12 space-y-10 ${className || ''}`} aria-label="Quick answer">
<div className="max-w-4xl space-y-4">
<h2 className="text-2xl font-semibold text-slate-900 tracking-tight -tracking-[0.02em]">Quick Summary</h2>
<p className="text-lg text-slate-600 leading-relaxed font-light">
{whatIsIt}
</p>
</div>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
<Card className="p-6 bg-blue-50 border-blue-100">
<h3 className="font-semibold text-lg text-blue-900 mb-4">When to use this?</h3>
<ul className="space-y-3">
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{/* When to use card */}
<Card className="p-6 bg-white border-slate-200/60 shadow-sm rounded-xl flex flex-col h-full">
<h3 className="font-semibold text-lg text-slate-900 mb-5 flex items-center gap-2">
<HelpCircle className="w-5 h-5 text-slate-400 shrink-0" />
When to use this?
</h3>
<ul className="space-y-4 flex-1">
{whenToUse.map((item, idx) => (
<li key={idx} className="flex items-start gap-3 text-blue-800">
<span className="mt-1.5 w-1.5 h-1.5 rounded-full bg-blue-500 shrink-0" />
{item}
<li key={idx} className="flex items-start gap-3.5 text-slate-600 text-sm leading-relaxed">
<span className="mt-2 w-1.5 h-1.5 rounded-full bg-slate-350 shrink-0" />
<span>{item}</span>
</li>
))}
</ul>
</Card>
<Card className="p-6 bg-white border-slate-200 shadow-sm flex flex-col">
<h3 className="font-semibold text-lg text-slate-900 mb-6 font-sans">Comparison</h3>
<div className="space-y-4 flex-1">
{/* Comparison card (Grayed-out static column, highlighted dynamic column) */}
<Card className="p-6 bg-white border-slate-200/60 shadow-sm rounded-xl flex flex-col h-full">
<h3 className="font-semibold text-lg text-slate-900 mb-5 flex items-center gap-2">
<ArrowRight className="w-5 h-5 text-slate-400 shrink-0 rotate-[-45deg]" />
Comparison
</h3>
<div className="space-y-3.5 flex-1">
{comparison.items.map((item, idx) => (
<div key={idx} className="flex flex-col gap-2 rounded-xl border border-slate-100 bg-slate-50 p-4">
<div className="font-semibold text-sm text-slate-900">
<div key={idx} className="flex flex-col gap-2 rounded-lg border border-slate-100 bg-slate-50/50 p-3">
<div className="font-bold text-[9px] text-slate-450 uppercase tracking-wider">
{item.label}
</div>
<div className="grid grid-cols-2 gap-4 text-sm mt-1">
{/* Left Side (e.g., Static Pages) */}
<div>
<div className="text-xs text-slate-500 mb-1">{comparison.leftTitle}</div>
<div className="text-slate-600 font-medium">{leftValueFor(item)}</div>
<div className="grid grid-cols-2 gap-4 text-xs mt-0.5 items-center">
{/* Left Side (Static QR - Grayed out) */}
<div className="opacity-45 text-slate-400">
<div className="text-[9px] font-medium mb-0.5 uppercase tracking-wide">{comparison.leftTitle}</div>
<div className="text-xs font-light truncate">{leftValueFor(item)}</div>
</div>
{/* Right Side (e.g., QR Master) */}
<div>
<div className="text-xs text-blue-600 mb-1 font-medium">{comparison.rightTitle}</div>
<div className="flex items-center gap-1.5 font-semibold text-slate-900">
{/* Right Side (Dynamic QR - Highlighted in color) */}
<div className="bg-indigo-500/[0.04] border border-indigo-500/10 rounded-lg p-2 flex flex-col">
<div className="text-[9px] text-indigo-500 font-bold mb-0.5 uppercase tracking-wide">{comparison.rightTitle}</div>
<div className="flex items-center gap-1 text-xs font-bold text-slate-800">
{item.value ? (
<>
<Check className="w-4 h-4 text-emerald-500" aria-hidden="true" />
<span>Included</span>
<Check className="w-3.5 h-3.5 text-emerald-600 shrink-0" aria-hidden="true" />
<span className="text-indigo-650">Supported</span>
</>
) : (
<>
<X className="w-4 h-4 text-red-500" aria-hidden="true" />
<span className="text-slate-500">Not Included</span>
<X className="w-3.5 h-3.5 text-red-400 shrink-0" aria-hidden="true" />
<span className="text-slate-500">No</span>
</>
)}
</div>
@@ -90,15 +98,19 @@ export const AnswerFirstBlock: React.FC<AnswerFirstBlockProps> = ({
</div>
</Card>
<Card className="p-6 bg-green-50 border-green-100">
<h3 className="font-semibold text-lg text-green-900 mb-4">How it works</h3>
<ol className="space-y-4">
{/* How it works card (Spacious clean index numbers) */}
<Card className="p-6 bg-white border-slate-200/60 shadow-sm rounded-xl flex flex-col h-full">
<h3 className="font-semibold text-lg text-slate-900 mb-5 flex items-center gap-2">
<Play className="w-5 h-5 text-slate-400 shrink-0" />
How it works
</h3>
<ol className="space-y-6 flex-1">
{howTo.steps.map((step, idx) => (
<li key={idx} className="flex gap-3 text-green-800">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-green-200 text-green-700 flex items-center justify-center text-sm font-bold">
{idx + 1}
<li key={idx} className="flex items-start gap-4">
<span className="text-sm font-bold text-slate-400 select-none mt-0.5">
0{idx + 1}
</span>
<span>{step}</span>
<span className="text-sm text-slate-600 leading-relaxed">{step}</span>
</li>
))}
</ol>

View File

@@ -5,11 +5,18 @@ import Image from "next/image";
import Link from "next/link";
import {
ArrowRight,
Check,
CheckCircle2,
Compass,
Link2,
Radar,
Sparkles,
Smartphone,
RefreshCw,
BarChart3,
Utensils,
ChevronRight,
ShieldCheck,
Zap,
} from "lucide-react";
import Breadcrumbs, { BreadcrumbItem } from "@/components/Breadcrumbs";
@@ -22,6 +29,7 @@ import {
import { AnswerFirstBlock } from "@/components/marketing/AnswerFirstBlock";
import { Button } from "@/components/ui/Button";
import { Card } from "@/components/ui/Card";
import { HeroSpotlight } from "@/components/marketing/HeroSpotlight";
import { breadcrumbSchema, faqPageSchema } from "@/lib/schema";
type LinkCard = {
@@ -67,6 +75,8 @@ type UseCasePageTemplateProps = {
faq: FAQItem[];
heroImage?: string;
heroImageAlt?: string;
authoritySignals?: string[];
directAnswer?: string;
schemaData?: Record<string, unknown>[];
};
@@ -107,6 +117,257 @@ export function buildUseCaseMetadata({
};
}
function getWorkflowIcon(index: number) {
switch (index) {
case 0:
return Smartphone;
case 1:
return RefreshCw;
case 2:
return BarChart3;
default:
return Radar;
}
}
function RestaurantMockup() {
return (
<div className="relative w-full aspect-[4/3] max-w-[440px] mx-auto flex items-center justify-center select-none">
{/* Subtle flat shadow under elements */}
<div className="absolute bottom-4 left-1/2 -translate-x-1/2 w-4/5 h-4 bg-slate-100/60 rounded-full blur-xl pointer-events-none" />
{/* Table stand card (Flat vector look) */}
<div
className="absolute left-6 bottom-4 w-[160px] sm:w-[170px] bg-white border border-slate-200/80 p-3.5 shadow-md rounded-xl flex flex-col items-center justify-between z-10"
style={{
transform: "perspective(1000px) rotateY(8deg) rotateX(4deg) translateZ(10px)",
}}
>
{/* Table number / header */}
<div className="w-full flex justify-between items-center border-b border-slate-100 pb-1.5 mb-2">
<div className="flex items-center gap-1">
<Utensils className="w-3 text-slate-400" />
<span className="text-[8px] font-bold text-slate-500 tracking-wide uppercase">Bistro</span>
</div>
<span className="text-[8px] font-semibold bg-slate-100 text-slate-655 px-1 py-0.5 rounded">T-12</span>
</div>
{/* Scan instruction */}
<div className="text-center mb-2.5">
<p className="text-[8px] font-bold text-slate-850 uppercase tracking-widest leading-none">Scan for Menu</p>
</div>
{/* Flat QR Code */}
<div className="w-20 h-20 bg-white p-1.5 border border-slate-150 rounded shadow-sm flex items-center justify-center">
<svg viewBox="0 0 100 100" className="w-full h-full text-slate-800" fill="currentColor">
{/* Finder Pattern Top-Left */}
<rect x="0" y="0" width="30" height="30" />
<rect x="5" y="5" width="20" height="20" fill="white" />
<rect x="10" y="10" width="10" height="10" />
{/* Finder Pattern Top-Right */}
<rect x="70" y="0" width="30" height="30" />
<rect x="75" y="5" width="20" height="20" fill="white" />
<rect x="80" y="80" width="10" height="10" fill="white" />
{/* Finder Pattern Bottom-Left */}
<rect x="0" y="70" width="30" height="30" />
<rect x="5" y="75" width="20" height="20" fill="white" />
<rect x="10" y="80" width="10" height="10" />
{/* Align Pattern Bottom-Right */}
<rect x="75" y="75" width="10" height="10" />
<rect x="70" y="70" width="5" height="5" />
{/* Timing patterns */}
<rect x="35" y="10" width="5" height="5" />
<rect x="45" y="10" width="5" height="5" />
<rect x="55" y="10" width="5" height="5" />
<rect x="10" y="35" width="5" height="5" />
<rect x="10" y="45" width="5" height="5" />
<rect x="10" y="55" width="5" height="5" />
{/* Random data blocks */}
<rect x="40" y="20" width="10" height="15" />
<rect x="55" y="20" width="10" height="10" />
<rect x="35" y="35" width="15" height="15" />
<rect x="55" y="35" width="10" height="20" />
<rect x="40" y="55" width="10" height="10" />
<rect x="40" y="70" width="15" height="10" />
<rect x="45" y="85" width="10" height="10" />
<rect x="70" y="40" width="15" height="10" />
<rect x="80" y="55" width="10" height="10" />
<rect x="70" y="25" width="5" height="10" />
<rect x="30" y="80" width="5" height="15" />
</svg>
</div>
{/* Stand base detail */}
<div className="w-14 h-1 bg-slate-200 rounded-full mt-2.5 opacity-60" />
</div>
{/* Smartphone (Flat vector look) */}
<div
className="absolute right-6 top-2 w-[180px] sm:w-[190px] h-[310px] sm:h-[340px] bg-slate-100 border-4 border-slate-350 shadow-lg rounded-[2rem] flex flex-col overflow-hidden z-20"
style={{
transform: "perspective(1000px) rotateY(-6deg) rotateX(3deg)",
}}
>
{/* Dynamic Island */}
<div className="absolute top-1.5 left-1/2 -translate-x-1/2 w-12 h-2.5 bg-slate-355 rounded-full z-30" />
{/* Smartphone Screen Content */}
<div className="flex-1 bg-white flex flex-col text-slate-805 pt-5 relative overflow-hidden">
{/* Custom menu header */}
<div className="bg-slate-50 px-2.5 py-1.5 border-b border-slate-100 flex items-center justify-between">
<span className="text-[8px] font-bold text-slate-700 tracking-tight uppercase">Bistro</span>
<span className="text-[6px] text-emerald-600 font-semibold bg-emerald-50 px-1 py-0.5 rounded">Active Menu</span>
</div>
{/* Menu List */}
<div className="flex-1 px-2.5 py-2 overflow-y-auto space-y-1.5">
{/* Menu Item 1 */}
<div className="border border-slate-100 p-1.5 rounded-lg flex justify-between items-center bg-white shadow-sm">
<div className="flex-1 pr-1">
<div className="flex justify-between items-baseline">
<span className="text-[8px] font-bold text-slate-855 leading-tight">Charred Ribeye</span>
<span className="text-[8px] font-bold text-slate-655">$34</span>
</div>
<p className="text-[6px] text-slate-450 leading-snug mt-0.5">Rosemary butter</p>
</div>
</div>
{/* Menu Item 2 */}
<div className="border border-slate-100 p-1.5 rounded-lg flex justify-between items-center bg-white shadow-sm">
<div className="flex-1 pr-1">
<div className="flex justify-between items-baseline">
<span className="text-[8px] font-bold text-slate-855 leading-tight">Mushroom Pasta</span>
<span className="text-[8px] font-bold text-slate-655">$22</span>
</div>
<p className="text-[6px] text-slate-450 leading-snug mt-0.5">Fresh fettuccine</p>
</div>
</div>
{/* Menu Item 3 */}
<div className="border border-slate-100 p-1.5 rounded-lg flex justify-between items-center bg-white shadow-sm">
<div className="flex-1 pr-1">
<div className="flex justify-between items-baseline">
<span className="text-[8px] font-bold text-slate-855 leading-tight">Crème Brûlée</span>
<span className="text-[8px] font-bold text-slate-655">$11</span>
</div>
<p className="text-[6px] text-slate-450 leading-snug mt-0.5">Peach & vanilla</p>
</div>
</div>
</div>
{/* Cart Button */}
<div className="p-2 bg-slate-50 border-t border-slate-100 flex items-center justify-between z-10">
<span className="text-[8px] font-bold text-slate-700">$56.00</span>
<button className="bg-slate-900 text-white text-[7px] font-bold py-1 px-3 rounded shadow-sm hover:bg-slate-800 transition-colors">
Order Menu
</button>
</div>
</div>
</div>
{/* Flat Connecting Line (Blueprint look, dipped downward further) */}
<svg className="absolute inset-0 w-full h-full z-15 pointer-events-none" viewBox="0 0 440 330">
<path
d="M 160,185 Q 210,225 255,190"
fill="none"
stroke="#cbd5e1"
strokeWidth="1.5"
strokeDasharray="4,4"
/>
</svg>
</div>
);
}
function GenericMockup() {
return (
<div className="relative w-full aspect-[4/3] max-w-[440px] mx-auto flex items-center justify-center select-none">
{/* Subtle flat shadow under elements */}
<div className="absolute bottom-4 left-1/2 -translate-x-1/2 w-4/5 h-4 bg-slate-100/60 rounded-full blur-xl pointer-events-none" />
{/* Flat Dashboard Card */}
<div
className="absolute left-6 top-4 w-[210px] sm:w-[220px] bg-white border border-slate-200/80 rounded-xl p-3.5 shadow-md z-10 flex flex-col justify-between"
style={{
transform: "perspective(1000px) rotateY(8deg) rotateX(4deg)",
}}
>
<div className="flex justify-between items-center border-b border-slate-100 pb-1.5 mb-2.5">
<div className="flex items-center gap-1">
<span className="w-1.5 h-1.5 rounded-full bg-slate-400" />
<span className="text-[8px] font-bold text-slate-505 uppercase tracking-wider">Overview</span>
</div>
<span className="text-[8px] font-bold bg-slate-100 text-slate-655 px-1 py-0.5 rounded">Active</span>
</div>
<div className="grid grid-cols-2 gap-1.5 mb-2.5">
<div className="bg-slate-50/50 p-1.5 rounded border border-slate-100">
<span className="text-[6px] font-semibold text-slate-400 uppercase">Scans</span>
<p className="text-xs font-bold text-slate-700 mt-0.5">8,421</p>
</div>
<div className="bg-slate-50/50 p-1.5 rounded border border-slate-100">
<span className="text-[6px] font-semibold text-slate-400 uppercase">Conversion</span>
<p className="text-xs font-bold text-slate-700 mt-0.5">14.2%</p>
</div>
</div>
{/* Mini Chart */}
<div className="space-y-1">
<span className="text-[6px] font-semibold text-slate-400 uppercase block">Activity</span>
<div className="h-10 flex items-end justify-between gap-1 pt-1">
{[30, 45, 25, 60, 80, 50, 75].map((val, idx) => (
<div key={idx} className="flex-1 bg-slate-150 rounded-t-sm" style={{ height: `${val}%` }} />
))}
</div>
</div>
</div>
{/* Smartphone (Flat vector look) */}
<div
className="absolute right-6 bottom-4 w-[150px] sm:w-[160px] h-[250px] sm:h-[285px] bg-slate-100 border-4 border-slate-350 shadow-lg rounded-[1.75rem] flex flex-col overflow-hidden z-20"
style={{
transform: "perspective(1000px) rotateY(-8deg) rotateX(4deg)",
}}
>
{/* Dynamic Island */}
<div className="absolute top-1.5 left-1/2 -translate-x-1/2 w-10 h-2 bg-slate-355 rounded-full z-30" />
{/* Screen */}
<div className="flex-1 bg-white flex flex-col pt-5 p-2 items-center justify-between text-slate-800 relative">
<div className="w-full text-center py-0.5">
<span className="text-[7px] font-bold text-slate-400 uppercase tracking-widest block">Redirecting</span>
</div>
<div className="w-16 h-18 border border-slate-150 rounded flex items-center justify-center p-1.5 bg-slate-50">
<svg viewBox="0 0 100 100" className="w-10 h-10 text-slate-700" fill="currentColor">
<rect x="0" y="0" width="30" height="30" />
<rect x="5" y="5" width="20" height="20" fill="white" />
<rect x="10" y="10" width="10" height="10" />
<rect x="70" y="0" width="30" height="30" />
<rect x="75" y="5" width="20" height="20" fill="white" />
<rect x="80" y="80" width="10" height="10" fill="white" />
<rect x="0" y="70" width="30" height="30" />
<rect x="5" y="75" width="20" height="20" fill="white" />
<rect x="10" y="80" width="10" height="10" />
<rect x="75" y="75" width="10" height="10" />
<rect x="40" y="20" width="10" height="10" />
</svg>
</div>
<div className="w-full bg-slate-50 border border-slate-100 p-1 rounded flex items-center gap-1 shadow-sm text-[7px] text-slate-600">
<span className="text-[6px] font-semibold text-slate-400 truncate leading-none">redirecting to URL...</span>
</div>
</div>
</div>
</div>
);
}
export function UseCasePageTemplate({
title,
description,
@@ -131,6 +392,8 @@ export function UseCasePageTemplate({
faq,
heroImage,
heroImageAlt = "QR code workflow example",
authoritySignals = [],
directAnswer,
schemaData = [],
}: UseCasePageTemplateProps) {
return (
@@ -145,48 +408,56 @@ export function UseCasePageTemplate({
/>
<div className="min-h-screen bg-white">
<section className="relative overflow-hidden bg-gradient-to-br from-slate-950 via-blue-950 to-cyan-900 text-white">
<div className="absolute inset-0 bg-[radial-gradient(circle_at_top_left,rgba(125,211,252,0.22),transparent_38%),radial-gradient(circle_at_bottom_right,rgba(255,255,255,0.08),transparent_30%)]" />
<div className="relative container mx-auto max-w-7xl px-4 py-20 sm:px-6 lg:px-8">
{/* Pure white, highly polished, minimalist hero section with mouse tracking spotlight glow */}
<HeroSpotlight>
<div className="container mx-auto max-w-7xl px-4 py-16 sm:px-6 lg:px-8">
<Breadcrumbs
items={breadcrumbs}
className="[&_a]:text-blue-100/80 [&_a:hover]:text-white [&_span]:text-blue-100/80 [&_[aria-current=page]]:text-white"
className="mb-8 [&_a]:text-slate-500 [&_a:hover]:text-slate-900 [&_span]:text-slate-400 [&_[aria-current=page]]:text-slate-800"
/>
<div className="grid gap-12 lg:grid-cols-[minmax(0,1.2fr)_minmax(320px,0.8fr)] lg:items-center">
<div className="grid gap-16 lg:grid-cols-[1.15fr_0.85fr] lg:items-center">
<div className="space-y-8">
<div className="inline-flex items-center gap-2 rounded-full border border-white/15 bg-white/10 px-4 py-2 text-sm font-semibold text-cyan-100 shadow-lg shadow-cyan-950/30 backdrop-blur">
<Sparkles className="h-4 w-4" />
<span>{eyebrow}</span>
<div className="inline-flex items-center rounded-md border border-slate-200 bg-slate-50 px-3 py-1 text-xs font-semibold tracking-wider text-slate-500 uppercase shadow-sm">
<span>Use Case</span>
</div>
<div className="space-y-5">
<h1 className="max-w-4xl text-4xl font-bold tracking-tight text-white md:text-5xl lg:text-6xl">
<h1 className="max-w-4xl text-4xl font-light tracking-tight text-slate-900 md:text-5xl lg:text-6xl leading-[1.1] -tracking-[0.03em]">
{title}
</h1>
<p className="max-w-3xl text-lg leading-8 text-blue-50/88 md:text-xl">
<p className="max-w-3xl text-base leading-relaxed text-slate-500 md:text-lg">
{intro}
</p>
</div>
<div className="grid gap-3 text-sm text-blue-50/80 sm:grid-cols-2">
{/* Sub-benefits (Styled as authentic, clean Framer-style Apple Notification banners) */}
<div className="grid gap-4 sm:grid-cols-2">
{[
"Built for QR workflows where the printed surface should stay stable.",
"Focused on operational clarity, not inflated ROI claims.",
"Connected to a commercial parent and sibling workflows.",
"Designed to fit QR Master's existing marketing theme.",
].map((line) => (
{ title: "Print Stability", body: "Keep printed tables & flyers clean and permanent", icon: ShieldCheck },
{ title: "Instant Redirection", body: "Update links instantly without reprinting codes", icon: RefreshCw },
{ title: "Attribution Flows", body: "Built-in campaign tracking and flow analysis", icon: BarChart3 },
{ title: "Mobile Optimized", body: "Designed to load fast on mobile data connections", icon: Zap },
].map((item) => (
<div
key={line}
className="flex items-start gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 backdrop-blur-sm"
key={item.title}
className="flex items-center gap-3.5 rounded-[1.25rem] bg-[#f4f4f5]/90 border border-slate-200/30 p-3.5 shadow-[0_8px_24px_rgba(0,0,0,0.02)] backdrop-blur-md transition-all duration-200 hover:scale-[1.01] hover:bg-[#f4f4f5]"
>
<CheckCircle2 className="mt-0.5 h-4 w-4 shrink-0 text-cyan-300" />
<span>{line}</span>
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-[11px] bg-slate-900 text-white shadow-sm">
<item.icon className="h-5 w-5" />
</div>
<div className="flex-1 min-w-0">
<div className="flex items-baseline justify-between">
<span className="text-[13px] font-semibold text-slate-900 truncate">{item.title}</span>
<span className="text-[10px] text-slate-400 font-medium shrink-0 ml-2">now</span>
</div>
<p className="text-[12px] text-slate-500 leading-snug mt-0.5">{item.body}</p>
</div>
</div>
))}
</div>
<div className="flex flex-col gap-4 sm:flex-row">
<div className="flex flex-col gap-3.5 sm:flex-row pt-2">
<TrackedCtaLink
href={primaryCta.href}
ctaLabel={primaryCta.label}
@@ -197,7 +468,7 @@ export function UseCasePageTemplate({
>
<Button
size="lg"
className="w-full bg-white px-8 py-4 text-base font-semibold text-slate-950 hover:bg-slate-100 sm:w-auto"
className="w-full bg-blue-600 hover:bg-blue-700 text-white px-8 py-4 text-base font-semibold sm:w-auto rounded-lg shadow-sm hover:shadow-md transition-all duration-200"
>
{primaryCta.label}
</Button>
@@ -214,7 +485,7 @@ export function UseCasePageTemplate({
<Button
variant="outline"
size="lg"
className="w-full border-white/30 bg-white/5 px-8 py-4 text-base text-white hover:bg-white/10 sm:w-auto"
className="w-full border-slate-250 bg-white px-8 py-4 text-base text-slate-600 hover:text-slate-800 hover:bg-slate-50 sm:w-auto rounded-lg transition-all duration-200"
>
{secondaryCta.label}
</Button>
@@ -222,83 +493,51 @@ export function UseCasePageTemplate({
</div>
</div>
{/* Mockup visual wrapped in an elegant macOS-style window frame */}
<div className="relative flex justify-center lg:justify-end">
{heroImage ? (
<div className="rounded-[2rem] border border-white/10 bg-white/10 p-3 shadow-2xl shadow-slate-950/30 backdrop-blur">
<div className="relative aspect-[4/3] overflow-hidden rounded-[1.5rem] border border-white/10 bg-slate-950/40">
<div className="w-full max-w-[480px] bg-white border border-slate-200/80 rounded-2xl shadow-[0_20px_50px_rgba(0,0,0,0.06)] p-3">
{/* Browser header controls */}
<div className="flex items-center gap-1.5 border-b border-slate-100 pb-2.5 mb-2.5 px-1 select-none">
<span className="w-2 h-2 rounded-full bg-rose-400/80" />
<span className="w-2 h-2 rounded-full bg-amber-400/80" />
<span className="w-2 h-2 rounded-full bg-emerald-400/80" />
<span className="text-[9px] text-slate-400 font-semibold ml-4 tracking-wide uppercase">Setup Preview</span>
</div>
{/* Visual Container */}
<div className="relative aspect-[4/3] overflow-hidden rounded-xl bg-slate-50/50">
<Image
src={heroImage}
alt={heroImageAlt}
fill
priority
sizes="(min-width: 1024px) 38vw, 100vw"
className="object-cover"
className="object-contain"
/>
</div>
<div className="grid gap-3 px-2 py-4 text-sm text-blue-50/82 sm:grid-cols-3 lg:grid-cols-1 xl:grid-cols-3">
{workflowCards.map((card, index) => (
<div key={card.title} className="flex gap-3">
<div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-cyan-300/15 text-xs font-semibold text-cyan-200">
{index + 1}
</div>
<div>
<div className="font-semibold text-white">
{card.title}
</div>
<p className="mt-1 leading-5">{card.description}</p>
</div>
</div>
))}
</div>
</div>
) : (
<Card className="border-white/10 bg-white/10 p-8 text-white shadow-2xl shadow-slate-950/30 backdrop-blur">
<div className="space-y-6">
<div className="flex items-center justify-between border-b border-white/10 pb-4">
<div>
<div className="text-xs uppercase tracking-[0.24em] text-cyan-200/70">
Workflow snapshot
<div className="w-full">
{useCase === 'restaurant-menu-qr-codes' ? (
<RestaurantMockup />
) : (
<GenericMockup />
)}
</div>
<div className="mt-2 text-2xl font-semibold text-white">
What matters here
</div>
</div>
<Compass className="h-9 w-9 text-cyan-300" />
</div>
<div className="space-y-4">
{workflowCards.map((card, index) => (
<div
key={card.title}
className="rounded-2xl border border-white/10 bg-slate-950/30 p-4"
>
<div className="mb-2 flex items-center gap-3">
<div className="flex h-8 w-8 items-center justify-center rounded-full bg-cyan-400/15 text-sm font-semibold text-cyan-200">
{index + 1}
</div>
<div className="text-lg font-semibold text-white">
{card.title}
</div>
</div>
<p className="text-sm leading-6 text-blue-50/80">
{card.description}
</p>
</div>
))}
</div>
</div>
</Card>
)}
</div>
</div>
</section>
</div>
</HeroSpotlight>
<div className="container mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
{/* AnswerFirst block - summary and quick details */}
<div className="container mx-auto max-w-7xl px-4 py-16 sm:px-6 lg:px-8">
<AnswerFirstBlock
whatIsIt={answer}
whenToUse={whenToUse}
comparison={{
leftTitle: "Static",
rightTitle: "Better fit here",
leftTitle: "Static QR",
rightTitle: "Dynamic QR",
items: comparisonItems,
}}
howTo={{
@@ -308,117 +547,156 @@ export function UseCasePageTemplate({
/>
</div>
<section className="bg-slate-50 py-16">
{directAnswer ? (
<div className="container mx-auto max-w-7xl px-4 pb-10 sm:px-6 lg:px-8">
<p className="text-base leading-7 text-slate-700 sm:text-lg">
{directAnswer}
</p>
{authoritySignals.length ? (
<div className="mt-6 grid gap-4 sm:grid-cols-3">
{authoritySignals.map((item) => (
<div
key={item}
className="flex items-start gap-3 rounded-lg border border-slate-200 bg-white px-4 py-3 text-sm text-slate-700"
>
<Check className="mt-0.5 h-4 w-4 shrink-0 text-blue-700" />
<span>{item}</span>
</div>
))}
</div>
) : null}
</div>
) : null}
{/* Workflow steps block */}
<section className="bg-slate-50/50 border-y border-slate-150 py-20">
<div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mb-10 max-w-3xl">
<h2 className="text-3xl font-bold tracking-tight text-slate-900">
<div className="mb-14 max-w-3xl">
<h2 className="text-3xl font-semibold tracking-tight text-slate-900 md:text-4xl -tracking-[0.02em]">
{workflowTitle}
</h2>
<p className="mt-4 text-lg leading-8 text-slate-600">
<p className="mt-4 text-lg leading-relaxed text-slate-500">
{workflowIntro}
</p>
</div>
<div className="grid gap-6 lg:grid-cols-3">
{workflowCards.map((card) => (
<div className="grid gap-8 lg:grid-cols-3">
{workflowCards.map((card, idx) => {
const Icon = getWorkflowIcon(idx);
return (
<Card
key={card.title}
className="rounded-3xl border-slate-200/80 bg-white p-7 shadow-sm"
className="rounded-xl border-slate-200 bg-white p-8 shadow-sm transition-all duration-250 hover:border-slate-300 hover:shadow-md"
>
<div className="mb-5 flex h-12 w-12 items-center justify-center rounded-2xl bg-blue-50 text-blue-700">
<Radar className="h-6 w-6" />
<div className="mb-6 flex h-11 w-11 items-center justify-center rounded-lg bg-slate-50 border border-slate-100 text-slate-655">
<Icon className="h-5.5 w-5.5" />
</div>
<h3 className="text-xl font-semibold text-slate-900">
{card.title}
</h3>
<p className="mt-3 text-base leading-7 text-slate-600">
<p className="mt-3 text-base leading-relaxed text-slate-500">
{card.description}
</p>
</Card>
))}
);
})}
</div>
</div>
</section>
<section className="py-16">
<div className="container mx-auto grid max-w-7xl gap-8 px-4 sm:px-6 lg:grid-cols-[minmax(0,0.95fr)_minmax(280px,0.8fr)] lg:px-8">
<Card className="rounded-3xl border-slate-200 bg-white p-8 shadow-sm">
<div className="flex items-start justify-between gap-4">
{/* Symmetrical Checklist & Sibling resources section */}
<section className="py-20 bg-white">
<div className="container mx-auto grid max-w-7xl gap-8 px-4 sm:px-6 lg:grid-cols-2 lg:px-8">
{/* Checklist Card */}
<Card className="rounded-xl border-slate-200/70 bg-white p-8 sm:p-10 shadow-sm flex flex-col justify-between">
<div>
<div className="text-sm font-semibold uppercase tracking-[0.22em] text-blue-700">
Checklist
<div className="flex items-center justify-between gap-4 border-b border-slate-100 pb-5">
<div>
<div className="text-xs font-semibold uppercase tracking-wider text-slate-450">
Standard Guidelines
</div>
<h2 className="mt-3 text-3xl font-bold text-slate-900">
<h2 className="mt-2 text-2xl font-bold text-slate-900 sm:text-3xl -tracking-[0.02em]">
{checklistTitle}
</h2>
</div>
<CheckCircle2 className="h-8 w-8 text-blue-700" />
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-slate-50 border border-slate-100 text-slate-500">
<CheckCircle2 className="h-5 w-5" />
</div>
</div>
<ul className="mt-8 space-y-4">
{checklist.map((item) => (
<li
key={item}
className="flex items-start gap-3 text-slate-700"
className="flex items-start gap-3.5 text-slate-650"
>
<CheckCircle2 className="mt-1 h-5 w-5 shrink-0 text-green-600" />
<span className="leading-7">{item}</span>
<CheckCircle2 className="mt-1 h-4.5 w-4.5 shrink-0 text-emerald-500" />
<span className="leading-relaxed text-slate-600">{item}</span>
</li>
))}
</ul>
</div>
</Card>
<Card className="rounded-3xl border-slate-200 bg-slate-950 p-8 text-white shadow-xl shadow-slate-200">
<div className="flex items-center gap-3">
<Link2 className="h-5 w-5 text-cyan-300" />
<h2 className="text-2xl font-bold">Related links</h2>
{/* Related links card (Clean white, matching checklist) */}
<Card className="rounded-xl border-slate-200/70 bg-white p-8 sm:p-10 shadow-sm flex flex-col justify-between">
<div>
<div className="flex items-center gap-3 border-b border-slate-100 pb-5">
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-slate-50 border border-slate-100 text-slate-550">
<Link2 className="h-5 w-5" />
</div>
<h2 className="text-2xl font-bold text-slate-900 sm:text-3xl -tracking-[0.02em]">Related resources</h2>
</div>
<div className="mt-6 space-y-4">
{supportLinks.map((link) => (
<Link
key={link.href}
href={link.href}
className="group block rounded-2xl border border-white/10 bg-white/5 p-4 transition-colors hover:bg-white/10"
className="group block rounded-xl border border-slate-100 bg-slate-50/30 p-4 transition-all duration-200 hover:bg-slate-50 hover:border-slate-200"
>
<div className="flex items-start justify-between gap-4">
<div>
<div className="text-lg font-semibold text-white">
<div className="text-base font-semibold text-slate-855 group-hover:text-blue-600 transition-colors">
{link.title}
</div>
<div className="mt-2 text-sm leading-6 text-blue-50/78">
<div className="mt-1.5 text-sm leading-relaxed text-slate-500">
{link.description}
</div>
</div>
<ArrowRight className="mt-1 h-4 w-4 shrink-0 text-cyan-300 transition-transform group-hover:translate-x-1" />
<ChevronRight className="mt-1 h-4 w-4 shrink-0 text-slate-400 transition-transform group-hover:translate-x-1 group-hover:text-blue-600" />
</div>
</Link>
))}
</div>
</div>
</Card>
</div>
</section>
<div className="container mx-auto max-w-5xl px-4 pb-6 sm:px-6 lg:px-8">
{/* FAQs */}
<div className="container mx-auto max-w-5xl px-4 pb-12 sm:px-6 lg:px-8">
<FAQSection items={faq} title={`${title} FAQ`} />
</div>
<section className="pb-20 pt-6">
{/* Bottom CTA Banner (Flat light-gray card, no gradients) */}
<section className="pb-24 pt-6">
<div className="container mx-auto max-w-5xl px-4 sm:px-6 lg:px-8">
<div className="rounded-[2rem] bg-gradient-to-r from-blue-700 via-indigo-700 to-slate-900 px-8 py-10 text-white shadow-2xl shadow-blue-100">
<div className="flex flex-col gap-8 lg:flex-row lg:items-end lg:justify-between">
<div className="max-w-2xl">
<div className="text-sm font-semibold uppercase tracking-[0.22em] text-blue-100/80">
<div className="relative rounded-2xl bg-slate-50 border border-slate-200 p-8 sm:p-12 text-slate-900 shadow-sm overflow-hidden">
<div className="relative z-10 flex flex-col gap-8 lg:flex-row lg:items-center lg:justify-between">
<div className="max-w-2xl space-y-3">
<div className="text-xs font-semibold uppercase tracking-wider text-slate-450">
Next step
</div>
<h2 className="mt-3 text-3xl font-bold tracking-tight">
Use a QR workflow that stays useful after the print run starts.
<h2 className="text-3xl font-bold tracking-tight sm:text-4xl -tracking-[0.02em] leading-tight text-slate-950">
Start with a QR setup that keeps your print permanent.
</h2>
<p className="mt-4 text-lg leading-8 text-blue-50/84">
<p className="text-base leading-relaxed text-slate-500">
{description}
</p>
</div>
<div className="flex flex-col gap-4 sm:flex-row">
<div className="flex flex-col gap-3.5 sm:flex-row shrink-0">
<TrackedCtaLink
href={primaryCta.href}
ctaLabel={primaryCta.label}
@@ -429,7 +707,7 @@ export function UseCasePageTemplate({
>
<Button
size="lg"
className="w-full bg-white px-7 text-slate-950 hover:bg-slate-100 sm:w-auto"
className="w-full bg-blue-600 hover:bg-blue-700 text-white px-7 sm:w-auto rounded-lg font-semibold shadow-sm transition-all duration-200"
>
{primaryCta.label}
</Button>
@@ -446,7 +724,7 @@ export function UseCasePageTemplate({
<Button
variant="outline"
size="lg"
className="w-full border-white/30 bg-white/5 text-white hover:bg-white/10 sm:w-auto"
className="w-full border-slate-250 bg-white text-slate-600 hover:text-slate-800 hover:bg-slate-50 sm:w-auto rounded-lg transition-all duration-200"
>
{secondaryCta.label}
</Button>

View File

@@ -49,6 +49,8 @@ export type UseCasePageContent = UseCaseLink & {
faq: FAQItem[];
heroImage?: string;
heroImageAlt?: string;
authoritySignals?: string[];
directAnswer?: string;
};
export const commercialPages: CommercialPageLink[] = [
@@ -97,6 +99,28 @@ export const commercialPages: CommercialPageLink[] = [
];
export const allUseCases: UseCaseLink[] = [
{
slug: 'qr-codes-for-hotel',
href: '/use-cases/qr-codes-for-hotel',
title: 'QR Codes for Hotels',
cluster: 'hotels',
summary:
'Route guests to current room-service menus, check-in flows, privacy forms, or local guest journeys without reprinting cards.',
parentHref: '/dynamic-qr-code-generator',
parentTitle: 'Dynamic QR Code Generator',
ctaLabel: 'Create your hotel QR code',
},
{
slug: 'qr-codes-for-barbershops',
href: '/use-cases/qr-codes-for-barbershops',
title: 'QR Codes for Barbershops',
cluster: 'barbershops',
summary:
'Use one stable barbershop QR for booking pages, waitlists, and loyalty offers while print stays current.',
parentHref: '/dynamic-qr-code-generator',
parentTitle: 'Dynamic QR Code Generator',
ctaLabel: 'Create your barbershop QR code',
},
{
slug: 'restaurant-menu-qr-codes',
href: '/use-cases/restaurant-menu-qr-codes',
@@ -363,6 +387,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Yes. One stable code can be reused across table cards, flyers, and takeaway materials, especially when the destination is managed dynamically.',
},
],
heroImage: '/marketing/use-cases/restaurant-menu-qr-codes.png',
heroImageAlt: 'Flat table-card QR mockup showing a printed restaurant menu QR, receipt card, and smartphone menu preview',
},
'business-card-qr-codes': {
...bySlug('business-card-qr-codes'),
@@ -458,6 +484,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Yes. A vCard QR or a landing page with clear save-contact options is often the simplest and most practical post-scan action.',
},
],
heroImage: '/marketing/use-cases/business-card-qr-codes.png',
heroImageAlt: 'Minimal business card QR mockup with printed contact card and smartphone contact preview',
},
'event-qr-codes': {
...bySlug('event-qr-codes'),
@@ -556,6 +584,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Use distinct destinations or tagged URLs for each placement so banner, booth, badge, and flyer traffic can be compared cleanly.',
},
],
heroImage: '/marketing/use-cases/event-qr-codes.png',
heroImageAlt: 'Event booth QR mockup showing check-in signage, event dashboard, and attendee phone preview',
},
'flyer-qr-codes': {
...bySlug('flyer-qr-codes'),
@@ -646,6 +676,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Link to the one next action promised on the flyer, such as a signup page, offer page, booking page, or campaign landing page.',
},
],
heroImage: '/marketing/use-cases/flyer-qr-codes.png',
heroImageAlt: 'Printed flyer campaign QR mockup with offer flyers, tracking dashboard, and landing page phone preview',
},
'packaging-qr-codes': {
...bySlug('packaging-qr-codes'),
@@ -740,6 +772,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'They should be dynamic when product documentation, app links, support flows, or promotional destinations may change after the packaging is printed.',
},
],
heroImage: '/marketing/use-cases/packaging-qr-codes.png',
heroImageAlt: 'Product packaging QR mockup showing printed box label, support phone screen, and tracking card',
},
'real-estate-sign-qr-codes': {
...bySlug('real-estate-sign-qr-codes'),
@@ -830,6 +864,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Yes, when listing details, CTA flows, or follow-up destinations may change while the sign remains in the field.',
},
],
heroImage: '/marketing/use-cases/real-estate-sign-qr-codes.png',
heroImageAlt: 'Real estate sign QR mockup with yard sign, open-house flyer, and listing phone preview',
},
'feedback-qr-codes': {
...bySlug('feedback-qr-codes'),
@@ -926,6 +962,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Place it where the customer can act right after the experience, such as on table cards, receipts, counters, packaging inserts, or post-service handouts.',
},
],
heroImage: '/marketing/use-cases/feedback-qr-codes.png',
heroImageAlt: 'Feedback QR counter card with receipt QR and smartphone review feed preview',
},
'qr-codes-for-review-collection': {
...bySlug('qr-codes-for-review-collection'),
@@ -937,9 +975,6 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Review collection QR codes work when the ask appears at the exact moment a customer is ready to respond, and when each placement can be measured later.',
answer:
'A review collection QR code sends satisfied customers to the right review or feedback flow while helping your team compare which physical prompts get scanned.',
heroImage: '/images/review-collection-qr-hero.png',
heroImageAlt:
'Premium counter setup with a review QR table card, receipt, phone review prompt, and scan analytics preview',
whenToUse: [
'You ask for reviews on receipts, table cards, packaging inserts, checkout counters, or post-service handouts.',
'You want a cleaner path from a positive real-world moment into a Google review, private form, or follow-up route.',
@@ -1037,6 +1072,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Yes. A trackable review QR setup can show which placements or locations generate scans, while the actual review submission still happens on the destination platform or form.',
},
],
heroImage: '/marketing/use-cases/qr-codes-for-review-collection.png',
heroImageAlt: 'Review collection QR setup with table card, receipt QR, review prompt phone, and scan analytics preview',
},
'payment-qr-codes': {
...bySlug('payment-qr-codes'),
@@ -1127,6 +1164,8 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'They work best on printed surfaces where a fast mobile payment step is valuable, such as counters, invoices, tables, service documents, or leave-behind materials.',
},
],
heroImage: '/marketing/use-cases/payment-qr-codes.png',
heroImageAlt: 'Payment QR invoice mockup with mobile checkout screen and payment confirmation preview',
},
'coupon-qr-codes': {
...bySlug('coupon-qr-codes'),
@@ -1217,6 +1256,174 @@ export const useCasePageContent: Record<string, UseCasePageContent> = {
'Yes, when the promotion, landing page, or redemption flow may change while the printed asset is still in circulation.',
},
],
heroImage: '/marketing/use-cases/coupon-qr-codes.png',
heroImageAlt: 'Coupon QR campaign flyer with offer landing page and conversion preview card',
},
'qr-codes-for-hotel': {
...bySlug('qr-codes-for-hotel'),
eyebrow: 'Hotels',
titleSuffix: 'for Guest Journeys, Room Service, and Check-In',
metaDescription:
'Use hotel welcome QR codes to route guests to current menus, check-in flows, privacy forms, or local journeys without reprinting cards.',
intro:
'Hotel welcome QR codes work best when guest-facing cards stay in place while the destination can update behind them.',
answer:
'A hotel welcome QR code should point guests to a current mobile-friendly journey for check-in, room service, or local services that can change over time.',
whenToUse: [
'Your room-service menus, check-in flows, or local guest guides change seasonally.',
'You want one stable printed card in the room or at reception.',
'You need guests to reach an up-to-date mobile page without a new print run.',
],
comparisonItems: [
{ label: 'Menu updates', text: 'Requires reprint', value: true },
{ label: 'Guest routing', text: 'Single fixed page', value: true },
{ label: 'Post-check-in tracking', text: 'Limited', value: true },
],
howToSteps: [
'Create one welcome QR destination for the hotel or room rollout.',
'Send scanners to the current guest menu, check-in flow, or local guide.',
'Update the destination as offers, hours, or services change.',
],
workflowTitle: 'What a good hotel QR setup should handle',
workflowIntro:
'Guest requests change faster than room cards. The QR workflow should make print stable while stays current.',
workflowCards: [
{
title: 'Stable room cards',
description: 'Keep the same welcome QR in rooms and at reception while the linked guest experience changes.',
},
{
title: 'Seasonal updates',
description: 'Keep the same welcome QR in rooms and at reception while the linked guest experience changes.',
},
{
title: 'Service routing',
description: 'Point guests to room service, check-in, or local guides without replacing cards.',
},
],
checklistTitle: 'Hotel QR checklist',
checklist: [
'Use a mobile-first guest page instead of a static PDF when possible.',
'Keep the same printed QR on every surface you do not want to replace often.',
"Use CTA copy like 'Scan for menu' or 'Scan for check-in' so the intent is obvious.",
'Pair placements with trackable destinations when you test room signage, table tents, or reception cards.',
],
supportLinks: [
{
href: '/dynamic-qr-code-generator',
title: 'Commercial parent: Dynamic QR Code Generator',
description: 'Best fit when the real need is editing the guest destination after print.',
},
{
href: '/use-cases/payment-qr-codes',
title: 'Sibling page: Payment QR Codes',
description: 'Useful when the same physical surfaces need an up-to-date post-scan payment action.',
},
{
href: '/blog/dynamic-vs-static-qr-codes',
title: 'Dynamic vs Static QR Codes',
description: 'Existing editorial asset for choosing editable QR destinations.',
},
],
faq: [
{
question: 'Should a hotel welcome QR code be static or dynamic?',
answer: 'Use a dynamic QR code when the guest destination may change. That lets you update the landing page without replacing cards in every room.',
},
{
question: 'What should a hotel welcome QR code link to?',
answer: 'Link to a mobile-first guest page for room service, check-in, or a short service hub that helps guests reach the right option fast.',
},
{
question: 'Can I use one hotel QR code in multiple places?',
answer: 'Yes. One hotel QR code can be reused across rooms, reception, flyers, and takeaway materials, especially when the destination is managed dynamically.',
},
],
heroImage: '/marketing/use-cases/qr-codes-for-hotel.png',
heroImageAlt: 'Hotel welcome QR card with smartphone guest services and room service preview',
},
'qr-codes-for-barbershops': {
...bySlug('qr-codes-for-barbershops'),
eyebrow: 'Barbershops',
titleSuffix: 'for Booking, Waitlist, and Loyalty Offers',
metaDescription:
'Use barbershop QR codes to send clients to booking pages, waitlists, and loyalty offers while keeping print stable.',
intro:
'Barbershop QR codes work best when the code on chairs, mirrors, and counters stays fixed while the booking or loyalty destination changes.',
answer:
'A barbershop QR code should point clients to a current booking, waitlist, or loyalty flow they can update without replacing printed promo cards.',
whenToUse: [
'Your booking page, waitlist, or loyalty offer changes more often than your printed cards.',
'You want one QR to work across chairs, counters, reception, and follow-up cards.',
'You need a cleaner handoff than asking clients to type a URL on a small card.',
],
comparisonItems: [
{ label: 'Booking updates', text: 'Requires new cards', value: true },
{ label: 'Service routing', text: 'Single fixed page', value: true },
{ label: 'Client follow-up', text: 'Weak by default', value: true },
],
howToSteps: [
'Choose the client action after the scan: book, waitlist, save loyalty, or view services.',
'Generate a QR code that sends clients to that destination or booking-ready landing page.',
'Keep the print the same and update the linked destination when offers evolve.',
],
workflowTitle: 'What a good barbershop QR setup should handle',
workflowIntro:
'Barbershop prints move fast. The workflow behind the QR should keep print stable while client routing stays current.',
workflowCards: [
{
title: 'Current booking flow',
description: 'Send scanners to a current booking or waitlist page so the next step is confirming service time, not calling back.',
},
{
title: 'Offer updates',
description: 'Update the destination when offers, prices, or staff change while old cards are still in circulation.',
},
{
title: 'Loyalty follow-up',
description: 'Point repeat clients to loyalty offers instead of a generic homepage.',
},
],
checklistTitle: 'Barbershop QR checklist',
checklist: [
'Pick one client action after the scan to keep the QR purpose clear.',
'Make the booking page mobile-first because most scans happen at the chair or counter.',
"Use CTA copy such as 'Scan to book' or 'Scan for today\'s offers'.",
'Test the print placement and size before ordering a large run.',
],
supportLinks: [
{
href: '/dynamic-qr-code-generator',
title: 'Commercial parent: Dynamic QR Code Generator',
description: 'Best fit when the loyalty destination changes more often than the printed card does.',
},
{
href: '/use-cases/business-card-qr-codes',
title: 'Sibling page: Business Card QR Codes',
description: 'Another contact-first workflow where the destination needs to stay current after print.',
},
{
href: '/blog/dynamic-vs-static-qr-codes',
title: 'Dynamic vs Static QR Codes',
description: 'Useful background for choosing dynamic QR destinations.',
},
],
faq: [
{
question: 'What should a barbershop QR code link to?',
answer: 'The best destination is the next client action you want: booking, waitlist, loyalty page, or services page.',
},
{
question: 'Do barbershop QR codes need to be dynamic?',
answer: 'Yes, if the booking, offer, or follow-up flow may change while the printed card is still in circulation.',
},
{
question: 'Can a barbershop QR code send clients straight to booking?',
answer: 'Yes. A QR that opens the current booking flow is often the most practical use case for chair-side and counter scans.',
},
],
heroImage: '/marketing/use-cases/qr-codes-for-barbershops.png',
heroImageAlt: 'Barbershop mirror QR sticker with booking phone screen and loyalty preview',
},
};

View File

@@ -1,5 +0,0 @@
{
"queries": "QR code success stories for spas and salons",
"maxPagesPerQuery": 1,
"resultsPerPage": 10
}

View File

@@ -1,5 +0,0 @@
{
"queries": "QR codes in spas use cases\nQR codes in beauty salons benefits\nQR codes for barbershops ideas",
"maxPagesPerQuery": 1,
"resultsPerPage": 5
}

Binary file not shown.

View File

@@ -1,47 +0,0 @@
import os
import re
def clean_articles(directory):
for filename in os.listdir(directory):
if filename.endswith(".md"):
path = os.path.join(directory, filename)
with open(path, "r", encoding="utf-8") as f:
content = f.read()
# Remove *Target: ...* line
content = re.sub(r"^\*Target:.*?\*[\r\n]*", "", content, flags=re.MULTILINE)
# Remove footer metadata starting with bolded targets or notes
# Usually starts after the last separator --- or near the end
# Patterns to remove:
# - Word count target: ...
# - Internal links to add: ...
# - Note: AI-assisted draft ...
# - Author bio: ... (We might want to keep author bio, but the user said "draft doesn't look good",
# so let's remove the "meta" parts and keep only the content.)
# Remove specific lines
content = re.sub(r"\*\*Word count target:\*\*.*", "", content)
content = re.sub(r"\*\*Internal links to add:\*\*.*", "", content)
content = re.sub(r"\*\*Author bio:\*\*.*", "", content)
content = re.sub(r"\*\*Note:\*\* AI-assisted draft.*", "", content)
# Also catch these patterns without bold
content = re.sub(r"\*Target:.*", "", content)
content = re.sub(r"Word count target:.*", "", content)
content = re.sub(r"Internal links to add:.*", "", content)
content = re.sub(r"Author bio:.*", "", content)
content = re.sub(r"Note: AI-assisted draft.*", "", content)
content = re.sub(r"Screenshots to include:.*", "", content)
# Clean up trailing whitespace and empty separators at the end
content = content.replace("---", "\n---\n") # Ensure space around separators
content = re.sub(r"---[\s\n]*$", "", content) # Remove trailing separators
content = content.strip()
with open(path, "w", encoding="utf-8") as f:
f.write(content)
print(f"Cleaned {filename}")
if __name__ == "__main__":
clean_articles(r"c:\Users\a931627\Documents\QRMASTER\articles")

Binary file not shown.

View File

@@ -1,380 +0,0 @@
# QR Master Lead Outreach - 2026-04-15
**Status: DRAFT - awaiting review**
Data sources: Vibe Prospecting (fetch + email enrichment) · Web search personalization · Apollo.io contacts (blocked on free plan — Vibe Prospecting used as primary)
Geography note: 16 English-speaking / 4 EU (20% EU vs 40% target — Apollo People API requires paid plan)
## Lead Table
| # | Name | Company | Email | Title | Segment | Country | Source |
|---|------|---------|-------|-------|---------|---------|--------|
| 1 | Mike Mikhail | Kiros Catering | sales@kiroscatering.com | President / Executive Chef | D_Restaurant | US | Vibe Prospecting |
| 2 | Nicole Patel | Delysia Chocolatier | nicole@delysia.com | Chef Owner & COO | D_Restaurant | US | Vibe Prospecting |
| 3 | Pasquale Martinelli | Alloro NY Private Dining | chef@alloroprivatedining.com | Founder & Executive Chef | D_Restaurant | US | Vibe Prospecting |
| 4 | Joshua Sutcliff | 55 Seventy | josh@55seventy.com | Executive Chef / Partner | D_Restaurant | US | Vibe Prospecting |
| 5 | William Kovel | Catalyst Restaurant | wkovel@catalystrestaurant.com | Chef / Owner | D_Restaurant | US | Vibe Prospecting |
| 6 | Christopher Zembrzuski | Chef Kansas City | chef@chefkansascity.com | Chef / Owner | D_Restaurant | US | Vibe Prospecting |
| 7 | Kyrin Hall | Digital Shortcutz Agency | kyrin@digitalshortcutz.agency | Founder + CMO | C_Analytics | US | Vibe Prospecting |
| 8 | Tabasum Lutfi | Trivision | tabasum@trivision.com | COO / Head of Digital Marketing | C_Analytics | US | Vibe Prospecting |
| 9 | Valorie Luther | Creative Concepts LLC | vluther@creative-conceptsllc.com | Founder & Chief Strategist | C_Analytics | US | Vibe Prospecting |
| 10 | Margee Moore | BigOrange Marketing | margee@bigorange.marketing | CEO + Digital Marketing | C_Analytics | US | Vibe Prospecting |
| 11 | Jennie Lyon | Jennie Lyon Digital Marketing | jennie@jennielyon.com | Founder + CEO | C_Analytics | US | Vibe Prospecting |
| 12 | David Gonynor | That's Biz | dgonynor@thatsbiz.com | CEO / Founder | C_Analytics | US | Vibe Prospecting |
| 13 | Albert Medrano Arjona | Gobik | albert.medrano@gobik.com | CMO / Marketing & Sales Director | S3_Commercial | ES | Vibe Prospecting |
| 14 | Sabrina Mertens | BabyOne | sabrina.mertens@babyone.de | Director Marketing & E-Commerce | S3_Commercial | DE | Vibe Prospecting |
| 15 | Tetske Van Loon | Otrium | tetske.vanloon@otrium.com | Director Marketing, Trading & Pricing | S3_Commercial | NL | Vibe Prospecting |
| 16 | Kathleen Morgante | CR7 Underwear (CR7US) | kat@cr7us.com | Director of Marketing & Communications | S3_Commercial | US | Vibe Prospecting |
| 17 | Alexandre Galbiati | Le Petit Lunetier | alexandre@lepetitlunetier.com | Marketing Director | S3_Commercial | FR | Vibe Prospecting |
| 18 | Amy Spainhower | Wedgewood Graphic Design | amy@wedgewooddesign.com | Agency Owner & Lead Creative | B_Bulk | US | Vibe Prospecting |
| 19 | Matthew Case | Designmc | matt@designmc.org | Agency Owner | B_Bulk | GB | Vibe Prospecting |
| 20 | Teri Tallant Flash | Teri Flash Creative | teri@teriflashcreative.com | Agency Owner | B_Bulk | US | Vibe Prospecting |
---
## Email Drafts
### Lead 1: Mike Mikhail - Kiros Catering
**To:** sales@kiroscatering.com
**Subject:** QR dead after a menu update?
Hi Mike,
If Kiros uses QR codes on table cards, proposals, or event menus — the moment the URL behind them changes, those codes stop working. For a catering operation that rotates seasonally, that's a recurring problem.
QR Master keeps the printed code permanent. You update the destination in a dashboard — new menu, new booking page — no reprint, no dead links at the table.
Worth a look before your next seasonal update?
Timo from QR Master
timo@qrmaster.net
---
### Lead 2: Nicole Patel - Delysia Chocolatier
**To:** nicole@delysia.com
**Subject:** Seasonal collections, stale QR codes?
Hi Nicole,
If Delysia's packaging or gift boxes carry a QR code, a new seasonal collection often means that destination is now outdated — and reprinting boxes isn't always an option.
One dynamic code stays on the packaging permanently. You update where it points when a new collection launches. You also see which orders or retail placements actually get scanned.
Useful for your next product run?
Timo from QR Master
timo@qrmaster.net
---
### Lead 3: Pasquale Martinelli - Alloro NY Private Dining
**To:** chef@alloroprivatedining.com
**Subject:** One QR, always the right page
Hi Pasquale,
If Alloro's menus change by season and guest, a QR code on a printed card can quickly point to the wrong page — and reprinting every time isn't realistic.
One dynamic code handles it: you change the destination whenever you like, the printed card stays the same. Booking page, current seasonal menu, contact form — always current.
Worth trying on your next print run?
Timo from QR Master
timo@qrmaster.net
---
### Lead 4: Joshua Sutcliff - 55 Seventy
**To:** josh@55seventy.com
**Subject:** Reprint every time the menu changes?
Hi Joshua,
For a private club that regularly adds new dishes and services, reprinting table cards and wine lists every time the menu evolves gets expensive fast.
If 55 Seventy uses QR codes on printed menus or member materials, QR Master keeps those codes working indefinitely — you just update the destination in a dashboard when the menu changes. No new print run.
Worth testing before your next update?
Timo from QR Master
timo@qrmaster.net
---
### Lead 5: William Kovel - Catalyst Restaurant
**To:** wkovel@catalystrestaurant.com
**Subject:** Table card QR stale after rotation?
Hi William,
Catalyst rotates its menu with the season. If your table cards or takeout packaging carry a QR, that destination is often outdated within a few weeks of printing.
One permanent code per table: update where it points from a dashboard when the menu changes — no reprints, no expired links. You can also see which tables or packaging formats get the most scans.
Worth a look before the next rotation?
Timo from QR Master
timo@qrmaster.net
---
### Lead 6: Christopher Zembrzuski - Chef Kansas City
**To:** chef@chefkansascity.com
**Subject:** Corporate clients scanning to your current menu?
Hi Christopher,
If Chef Kansas City uses QR codes on proposals or delivery packaging, a seasonal menu change usually means those links are pointing somewhere outdated — and corporate clients end up emailing for the right link instead.
A dynamic code always points to your current menu or ordering page. Update the destination any time, no reprint.
Does that come up with your corporate accounts?
Timo from QR Master
timo@qrmaster.net
---
### Lead 7: Kyrin Hall - Digital Shortcutz Agency
**To:** kyrin@digitalshortcutz.agency
**Subject:** Print campaigns with no QR data?
Hi Kyrin,
If Digital Shortcutz runs campaigns that include any print — flyers, cards, direct mail — the QR codes on those materials usually report nothing. Clients have no idea which codes get scanned, let alone convert.
QR Master gives every code scan analytics (device, location, time) and lets you update the destination mid-campaign without a reprint. Easy to add to any client retainer as a deliverable.
Worth including on a current campaign?
Timo from QR Master
timo@qrmaster.net
---
### Lead 8: Tabasum Lutfi - Trivision
**To:** tabasum@trivision.com
**Subject:** Proving print ROI to clients?
Hi Tabasum,
Trivision builds integrated campaigns — when print is in the mix, those QR codes usually can't prove anything. Static codes report no data, and if a landing page changes mid-campaign, the code silently breaks.
QR Master gives you scan analytics per code (device, location, time) and dynamic destinations you can update centrally. Same proof-of-performance for print as for digital placements.
Relevant for any current client campaigns?
Timo from QR Master
timo@qrmaster.net
---
### Lead 9: Valorie Luther - Creative Concepts LLC
**To:** vluther@creative-conceptsllc.com
**Subject:** Print is the last attribution gap
Hi Valorie,
You teach analytics and run client campaigns — so you know where the data drops off. Print usually does it. Direct mail, event handouts, and collateral go out with QR codes that report nothing back.
QR Master adds scan data (device, country, time) to every code and lets you update the destination when a landing page changes mid-campaign. No dead links, no missing data.
Worth testing on your next print piece?
Timo from QR Master
timo@qrmaster.net
---
### Lead 10: Margee Moore - BigOrange Marketing
**To:** margee@bigorange.marketing
**Subject:** Yard signs in your GA attribution?
Hi Margee,
BigOrange builds attribution models for clients. If any of those clients use QR codes on yard signs, print ads, or trade show materials, those scans often disappear from the GA model entirely — no UTM, no campaign source.
QR Master lets you attach UTM parameters to every code so scans flow into Google Analytics alongside digital traffic. Dynamic destination means no broken code when a landing page changes.
Useful for any client with mixed print-digital campaigns?
Timo from QR Master
timo@qrmaster.net
---
### Lead 11: Jennie Lyon - Jennie Lyon Digital Marketing
**To:** jennie@jennielyon.com
**Subject:** Client QR codes tracked like ads?
Hi Jennie,
Most small business owners have print materials — cards, flyers, packaging — with QR codes they set up once and forget. They get zero data back: no scans, no device info, no geographic breakdown. Same campaign, half the picture.
QR Master changes that. Every code tracks like a digital placement. Free to start, two minutes to set up.
Worth recommending to clients who ask about offline tracking?
Timo from QR Master
timo@qrmaster.net
---
### Lead 12: David Gonynor - That's Biz
**To:** dgonynor@thatsbiz.com
**Subject:** Which location's QR is driving scans?
Hi David,
That's Biz works with multi-location chains and franchise owners. When a franchise prints the same promo material across 50 locations, there's usually no way to know which store's code is working — or if any of them are.
QR Master lets you generate unique trackable codes per location, update destinations centrally, and see scan data by store, device, and time.
Worth a look for your franchise accounts?
Timo from QR Master
timo@qrmaster.net
---
### Lead 13: Albert Medrano Arjona - Gobik
**To:** albert.medrano@gobik.com
**Subject:** Which market scans your packaging QR?
Hi Albert,
If Gobik uses QR codes on hang tags or packaging across international retail, you're likely getting no data on which markets actually scan them. German shelf, UK pop-up, Spanish unboxing — static codes treat them all the same.
QR Master tracks scans by country and device per code. Update the destination when a campaign changes without reprinting.
Useful for the next international rollout?
Timo from QR Master
timo@qrmaster.net
---
### Lead 14: Sabrina Mertens - BabyOne
**To:** sabrina.mertens@babyone.de
**Subject:** Campaign URL changes, 100 store codes break?
Hi Sabrina,
If BabyOne uses in-store QR codes across your franchise network, a campaign URL change or product page update often means every location's printed code breaks at once — and coordinating reprints across 100+ stores is a real operational headache.
With QR Master you update the destination once. Every store's code keeps working, and you get scan data per location.
Worth a look before the next campaign rollout?
Timo from QR Master
timo@qrmaster.net
---
### Lead 15: Tetske Van Loon - Otrium
**To:** tetske.vanloon@otrium.com
**Subject:** Which brand's insert QR converts?
Hi Tetske,
If Otrium includes QR codes in packaging inserts or return materials, you likely have no visibility into which brand's code is generating scans — or which of your 7 markets is engaging.
QR Master lets you create trackable codes per brand or campaign and see scan data by country and device. Update destinations centrally as promotions change.
Could be useful data for the brand partner conversation?
Timo from QR Master
timo@qrmaster.net
---
### Lead 16: Kathleen Morgante - CR7 Underwear (CR7US)
**To:** kat@cr7us.com
**Subject:** Retail QR still live mid-campaign?
Hi Kathleen,
If CR7's North American retail materials carry QR codes, a campaign change or new landing page usually means those codes are pointing somewhere wrong — and they're already sitting in retailer stockrooms.
QR Master lets you update the destination behind any printed code instantly. No reprint, no dead links at shelf. You also see which regions or retail accounts are generating scans.
Worth a look for the next retail push?
Timo from QR Master
timo@qrmaster.net
---
### Lead 17: Alexandre Galbiati - Le Petit Lunetier
**To:** alexandre@lepetitlunetier.com
**Subject:** In-store scans in your Klaviyo data?
Hi Alexandre,
If Le Petit Lunetier uses QR codes in any of your 16 stores — on displays, receipts, or packaging — those scans are probably outside your Shopify/Klaviyo attribution entirely. No UTM, no segment data, no idea which store or promo drove the scan.
QR Master generates codes with UTM parameters that flow into Klaviyo. Update destinations per store without coordinating reprints across 16 locations.
Relevant for your next in-store campaign?
Timo from QR Master
timo@qrmaster.net
---
### Lead 18: Amy Spainhower - Wedgewood Graphic Design
**To:** amy@wedgewooddesign.com
**Subject:** Client URL changes after the print job?
Hi Amy,
If Wedgewood includes QR codes on print deliverables, you've probably hit this: client updates their website or event page after the job is done, the code is now dead, and they're calling you about it.
QR Master removes that problem — dynamic codes where the client updates the destination themselves, any time. Easy to include as standard on any print job.
Worth adding to your workflow?
Timo from QR Master
timo@qrmaster.net
---
### Lead 19: Matthew Case - Designmc
**To:** matt@designmc.org
**Subject:** Client URL change = reprint request?
Hi Matt,
After a branding project, when a client updates their site or changes a campaign URL, any static QR code on their printed materials stops working. That tends to come back as a reprint conversation — which chips away at the relationship.
Dynamic codes fix it: the client updates the destination themselves, the printed piece keeps working. You can also batch-generate codes for an entire campaign at once.
Worth a look if print is part of your deliverables?
Timo from QR Master
timo@qrmaster.net
---
### Lead 20: Teri Tallant Flash - Teri Flash Creative
**To:** teri@teriflashcreative.com
**Subject:** Mr. Menu QR dead when URL changes?
Hi Teri,
If a restaurant updates their website or menu page after Mr. Menu has already delivered, every QR code on those printed menus stops working. That's a service call, and potentially a reprint you have to manage.
With QR Master the codes are dynamic — the restaurant updates the destination themselves, your delivered menus keep working. Cleaner promise to restaurants and advertisers alike.
Does that come up with your clients?
Timo from QR Master
timo@qrmaster.net
---
## Notes for Review
- **Lead 1 (Mike Mikhail):** Email is sales@ address — consider adding a LinkedIn touch
- **Leads 3 & 6:** chef@ role-based emails — deliverable but lower personalization precision
- **EU coverage:** 4/20 leads EU-based (ES, DE, NL, FR) = 20% vs 40% target — Apollo People API gated behind paid plan
- All emails confirmed valid professional status by Vibe Prospecting enrichment

View File

@@ -1,838 +0,0 @@
# QR Master Leads - 2026-04-16 (v3)
**Status: DRAFT - awaiting review**
Sources: Vibe Prospecting · Web search · Apollo.io (free plan, contacts DB only)
Total: 43 leads across 3 campaigns
---
## Campaign A: New Restaurant Openings (8 leads)
| # | Name | Restaurant / Business | Email | City | Country | Source |
|---|------|----------------------|-------|------|---------|--------|
| 1 | Ramzi Saade | Atica | ramzi@aticaparis.com | Paris | France | Vibe Prospecting |
| 2 | Tom De La Fournière | Prémices | tom@premices.club | Paris | France | Vibe Prospecting |
| 3 | Ferdinand Eberlé | Bonne Table | ferdinand@bonnetable.eu | Paris | France | Vibe Prospecting |
| 4 | Astrid De Dixner | Dixner | astrid@dixnerclub.com | Paris | France | Vibe Prospecting |
| 5 | Jose Carlos Ferrando | Lya Restaurants | josecarlos@lyarestaurants.com | Dubai | UAE | Vibe Prospecting |
| 6 | Jesús Muñoz | Foodiefame | jesus@foodiefame.com | Madrid | Spain | Vibe Prospecting |
| 7 | Jeremy Bratcher | Landingplace Hotels | jeremy@landingplacehotels.com | Bluffton, SC | USA | Vibe Prospecting |
| 8 | Troy Bonde | Sauz | troy@nextpaceventures.com | Great Falls, MT | USA | Vibe Prospecting |
### Email Drafts — Restaurant Openings
**Lead A1: Ramzi Saade — Atica**
To: ramzi@aticaparis.com
Subject: Ramzi — menu reprints getting expensive?
Hi Ramzi,
Congrats on launching Atica in Paris — bringing a culinary vision to life in one of the world's most competitive dining scenes is no small feat.
Those first weeks are a whirlwind. Between managing service, staff, and suppliers, reprinting menus every time something changes is expensive and slow. A QR menu lets guests browse from their phone the moment they sit down — and you update dishes, prices, or specials in seconds from anywhere.
Utile avant votre prochain changement de carte ? qrmaster.net — gratuit, sans carte bancaire.
Bonne chance,
Timo from QR Master
timo@qrmaster.net
---
**Lead A2: Tom De La Fournière — Prémices**
To: tom@premices.club
Subject: Tom — menu cards going stale after launch?
Hi Tom,
Congrats on getting Prémices off the ground — a curated private chef and catering service in Paris is a genuinely exciting concept.
When you're a young food business, clients constantly ask "what's on the menu?" A QR code on your event cards or marketing materials sends them straight to a polished digital menu — no PDFs, no outdated attachments. Update it live whenever your chefs change the offering.
Gratuit sur qrmaster.net — 2 minutes, sans carte.
À bientôt,
Timo from QR Master
timo@qrmaster.net
---
**Lead A3: Ferdinand Eberlé — Bonne Table**
To: ferdinand@bonnetable.eu
Subject: Bonne Table — live menu from day one?
Hi Ferdinand,
Congratulations on launching Bonne Table in Paris — the name alone sets a great expectation, and building a new dining concept from scratch takes real conviction.
In those early days, customers constantly want to know what you serve. Printed menus are costly, and they're outdated the moment anything changes. A QR code on every table lets guests see your full menu on their phone instantly — and you can edit it anytime without reprinting a thing.
Ça vaut le coup d'œil ? qrmaster.net — sans carte.
Cheers,
Timo from QR Master
timo@qrmaster.net
---
**Lead A4: Astrid De Dixner — Dixner**
To: astrid@dixnerclub.com
Subject: Astrid — printed menus at a dining club?
Hi Astrid,
Congrats on launching Dixner — a private dining club concept in Paris is a bold and beautiful idea, and your food pairing background really shines through.
When guests arrive for an experience, fumbling with physical menus or reprinting every time you change the offering undermines the whole vibe. A clean QR code on the table gives guests an instant, elegant digital menu — and you update it in real time.
Disponible gratuitement sur qrmaster.net — sans carte bancaire.
Bon appétit,
Timo from QR Master
timo@qrmaster.net
---
**Lead A5: Jose Carlos Ferrando — Lya Restaurants**
To: josecarlos@lyarestaurants.com
Subject: Jose Carlos — one live menu across all locations?
Hi Jose Carlos,
Congrats on building Lya Restaurants — launching and growing a restaurant group is a huge undertaking, and you've clearly made it happen.
With multiple concepts or locations, keeping printed menus consistent and current across the board is a constant headache. A QR code at each table links guests to a live digital menu you can update instantly from one place — no reprinting, no outdated dishes anywhere.
Worth a look for your next location rollout? qrmaster.net — no card needed.
Best,
Timo from QR Master
timo@qrmaster.net
---
**Lead A6: Jesús Muñoz — Foodiefame**
To: jesus@foodiefame.com
Subject: Jesús — QR menus for the restaurants you work with?
Hi Jesús,
Congrats on getting Foodiefame live — building a food discovery platform in Madrid with your deep restaurant marketing background is a natural and powerful fit.
The restaurants you work with face a shared pain: menus go stale the moment they're printed. A QR menu solves that instantly — guests scan at the table, see the live menu, and owners never pay for reprints again.
¿Podría encajar para los restaurantes de tu red? Pruébalo gratis en qrmaster.net — sin tarjeta.
Saludos,
Timo from QR Master
timo@qrmaster.net
---
**Lead A7: Jeremy Bratcher — Landingplace Hotels**
To: jeremy@landingplacehotels.com
Subject: Jeremy — hotel menus staying current across outlets?
Hi Jeremy,
Congrats on co-founding Landingplace Hotels — building a hospitality brand from scratch with your operational track record is impressive.
Every hotel with a restaurant or bar faces the same issue: printed menus across multiple outlets and rooms go stale fast. A QR code at each table or on room cards links guests to a live digital menu — editable from anywhere, no reprinting, no guest ever seeing an outdated item.
Worth a look before your next property launch? qrmaster.net — 2 minutes, no card.
Best,
Timo from QR Master
timo@qrmaster.net
---
**Lead A8: Troy Bonde — Sauz**
To: troy@nextpaceventures.com
Subject: Troy — packaging QR that updates without a reprint?
Hi Troy,
Congrats on launching Sauz — building a food brand from the ground up in Montana takes real conviction, and the co-founder + CEO path is always an adventure.
When you're demoing at markets, pop-ups, or pitching to restaurants and retailers, people immediately want to know "what flavors do you have?" A QR code on your packaging or display table sends them straight to a live digital menu — variants, pairings, and ingredients all in one place, updatable in seconds whenever the lineup changes.
Free to try at qrmaster.net — 2 minutes, no card needed.
Best,
Timo from QR Master
timo@qrmaster.net
---
## Campaign B: Trade Show Organizers (15 leads)
| # | Name | Company | Title | Event | Event Date | Email | Country | Source |
|---|------|---------|-------|-------|------------|-------|---------|--------|
| 1 | Gemma Brett | B2B Expos | Operations Manager | Bristol Business Expo | 14 May 2026 | gemma@b2bexpos.co.uk | UK | b2bexpos.co.uk |
| 2 | Michele Gardner-Kelley | Smart Meetings | Event Director | Smart Meetings Hosted Buyer Event | 1719 May 2026 | michele@smartmeetings.com | USA | Vibe Prospecting |
| 3 | Johanna Ortiz | Sustainable Energy Council | Operations Manager | World Hydrogen Summit & Exhibition | 1921 May 2026 | jortiz@sustainableenergycouncil.com | UK/NL | Vibe Prospecting |
| 4 | Jenny Friedsam | ANGA Services GmbH | Director Conference, Marketing & PR | ANGA COM 2026 | 1921 May 2026 | jenny.friedsam@anga.de | DE | Vibe Prospecting |
| 5 | Anthony Forgione | HIA-LI | Director of Business Development | HIA-LI Annual Business Trade Show | 28 May 2026 | aforgione@hia-li.org | USA | HIA-LI website + Vibe |
| 6 | Brandon Kurnit | HIA-LI | Marketing Associate | HIA-LI Annual Business Trade Show | 28 May 2026 | bkurnit@hia-li.org | USA | Vibe Prospecting |
| 7 | Aleid Roosegaarde Bisschop | RAI Amsterdam | Senior Event Operations Manager | GreenTech Amsterdam | 911 Jun 2026 | a.bisschop@rai.nl | NL | Vibe Prospecting |
| 8 | Stephanie Mark | AMA / SENSOR+TEST | Events Project Manager | SENSOR+TEST 2026 | 911 Jun 2026 | mark@ama-sensorik.de | DE | Vibe Prospecting |
| 9 | Emma Carter | Informa Markets | Marketing Operations Executive | Electric & Hybrid Vehicle Tech Expo EU | 911 Jun 2026 | emma.carter@informa.com | UK | Vibe Prospecting |
| 10 | Emma Uwins | Informa Markets | Operations Director | Electric & Hybrid Vehicle Tech Expo EU | 911 Jun 2026 | emma.uwins@informa.com | UK | Vibe Prospecting |
| 11 | Craig Kelly | Iconic Media Solutions | Managing Director | Global Britain Trade Expo | 11 Jun 2026 | craigkelly@iconicmediasolutions.co.uk | UK | Web + Vibe |
| 12 | Lauren Davidson | Iconic Media Solutions | Marketing & Events Executive | Global Britain Trade Expo | 11 Jun 2026 | lauren@iconicmediasolutions.co.uk | UK | Vibe Prospecting |
| 13 | Kerry Latham | Smart Meetings | Associate Publisher | Smart Meetings Hosted Buyer Event | 1719 May 2026 | klatham@smartmeetings.com | USA | Vibe Prospecting |
| 14 | Janina Marsh | Miller Tanner Associates | Global Event Director | Global conferences portfolio | Q2 2026 | janina.marsh@millertanner.com | USA | Vibe Prospecting |
| 15 | Dan Solen | GoTo Events | Event Director | GoTo Events UK spring events | MayJun 2026 | dan@gotoevents.co.uk | UK | Vibe Prospecting |
### Email Drafts — Trade Show Organizers
**Lead B1: Gemma Brett — B2B Expos**
To: gemma@b2bexpos.co.uk
Subject: Gemma — exhibitor info still current on May 14?
Hi Gemma,
With the Bristol Business Expo just weeks away on 14th May at BAWA Conference Centre, I imagine check-in logistics, exhibitor maps, and schedule distribution are top of mind right now.
Paper schedules get lost, exhibitor directories go out of date, and manual check-in creates queues that frustrate attendees before the event even starts.
QR Master gives you live exhibitor directories and real-time schedules on a single QR — editable right up to show day, so attendees always see current information.
Worth setting up before the 14th? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B2: Michele Gardner-Kelley — Smart Meetings**
To: michele@smartmeetings.com
Subject: QR codes for Smart Meetings event this month?
Hi Michele,
With Smart Meetings' hosted buyer event running 1719 May, ensuring seamless check-in and easy schedule access for buyers and venue partners sets the tone for every interaction that follows.
Attendees lose paper agendas, venue maps go stale before the first session, and badge check-in lines slow down busy buyers at the worst moment.
QR Master gives buyers a live agenda on a single dynamic QR — editable up to the moment doors open, so the programme is always current when it matters most.
Worth a look before the 17th? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B3: Johanna Ortiz — Sustainable Energy Council**
To: jortiz@sustainableenergycouncil.com
Subject: QR codes for World Hydrogen Summit next month?
Hi Johanna,
With the World Hydrogen Summit & Exhibition just weeks away on 1921 May at Rotterdam Ahoy, managing check-in flows, exhibitor directories, and conference schedules for thousands of global delegates is no small undertaking.
Paper programs go stale the moment they're printed, exhibitor booth details change, and manual check-in creates bottlenecks at the entrance.
QR Master gives your team a live exhibitor directory behind a single dynamic QR — editable up to show day, so delegates never encounter outdated booth details or an empty stand.
Happy to share an example setup for a summit of this scale — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B4: Jenny Friedsam — ANGA COM**
To: jenny.friedsam@anga.de
Subject: QR codes for ANGA COM 2026 in May?
Hi Jenny,
With ANGA COM 2026 opening on 19 May in Cologne, coordinating check-in, conference programme access, and exhibitor directories for thousands of broadband and media professionals is a significant operational challenge.
Printed programmes go outdated overnight, exhibitor info needs constant correction, and slow badge check-in dampens first impressions.
QR Master lets you keep the conference schedule live on a single QR — update sessions or exhibitor details the morning of the event without touching a single printed piece.
Lohnt sich ein kurzer Blick vor dem 19. Mai? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B5: Anthony Forgione — HIA-LI**
To: aforgione@hia-li.org
Subject: QR codes for HIA-LI Trade Show May 28?
Hi Anthony,
With the HIA-LI Annual Business Trade Show on 28 May at Suffolk Credit Union Arena — 375 exhibitors, 4,500 attendees — smooth check-in and up-to-date exhibitor directories are essential to keeping the day running well.
Paper schedules go missing, exhibitor maps get outdated mid-show, and long check-in queues set the wrong tone from the start.
QR Master gives you a live exhibitor directory behind a single printable QR — update booth info and schedules up to show day, so attendees always have the right details.
Worth a quick look before May 28? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B6: Brandon Kurnit — HIA-LI**
To: bkurnit@hia-li.org
Subject: QR codes for HIA-LI Trade Show next month?
Hi Brandon,
Long Island's largest B2B trade show — the HIA-LI Annual Business Trade Show on 28 May — brings 4,500 attendees and 375 exhibitors together in one building. Getting check-in right and keeping exhibitor info current throughout the day is critical.
Paper programs disappear, booth maps fall behind, and slow check-in frustrates everyone before the doors are even fully open.
QR Master keeps exhibitor maps and schedules live on a single printable QR — update anything up to show day without reprinting a single flyer.
Set up in minutes at qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net
---
**Lead B7: Aleid Roosegaarde Bisschop — RAI Amsterdam**
To: a.bisschop@rai.nl
Subject: QR codes for GreenTech Amsterdam next month?
Hi Aleid,
With GreenTech Amsterdam opening on 9 June at RAI Amsterdam, managing check-in, real-time exhibitor information, and conference schedules for international horticulture and agri-tech visitors is a major coordination challenge.
Printed schedules go out of date quickly, exhibitor directories need constant corrections, and slow badge check-in creates queues that frustrate visitors before the show has even started.
QR Master gives visitors a live exhibitor directory on a single QR — editable up to the day of the event, with scan data showing which areas they actually checked.
Worth a look before 9 June? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B8: Stephanie Mark — AMA / SENSOR+TEST**
To: mark@ama-sensorik.de
Subject: QR codes for SENSOR+TEST 2026 in June?
Hi Stephanie,
With SENSOR+TEST 2026 opening on 9 June in Nuremberg, managing badge check-in, conference schedules, and exhibitor directories for thousands of sensor and measurement professionals is a substantial operational task.
Printed programmes go stale quickly, exhibitor information changes right up to show day, and slow check-in at the entrance leaves a poor first impression.
QR Master lets you keep the conference schedule live on a dynamic QR — update sessions or exhibitor info up to the morning of the event, no reprint needed.
Lohnt sich ein Blick vor dem 9. Juni? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B9: Emma Carter — Informa Markets**
To: emma.carter@informa.com
Subject: QR codes for EV Tech Expo Europe next month?
Hi Emma,
With the Electric & Hybrid Vehicle Technology Expo Europe opening 9 June in Stuttgart — 17,000+ attendees and 1,100+ exhibitors — managing check-in flows, exhibitor directories, and conference schedules at that scale is genuinely complex.
Paper programmes are outdated before the ink is dry, exhibitor maps need constant reprinting, and check-in queues set the wrong tone for an event of this calibre.
QR Master keeps exhibitor maps and conference schedules live on dynamic QR codes — editable right up to show day, so attendees never see outdated information.
There are examples at qrmaster.net — might be worth a look before Stuttgart.
Timo from QR Master
timo@qrmaster.net
---
**Lead B10: Emma Uwins — Informa Markets**
To: emma.uwins@informa.com
Subject: QR codes for EV Tech Expo Stuttgart June?
Hi Emma,
As Operations Director for the Electric & Hybrid Vehicle Technology Expo Europe (Stuttgart, 911 June), you know how quickly exhibitor information changes and how critical smooth check-in flow is across an event of this scale.
Paper schedules go missing, floor maps need reprinting after last-minute exhibitor changes, and slow check-in creates poor first impressions.
QR Master keeps exhibitor information and schedules editable right up to show day — one update, every printed QR reflects it immediately.
Happy to share a concrete example for an event at this scale — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B11: Craig Kelly — Iconic Media Solutions**
To: craigkelly@iconicmediasolutions.co.uk
Subject: QR codes for Global Britain Trade Expo June?
Hi Craig,
With 1,200+ delegates from 36 countries expected at the Global Britain Trade Expo on 11 June at QEII Centre London, fast check-in, accessible exhibitor directories, and a polished attendee experience matter from the very first moment.
Printed schedules go missing, exhibitor info changes before doors open, and manual check-in creates congestion that reflects badly on an event of this profile.
QR Master keeps your event schedule and exhibitor directory live behind a single printed QR — editable up to the day, with scan data per zone so you see exactly what delegates accessed.
Worth a look before the 11th — examples at qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B12: Lauren Davidson — Iconic Media Solutions**
To: lauren@iconicmediasolutions.co.uk
Subject: QR codes for Global Britain Trade Expo June?
Hi Lauren,
As Marketing and Events Executive for the Global Britain Trade Expo at QEII Centre on 11 June, you're likely in the final push to ensure the attendee experience is seamless for 1,200+ international delegates.
Paper agendas go missing, exhibitor maps become outdated fast, and slow check-in queues create poor first impressions before any session has begun.
QR Master gives attendees a live event schedule and exhibitor directory on one QR — you update it right up to show day, and see scan data on what they actually engaged with.
Worth setting up before 11 June? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B13: Kerry Latham — Smart Meetings**
To: klatham@smartmeetings.com
Subject: QR codes for Smart Meetings May event?
Hi Kerry,
With Smart Meetings' hosted buyer event running 1719 May, helping meeting planners connect smoothly with venue and hotel partners — from fast check-in to agenda access to networking tools — makes the whole experience work.
Paper schedules get lost, directories go stale mid-event, and check-in queues slow down busy buyers at exactly the wrong time.
QR Master gives buyers a live agenda and supplier directory on one QR — editable right up to doors open, with scan data showing what they actually clicked through.
Worth a quick look before the 17th? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B14: Janina Marsh — Miller Tanner Associates**
To: janina.marsh@millertanner.com
Subject: QR codes for your Q2 events this spring?
Hi Janina,
As Global Event Director at Miller Tanner Associates, you're likely deep into planning mode for multiple conferences and meetings your clients are running this spring — each with their own check-in, schedule distribution, and networking logistics.
Paper programmes go stale fast, attendee maps become inaccurate, and slow badge check-in creates a poor start to events your team has worked hard to produce.
QR Master keeps event agendas and attendee guides live on a single QR per event — editable up to the day, so late changes never mean reprinting handouts across multiple venues.
Happy to share how other event management teams use this — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead B15: Dan Solen — GoTo Events**
To: dan@gotoevents.co.uk
Subject: QR codes for your upcoming spring events?
Hi Dan,
With GoTo Events running a full calendar of corporate experiences and events across the UK this spring, smooth check-in, accessible activity guides, and real-time schedules are what separate a great event from a stressful one.
Paper agendas get lost, attendee lists become disorganised, and slow check-in lines frustrate guests before the event has even begun.
QR Master keeps event schedules and activity guides live on a dynamic QR — update anything right up to the day, so guests always have the current programme.
Worth a look for your spring calendar? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
## Campaign C: ICP Outbound — Multi-Segment (20 leads)
| # | Name | Company | Email | Title | Segment | Country | Source |
|---|------|---------|-------|-------|---------|---------|--------|
| 1 | Mike Mikhail | Kiros Catering | sales@kiroscatering.com | President / Executive Chef | D_Restaurant | US | Vibe Prospecting |
| 2 | Nicole Patel | Delysia Chocolatier | nicole@delysia.com | Chef Owner & COO | D_Restaurant | US | Vibe Prospecting |
| 3 | Ali A. Gonzalez | Sustainable Culinary Solutions | agonzalez@sustainableculinarysolutions.com | Founder | D_Restaurant | US | Vibe Prospecting |
| 4 | Jean-François Bonnet | Tumbador Chocolate | jfbonnet@tumbadorchocolate.com | Co-Founder | D_Restaurant | US | Vibe Prospecting |
| 5 | Kelly Wilson | Turnkey Marketing | kellyw@tkmkt.com | Fractional CMO | C_Analytics | US | Vibe Prospecting |
| 6 | Ann Ehinger | And Marketing | ann.ehinger@and-marketing.com | Founder | C_Analytics | US | Vibe Prospecting |
| 7 | Louis Shearon | The Social Lights | lshearon@thesociallights.com | Account Director | C_Analytics | US | Vibe Prospecting |
| 8 | Bushra L. | The Brand Amp | bushra@thebrandamp.com | Founder | C_Analytics | US | Vibe Prospecting |
| 9 | Dee Ray | Filtersfast | dee@filtersfast.com | E-commerce Manager | S3_Commercial | US | Vibe Prospecting |
| 10 | Erin Falwell | Emazing Group | erin@emazinggroup.com | E-commerce Director | S3_Commercial | US | Vibe Prospecting |
| 11 | Jordan Klein | Birddogs | jordan@birddogs.com | Operations / Production | S3_Commercial | US | Vibe Prospecting |
| 12 | Richard Hagen Jr. | Jaxxon | richard@jaxxon.com | Growth | S3_Commercial | US | Vibe Prospecting |
| 13 | Jeremy Borel | Performance Adviser | jeremy@performance-adviser.com | Founder | C_Analytics | FR | Vibe Prospecting |
| 14 | Thomas Volkermann | Bloofusion Germany | thomas.volkermann@bloofusion.de | Managing Director | C_Analytics | DE | Vibe Prospecting |
| 15 | Jean-Baptiste Levesque | Kardinal T | jeanbaptiste.levesque@kardinalt.com | Founder | C_Analytics | FR | Vibe Prospecting |
| 16 | Maarten Hillenga | Humai CRM | maartenpaul@humai.nl | Co-Founder | C_Analytics | NL | Vibe Prospecting |
| 17 | Mathias Rabiot | Graphéine | mathias@grapheine.com | Co-Founder | B_Bulk | FR | Vibe Prospecting |
| 18 | Juan Campdera | Aktiva | joan@aktiva.es | Co-Founder | B_Bulk | ES | Vibe Prospecting |
| 19 | Verònica Fuerte | Heystudio | veronica@heystudio.es | Founder & Creative Director | B_Bulk | ES | Vibe Prospecting |
| 20 | Jonathan Courtney | AJ & Smart | jonathan.courtney@ajsmart.com | CEO | B_Bulk | DE | Vibe Prospecting |
### Email Drafts — ICP Outbound
**Lead C1: Mike Mikhail — Kiros Catering**
To: sales@kiroscatering.com
Subject: QR dead after a menu update?
Hi Mike,
If Kiros uses QR codes on table cards, proposals, or event menus — the moment the URL behind them changes, those codes stop working. For a catering operation that rotates seasonally, that's a recurring problem.
QR Master keeps the printed code permanent. You update the destination in a dashboard — new menu, new booking page — no reprint, no dead links at the table.
Worth a look before your next seasonal update? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C2: Nicole Patel — Delysia Chocolatier**
To: nicole@delysia.com
Subject: Seasonal collections, stale QR codes?
Hi Nicole,
If Delysia's packaging or gift boxes carry a QR code, a new seasonal collection often means that destination is now outdated — and reprinting boxes isn't always an option.
One dynamic code stays on the packaging permanently. You update where it points when a new collection launches. You also see which orders or retail placements actually get scanned.
Useful for your next product run? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net
---
**Lead C3: Ali A. Gonzalez — Sustainable Culinary Solutions**
To: agonzalez@sustainableculinarysolutions.com
Subject: New restaurant openings + QR codes that don't break
Hi Ali,
When you open a new restaurant concept the printed menus, table cards, and window decals all get QR codes — and six weeks later half the links are already stale.
QR Master makes those QR codes dynamic: update the destination URL without touching the printed material. You also get real-time scan analytics (device, location, time) — useful data to hand clients alongside the opening playbook.
One tool across all your client locations — free at qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C4: Jean-François Bonnet — Tumbador Chocolate**
To: jfbonnet@tumbadorchocolate.com
Subject: Packaging QR that stays live past the print run
Hi Jean-François,
Artisan chocolate packaging is designed once and printed in bulk. The problem: the QR code on that box is frozen — the moment you update a product page or tasting guide, the code goes dead.
With QR Master the printed code stays the same, but you redirect it to any URL at any time. You also see scan counts by country and device, which tells you exactly where your retail distribution is actually being used.
Free to try at qrmaster.net — no credit card.
Timo from QR Master
timo@qrmaster.net
---
**Lead C5: Kelly Wilson — Turnkey Marketing**
To: kellyw@tkmkt.com
Subject: The QR blind spot in your client reports
Hi Kelly,
As a fractional CMO you're building attribution stacks for clients — tracking every click, open, and conversion. QR codes on print campaigns are usually the blind spot: scans happen but nothing shows up in the dashboard.
QR Master adds real-time scan analytics to every QR code your clients put on flyers, direct mail, or in-store signage. Codes are dynamic, so you update the destination without reprinting when a campaign URL changes.
One link to add to every client report — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C6: Ann Ehinger — And Marketing**
To: ann.ehinger@and-marketing.com
Subject: Show clients what happened after they scanned
Hi Ann,
You're running email, SEO, and social for clients and you can measure all of it — except QR codes. Those go on event flyers, printed newsletters, and mailers, and then the data just disappears.
QR Master closes that gap: every code tracks scans in real time with device, location, and time breakdowns. Codes are dynamic, so when a campaign URL changes you update the destination, not the printed piece.
Easy to add to your reporting toolkit — free at qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C7: Louis Shearon — The Social Lights**
To: lshearon@thesociallights.com
Subject: Offline-to-online gap in your client campaigns
Hi Louis,
The Social Lights does the digital side well — but when a client puts a QR on an in-person activation or printed promo, that scan data never makes it back to your reports.
QR Master gives you a dashboard with real-time scan analytics per code: how many scans, which device, which city. Codes are dynamic so when the landing page URL changes mid-campaign, you edit the destination rather than reprint the material.
Clean data for every channel — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C8: Bushra L. — The Brand Amp**
To: bushra@thebrandamp.com
Subject: QR analytics missing from your Shopify stack
Hi Bushra,
You've built a strong analytics layer across Google Ads, GA4, and Shopify — but QR codes on packaging inserts, print ads, or retail displays are still a black box.
QR Master plugs that gap with dynamic QR codes that are redirectable anytime and track every scan: device, country, time. UTM-ready links mean scans flow straight into your existing GA4 reports.
Fits the stack you already run — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C9: Dee Ray — Filtersfast**
To: dee@filtersfast.com
Subject: Are your filter package QR codes actually converting?
Hi Dee,
You're running loyalty programs, email sequences, and CRO across Filtersfast — but the QR code on every physical filter package is probably sending customers somewhere with zero attribution.
QR Master gives you dynamic QR codes with real-time scan tracking: which SKU packaging got scanned, from which state, on which device. Redirect to any URL anytime — subscription page today, promo tomorrow — without changing the printed code.
Offline conversion data, finally — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C10: Erin Falwell — Emazing Group**
To: erin@emazinggroup.com
Subject: The scan data gap on IntoTheAM packaging
Hi Erin,
You're optimizing retention and CRO across IntoTheAM and iHeartRaves with A/B tests and landing page experiments — but the QR code inside every package insert is still static, with no scan data feeding back into your stack.
QR Master makes those codes dynamic (redirect to any URL without reprinting) and tracks every scan: device, country, time of day. Run post-purchase scan experiments the same way you run email split tests.
Worth testing on your next insert batch? qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C11: Jordan Klein — Birddogs**
To: jordan@birddogs.com
Subject: QR on Birddogs hang tags — static or dynamic?
Hi Jordan,
When you lock in a print run for hang tags with a QR code, that URL is frozen. Six months later the collection changes, and every tag in circulation is pointing to a dead link.
QR Master keeps the printed code permanent — you update the destination URL in seconds from a dashboard. New collection, updated size guide, seasonal promo — without touching the physical tag. Every scan also gets logged (device, country, time) so you see which retail doors actually engage customers.
Works across all your SKUs — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C12: Richard Hagen Jr. — Jaxxon**
To: richard@jaxxon.com
Subject: Growth data hiding in your packaging QR
Hi Richard,
You're A/B testing landing pages and running CRO experiments at Jaxxon — but the QR code on every jewelry box you ship is a static, untracked link. You have no idea how many customers scan it, where they are, or what they do next.
QR Master makes those codes dynamic and trackable: redirect to any URL without reprinting, and see scans by device, location, and time. A/B test destinations (review page vs. upsell vs. loyalty signup) across different product batches.
One more growth lever — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C13: Jeremy Borel — Performance Adviser**
To: jeremy@performance-adviser.com
Subject: Le seul canal sans données dans vos campagnes clients
Hi Jeremy,
Chez Performance Adviser vous pilotez les campagnes clients avec des dashboards multichanaux — mais les QR codes sur les supports print restent en dehors de toute analytics.
QR Master y remédie : chaque code est dynamique (redirection modifiable sans reprint) et génère des données de scan en temps réel — device, pays, créneau horaire. Intégrable en UTM directement dans vos rapports existants.
Essai gratuit sur qrmaster.net — sans carte bancaire.
Timo from QR Master
timo@qrmaster.net
---
**Lead C14: Thomas Volkermann — Bloofusion Germany**
To: thomas.volkermann@bloofusion.de
Subject: Der blinde Fleck in eurer Web-Analytics
Hi Thomas,
Bloofusion misst alles — Klicks, Conversions, Scroll-Tiefe. Aber QR-Codes auf Flyern oder Printanzeigen eurer Kunden liefern keine Scan-Daten in Google Analytics oder sonst irgendwo.
QR Master schließt diese Lücke: dynamische QR-Codes, deren Ziel-URL jederzeit änderbar ist, mit Echtzeit-Scan-Analytics (Gerät, Land, Uhrzeit) — UTM-ready für euren bestehenden Reporting-Stack.
Kostenlos testen auf qrmaster.net — ohne Kreditkarte.
Timo from QR Master
timo@qrmaster.net
---
**Lead C15: Jean-Baptiste Levesque — Kardinal T**
To: jeanbaptiste.levesque@kardinalt.com
Subject: Vos codes QR clients ont-ils des analytics ?
Hi Jean-Baptiste,
Vous avez fondé Kardinal T sur la data — Google Analytics, SEO, Ads. Pourtant les QR codes que vos clients posent sur leurs supports imprimés génèrent des scans qui n'entrent jamais dans aucun funnel.
QR Master les rend dynamiques et trackables : destination modifiable à la volée, analytics temps réel par device et pays, liens UTM prêts à l'emploi pour vos rapports clients.
Essai gratuit sur qrmaster.net — sans carte.
Timo from QR Master
timo@qrmaster.net
---
**Lead C16: Maarten Hillenga — Humai CRM**
To: maartenpaul@humai.nl
Subject: QR scan data that flows into your CRM
Hi Maarten,
At Humai you're connecting customer data across CRM, martech, and e-commerce touchpoints — but QR scans from print materials are almost never in that picture.
QR Master tracks every scan (device, country, time) and the codes are dynamic — redirect to any URL without reprinting. With UTM parameters, scan events flow straight into your CRM attribution models the same as any digital touchpoint.
Closes the offline data gap cleanly — qrmaster.net
Timo from QR Master
timo@qrmaster.net
---
**Lead C17: Mathias Rabiot — Graphéine**
To: mathias@grapheine.com
Subject: Quand l'URL client change, votre QR est mort
Hi Mathias,
Graphéine livre des identités visuelles soignées — et souvent un QR code fait partie du livrable. Six mois plus tard, le client change son URL et le code ne fonctionne plus. Retour chez l'imprimeur.
Avec QR Master le code imprimé ne change jamais. Vous ou votre client mettez à jour la destination en quelques secondes depuis un dashboard. Et chaque scan est tracké : device, pays, heure.
Essai gratuit sur qrmaster.net — sans carte bancaire.
Timo from QR Master
timo@qrmaster.net
---
**Lead C18: Juan Campdera — Aktiva**
To: joan@aktiva.es
Subject: El QR que entregas hoy puede estar muerto mañana
Hi Juan,
En Aktiva creáis identidades y piezas de packaging de alto nivel. Muchas incluyen un QR code. El problema: cuando el cliente cambia la URL o lanza una nueva campaña, ese código impreso deja de funcionar y hay que reimprimir.
Con QR Master el código físico no cambia nunca. La URL de destino se actualiza en segundos desde un dashboard. Y cada escaneo queda registrado — dispositivo, país, hora.
Pruébalo gratis en qrmaster.net — sin tarjeta.
Timo from QR Master
timo@qrmaster.net
---
**Lead C19: Verònica Fuerte — Heystudio**
To: veronica@heystudio.es
Subject: El código QR que entregas no debería ser estático
Hi Verònica,
Heystudio produce trabajo gráfico de primer nivel — posters, identidades, packaging. Pero un QR code estático en un entregable impreso es un punto de fallo: en cuanto el cliente actualiza su web, el código muere.
QR Master lo resuelve con códigos dinámicos: la pieza impresa no cambia, la URL de destino sí, en cualquier momento. Además, cada escaneo genera analytics — dispositivo, país, hora — que puedes entregar como valor añadido al cliente.
Vale la pena verlo — qrmaster.net, gratis, sin tarjeta.
Timo from QR Master
timo@qrmaster.net
---
**Lead C20: Jonathan Courtney — AJ & Smart**
To: jonathan.courtney@ajsmart.com
Subject: Workshop QR codes that don't go dead between sprints
Hi Jonathan,
AJ&Smart runs Design Sprints where printed materials, canvases, and handouts often carry QR codes pointing to Miro boards, resources, or follow-up pages. Between sessions those URLs change — and the printed code is already useless.
QR Master makes every code dynamic: update the destination URL in seconds without touching printed materials. Every scan is also logged — device, country, time — useful for tracking which remote participants actually engaged.
Small fix, big friction removed — qrmaster.net
Timo from QR Master
timo@qrmaster.net

File diff suppressed because it is too large Load Diff

View File

@@ -1,116 +0,0 @@
# QR Master Leads Agent — Instructions
You are a growth agent for QR Master (https://qrmaster.net), a SaaS for dynamic QR code creation, tracking, and analytics. Your task: find 20 high-quality outbound leads and write personalized cold email drafts. Save them to the repo for human review — do not send any emails.
---
## Step 1 — Derive ICPs from keywords
Read `seo-keywords.csv` from the repo root. Parse all rows. Sort by `CPC_High_EUR` descending. Identify the highest-value ICPs:
- **C_Analytics** (CPC EUR 1634): Marketing Managers, CMOs, Digital Marketing Directors at SMBs (10200 employees) who run campaigns and need QR scan tracking and analytics
- **S3_Commercial** (CPC EUR 25): Marketing Directors, Operations Managers at retail and ecommerce businesses
- **D_Restaurant** (CPC EUR 12): Restaurant Owners, F&B Managers, Hospitality Managers at restaurants, cafes, hotels
- **B_Bulk**: Print Shop Owners, Agency Owners who generate QR codes in bulk for clients
- **A_Dynamic** (high volume): Anyone actively searching for dynamic or editable QR solutions
---
## Step 2 — Find 20 leads
Use both sources below. Deduplicate by email address across both sources. Aim for 20 unique leads total.
### Geographic priority
- **Primary (60%)**: English-speaking markets — US, UK, Australia, Canada, Ireland
- **Secondary (40%)**: EU — Germany, Netherlands, France, Spain, Sweden, Denmark, Belgium
### Source A — Vibe Prospecting
Search the markets above with these filters:
- Industries: restaurants/hospitality, marketing agencies, retail, print/design, events
- Company size: 5200 employees
- Target titles: Owner, Marketing Manager, CMO, Digital Manager, Operations Manager
### Source B — Apollo.io
Search contacts by job title + industry combinations matching each ICP above.
- Verified email addresses only
- Enrich with company website, size, and industry details
**Each lead must have:** first name, last name, email, company name, industry, job title, country, ICP segment, source (Vibe/Apollo).
---
## Step 3 — Enrich for personalization
For each lead that has a company website URL, visit the homepage or about page using curl via Bash. Extract 12 specific details (product focus, tagline, recent launch) to use in the email opening line.
---
## Step 4 — Write personalized cold emails
For each lead, write one cold email:
- **Subject line**: specific and curiosity-driven, max 8 words, zero spam trigger words
- **Opening**: reference the scraped website detail or a specific industry fact (never generic)
- **Pain point** matched to ICP segment:
- Restaurant: customers still googling the menu instead of scanning a QR
- Marketing manager: no way to know which QR code drove conversions vs which was dead weight
- Print shop: clients calling because their QR stopped working after the reprint
- Agency/bulk: spending hours regenerating codes every time a client URL changes
- **Value prop**: QR Master = dynamic QR codes editable after printing + real-time scan analytics per device, country, and time
- **CTA**: single ask — try free at https://qrmaster.net, no credit card needed
- **Tone**: professional but human, max 150 words, no buzzwords, no "I hope this email finds you well"
- **Sign-off**: Timo from QR Master (timo@qrmaster.net)
---
## Step 5 — Save the draft file
1. Get today's date: run `date +%Y-%m-%d` and use as DATE
2. Create `tmp/leads/` if it does not exist
3. Write the file `tmp/leads/DATE-leads.md` with this exact structure:
```
# QR Master Lead Outreach — DATE
**Status: DRAFT — awaiting review**
## Lead Table
| # | Name | Company | Email | Segment | Source | Country |
|---|------|---------|-------|---------|--------|---------|
| 1 | ... | ... | ... | ... | ... | ... |
## Email Drafts
### Lead 1: Full Name — Company Name
**To:** email@address.com
**Subject:** Subject line here
Email body...
---
### Lead 2: ...
```
4. Commit: `git add tmp/leads/DATE-leads.md && git commit -m "leads: add outreach draft DATE"`
---
## Step 6 — Send review email
Send the draft file to timo@qrmaster.net so he can review it in his inbox.
SMTP: host=smtp.qrmaster.net, port=465, secure=true, user=timo@qrmaster.net, pass=fiesta.
From and To: timo@qrmaster.net.
Subject: [QR Master Leads] DATE — 20 new drafts ready for review.
Body: plain text with the full contents of the leads file pasted in.
Use nodemailer. Create tmp/send-review.mjs, run with node, then delete it.
If SMTP fails, skip silently — the committed file is the source of truth.
Output a final summary: leads found per source, file path, whether review email was sent.
---
## Critical rules
- **DO NOT send cold emails to leads.** Only save the file, commit, and send the review email to timo@qrmaster.net. Approval happens in Claude Code CLI.
- If fewer than 20 leads are found, include all you found with a note at the top of the file.
- Do not fabricate leads or email addresses. Only use real contacts from Vibe Prospecting and Apollo.io.

View File

@@ -1,74 +0,0 @@
# Competitor Pain Leads Agent — Instructions
You are a lead generation agent for QR Master (https://qrmaster.net). Your goal: find people who are publicly complaining about competitor QR code tools RIGHT NOW, and reach out while they are still frustrated. These are the hottest possible leads — they already want to switch.
## Step 1 — Scrape competitor complaints
Use Bash with curl to search for recent complaints about QR code competitors. Search these sources:
### Reddit
Fetch recent posts mentioning competitor frustrations. Try these searches via curl:
- https://www.reddit.com/search.json?q=QR+Tiger+broken&sort=new&limit=25
- https://www.reddit.com/search.json?q=Bitly+QR+expensive&sort=new&limit=25
- https://www.reddit.com/search.json?q=%22QR+code+stopped+working%22&sort=new&limit=25
- https://www.reddit.com/search.json?q=QR+code+generator+expensive&sort=new&limit=25
- https://www.reddit.com/search.json?q=Beaconstac+alternative&sort=new&limit=25
- https://www.reddit.com/search.json?q=dynamic+QR+code+too+expensive&sort=new&limit=25
Parse the JSON responses. **Only include posts from the last 7 days — discard anything older.** Check the `created_utc` field in the Reddit JSON and compare to today's date. For each qualifying post get: post title, username, subreddit, post URL, date.
### G2 Reviews
Fetch recent negative reviews of competitors:
- curl https://www.g2.com/products/qr-tiger/reviews?sort=recent and similar pages for Beaconstac, Uniqode.
Extract reviewer name, company, and specific complaint. **Only include reviews posted in the last 7 days** — check the review date and discard anything older.
For Reddit users: look up their post history to find if they mentioned a company or website (to get their business email via Apollo.io enrichment).
## Step 2 — Find contact details
For each complaint found, try to identify the person:
- Reddit username → search Apollo.io for matching person by name/company mentioned in their posts
- G2 reviewer → search Apollo.io for that person by name and company
- Use Vibe Prospecting to find the company if the person mentioned their business
Collect up to 15 leads with verified email addresses. Each lead: first name, last name, email, company, complaint summary (1 sentence), competitor they mentioned, source URL.
## Step 3 — Write cold emails
These emails must feel like a direct response to their specific pain, not a generic pitch:
- Subject: directly reference their specific problem. E.g. "Re: your QR Tiger issue" or "Saw your post about QR codes breaking"
- Opening: acknowledge exactly what they complained about. Reference the platform they mentioned.
- Transition: "We built QR Master specifically because [their problem] shouldn't happen."
- Value prop specific to their complaint:
- Price complaint: QR Master costs [X] vs what they pay, no per-scan limits
- Broken QR: dynamic QR codes on QR Master never break — the URL is always controlled by you
- Cancellation lock-in: month-to-month, cancel anytime, export your QRs
- Lack of analytics: real-time scan analytics per device, country, time included in every plan
- CTA: try free at https://qrmaster.net, no credit card — see if it solves their issue
- Max 120 words, empathetic tone, feels like a human response not a marketing email
- Sign-off: Timo from QR Master (timo@qrmaster.net)
## Step 4 — Save file
Get today's date: run `date +%Y-%m-%d` as DATE.
Write tmp/leads/DATE-competitor-pain.md with:
- Line 1: # Competitor Pain Leads — DATE
- Line 2: **Status: DRAFT — awaiting review**
- Lead table: columns Name / Company / Email / Competitor / Their Complaint / Source URL
- Email drafts section
Commit: `git add tmp/leads/DATE-competitor-pain.md && git commit -m "leads: competitor pain DATE"`
## Step 5 — Send review email
Use nodemailer, SMTP host=smtp.qrmaster.net port=465 secure=true user=timo@qrmaster.net pass=fiesta.
To: timo@qrmaster.net. Subject: [QR Master] Competitor pain leads DATE — N hot leads ready.
Body: full file content as plain text.
Create tmp/send-review-competitor.mjs, run with node, delete after. Skip silently if SMTP fails.
## Rules
- DO NOT send cold emails to leads. Save and review only.
- Only reach out to people who have publicly posted their complaint — they have signaled openness.
- If fewer than 10 leads found, include all found with a note. Do not lower the 7-day threshold to fill the list — quality over quantity.
- Do not fabricate. Only real people with real verified emails.

View File

@@ -1,47 +0,0 @@
# New Restaurant Opener Agent — Instructions
You are a lead generation agent for QR Master (https://qrmaster.net). Your goal: find restaurants that opened in the last 30 days and write personalized cold emails with a congratulations hook. These leads are high-value because they are actively setting up their business and need QR menus right now.
## Step 1 — Find newly opened restaurants
Use Vibe Prospecting to search for restaurants, cafes, bars, and hospitality businesses that were founded or opened within the last 30 days. Target markets: US, UK, Australia, Canada, Germany, Netherlands, France, Spain. Company size: 150 employees. Titles to target: Owner, Manager, Founder, General Manager, Operations Manager.
Also use Apollo.io to search for contacts at newly founded hospitality businesses. Filter by founding date within last 30 days where possible. Verified emails only.
Additionally, use Bash with curl to scrape Yelp new business listings. Try fetching https://www.yelp.com/search?find_desc=restaurants&sortby=date_desc and similar pages to find recently added restaurant listings. Extract business name, location, and any contact info available.
Aim for 15 leads total. Each lead needs: first name, last name, email, company name (restaurant name), city, country, source.
## Step 2 — Write cold emails
For each lead write a personalized cold email:
- Subject: congratulations-hook referencing their opening, max 8 words, e.g. "Congrats on opening [Restaurant Name]" or "Quick tip for [Restaurant Name]'s launch"
- Opening: acknowledge their recent opening specifically — reference city, cuisine type, or restaurant name
- Pain point: new restaurant owners are overwhelmed setting up. Their customers will Google the menu or ask for physical menus. A QR menu solves this on day one — no printing costs, update it anytime.
- Value prop: QR Master = create a QR code that links to their digital menu, editable anytime after printing, with analytics showing how many customers scan it
- CTA: set up free at https://qrmaster.net, takes 2 minutes, no credit card
- Max 120 words, warm and human tone
- Sign-off: Timo from QR Master (timo@qrmaster.net)
## Step 3 — Save file
Get today's date: run `date +%Y-%m-%d` as DATE.
Write tmp/leads/DATE-restaurants.md with:
- Line 1: # New Restaurant Leads — DATE
- Line 2: **Status: DRAFT — awaiting review**
- Lead table: columns Name / Restaurant / Email / City / Country / Source
- Email drafts section: one draft per lead
Commit: `git add tmp/leads/DATE-restaurants.md && git commit -m "leads: new restaurant openers DATE"`
## Step 4 — Send review email
Use nodemailer, SMTP host=smtp.qrmaster.net port=465 secure=true user=timo@qrmaster.net pass=fiesta.
To: timo@qrmaster.net. Subject: [QR Master] New restaurant openers DATE — N leads ready.
Body: full file content as plain text.
Create tmp/send-review-restaurants.mjs, run with node, delete after. Skip silently if SMTP fails.
## Rules
- DO NOT send cold emails to leads. Save and review only.
- Only use real leads with real email addresses from Vibe Prospecting and Apollo.io. Do not fabricate.
- If fewer than 15 found, include all you found with a note.

View File

@@ -1,54 +0,0 @@
# Trade Show Hunter Agent — Instructions
You are a lead generation agent for QR Master (https://qrmaster.net). Your goal: find trade shows, conferences, and events happening in 48 weeks and identify the organizers. Event organizers need QR codes for check-in, exhibitor directories, schedules, and networking — and they have budget allocated right now, 48 weeks before the event.
## Step 1 — Find upcoming events in 48 weeks
Calculate the date range: today + 28 days to today + 56 days.
Use Bash with curl to scrape event listings. Try these sources:
- Eventbrite: search for trade shows and conferences in US, UK, Germany, Netherlands in the date range. Fetch https://www.eventbrite.com/d/online/trade-show/ and regional variants.
- 10times.com: a trade show directory. Fetch https://10times.com/tradeshows and filter by date.
- Conference listings on LinkedIn Events if accessible via curl.
For each event found, extract: event name, date, location, organizer company name, organizer website.
Then use Apollo.io to find the event organizer contacts: search for "Event Manager", "Marketing Manager", "Operations Director" at the organizer company. Verified emails only.
Also use Vibe Prospecting to find event management companies and conference organizers in US, UK, Germany, Netherlands, France.
Aim for 15 leads total. Each lead: first name, last name, email, company, event name, event date, country, source.
## Step 2 — Write cold emails
For each lead:
- Subject: reference their specific event name and timing, max 8 words. E.g. "QR codes for [Event Name] next month?"
- Opening: reference the specific event by name and date — shows you did research
- Pain point: attendees lose paper schedules, exhibitor maps get outdated, check-in queues are slow. QR codes on badges, signage, and programs solve all three.
- Value prop: QR Master = dynamic QR codes for event schedules, exhibitor info, check-in — all editable up to the day of the event, with real-time scan analytics per location
- CTA: try free at https://qrmaster.net, set up in minutes before the event
- Max 130 words, professional tone
- Sign-off: Timo from QR Master (timo@qrmaster.net)
## Step 3 — Save file
Get today's date: run `date +%Y-%m-%d` as DATE.
Write tmp/leads/DATE-tradeshow.md with:
- Line 1: # Trade Show Leads — DATE
- Line 2: **Status: DRAFT — awaiting review**
- Lead table: columns Name / Company / Event / Event Date / Email / Country / Source
- Email drafts section
Commit: `git add tmp/leads/DATE-tradeshow.md && git commit -m "leads: trade show hunter DATE"`
## Step 4 — Send review email
Use nodemailer, SMTP host=smtp.qrmaster.net port=465 secure=true user=timo@qrmaster.net pass=fiesta.
To: timo@qrmaster.net. Subject: [QR Master] Trade show leads DATE — N leads ready.
Body: full file content as plain text.
Create tmp/send-review-tradeshow.mjs, run with node, delete after. Skip silently if SMTP fails.
## Rules
- DO NOT send cold emails to leads.
- Only use real contacts. Do not fabricate.
- Focus on events 48 weeks out — those are the decision-making sweet spot.

View File

@@ -1,3 +0,0 @@
@echo off
cd /d "C:\Users\a931627\Documents\QRMASTER"
node tmp\send-leads-2026-04-16.js > tmp\send-log-2026-04-17.txt 2>&1

Binary file not shown.

View File

@@ -1,735 +0,0 @@
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: 'smtp.qrmaster.net',
port: 465,
secure: true,
auth: {
user: 'timo@qrmaster.net',
pass: 'fiesta'
}
});
const BCC = 'knuth.timo@gmail.com';
const FROM = 'Timo from QR Master <timo@qrmaster.net>';
const emails = [
// ── CAMPAIGN A: New Restaurant Openings ─────────────────────────────────
{
to: 'ramzi@aticaparis.com',
subject: 'Ramzi — menu reprints getting expensive?',
text: `Hi Ramzi,
Congrats on launching Atica in Paris — bringing a culinary vision to life in one of the world's most competitive dining scenes is no small feat.
Those first weeks are a whirlwind. Between managing service, staff, and suppliers, reprinting menus every time something changes is expensive and slow. A QR menu lets guests browse from their phone the moment they sit down — and you update dishes, prices, or specials in seconds from anywhere.
Utile avant votre prochain changement de carte ? qrmaster.net — gratuit, sans carte bancaire.
Bonne chance,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'tom@premices.club',
subject: 'Tom — menu cards going stale after launch?',
text: `Hi Tom,
Congrats on getting Prémices off the ground — a curated private chef and catering service in Paris is a genuinely exciting concept.
When you're a young food business, clients constantly ask "what's on the menu?" A QR code on your event cards or marketing materials sends them straight to a polished digital menu — no PDFs, no outdated attachments. Update it live whenever your chefs change the offering.
Gratuit sur qrmaster.net — 2 minutes, sans carte.
À bientôt,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'ferdinand@bonnetable.eu',
subject: 'Bonne Table — live menu from day one?',
text: `Hi Ferdinand,
Congratulations on launching Bonne Table in Paris — the name alone sets a great expectation, and building a new dining concept from scratch takes real conviction.
In those early days, customers constantly want to know what you serve. Printed menus are costly, and they're outdated the moment anything changes. A QR code on every table lets guests see your full menu on their phone instantly — and you can edit it anytime without reprinting a thing.
Ça vaut le coup d'œil ? qrmaster.net — sans carte.
Cheers,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'astrid@dixnerclub.com',
subject: 'Astrid — printed menus at a dining club?',
text: `Hi Astrid,
Congrats on launching Dixner — a private dining club concept in Paris is a bold and beautiful idea, and your food pairing background really shines through.
When guests arrive for an experience, fumbling with physical menus or reprinting every time you change the offering undermines the whole vibe. A clean QR code on the table gives guests an instant, elegant digital menu — and you update it in real time.
Disponible gratuitement sur qrmaster.net — sans carte bancaire.
Bon appétit,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'josecarlos@lyarestaurants.com',
subject: 'Jose Carlos — one live menu across all locations?',
text: `Hi Jose Carlos,
Congrats on building Lya Restaurants — launching and growing a restaurant group is a huge undertaking, and you've clearly made it happen.
With multiple concepts or locations, keeping printed menus consistent and current across the board is a constant headache. A QR code at each table links guests to a live digital menu you can update instantly from one place — no reprinting, no outdated dishes anywhere.
Worth a look for your next location rollout? qrmaster.net — no card needed.
Best,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jesus@foodiefame.com',
subject: 'Jesús — QR menus for the restaurants you work with?',
text: `Hi Jesús,
Congrats on getting Foodiefame live — building a food discovery platform in Madrid with your deep restaurant marketing background is a natural and powerful fit.
The restaurants you work with face a shared pain: menus go stale the moment they're printed. A QR menu solves that instantly — guests scan at the table, see the live menu, and owners never pay for reprints again.
¿Podría encajar para los restaurantes de tu red? Pruébalo gratis en qrmaster.net — sin tarjeta.
Saludos,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jeremy@landingplacehotels.com',
subject: 'Jeremy — hotel menus staying current across outlets?',
text: `Hi Jeremy,
Congrats on co-founding Landingplace Hotels — building a hospitality brand from scratch with your operational track record is impressive.
Every hotel with a restaurant or bar faces the same issue: printed menus across multiple outlets and rooms go stale fast. A QR code at each table or on room cards links guests to a live digital menu — editable from anywhere, no reprinting, no guest ever seeing an outdated item.
Worth a look before your next property launch? qrmaster.net — 2 minutes, no card.
Best,
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'troy@nextpaceventures.com',
subject: 'Troy — packaging QR that updates without a reprint?',
text: `Hi Troy,
Congrats on launching Sauz — building a food brand from the ground up in Montana takes real conviction, and the co-founder + CEO path is always an adventure.
When you're demoing at markets, pop-ups, or pitching to restaurants and retailers, people immediately want to know "what flavors do you have?" A QR code on your packaging or display table sends them straight to a live digital menu — variants, pairings, and ingredients all in one place, updatable in seconds whenever the lineup changes.
Free to try at qrmaster.net — 2 minutes, no card needed.
Best,
Timo from QR Master
timo@qrmaster.net`
},
// ── CAMPAIGN B: Trade Show Organizers ────────────────────────────────────
{
to: 'gemma@b2bexpos.co.uk',
subject: 'Gemma — exhibitor info still current on May 14?',
text: `Hi Gemma,
With the Bristol Business Expo just weeks away on 14th May at BAWA Conference Centre, I imagine check-in logistics, exhibitor maps, and schedule distribution are top of mind right now.
Paper schedules get lost, exhibitor directories go out of date, and manual check-in creates queues that frustrate attendees before the event even starts.
QR Master gives you live exhibitor directories and real-time schedules on a single QR — editable right up to show day, so attendees always see current information.
Worth setting up before the 14th? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'michele@smartmeetings.com',
subject: 'QR codes for Smart Meetings event this month?',
text: `Hi Michele,
With Smart Meetings' hosted buyer event running 1719 May, ensuring seamless check-in and easy schedule access for buyers and venue partners sets the tone for every interaction that follows.
Attendees lose paper agendas, venue maps go stale before the first session, and badge check-in lines slow down busy buyers at the worst moment.
QR Master gives buyers a live agenda on a single dynamic QR — editable up to the moment doors open, so the programme is always current when it matters most.
Worth a look before the 17th? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jortiz@sustainableenergycouncil.com',
subject: 'QR codes for World Hydrogen Summit next month?',
text: `Hi Johanna,
With the World Hydrogen Summit & Exhibition just weeks away on 1921 May at Rotterdam Ahoy, managing check-in flows, exhibitor directories, and conference schedules for thousands of global delegates is no small undertaking.
Paper programs go stale the moment they're printed, exhibitor booth details change, and manual check-in creates bottlenecks at the entrance.
QR Master gives your team a live exhibitor directory behind a single dynamic QR — editable up to show day, so delegates never encounter outdated booth details or an empty stand.
Happy to share an example setup for a summit of this scale — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jenny.friedsam@anga.de',
subject: 'QR codes for ANGA COM 2026 in May?',
text: `Hi Jenny,
With ANGA COM 2026 opening on 19 May in Cologne, coordinating check-in, conference programme access, and exhibitor directories for thousands of broadband and media professionals is a significant operational challenge.
Printed programmes go outdated overnight, exhibitor info needs constant correction, and slow badge check-in dampens first impressions.
QR Master lets you keep the conference schedule live on a single QR — update sessions or exhibitor details the morning of the event without touching a single printed piece.
Lohnt sich ein kurzer Blick vor dem 19. Mai? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'aforgione@hia-li.org',
subject: 'QR codes for HIA-LI Trade Show May 28?',
text: `Hi Anthony,
With the HIA-LI Annual Business Trade Show on 28 May at Suffolk Credit Union Arena — 375 exhibitors, 4,500 attendees — smooth check-in and up-to-date exhibitor directories are essential to keeping the day running well.
Paper schedules go missing, exhibitor maps get outdated mid-show, and long check-in queues set the wrong tone from the start.
QR Master gives you a live exhibitor directory behind a single printable QR — update booth info and schedules up to show day, so attendees always have the right details.
Worth a quick look before May 28? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'bkurnit@hia-li.org',
subject: 'QR codes for HIA-LI Trade Show next month?',
text: `Hi Brandon,
Long Island's largest B2B trade show — the HIA-LI Annual Business Trade Show on 28 May — brings 4,500 attendees and 375 exhibitors together in one building. Getting check-in right and keeping exhibitor info current throughout the day is critical.
Paper programs disappear, booth maps fall behind, and slow check-in frustrates everyone before the doors are even fully open.
QR Master keeps exhibitor maps and schedules live on a single printable QR — update anything up to show day without reprinting a single flyer.
Set up in minutes at qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'a.bisschop@rai.nl',
subject: 'QR codes for GreenTech Amsterdam next month?',
text: `Hi Aleid,
With GreenTech Amsterdam opening on 9 June at RAI Amsterdam, managing check-in, real-time exhibitor information, and conference schedules for international horticulture and agri-tech visitors is a major coordination challenge.
Printed schedules go out of date quickly, exhibitor directories need constant corrections, and slow badge check-in creates queues that frustrate visitors before the show has even started.
QR Master gives visitors a live exhibitor directory on a single QR — editable up to the day of the event, with scan data showing which areas they actually checked.
Worth a look before 9 June? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'mark@ama-sensorik.de',
subject: 'QR codes for SENSOR+TEST 2026 in June?',
text: `Hi Stephanie,
With SENSOR+TEST 2026 opening on 9 June in Nuremberg, managing badge check-in, conference schedules, and exhibitor directories for thousands of sensor and measurement professionals is a substantial operational task.
Printed programmes go stale quickly, exhibitor information changes right up to show day, and slow check-in at the entrance leaves a poor first impression.
QR Master lets you keep the conference schedule live on a dynamic QR — update sessions or exhibitor info up to the morning of the event, no reprint needed.
Lohnt sich ein Blick vor dem 9. Juni? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'emma.carter@informa.com',
subject: 'QR codes for EV Tech Expo Europe next month?',
text: `Hi Emma,
With the Electric & Hybrid Vehicle Technology Expo Europe opening 9 June in Stuttgart — 17,000+ attendees and 1,100+ exhibitors — managing check-in flows, exhibitor directories, and conference schedules at that scale is genuinely complex.
Paper programmes are outdated before the ink is dry, exhibitor maps need constant reprinting, and check-in queues set the wrong tone for an event of this calibre.
QR Master keeps exhibitor maps and conference schedules live on dynamic QR codes — editable right up to show day, so attendees never see outdated information.
There are examples at qrmaster.net — might be worth a look before Stuttgart.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'emma.uwins@informa.com',
subject: 'QR codes for EV Tech Expo Stuttgart June?',
text: `Hi Emma,
As Operations Director for the Electric & Hybrid Vehicle Technology Expo Europe (Stuttgart, 911 June), you know how quickly exhibitor information changes and how critical smooth check-in flow is across an event of this scale.
Paper schedules go missing, floor maps need reprinting after last-minute exhibitor changes, and slow check-in creates poor first impressions.
QR Master keeps exhibitor information and schedules editable right up to show day — one update, every printed QR reflects it immediately.
Happy to share a concrete example for an event at this scale — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'craigkelly@iconicmediasolutions.co.uk',
subject: 'QR codes for Global Britain Trade Expo June?',
text: `Hi Craig,
With 1,200+ delegates from 36 countries expected at the Global Britain Trade Expo on 11 June at QEII Centre London, fast check-in, accessible exhibitor directories, and a polished attendee experience matter from the very first moment.
Printed schedules go missing, exhibitor info changes before doors open, and manual check-in creates congestion that reflects badly on an event of this profile.
QR Master keeps your event schedule and exhibitor directory live behind a single printed QR — editable up to the day, with scan data per zone so you see exactly what delegates accessed.
Worth a look before the 11th — examples at qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'lauren@iconicmediasolutions.co.uk',
subject: 'QR codes for Global Britain Trade Expo June?',
text: `Hi Lauren,
As Marketing and Events Executive for the Global Britain Trade Expo at QEII Centre on 11 June, you're likely in the final push to ensure the attendee experience is seamless for 1,200+ international delegates.
Paper agendas go missing, exhibitor maps become outdated fast, and slow check-in queues create poor first impressions before any session has begun.
QR Master gives attendees a live event schedule and exhibitor directory on one QR — you update it right up to show day, and see scan data on what they actually engaged with.
Worth setting up before 11 June? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'klatham@smartmeetings.com',
subject: 'QR codes for Smart Meetings May event?',
text: `Hi Kerry,
With Smart Meetings' hosted buyer event running 1719 May, helping meeting planners connect smoothly with venue and hotel partners — from fast check-in to agenda access to networking tools — makes the whole experience work.
Paper schedules get lost, directories go stale mid-event, and check-in queues slow down busy buyers at exactly the wrong time.
QR Master gives buyers a live agenda and supplier directory on one QR — editable right up to doors open, with scan data showing what they actually clicked through.
Worth a quick look before the 17th? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'janina.marsh@millertanner.com',
subject: 'QR codes for your Q2 events this spring?',
text: `Hi Janina,
As Global Event Director at Miller Tanner Associates, you're likely deep into planning mode for multiple conferences and meetings your clients are running this spring — each with their own check-in, schedule distribution, and networking logistics.
Paper programmes go stale fast, attendee maps become inaccurate, and slow badge check-in creates a poor start to events your team has worked hard to produce.
QR Master keeps event agendas and attendee guides live on a single QR per event — editable up to the day, so late changes never mean reprinting handouts across multiple venues.
Happy to share how other event management teams use this — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'dan@gotoevents.co.uk',
subject: 'QR codes for your upcoming spring events?',
text: `Hi Dan,
With GoTo Events running a full calendar of corporate experiences and events across the UK this spring, smooth check-in, accessible activity guides, and real-time schedules are what separate a great event from a stressful one.
Paper agendas get lost, attendee lists become disorganised, and slow check-in lines frustrate guests before the event has even begun.
QR Master keeps event schedules and activity guides live on a dynamic QR — update anything right up to the day, so guests always have the current programme.
Worth a look for your spring calendar? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
// ── CAMPAIGN C: ICP Outbound ─────────────────────────────────────────────
{
to: 'sales@kiroscatering.com',
subject: 'QR dead after a menu update?',
text: `Hi Mike,
If Kiros uses QR codes on table cards, proposals, or event menus — the moment the URL behind them changes, those codes stop working. For a catering operation that rotates seasonally, that's a recurring problem.
QR Master keeps the printed code permanent. You update the destination in a dashboard — new menu, new booking page — no reprint, no dead links at the table.
Worth a look before your next seasonal update? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'nicole@delysia.com',
subject: 'Seasonal collections, stale QR codes?',
text: `Hi Nicole,
If Delysia's packaging or gift boxes carry a QR code, a new seasonal collection often means that destination is now outdated — and reprinting boxes isn't always an option.
One dynamic code stays on the packaging permanently. You update where it points when a new collection launches. You also see which orders or retail placements actually get scanned.
Useful for your next product run? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'agonzalez@sustainableculinarysolutions.com',
subject: 'New restaurant openings + QR codes that don\'t break',
text: `Hi Ali,
When you open a new restaurant concept the printed menus, table cards, and window decals all get QR codes — and six weeks later half the links are already stale.
QR Master makes those QR codes dynamic: update the destination URL without touching the printed material. You also get real-time scan analytics (device, location, time) — useful data to hand clients alongside the opening playbook.
One tool across all your client locations — free at qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jfbonnet@tumbadorchocolate.com',
subject: 'Packaging QR that stays live past the print run',
text: `Hi Jean-François,
Artisan chocolate packaging is designed once and printed in bulk. The problem: the QR code on that box is frozen — the moment you update a product page or tasting guide, the code goes dead.
With QR Master the printed code stays the same, but you redirect it to any URL at any time. You also see scan counts by country and device, which tells you exactly where your retail distribution is actually being used.
Free to try at qrmaster.net — no credit card.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'kellyw@tkmkt.com',
subject: 'The QR blind spot in your client reports',
text: `Hi Kelly,
As a fractional CMO you're building attribution stacks for clients — tracking every click, open, and conversion. QR codes on print campaigns are usually the blind spot: scans happen but nothing shows up in the dashboard.
QR Master adds real-time scan analytics to every QR code your clients put on flyers, direct mail, or in-store signage. Codes are dynamic, so you update the destination without reprinting when a campaign URL changes.
One link to add to every client report — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'ann.ehinger@and-marketing.com',
subject: 'Show clients what happened after they scanned',
text: `Hi Ann,
You're running email, SEO, and social for clients and you can measure all of it — except QR codes. Those go on event flyers, printed newsletters, and mailers, and then the data just disappears.
QR Master closes that gap: every code tracks scans in real time with device, location, and time breakdowns. Codes are dynamic, so when a campaign URL changes you update the destination, not the printed piece.
Easy to add to your reporting toolkit — free at qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'lshearon@thesociallights.com',
subject: 'Offline-to-online gap in your client campaigns',
text: `Hi Louis,
The Social Lights does the digital side well — but when a client puts a QR on an in-person activation or printed promo, that scan data never makes it back to your reports.
QR Master gives you a dashboard with real-time scan analytics per code: how many scans, which device, which city. Codes are dynamic so when the landing page URL changes mid-campaign, you edit the destination rather than reprint the material.
Clean data for every channel — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'bushra@thebrandamp.com',
subject: 'QR analytics missing from your Shopify stack',
text: `Hi Bushra,
You've built a strong analytics layer across Google Ads, GA4, and Shopify — but QR codes on packaging inserts, print ads, or retail displays are still a black box.
QR Master plugs that gap with dynamic QR codes that are redirectable anytime and track every scan: device, country, time. UTM-ready links mean scans flow straight into your existing GA4 reports.
Fits the stack you already run — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'dee@filtersfast.com',
subject: 'Are your filter package QR codes actually converting?',
text: `Hi Dee,
You're running loyalty programs, email sequences, and CRO across Filtersfast — but the QR code on every physical filter package is probably sending customers somewhere with zero attribution.
QR Master gives you dynamic QR codes with real-time scan tracking: which SKU packaging got scanned, from which state, on which device. Redirect to any URL anytime — subscription page today, promo tomorrow — without changing the printed code.
Offline conversion data, finally — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'erin@emazinggroup.com',
subject: 'The scan data gap on IntoTheAM packaging',
text: `Hi Erin,
You're optimizing retention and CRO across IntoTheAM and iHeartRaves with A/B tests and landing page experiments — but the QR code inside every package insert is still static, with no scan data feeding back into your stack.
QR Master makes those codes dynamic (redirect to any URL without reprinting) and tracks every scan: device, country, time of day. Run post-purchase scan experiments the same way you run email split tests.
Worth testing on your next insert batch? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jordan@birddogs.com',
subject: 'QR on Birddogs hang tags — static or dynamic?',
text: `Hi Jordan,
When you lock in a print run for hang tags with a QR code, that URL is frozen. Six months later the collection changes, and every tag in circulation is pointing to a dead link.
QR Master keeps the printed code permanent — you update the destination URL in seconds from a dashboard. New collection, updated size guide, seasonal promo — without touching the physical tag. Every scan also gets logged (device, country, time) so you see which retail doors actually engage customers.
Works across all your SKUs — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'richard@jaxxon.com',
subject: 'Growth data hiding in your packaging QR',
text: `Hi Richard,
You're A/B testing landing pages and running CRO experiments at Jaxxon — but the QR code on every jewelry box you ship is a static, untracked link. You have no idea how many customers scan it, where they are, or what they do next.
QR Master makes those codes dynamic and trackable: redirect to any URL without reprinting, and see scans by device, location, and time. A/B test destinations (review page vs. upsell vs. loyalty signup) across different product batches.
One more growth lever — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jeremy@performance-adviser.com',
subject: 'Le seul canal sans données dans vos campagnes clients',
text: `Hi Jeremy,
Chez Performance Adviser vous pilotez les campagnes clients avec des dashboards multichanaux — mais les QR codes sur les supports print restent en dehors de toute analytics.
QR Master y remédie : chaque code est dynamique (redirection modifiable sans reprint) et génère des données de scan en temps réel — device, pays, créneau horaire. Intégrable en UTM directement dans vos rapports existants.
Essai gratuit sur qrmaster.net — sans carte bancaire.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'thomas.volkermann@bloofusion.de',
subject: 'Der blinde Fleck in eurer Web-Analytics',
text: `Hi Thomas,
Bloofusion misst alles — Klicks, Conversions, Scroll-Tiefe. Aber QR-Codes auf Flyern oder Printanzeigen eurer Kunden liefern keine Scan-Daten in Google Analytics oder sonst irgendwo.
QR Master schließt diese Lücke: dynamische QR-Codes, deren Ziel-URL jederzeit änderbar ist, mit Echtzeit-Scan-Analytics (Gerät, Land, Uhrzeit) — UTM-ready für euren bestehenden Reporting-Stack.
Kostenlos testen auf qrmaster.net — ohne Kreditkarte.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jeanbaptiste.levesque@kardinalt.com',
subject: 'Vos codes QR clients ont-ils des analytics ?',
text: `Hi Jean-Baptiste,
Vous avez fondé Kardinal T sur la data — Google Analytics, SEO, Ads. Pourtant les QR codes que vos clients posent sur leurs supports imprimés génèrent des scans qui n'entrent jamais dans aucun funnel.
QR Master les rend dynamiques et trackables : destination modifiable à la volée, analytics temps réel par device et pays, liens UTM prêts à l'emploi pour vos rapports clients.
Essai gratuit sur qrmaster.net — sans carte.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'maartenpaul@humai.nl',
subject: 'QR scan data that flows into your CRM',
text: `Hi Maarten,
At Humai you're connecting customer data across CRM, martech, and e-commerce touchpoints — but QR scans from print materials are almost never in that picture.
QR Master tracks every scan (device, country, time) and the codes are dynamic — redirect to any URL without reprinting. With UTM parameters, scan events flow straight into your CRM attribution models the same as any digital touchpoint.
Closes the offline data gap cleanly — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'mathias@grapheine.com',
subject: 'Quand l\'URL client change, votre QR est mort',
text: `Hi Mathias,
Graphéine livre des identités visuelles soignées — et souvent un QR code fait partie du livrable. Six mois plus tard, le client change son URL et le code ne fonctionne plus. Retour chez l'imprimeur.
Avec QR Master le code imprimé ne change jamais. Vous ou votre client mettez à jour la destination en quelques secondes depuis un dashboard. Et chaque scan est tracké : device, pays, heure.
Essai gratuit sur qrmaster.net — sans carte bancaire.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'joan@aktiva.es',
subject: 'El QR que entregas hoy puede estar muerto mañana',
text: `Hi Juan,
En Aktiva creáis identidades y piezas de packaging de alto nivel. Muchas incluyen un QR code. El problema: cuando el cliente cambia la URL o lanza una nueva campaña, ese código impreso deja de funcionar y hay que reimprimir.
Con QR Master el código físico no cambia nunca. La URL de destino se actualiza en segundos desde un dashboard. Y cada escaneo queda registrado — dispositivo, país, hora.
Pruébalo gratis en qrmaster.net — sin tarjeta.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'veronica@heystudio.es',
subject: 'El código QR que entregas no debería ser estático',
text: `Hi Verònica,
Heystudio produce trabajo gráfico de primer nivel — posters, identidades, packaging. Pero un QR code estático en un entregable impreso es un punto de fallo: en cuanto el cliente actualiza su web, el código muere.
QR Master lo resuelve con códigos dinámicos: la pieza impresa no cambia, la URL de destino sí, en cualquier momento. Además, cada escaneo genera analytics — dispositivo, país, hora — que puedes entregar como valor añadido al cliente.
Vale la pena verlo — qrmaster.net, gratis, sin tarjeta.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jonathan.courtney@ajsmart.com',
subject: 'Workshop QR codes that don\'t go dead between sprints',
text: `Hi Jonathan,
AJ&Smart runs Design Sprints where printed materials, canvases, and handouts often carry QR codes pointing to Miro boards, resources, or follow-up pages. Between sessions those URLs change — and the printed code is already useless.
QR Master makes every code dynamic: update the destination URL in seconds without touching printed materials. Every scan is also logged — device, country, time — useful for tracking which remote participants actually engaged.
Small fix, big friction removed — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
}
];
async function sendAll() {
let sent = 0;
let failed = 0;
for (const email of emails) {
try {
await transporter.sendMail({
from: FROM,
to: email.to,
bcc: BCC,
subject: email.subject,
text: email.text
});
console.log(`✓ Sent to ${email.to}`);
sent++;
// Small delay to avoid rate limiting
await new Promise(r => setTimeout(r, 800));
} catch (err) {
console.error(`✗ Failed: ${email.to}${err.message}`);
failed++;
}
}
console.log(`\n${sent}/${emails.length} sent, ${failed} failures.`);
}
sendAll();

View File

@@ -1,878 +0,0 @@
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: 'smtp.qrmaster.net',
port: 465,
secure: true,
auth: {
user: 'timo@qrmaster.net',
pass: 'fiesta'
}
});
const BCC = 'knuth.timo@gmail.com';
const FROM = 'Timo from QR Master <timo@qrmaster.net>';
const emails = [
// ── CAMPAIGN A: Restaurant & F&B (16 leads) ─────────────────────────────
{
to: 'philippe@ililirestaurants.com',
subject: 'menu reprints between services',
text: `Hi Philippe,
When Ilili's menu changes — a seasonal dish, updated pricing, a wine list rotation — any QR code on your printed table cards is immediately pointing to last month's version. For a restaurant with multiple floors and a private dining program, coordinating reprints every time something changes takes real time and money.
One dynamic code per table fixes it. You update the destination from a dashboard, the printed card stays the same. Restaurants across the US use QR Master to run current menus without a single reprint.
Worth a look before your next menu update? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'mike@localrestaurantsinc.com',
subject: 'menu QR across locations',
text: `Hi Michael,
When you update a menu across a restaurant group, every printed QR code still in circulation is pointing to the old page. The gap between "menu changed" and "new cards arrived" is when guests hit dead links — not a great first impression.
QR Master lets you update the destination for every location from one dashboard. The printed codes never change — only where they point does.
Relevant for your operation? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'sunny@juviamiami.com',
subject: 'seasonal menu, same QR',
text: `Hi Sunny,
Juvia's rooftop menu changes with the season — and every time it does, any QR on the table is pointing to last season's version. Reprinting table cards for an outdoor venue every few months is a recurring cost that adds up fast.
Dynamic QR codes redirect to wherever you point them. Update the destination when the menu changes; the printed card stays put. Setup takes minutes — one code per table, destination editable anytime from a dashboard.
How are you handling this today? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'enga@mattengas.com',
subject: 'pizza menu, stale QR',
text: `Hi Hengam,
When the Mattengas menu changes — new toppings, updated pricing, a seasonal special — the QR code on the table card doesn't know. Guests scanning it land on last month's version, or worse, a dead page.
One dynamic code fixes it. Update the destination in seconds from a dashboard, no new print run needed. Free to start at qrmaster.net — and pizzerias and casual restaurants across the US use it to stay current without the reprint cost.
Worth a try before your next menu change?
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'kfrank@latoque.com',
subject: 'wine list QR still current?',
text: `Hi Ken,
At La Toque, the wine list changes more often than the food menu — and if the table QR is pointing to last month's cellar selections, that's friction at exactly the wrong moment for guests and your floor team.
One dynamic code per table: update the wine list or menu destination anytime, from anywhere. The printed card never changes. One code per table: destination updates in seconds, the printed card stays untouched.
Useful for your next list update? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'hans@augustjakarta.com',
subject: 'tasting menu QR outdated?',
text: `Hi Hans,
Fine dining menus at August change by design — but every time they do, any QR on the table or menu card silently points to the previous offering. Guests scanning before service have already seen the wrong version.
A dynamic code always points to the current menu. Update from a dashboard when the offering changes — no new print run, no dead links. Used by tasting-menu restaurants across the US to keep service materials current.
Worth a look? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'skinsey@taqueriatsunami.com',
subject: 'daily specials on a permanent QR',
text: `Hi Scott,
When daily specials or seasonal items rotate faster than your printed materials can keep up, the QR on a menu board or table card eventually points somewhere useless. For a casual restaurant, reprinting to fix that eats into margins fast.
QR Master lets you keep one permanent code on every surface and redirect it in seconds when the menu changes. Restaurants across the US use it to eliminate that reprint cycle entirely — free to start, no card needed.
Relevant for your operation? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'david.smart@chefsforseniors.com',
subject: 'in-home menu cards staying current?',
text: `Hi David,
When Chefs For Seniors leaves a menu card in a client's home, that QR code is frozen at whatever URL it pointed to on print day. If the menu changes or a seasonal update comes in, every card already delivered is pointing somewhere wrong — and you can't ask a senior client to discard it and wait for a new one.
Dynamic QR codes update the destination without touching the printed piece. One code per card format, always pointing to the current menu. The printed piece never changes — only where it points does.
Useful for your next menu cycle? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'aallen@aaronallen.com',
subject: "your restaurant clients' QR blind spot",
text: `Hi Aaron,
The restaurants you advise print QR codes on table cards, menus, and marketing materials — and every time a URL changes, those codes either break or point somewhere stale. It's a recurring print cost baked into every menu rotation, and it's often the kind of operational friction that gets buried in the P&L rather than fixed.
Dynamic QR codes eliminate it: one code per surface, redirect anytime from a dashboard, zero reprint. An easy recommendation that saves operators real money across every update cycle.
Worth flagging to your restaurant clients? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'robert@drinkbrez.com',
subject: 'sampling activation QR goes stale?',
text: `Hi Robert,
At a retail activation or sampling event, Brēz's table card or shelf display probably carries a QR pointing to a product page or sign-up — and that destination changes as you update the lineup or run new promos.
Static codes mean every previously distributed card is pointing somewhere stale after an update. For a brand still building distribution, a dead link at the point of first trial is a missed conversion. Dynamic QR codes redirect without reprinting, and track scans by event location and region.
Relevant for your sampling activations? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'michael@fablefood.co',
subject: 'packaging QR after the brand refresh',
text: `Hi Michael,
Plant-based brand packaging gets updated as the lineup evolves — new flavors, updated recipes, retail partner requirements. Every QR code already printed on that packaging is frozen at the URL it was pointed to on print day.
The old packaging in distribution doesn't know the link changed. Reprinting for a URL update is expensive and often not realistic. Dynamic QR codes let you redirect to any destination without touching the packaging — and give you scan data by device and region, so you understand where your retail distribution is actually generating engagement.
Worth a look before your next print run? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'brenner@womenofthevine.com',
subject: 'tasting event materials staying current?',
text: `Hi Deborah,
When Women of the Vine runs a summit or tasting event, printed programs, display cards, and sponsor materials almost certainly carry QR codes pointing to digital assets — speaker pages, tasting notes, session replays — that change between events.
Static codes silently go stale between one conference and the next, and reprinting event materials every cycle is a real budget drain. QR Master makes those codes dynamic: redirect to the current asset without reprinting, and see scan data showing which materials attendees actually engaged with. Used by event organizations and hospitality groups across the US.
Useful for your next summit? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'gabriella@rindsnacks.com',
subject: 'packaging QR pointing where?',
text: `Hi Gabriella,
If Rind's packaging carries a QR code — to a recipe, sustainability story, or promotion — that destination doesn't update when the URL changes. For a snack brand distributing across retail, the gap between print date and shelf date means consumers are scanning codes pointing to outdated pages, sometimes months after the update.
QR Master makes those codes dynamic: redirect from a dashboard in seconds, and see scan data by device and region so you know where the packaging actually gets opened and used.
Worth a look before the next run? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'carrie@restauranthrgroup.com',
subject: 'QR pain at the restaurants you support',
text: `Hi Carrie,
Every restaurant operator you work with faces the same problem: menu QR codes go dead the moment a URL changes, and nobody reprints immediately. It's a small friction that adds up — reprint costs, dead links on guest-facing materials, and a gap between "menu changed" and "new cards arrived."
Dynamic QR codes fix it: one code per surface, redirect in seconds from a dashboard, no reprint needed. Simple enough to recommend to any operator in your network.
Worth passing along to the restaurants you support? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'jayme@everydaydose.com',
subject: 'wellness event QR stays current?',
text: `Hi Jayme,
Everyday Dose shows up at wellness events, pop-ups, and retail demos with a setup that likely includes a QR code somewhere — pointing to a sign-up, a product page, or a promo. When that destination changes between activations, every pre-printed card or banner in the rotation is silently pointing the wrong way.
Dynamic QR codes redirect without a reprint. You also get scan data per event location — useful for comparing which activations actually drive interest versus which ones get ignored.
Relevant for your next activation? qrmaster.net — free to start.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'murray@neighbourgood.co.za',
subject: 'guest info QR in your spaces',
text: `Hi Murray,
In a co-living or hospitality space, printed guest guides, welcome cards, and common-area displays often carry QR codes pointing to WiFi details, house rules, or local recommendations — all of which change regularly.
Every time that information updates, the printed material is pointing somewhere wrong. Reprinting across multiple properties is expensive and slow. One dynamic code per location: update the destination when anything changes, the printed card stays put. Hospitality operators use QR Master to keep guest-facing materials permanently current across properties.
Worth a look for your spaces? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
// ── CAMPAIGN B: Marketing Agencies & Consultants (18 leads) ─────────────
{
to: 'dfriez@toprankmarketing.com',
subject: 'print campaigns with no scan data',
text: `Hi Debbie,
TopRank runs integrated campaigns for B2B clients — and when any of those campaigns include print, event materials, or influencer mailers, the QR codes on those pieces report nothing. You can track every digital impression, but the QR on a conference handout or partner package is a black box.
QR Master adds real-time scan analytics to every QR code (device, country, time) and lets you update destinations mid-campaign without reprinting. Marketing agencies use it to close the print attribution gap in client reports.
Open to me sending one example setup for a campaign like yours? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'houston.golden@bamf.com',
subject: 'offline QR data in your client stack',
text: `Hi Houston,
BAMF runs high-volume outbound campaigns — and when any physical element is in the mix (mailers, event cards, conference materials), the QR codes on those pieces generate scans that never appear in your reporting. That's attribution data left on the table for clients who want full-funnel visibility.
Dynamic QR codes with real-time scan analytics: device, location, time. UTM-ready so scans flow into GA4 or HubSpot alongside your digital placements. One addition that makes your print channel actually reportable.
Relevant for your current client campaigns? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'shay@shayrowbottom.com',
subject: 'the one channel with no data',
text: `Hi Shay,
Every channel in a client campaign has attribution data — except one. Whatever QR codes are on printed materials, event signage, or mailers generate real scans that never reach any dashboard. Client asks what the print piece delivered. Honest answer: you don't know.
QR Master closes the gap: scan tracking per code (device, country, time), dynamic destinations when campaign URLs change, UTM-ready for existing dashboards. Print becomes as reportable as any digital channel.
How are you handling this today? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'a@fedoriv.com',
subject: 'brand activations with QR data?',
text: `Hi Andriy,
When Fedoriv runs a brand activation — launch events, packaging, retail placements — the QR codes on those physical materials aren't in any analytics view. Brands invest in physical touchpoints and have no way to measure what actually gets scanned, where, or by whom.
Dynamic QR codes with real-time scan data: device, location, time of day. Destinations are updatable mid-campaign without reprinting. Marketing agencies and brand studios use QR Master to make physical campaign touchpoints as measurable as digital ones.
Worth a look for your next activation? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'rog@how.studio',
subject: 'client QR dead after the handover',
text: `Hi Roger,
How and How delivers brand identities that live on packaging, stationery, and printed materials. Those deliverables almost always include a QR code. Six months after handover, the client updates their website — and the QR on every printed piece breaks. That call tends to come back to you.
QR Master makes the code dynamic: the client updates the destination themselves from a dashboard, the printed deliverable keeps working permanently. Easy to include as standard in any identity or print project. Used by branding studios to protect delivered work from post-handover URL changes.
Want to see how other studios include it as standard in print deliverables? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'danielle@and-marketing.com',
subject: 'print analytics gap in your client work',
text: `Hi Danielle,
As a fractional CMO, you build measurement frameworks across channels for your clients. But QR codes on print materials — mailers, event handouts, in-store signage — are almost never inside those frameworks. Clients with mixed print-digital campaigns ask what drove results. You can answer for everything digital. Print is a black box.
QR Master closes that gap: scan analytics per code (device, location, time), dynamic destinations when campaign URLs change, UTM-ready so scans flow into your existing attribution model.
Useful for your current client work? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'joel@marketpoweronline.com',
subject: 'scan data from your print work?',
text: `Hi Joel,
Marketpower runs marketing communications campaigns that include print — trade materials, mailers, event programs. The QR codes on those materials generate scans that never appear in any reporting stack. Clients see strong digital metrics; whatever happens with the QR code in the field is missing from the picture.
QR Master tracks every scan in real time (device, country, time) and keeps codes redirectable when campaign URLs change. UTM support means scans show up in the same GA4 view as your digital placements.
Happy to show you how it looks in practice — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'natasha@thesociallights.com',
subject: 'offline gap in your campaign data',
text: `Hi Natasha,
The Social Lights builds community campaigns with strong digital engagement — but when events, pop-up activations, or printed materials are in the mix, the QR codes on those pieces disappear from every analytics view. You can show a client detailed engagement on Instagram. The QR at the community event? That data doesn't exist.
QR Master makes those codes trackable in real time — device, location, time — and keeps destinations updatable without reprinting. Agencies use it to close the print-to-digital attribution loop in client campaigns.
Want a test code set up for your next activation? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'ocean@kaiventmedia.com',
subject: 'what did that event QR actually deliver?',
text: `Hi Ocean,
If a client asked you right now what their last event QR code delivered — how many scans, from where, on which device — what would you say? For most campaigns with physical elements, the honest answer is: nothing, because nothing was tracked.
QR Master fixes that: real-time scan analytics per code (device, location, time), dynamic destinations when page URLs change, UTM-ready so offline scans land in existing dashboards. One more channel your reports can actually account for.
Open to me sending one example setup? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'katrina@cosmarketingagency.com',
subject: 'client QR data in your reports?',
text: `Hi Katrina,
Social media campaigns have clear metrics — reach, engagement, clicks. When Cosmarketing adds QR codes to physical materials for clients — flyers, promotional cards, in-store displays — those scans never appear in any reporting. That's data missing from every client report.
QR Master tracks those scans in real time and keeps codes redirectable when campaign URLs change. UTM-tagged scans show up in the same GA4 view as your digital placements.
Worth including in your next campaign? qrmaster.net — free to try.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'charles@drivendentalmarketing.com',
subject: 'patient materials QR going stale?',
text: `Hi Charles,
Dental practices you work with send patients home with printed materials — appointment cards, welcome packets, referral cards — that often carry a QR pointing to a booking link or patient portal. When the practice updates their website or changes their booking platform, every previously distributed piece is pointing somewhere that no longer works.
QR Master makes those codes dynamic: one update in a dashboard, every distributed card keeps working. Healthcare and dental marketing teams use it to keep printed patient materials permanently current without a reprint cycle.
Relevant for your dental clients? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'robert@thebrandamp.com',
subject: 'print scans that go nowhere',
text: `Hi Robert,
Print QR codes go out, scans happen, and then — silence. Nothing in any dashboard, no way to tell the client what worked, no way to update the destination when a URL changes mid-campaign. For every digital channel you optimize, print is the one that runs blind.
QR Master changes that: real-time scan analytics per code, dynamic destinations when campaign URLs change, UTM-ready links that land in existing dashboards. Same visibility you already have on digital, extended to print.
Want to test it on one campaign? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'david@getresultsdigital.com',
subject: 'client print campaigns without attribution',
text: `Hi David,
GetResults focuses on measurable marketing — but when client campaigns include any physical element with a QR code, those scans aren't in any measurement system. If a client asks what the QR on their trade show banner delivered, there's no answer.
QR Master adds scan analytics to every code in a campaign — device, location, time — and makes codes redirectable when a page URL changes mid-campaign. Agencies use it to close the last attribution gap in mixed print-digital strategies.
Want a test code set up for one client campaign? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'bwinum@maxplaces.com',
subject: 'local business QR with no scan data',
text: `Hi Brian,
MAXPlaces helps local businesses get found online — but when those businesses print flyers, window decals, or table cards with QR codes, the performance of those materials is completely invisible. A restaurant client asks which QR location is working. A retailer asks how many people scanned the window promo. There's no answer.
QR Master gives local business clients trackable QR codes: scan count, device, location. Dynamic destinations mean URLs can change without a reprint. Easy to add as a standard deliverable for any client with print materials.
Useful for your local business clients? qrmaster.net — free to start.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'iroberts@insegment.com',
subject: "the reporting gap you can't close yet",
text: `Hi Ilona,
Of all the channels Insegment reports on for clients, print is the only one where the answer to "how did it perform?" is genuinely "we don't know." Not because nothing happened — because nothing was tracked. QR codes go on mailers, event signage, direct mail, and the scans disappear.
QR Master closes it: real-time scan analytics per code, UTM-ready links so offline scans appear in the same GA4 or HubSpot view as digital, destinations updatable mid-campaign without a reprint.
Should I put together a quick example for one of your current campaigns? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'cailun@weareriot.com',
subject: 'print deliverables with QR analytics?',
text: `Hi Cailun,
Riot delivers brand campaigns that land in the physical world — launch events, packaging, retail activations. The QR codes on those pieces generate real engagement that no one can measure. You hand over campaign performance reports with strong digital metrics. The print channel is invisible, even when QR codes are on every printed asset.
QR Master tracks scans per code in real time — device, location, time — and lets destinations be updated without reprinting. Branding agencies use it to close the print analytics gap in client campaign reports.
Worth a look for your next campaign? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'aeastlack@haleymarketing.com',
subject: 'recruitment print materials with QR data?',
text: `Hi Aaron,
Haley Marketing helps staffing firms attract candidates — and when those firms print flyers, job fair materials, or office signage with QR codes, those scans disappear from every analytics view. A staffing client asks which job fair banner drove applications. There's no data.
Dynamic QR codes track every scan (device, location, time) and redirect to any destination without reprinting. Recruitment marketing teams use QR Master to close the print-to-application attribution gap across campaigns.
Useful for your staffing clients? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'hello@oscarpena.com',
subject: 'creative campaigns, offline QR data?',
text: `Hi Oscar,
Chamoy Creative builds digital-first campaigns — but when brand events, packaging, or print pieces are in the mix, the QR codes on those materials are invisible. You can measure every digital interaction. The offline QR code is a blind spot in every client report.
QR Master makes those codes dynamic and trackable: scan analytics flow into your existing dashboards via UTM, destinations update mid-campaign without reprinting. Agencies use it to make physical campaign elements as measurable as digital ones.
Curious how other creative agencies are using this in client reports? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
// ── CAMPAIGN C: Retail, Ecommerce & Consumer Brands (10 leads) ──────────
{
to: 'jj@chamberlaincoffee.com',
subject: 'merch QR after a product update',
text: `Hi Jeumana,
Chamberlain Coffee ships merch and branded packaging that probably carries QR codes — pointing to product pages, subscription offers, or seasonal campaigns that change regularly. Every update to a destination URL leaves the printed code pointing somewhere stale. The packaging in distribution doesn't know the link changed.
Dynamic QR codes redirect to any destination without reprinting — and give you scan data by device and region, so you understand where physical products actually generate engagement. One code per product: destination updates from a dashboard, printed packaging stays unchanged.
Worth a look before the next product cycle? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'taylor@partakefoods.com',
subject: 'packaging QR after the product refresh',
text: `Hi Taylor,
Partake runs seasonal and limited-edition product releases — and every time packaging updates, the QR codes already in distribution are frozen at the old URL. Units on shelf continue pointing to last season's page long after the destination changed.
Dynamic QR codes update the destination without touching the packaging. You also get scan data by device and region — useful for understanding where products are actually getting opened and used.
Relevant for your next product launch? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'brad@firedeptcoffee.com',
subject: 'packaging QR after the promo changes',
text: `Hi Brad,
Fire Department Coffee ships a lot of bags and branded merch — and any QR code on those products is a permanent pointer to wherever it was set at print time. Promotions end, product pages update, new campaigns launch. The QR already on the bag in a customer's cabinet doesn't know that.
Dynamic QR codes redirect from a dashboard without touching the packaging. Track scans by device and location — useful for understanding which SKUs and retail channels actually drive customer engagement post-purchase.
Worth a look for your next run? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'llewis@alhi.com',
subject: 'QR codes across member hotel properties',
text: `Hi Lisa,
Across ALHI's member properties, printed guest-facing materials — welcome cards, dining menus, room service guides — almost certainly carry QR codes that point to pages updated regularly. A hotel refreshes its restaurant menu, spa offerings, or event calendar; every printed piece across the property now has a code pointing somewhere stale.
Dynamic QR codes mean member properties update any destination without reprinting. One code per location, always current — used by luxury hospitality operators and multi-property groups to keep guest materials in sync.
Worth exploring for your member properties? Happy to walk through how it works at that scale — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'stuarthills@corecruitment.com',
subject: 'job fair materials with QR data?',
text: `Hi Stuart,
When Corecruitment represents hospitality clients at recruitment fairs, printed job cards and flyers often carry QR codes pointing to application pages or brand profiles — which change as roles are filled or portals are updated. After the fair, distributed materials are pointing to dead or outdated links.
Dynamic QR codes redirect to the current destination without reprinting — and track scans per event location. Works for any printed career or event materials.
Relevant for your team's event outreach? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'nora@loopsbeauty.com',
subject: 'packaging QR after the campaign ends',
text: `Hi Nora,
Loops Beauty ships ear care products with packaging that likely carries a QR code — pointing to a tutorial, loyalty offer, or seasonal promo. When that destination changes, units already on shelf or in transit don't update. Customers scan months after the print run and land somewhere stale.
Dynamic QR codes redirect instantly when destinations change. You also see scan data by device and region — useful for understanding where products actually get opened and used versus sitting in distribution.
Useful for your next packaging run? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'devonne@themayfairgroupllc.com',
subject: 'hang tags after the collection drops',
text: `Hi Devonne,
Fashion brands deal with a specific QR problem: hang tags are printed in bulk for a collection, but the campaign page behind the QR changes between seasons. Units with last season's QR code still circulate long after the destination has changed — and customers scanning a dead link at the point of unboxing is exactly the wrong experience.
One dynamic code per collection: update the destination when the campaign changes, without touching the printed hang tag. Consumer brands use QR Master to keep packaging and product materials permanently current.
Worth a look before the next collection? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'tara@thelineup.com',
subject: 'in-store QR across your retail locations',
text: `Hi Tara,
When The Line Up runs in-store promotions with QR codes on printed signage, those codes point to a destination that often changes before the signage does. Coordinating sign updates across retail locations takes time — and in the interim, customers scanning the QR get the wrong page.
Dynamic QR codes let you update the destination in seconds from a dashboard — the printed signage doesn't change, but what it points to does. Retail operators use QR Master to keep in-store materials current without a reprint cycle.
Relevant for your store operations? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'dflint@tentcraft.com',
subject: 'event tent QR after the campaign ends',
text: `Hi Derek,
Tentcraft makes high-impact event displays — and nearly every tent or canopy with a QR code printed on it points to a destination that changes between events. The QR is part of the structure. Once printed, it's frozen. When the landing page changes or a promotion ends, every tent still in use has a dead link.
Dynamic QR codes redirect to any destination without reprinting. Tent and event display manufacturers use QR Master to close the post-print destination gap for their clients.
Worth a look for your event clients? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'kdavis@stuckeys.com',
subject: 'in-store QR still pointing correctly?',
text: `Hi Kim,
Stuckeys retail locations run promotions and signage with QR codes — and those codes are frozen at whatever destination they pointed to on print day. When a promotion changes or a product page updates, the QR on the packaging still on shelf is pointing somewhere stale.
Dynamic QR codes update without reprinting, and you get scan data per location — useful for comparing engagement across stores. Worth passing along to your marketing team.
qrmaster.net — free to try.
Timo from QR Master
timo@qrmaster.net`
},
// ── CAMPAIGN D: EU Leads — Localized (11 leads) ─────────────────────────
{
to: 'mdelmas@creapills.com',
subject: "your community's print QR blind spot",
text: `Bonjour Maxime,
Creapills reaches thousands of creatives and marketers — and the agencies in your community regularly deliver QR codes on printed materials for clients. The problem: the moment a destination URL changes, the printed code is dead. No dashboard flags it, and the client ends up calling the agency.
QR Master fixes it: dynamic codes with destinations updatable from a dashboard without touching the printed piece. Every scan is tracked in real time — device, country, time. Agencies and marketing teams across France and the EU use it to eliminate pointless reprints and include print in their client reports.
Useful for you or your community? qrmaster.net — free, no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'sanna@curemedia.com',
subject: 'influencer campaigns with print QR data?',
text: `Hi Sanna,
Cure Media runs influencer and content campaigns for retail and lifestyle brands — and when any of those campaigns include physical activations or printed assets with QR codes, those scans don't appear in any performance dashboard. You can track content reach and engagement down to the post level. The QR at a brand event or on a printed piece? That data disappears.
QR Master makes those codes dynamic and trackable — device, country, time — and keeps destinations updatable mid-campaign without reprinting. Agencies across Sweden and the EU use it to close the print analytics gap in client reporting.
Worth a look for your next campaign with physical elements? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'difei.guo@exmox.com',
subject: 'print QR in your performance campaigns?',
text: `Hi Difei,
Exmox builds performance marketing stacks for app publishers — but when campaigns include physical elements (events, printed materials, brand kits), the QR codes on those pieces generate scans that never reach any attribution model.
QR Master closes that gap: dynamic QR codes with real-time scan analytics, destinations updatable mid-campaign, UTM-ready for existing dashboards. Used by performance marketing teams in Germany and France to make physical campaign touchpoints as measurable as digital ones.
Relevant for your current client campaigns? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'mmanrique@serseo.es',
subject: 'print campaigns with no scan data',
text: `Hola Miguel,
Serseo runs digital marketing campaigns for clients — and when those campaigns include printed materials with QR codes (flyers, event assets, in-store signage), those scans don't appear in any performance dashboard. You can measure every digital click. The QR on the physical material is a blind spot.
QR Master closes that gap: dynamic codes updatable anytime without reprinting, real-time scan analytics by device and country, UTM-ready links to integrate into your existing client reports. Marketing agencies across Spain and the EU use it to make print a measurable channel.
Useful for your current clients? qrmaster.net — no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'estelle@lesanneesfolles.co',
subject: 'B2B influence campaigns with QR data?',
text: `Bonjour Estelle,
Les Années Folles runs B2B influence campaigns — and when those include physical elements (influencer kits, events, printed assets), the QR codes on those materials generate scans that no reporting tool captures. You can measure digital engagement down to the individual post. What happens with the QR on a physical kit? Invisible.
QR Master makes those codes trackable in real time (device, country, time) and keeps them redirectable mid-campaign without touching the printed pieces. Influence agencies and marketing teams across France use it to include print in their client performance reports.
Relevant for your next campaign with physical elements? qrmaster.net — free, no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'adrian@kimiagroup.com',
subject: 'physical campaigns outside your attribution',
text: `Hola Adrian,
Kimia Group works with high-performance ad technology — but when campaigns include physical materials with QR codes (events, brand assets, signage), those scans don't enter any attribution model. All the optimization runs on the digital side. The physical QR channel is a blind spot.
QR Master closes that gap: dynamic QR codes with real-time scan analytics, destinations updatable without reprinting, UTM-ready so offline scans reach the same dashboards as your digital campaigns. Marketing teams in Spain and Europe use it to make the physical channel as measurable as the digital one.
Worth a look? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'nils.persson@visitsweden.com',
subject: 'QR codes on Visit Sweden materials',
text: `Hi Nils,
Visit Sweden produces printed marketing materials — destination guides, travel fair displays, co-op campaigns with tourism operators — and those materials almost certainly carry QR codes pointing to web pages that change by season. When a campaign expires or a destination page updates, every printed piece already in distribution is pointing somewhere stale. For a tourism board operating across international markets and travel fairs, that creates inconsistent experiences for travel partners and end visitors alike.
QR Master makes those QR codes dynamic: update destinations from a single dashboard, and see scan data by country and device — useful for understanding which markets actually engage with your physical marketing materials across trade fair seasons.
Happy to walk through how it works for a campaign at your scale — qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'natalie.karakina@avow.tech',
subject: 'QR scan data missing from your campaigns?',
text: `Hallo Natalie,
Avow helps app publishers acquire users through OEM and in-device channels — but when campaigns include trade fair materials, events, or printed assets with QR codes, those scans don't appear in any analytics system. You measure every digital touchpoint. The QR at a trade fair booth or in a printed asset is a blind spot.
QR Master closes that gap: dynamic QR codes with real-time scan analytics (device, country, time), UTM-ready for existing dashboards, destinations updatable at any time without reprinting. Marketing teams in Germany use it to make physical campaign touchpoints as measurable as digital ones.
Relevant for your campaigns? qrmaster.net — free to try, no card needed.
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'declan@strategicabm.com',
subject: 'print assets in your ABM plays',
text: `Hi Declan,
ABM campaigns at the account level often include physical touchpoints — printed account kits, event materials, direct mail to named accounts. The QR codes on those assets generate engagement that never reaches your reporting stack. For a CMO building account-based strategies, that's attribution data missing from every campaign review.
QR Master makes those QR codes dynamic and trackable: scan analytics by device, location, and time; destinations updatable mid-campaign; UTM-ready for existing ABM dashboards. Agencies running account-based campaigns use it to make physical touchpoints as reportable as digital ones.
Relevant for your ABM campaigns with physical elements? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'gmonasterios@arque.com',
subject: 'seasonal materials QR still current?',
text: `Hola Gilberto,
In retail, seasonal materials are printed in advance — and the QR codes on those materials point to pages that sometimes change before the materials even reach the store. Items already in circulation keep pointing to the previous campaign, and customers who scan land on an outdated or expired page.
QR Master makes those codes dynamic: update the destination from a dashboard in seconds without reprinting. Every scan is tracked — device, country, time — so you know which materials generate real in-store engagement and which don't.
Worth a look before the next season? qrmaster.net
Timo from QR Master
timo@qrmaster.net`
},
{
to: 'lea.delalandre@blissim.fr',
subject: 'beauty box insert QR still pointing correctly?',
text: `Bonjour Léa,
Blissim ships monthly beauty boxes with inserts — product pages, promo codes, partner brand content. The QR codes on those inserts point to pages that change between editions. Subscribers receiving an older box scan the QR and land on an expired or missing page — a recurring friction point for a platform managing dozens of brand partners every month.
QR Master makes those codes dynamic: the destination is updatable each new edition without touching the already-printed inserts. Every scan is tracked too — device, country, time — useful for benchmarking engagement per brand partner and per edition.
Worth a look for the next box? qrmaster.net — free, no card needed.
Timo from QR Master
timo@qrmaster.net`
}
];
async function sendAll() {
let sent = 0;
let failed = 0;
for (const email of emails) {
try {
await transporter.sendMail({
from: FROM,
to: email.to,
bcc: BCC,
subject: email.subject,
text: email.text
});
console.log(`✓ Sent to ${email.to}`);
sent++;
await new Promise(r => setTimeout(r, 800));
} catch (err) {
console.error(`✗ Failed: ${email.to}${err.message}`);
failed++;
}
}
console.log(`\n${sent}/${emails.length} sent, ${failed} failures.`);
}
sendAll();

View File

@@ -1,117 +0,0 @@
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import os
import markdown
import logging
import re
# Setup logging
logging.basicConfig(filename=r'c:\Users\a931627\Documents\QRMASTER\tmp\script_log.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s', force=True)
def get_pitch_data():
return [
{
"filename": "digitalGpoint-dynamic-vs-static-qr-codes.md",
"subject": "Pitch: Solving the 'print gap' for small businesses (DigitalGpoint)",
"to_email": "digitalgpoint.webmail@gmail.com",
"intro": "Hi DigitalGpoint Team,<br><br>Ive noticed DigitalGpoint covers a lot of practical tools for business growth—especially those that bridge the gap between offline operations and digital simplicity. My latest draft fits right into this space."
},
{
"filename": "techdee-5-qr-code-strategies.md",
"subject": "Pitch: Offline-to-Online marketing workflows (Techdee)",
"to_email": "Blayget@gmail.com",
"intro": "Hi Techdee Team,<br><br>Ive been following Techdees tech and marketing tutorials for a while. Your audience seems to really value actionable, tech-forward tactics that small businesses can actually execute. This piece on QR strategies was written with that utility in mind."
},
{
"filename": "seosandwitch-qr-codes-offline-attribution.md",
"subject": "Pitch: Attribution blind spots in physical marketing (SEO Sandwitch)",
"to_email": "joydeep@seosandwitch.com",
"intro": "Hi Joydeep,<br><br>Ive been working on a technical deep-dive into how QR codes can bridge the offline attribution gap in local SEO. Given your focus on technical search strategies, I thought this would be a perfect fit for SEO Sandwitch."
}
]
def send_premium_email(pitch_data):
smtp_host = "smtp.qrmaster.net"
smtp_port = 465
smtp_user = "timo@qrmaster.net"
smtp_pass = "fiesta"
bcc_email = "knuth.timo@gmail.com"
articles_dir = r"c:\Users\a931627\Documents\QRMASTER\articles"
images_dir = r"c:\Users\a931627\Documents\QRMASTER\assets\images"
logging.info(f"Starting real email dispatch for the {len(pitch_data)} guest post pitches.")
for item in pitch_data:
to_email = item["to_email"]
file_path = os.path.join(articles_dir, item["filename"])
if not os.path.exists(file_path):
logging.error(f"File not found: {item['filename']}")
continue
with open(file_path, "r", encoding="utf-8") as f:
article_content = f.read()
article_html = markdown.markdown(article_content, extensions=['tables', 'fenced_code', 'nl2br'])
# Find images and prepare attachments
img_tags = re.findall(r'<img [^>]*src="([^"]+)"[^>]*>', article_html)
attachments = []
for img_src in img_tags:
img_filename = os.path.basename(img_src)
img_path = os.path.join(images_dir, img_filename)
if os.path.exists(img_path):
cid = img_filename.replace(".", "_")
article_html = article_html.replace(img_src, f"cid:{cid}")
with open(img_path, "rb") as img_f:
img_data = img_f.read()
mime_img = MIMEImage(img_data)
mime_img.add_header('Content-ID', f'<{cid}>')
mime_img.add_header('Content-Disposition', 'inline', filename=img_filename)
attachments.append(mime_img)
else:
logging.warning(f"Image not found: {img_path}")
html_template = f"""
<html>
<body style="font-family: Arial, sans-serif;">
<div style="max-width: 600px; margin: auto; padding: 20px; border: 1px solid #ccc;">
<div style="background: #f4f4f4; padding: 15px; margin-bottom: 20px;">{item["intro"]}</div>
<div>{article_html}</div>
</div>
</body>
</html>
"""
message = MIMEMultipart("related")
message["From"] = smtp_user
message["To"] = to_email
message["Bcc"] = bcc_email
message["Subject"] = item["subject"]
msg_alternative = MIMEMultipart("alternative")
message.attach(msg_alternative)
msg_alternative.attach(MIMEText(html_template, "html"))
for att in attachments:
message.attach(att)
try:
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
server.login(smtp_user, smtp_pass)
# Send to To and Bcc
recipients = [to_email, bcc_email]
server.sendmail(smtp_user, recipients, message.as_string())
logging.info(f"Successfully sent: {item['filename']} to {to_email} (BCC'd {bcc_email})")
print(f"SENT: {item['filename']} to {to_email}")
except Exception as e:
logging.error(f"Failed to send {item['filename']} to {to_email}: {e}")
print(f"FAILED: {item['filename']} to {to_email}")
if __name__ == "__main__":
pitches = get_pitch_data()
send_premium_email(pitches)

Binary file not shown.

View File

@@ -1,149 +0,0 @@
C:\Users\a931627\Documents\QRMASTER\src\lib\author-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::static-vs-dynamic-qr-code
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::microsoft-teams-qr-code
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-restaurant-menu
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::vcard-qr-code-generator
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-small-business
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-print-size-guide
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-tracking-guide-2025
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::dynamic-vs-static-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::bulk-qr-code-generator-excel
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-analytics
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::barcode-generator-tool
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::spotify-code-generator-guide
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::whatsapp-qr-code-generator
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::instagram-qr-code-generator
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::trackable-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::utm-parameter-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-scan-statistics-2026
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-events
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::business-card-qr-code
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-marketing
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-security
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::qr-code-api-documentation
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::free-vs-paid-qr-generator
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::best-qr-code-generator-2026
C:\Users\a931627\Documents\QRMASTER\src\lib\blog-data.ts:::timo
C:\Users\a931627\Documents\QRMASTER\src\lib\comparison-pages.ts:::beaconstac-alternative
C:\Users\a931627\Documents\QRMASTER\src\lib\comparison-pages.ts:::flowcode-alternative
C:\Users\a931627\Documents\QRMASTER\src\lib\comparison-pages.ts:::qr-code-monkey-vs-qr-master
C:\Users\a931627\Documents\QRMASTER\src\lib\comparison-pages.ts:::free-vs-paid-qr-code-generator
C:\Users\a931627\Documents\QRMASTER\src\lib\comparison-pages.ts:::dynamic-vs-static-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\comparison-pages.ts:::bulk-qr-generator-vs-single-qr-generator
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::restaurant-menu-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::business-card-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::event-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::flyer-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::packaging-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::real-estate-sign-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::feedback-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::payment-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\growth-pages.ts:::coupon-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::why-my-qr-code-is-not-scanning
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::qr-code-print-size
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::how-to-track-qr-code-scans
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::qr-code-gdpr
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::how-to-create-a-vcard-qr-code
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::how-to-use-utm-with-qr-codes
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::qr-code-security-best-practices
C:\Users\a931627\Documents\QRMASTER\src\lib\guide-pages.ts:::dynamic-qr-code-best-practices
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::restaurants
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::cafes
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::hotels
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::real-estate
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::gyms
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::doctors-dentists
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::retail
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::events
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::bars
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::food-trucks
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::bakeries
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::breweries
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::nightclubs
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::catering
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::wineries
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::yoga-studios
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::spas
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::beauty-salons
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::barbershops
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::nail-salons
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::tattoo-studios
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::pharmacies
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::clothing-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::car-dealerships
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::florists
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::pet-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::electronics-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::jewelry-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::hardware-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::bookstores
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::universities
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::schools
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::museums
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::libraries
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::theaters
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::cinemas
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::churches
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::art-galleries
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::stadiums
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::wedding-planners
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::photographers
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::trade-shows
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::law-firms
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::accountants
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::insurance-agencies
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::travel-agencies
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::coworking-spaces
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::property-management
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::airports
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::dentists
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::pet-grooming
C:\Users\a931627\Documents\QRMASTER\src\lib\industry-pages.ts:::veterinarians
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-1.ts:::tattoo-studios
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-1.ts:::pharmacies
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-1.ts:::car-dealerships
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-1.ts:::museums
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-1.ts:::law-firms
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-2.ts:::accountants
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-2.ts:::insurance-agencies
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-2.ts:::bookstores
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-2.ts:::libraries
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-2.ts:::universities
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-3.ts:::schools
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-3.ts:::churches
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-3.ts:::art-galleries
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-3.ts:::stadiums
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-3.ts:::theaters
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-4.ts:::wedding-planners
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-4.ts:::photographers
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-4.ts:::trade-shows
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-4.ts:::clothing-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-4.ts:::florists
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-5.ts:::pet-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-5.ts:::electronics-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-5.ts:::jewelry-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-5.ts:::hardware-stores
C:\Users\a931627\Documents\QRMASTER\src\lib\temp-industries-5.ts:::cinemas

View File

@@ -1,178 +0,0 @@
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
import markdown
def send_premium_test_email():
# SMTP Settings
smtp_host = "smtp.qrmaster.net"
smtp_port = 465
smtp_user = "timo@qrmaster.net"
smtp_pass = "fiesta"
# Recipient
to_email = "knuth.timo@gmail.com"
# Article File Path
article_path = r"c:\Users\a931627\Documents\QRMASTER\articles\seosandwitch-qr-codes-offline-attribution.md"
with open(article_path, "r", encoding="utf-8") as f:
article_content = f.read()
# Professional Markdown to HTML conversion
# Uses 'tables' and 'fenced_code' for perfect formatting
article_html = markdown.markdown(article_content, extensions=['tables', 'fenced_code', 'nl2br'])
subject = "Solving the 'print gap' for small businesses (Draft Included)"
# HTML Template - "Premium Digital Document"
html_template = f"""
<html>
<head>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Lora:ital,wght@0,400;0,700;1,400&display=swap');
body {{
font-family: 'Inter', system-ui, -apple-system, sans-serif;
line-height: 1.6;
color: #2D3748;
background-color: #F7FAFC;
padding: 40px 20px;
margin: 0;
}}
.container {{
background-color: #ffffff;
max-width: 760px;
margin: 0 auto;
padding: 60px;
border: 1px solid #E2E8F0;
border-radius: 4px;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.05);
}}
.pitch-section {{
margin-bottom: 50px;
font-size: 16px;
border-bottom: 2px solid #EDF2F7;
padding-bottom: 40px;
}}
.draft-metadata {{
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-bottom: 30px;
padding: 15px;
background: #F8FAFC;
border: 1px solid #E2E8F0;
font-size: 13px;
color: #64748B;
border-radius: 4px;
}}
.article-content {{
font-family: 'Lora', Georgia, 'Times New Roman', serif;
font-size: 18px;
color: #1A202C;
line-height: 1.7;
}}
/* Professional Markdown Overrides */
.article-content h1 {{ font-family: 'Inter', sans-serif; font-size: 32px; font-weight: 600; margin-top: 0; }}
.article-content h2 {{ font-family: 'Inter', sans-serif; font-size: 24px; font-weight: 600; margin-top: 40px; border-bottom: 1px solid #E2E8F0; padding-bottom: 8px; }}
.article-content h3 {{ font-family: 'Inter', sans-serif; font-size: 20px; font-weight: 600; margin-top: 30px; }}
.article-content table {{
width: 100%;
border-collapse: collapse;
margin: 30px 0;
font-size: 15px;
font-family: 'Inter', sans-serif;
}}
.article-content th {{
background-color: #F1F5F9;
text-align: left;
padding: 12px;
border: 1px solid #CBD5E1;
font-weight: 600;
}}
.article-content td {{
padding: 12px;
border: 1px solid #E2E8F0;
}}
.article-content tr:nth-child(even) {{ background-color: #F8FAFC; }}
.article-content blockquote {{
border-left: 4px solid #3182CE;
margin: 30px 0;
padding: 10px 20px;
background: #EBF8FF;
font-style: italic;
}}
.article-content pre {{
background: #1A202C;
color: #E2E8F0;
padding: 20px;
border-radius: 6px;
overflow-x: auto;
font-size: 14px;
line-height: 1.5;
}}
.footer-note {{
margin-top: 60px;
padding-top: 20px;
border-top: 1px solid #E2E8F0;
font-size: 13px;
color: #94A3B8;
text-align: center;
}}
</style>
</head>
<body>
<div class="container">
<div class="pitch-section">
Hi Timo,<br><br>
I noticed your list of free resources for small businesses is one of the more practical ones out there. One category that's often missing: <b>QR code generators</b>.<br><br>
Instead of just sending a link, I've drafted a comprehensive guide on bridging the 'print gap' using dynamic indicators. I'd love to see this featured on <i>SEO Sandwitch</i> if it aligns with your upcoming content calendar.<br><br>
The full draft preview is below.<br><br>
Best,<br>
<b>Timo</b><br>
(Writer & Strategist)
</div>
<div class="draft-metadata">
<div><b>STATUS:</b> Finished Draft</div>
<div><b>FORMAT:</b> Case Study / Guide</div>
<div><b>LENGTH:</b> ~2,400 Words</div>
</div>
<div class="article-content">
{article_html}
</div>
<div class="footer-note">
This is a private preview intended for the editorial team at SEO Sandwitch.
</div>
</div>
</body>
</html>
"""
message = MIMEMultipart()
message["From"] = smtp_user
message["To"] = to_email
message["Subject"] = subject
message.attach(MIMEText(html_template, "html"))
try:
print(f"Connecting to {smtp_host}:{smtp_port} (PREMIUM MODE)...")
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
server.login(smtp_user, smtp_pass)
print("Login successful. Sending premium document email...")
server.sendmail(smtp_user, to_email, message.as_string())
print(f"Premium email sent successfully to {to_email}!")
except Exception as e:
print(f"Failed to send email: {e}")
if __name__ == "__main__":
send_premium_test_email()

View File

@@ -1,119 +0,0 @@
// Quick size test for email templates - run with: node tmp_email_size_test.js
const src = require('fs').readFileSync('src/lib/email.ts', 'utf8');
// Extract the constants we need
const clr = {
bg: '#F5F2EC', card: '#FFFFFF', header: '#0B0D14', headerAccent: '#1A1D2E',
gold: '#C8A257', goldDim: '#A07E3A', text: '#1A1A1A', textSoft: '#5A5A5A',
textMuted: '#909090', border: '#E8E3D8', pillBg: '#F0EDE5',
ctaBg: '#0B0D14', ctaText: '#FFFFFF',
};
const dotGridPattern = `url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%221.5%22%20fill%3D%22%23C8A257%22%20fill-opacity%3D%220.18%22%2F%3E%3C%2Fsvg%3E)`;
const webFontHead = `
<style>
@import url('https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=DM+Sans:wght@300;400;500;600&display=swap');
.dm-serif { font-family: 'DM Serif Display', Georgia, 'Times New Roman', serif !important; }
.dm-sans { font-family: 'DM Sans', -apple-system, 'Helvetica Neue', Arial, sans-serif !important; }
</style>`;
const appUrl = 'https://www.qrmaster.net';
function emailShell(headExtra, bodyContent) {
return `<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="color-scheme" content="light">
<meta name="supported-color-schemes" content="light">
${webFontHead}
${headExtra}
</head>
<body style="margin:0;padding:0;background-color:${clr.bg};-webkit-text-size-adjust:100%;mso-line-height-rule:exactly;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0"
style="background-color:${clr.bg};padding:40px 16px 60px;">
<tr><td align="center">
<!-- Email card -->
<table role="presentation" width="560" cellpadding="0" cellspacing="0" border="0"
style="max-width:560px;width:100%;background-color:${clr.card};border-radius:16px;
overflow:hidden;box-shadow:0 8px 40px rgba(0,0,0,0.12);">
${bodyContent}
</table>
<!-- Footer text -->
<table role="presentation" width="560" cellpadding="0" cellspacing="0" border="0"
style="max-width:560px;width:100%;margin-top:28px;">
<tr>
<td style="text-align:center;padding:0 20px;">
<p style="margin:0 0 6px;font-family:'DM Sans',-apple-system,sans-serif;font-size:12px;color:${clr.textMuted};">
<a href="${appUrl}" style="color:${clr.gold};text-decoration:none;font-weight:500;">www.qrmaster.net</a>
&nbsp;·&nbsp;
<a href="mailto:support@qrmaster.net" style="color:${clr.textMuted};text-decoration:none;">support@qrmaster.net</a>
</p>
<p style="margin:0;font-family:'DM Sans',-apple-system,sans-serif;font-size:11px;color:#B0A898;">
© 2026 QR Master. You're receiving this because you created an account.
</p>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>`;
}
// Build welcome email
const firstName = 'Timo';
const createUrl = `${appUrl}/create`;
const welcomeHtml = emailShell('', `
<!-- ── HEADER ── -->
<tr>
<td style="background-color:${clr.card};background-image:${dotGridPattern};
background-size:24px 24px;padding:60px 48px 50px;text-align:center;">
<table role="presentation" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
<td style="border:1px solid rgba(200,162,87,0.4);border-radius:6px;padding:6px 16px;background-color:rgba(200,162,87,0.05);">
<span style="font-family:'DM Sans',-apple-system,sans-serif;font-size:10px;font-weight:700;letter-spacing:3px;color:${clr.gold};text-transform:uppercase;">QR Master</span>
</td>
</tr>
</table>
<h1 style="margin:36px 0 0;font-family:'DM Serif Display',Georgia,serif;font-size:42px;font-weight:400;line-height:1.1;color:${clr.text};letter-spacing:-0.5px;">
Welcome,<br>
<em style="color:${clr.gold};font-style:italic;">${firstName}.</em>
</h1>
<p style="margin:24px 0 0;font-family:'DM Sans',-apple-system,sans-serif;font-size:15px;color:${clr.textSoft};letter-spacing:0.3px;">
The physical world is now your canvas.
</p>
</td>
</tr>
<tr>
<td style="padding: 0; text-align: center; background-color: ${clr.card};">
<img src="${appUrl}/email-hero-light.png" width="560" style="display:block;width:100%;max-width:560px;height:auto;border-bottom:3px solid ${clr.gold};" alt="Beautiful QR Code Experience">
</td>
</tr>
<tr>
<td style="padding:56px 48px 0;">
<p style="margin:0 0 24px;font-family:'DM Sans',-apple-system,sans-serif;font-size:16px;line-height:1.8;color:${clr.text};">
Let's be honest: most QR codes are static, look terrible, and break the moment you change a link. We built QR Master to fix that.
</p>
<p style="margin:0 0 24px;font-family:'DM Sans',-apple-system,sans-serif;font-size:16px;line-height:1.8;color:${clr.text};">
Your account is fully activated. You now have the power to create beautiful, dynamic QR codes that adapt to your brand, never expire, and track every single scan (device, location, and time).
</p>
<p style="margin:0;font-family:'DM Sans',-apple-system,sans-serif;font-size:16px;line-height:1.8;color:${clr.textSoft};">
To give you the perfect start, we've loaded your account with everything you need:
</p>
</td>
</tr>
`);
const sizeKB = Buffer.byteLength(welcomeHtml, 'utf8') / 1024;
console.log('Welcome email rendered size:', sizeKB.toFixed(1), 'KB');
console.log('Gmail clips at: 102 KB');
console.log('Status:', sizeKB < 102 ? 'OK - under limit' : 'CLIPPED - over 102KB limit!');
console.log('');
console.log('Shell overhead approx:', Buffer.byteLength(emailShell('', ''), 'utf8') / 1024, 'KB');

File diff suppressed because one or more lines are too long