feat(klz-2026): use external URL and static .vcf files for ultra-minimalist QR codes
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 13s
Build & Deploy / 🧪 QA (push) Successful in 1m25s
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
Build & Deploy / 🏗️ Build (push) Has been cancelled
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 13s
Build & Deploy / 🧪 QA (push) Successful in 1m25s
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
Build & Deploy / 🏗️ Build (push) Has been cancelled
This commit is contained in:
10
public/v/johannesgleich.vcf
Normal file
10
public/v/johannesgleich.vcf
Normal file
@@ -0,0 +1,10 @@
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Gleich;Johannes;;;
|
||||
FN:Johannes Gleich
|
||||
ORG:KLZ Vertriebs GmbH
|
||||
TITLE:Senior Key Account Manager
|
||||
TEL;TYPE=WORK,VOICE:+49 172 739 1109
|
||||
EMAIL;TYPE=PREF,INTERNET:johannes.gleich@klz-cables.com
|
||||
URL:https://klz-cables.com
|
||||
END:VCARD
|
||||
10
public/v/klausmintel.vcf
Normal file
10
public/v/klausmintel.vcf
Normal file
@@ -0,0 +1,10 @@
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Mintel;Klaus;;;
|
||||
FN:Klaus Mintel
|
||||
ORG:KLZ Vertriebs GmbH
|
||||
TITLE:Managing Director
|
||||
TEL;TYPE=WORK,VOICE:+49 151 1775 2873
|
||||
EMAIL;TYPE=PREF,INTERNET:klaus.mintel@klz-cables.com
|
||||
URL:https://klz-cables.com
|
||||
END:VCARD
|
||||
10
public/v/michaelbodemer.vcf
Normal file
10
public/v/michaelbodemer.vcf
Normal file
@@ -0,0 +1,10 @@
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Bodemer;Michael;;;
|
||||
FN:Michael Bodemer
|
||||
ORG:KLZ Vertriebs GmbH
|
||||
TITLE:Owner & Managing Director
|
||||
TEL;TYPE=WORK,VOICE:+49 151 462 467 98
|
||||
EMAIL;TYPE=PREF,INTERNET:michael.bodemer@klz-cables.com
|
||||
URL:https://klz-cables.com
|
||||
END:VCARD
|
||||
@@ -54,13 +54,23 @@ async function generateBusinessCards() {
|
||||
|
||||
const lastName = person.name.split(' ').slice(1).join(' ');
|
||||
const firstName = person.name.split(' ')[0];
|
||||
// Generate MECARD QR Code (much shorter than VCARD, leading to a less dense QR code that can be printed smaller)
|
||||
const mecard = `MECARD:N:${lastName},${firstName};ORG:KLZ Vertriebs GmbH;TEL:${person.phone};EMAIL:${person.email};URL:https://klz-cables.com;;`;
|
||||
|
||||
const qrCodeDataUrl = await QRCode.toDataURL(mecard, {
|
||||
// To make the QR code extremely coarse (minimalist), we cannot encode all contact details into it directly.
|
||||
// Instead, we create a physical .vcf file and encode ONLY its URL into the QR Code (e.g. 35 chars vs 140 chars).
|
||||
const shortId = person.name.toLowerCase().replace(/[^a-z0-9]/g, ''); // "michaelbodemer"
|
||||
const vcfUrl = `https://klz-cables.com/v/${shortId}.vcf`;
|
||||
|
||||
const vcardFull = `BEGIN:VCARD\r\nVERSION:3.0\r\nN:${lastName};${firstName};;;\r\nFN:${person.name}\r\nORG:KLZ Vertriebs GmbH\r\nTITLE:${person.role}\r\nTEL;TYPE=WORK,VOICE:${person.phone}\r\nEMAIL;TYPE=PREF,INTERNET:${person.email}\r\nURL:https://klz-cables.com\r\nEND:VCARD`;
|
||||
|
||||
// Save the physical .vcf file so it can be served by Next.js from /public/v/
|
||||
const vcardDir = path.join(process.cwd(), 'public/v');
|
||||
if (!fs.existsSync(vcardDir)) fs.mkdirSync(vcardDir, { recursive: true });
|
||||
fs.writeFileSync(path.join(vcardDir, `${shortId}.vcf`), vcardFull);
|
||||
|
||||
const qrCodeDataUrl = await QRCode.toDataURL(vcfUrl, {
|
||||
width: 400,
|
||||
margin: 0,
|
||||
errorCorrectionLevel: 'L', // Low error correction = less dots = easier to scan when small
|
||||
errorCorrectionLevel: 'L', // Low error correction = less dots
|
||||
color: { dark: '#000000', light: '#ffffff' },
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user