====== Digitale Visitenkarte mit QR-Code, selbst gehostet ======
Eine Kontaktseite pro Person, die per QR-Code aufgerufen wird: am Messestand, beim Netzwerktreffen, vom Sperrbildschirm des Smartphones oder von der gedruckten Karte. Ein Tipp auf „Kontakt speichern“ übernimmt alle Daten samt Foto ins Adressbuch. Ohne App, ohne Abo bei einem Visitenkarten-Dienst, auf dem eigenen Webspace.
Beispiel: [[https://team.falk.plus/jens/|team.falk.plus/jens/]]
===== 1. Was die Visitenkarte leistet =====
* **Ein QR-Code für immer:** Der Code enthält nur die Adresse der Seite (z. B. ''https://team.example.de/max/''). Ändern sich Telefonnummer oder Texte, wird nur die Seite neu erzeugt. Druck, Sperrbildschirm und Wallet-Karte bleiben gültig.
* **Kontakt speichern:** Eine vCard-Datei (''.vcf'') mit Name, Rolle, Firma, Telefon, E-Mail, Adresse, Website, LinkedIn und Foto. Android und iPhone öffnen sie direkt mit „Kontakt hinzufügen“.
* **Anfragen mit Herkunft:** Der Link „Termin vereinbaren“ trägt eine Herkunft in der Adresse (z. B. ''?utm_source=visitenkarte-max&utm_medium=visitenkarte''). Anfragen, die über die Karte kommen, sind in Webanalyse und Marketing-Automatisierung (bei uns Mautic) eindeutig erkennbar. Mehr dazu unter [[auftritt:e-mail-signaturen:start#anfragen_aus_der_signatur_erkennen|Anfragen aus der Signatur erkennen]].
* **Alle Wege auf einen Blick:** Anrufen, E-Mail, Termin buchen, Website, LinkedIn. Große Schaltflächen, fürs Smartphone gemacht, mit hellem und dunklem Modus.
* **Im eigenen Erscheinungsbild:** Farben, Schrift und Logo der Firma; die Schrift liegt auf dem eigenen Server (keine Google Fonts).
* **Für das ganze Team:** eine Seite pro Person unter einer eigenen Subdomain, später ergänzt um eine Teamübersicht.
===== 2. Aufbau =====
Die Seiten sind reines HTML: kein CMS, keine Datenbank, nichts, was gepflegt oder abgesichert werden muss. Erzeugt werden sie von einem kleinen Python-Skript aus einer Datendatei:
{
"personen": [
{
"kuerzel": "max",
"vorname": "Max",
"nachname": "Muster",
"rolle": "Inhaber · IT-Partner für …",
"mobil": "+49 …",
"email": "max@example.de",
"linkedin": "https://www.linkedin.com/in/…"
}
]
}
Das Skript erzeugt je Person:
* ''index.html'': die Kontaktseite
* ''vorname-nachname.vcf'': die vCard (Version 3.0, mit Foto)
* ''qr.svg'' / ''qr.png'': der QR-Code, beliebig skalierbar für den Druck
* ''sperrbildschirm.png'': Hintergrundbild fürs Smartphone mit großem QR-Code
* ''catima.png'': Kartenbild für die Wallet-App [[https://catima.app|Catima]] (Android)
Die Kürzel in der Adresse (''/max/'') werden **nie** geändert, denn sie stehen im QR-Code.
===== 3. Der QR-Code =====
* **Fehlerkorrektur H** (höchste Stufe): Bis zu 30 % des Codes dürfen fehlen. Das erlaubt eine freie Fläche in der Mitte für Logo oder Bildmarke.
* **Dunkel auf Hell**, nie invertiert. Viele Scanner lesen helle Codes auf dunklem Grund schlecht.
* **Kurze Adresse** = grobes Raster = auch aus Entfernung und bei schwachem Licht gut lesbar.
* Beim Zeigen vom Smartphone: Helligkeit hoch. Catima erledigt das beim Öffnen der Karte automatisch.
===== 4. Die vCard: Details, die oft schiefgehen =====
BEGIN:VCARD
VERSION:3.0
N:Muster;Max;;;
FN:Max Muster
ORG:Beispiel GmbH
TITLE:Inhaber · IT-Partner für Onlinehandel + DMS + Buchhaltung
TEL;TYPE=WORK,VOICE:+49 …
EMAIL;TYPE=INTERNET,WORK:max@example.de
URL:https://example.de/
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQ…
END:VCARD
* **Kommas und Semikolons maskieren:** ''\,'' und ''\;'', sonst wird z. B. die Rolle beim Komma abgeschnitten.
* **Lange Zeilen falten:** nach 75 Byte umbrechen, Folgezeile beginnt mit einem Leerzeichen. Das Foto als Base64 ist sonst eine einzige riesige Zeile.
* **Foto klein halten:** 240 × 240 Pixel JPEG reichen fürs Adressbuch.
* **Richtiger Dateityp:** Der Webserver muss ''.vcf'' als ''text/vcard'' ausliefern, sonst bieten Smartphones nur einen Download an.
* **Rolle in der vCard nicht vergessen:** Wer die Formulierung auf der Seite ändert, muss auch das Feld ''TITLE'' ändern. Sonst landet die alte Rolle im Adressbuch der Kunden. Deshalb kommen bei uns Seite und vCard aus **derselben** Datendatei.
===== 5. Suchmaschinen bewusst steuern =====
* **Seite indexierbar machen**, wenn sie bei der Suche nach dem Namen gefunden werden soll: '''', '''' und eine offene ''robots.txt''. Dann erscheint die Karte auch in KI-gestützten Suchen.
* **Open-Graph-Tags** (''og:title'', ''og:description'', ''og:image'') sorgen für eine ordentliche Vorschau, wenn die Adresse in WhatsApp, Signal oder LinkedIn geteilt wird.
* **Die vCard selbst auf noindex**: In den Suchergebnissen soll die Seite stehen, nicht ein nackter Download.
* **Achtung bei der Mobilnummer:** Was auf einer indexierbaren Seite steht, ist öffentlich. Wir verwenden dafür eine eigene Geschäfts-Mobilnummer und halten die private getrennt.
* Prüfen, ob noindex nicht doppelt gesetzt ist: neben dem Meta-Tag auch im Server-Header ''X-Robots-Tag'' und in der ''robots.txt''.
Für nginx (z. B. unter ISPConfig als „nginx Directives“; eine ''.htaccess'' wirkt dort nicht):
# Kontaktdateien mit richtigem Typ, aber nicht in Suchmaschinen
location ~* \.vcf$ {
types { }
default_type "text/vcard; charset=utf-8";
add_header X-Robots-Tag "noindex, nofollow" always;
}
===== 6. Pflege über Git =====
Datendatei, Skript, Fotos und Schrift liegen in einem Git-Repository (bei uns: eigene [[https://vw.falk.plus|Gitea-Instanz]]). Der Ablauf bei einer Änderung:
- Datendatei bzw. Foto ändern, Skript ausführen.
- Eintragen (Commit) und versenden (Push).
- Auf dem Webserver: ''git pull'' und den erzeugten Ordner ins Webverzeichnis spiegeln (''rsync %%--%%delete'').
Wichtig: Der erzeugte Ordner wird **nie von Hand** geändert, weder lokal noch auf dem Server. Der nächste Lauf überschreibt sonst alles. Und: Die Subdomain bekommt ein **eigenes** Webverzeichnis, nicht unterhalb der Hauptwebsite. Website-Generatoren wie Publii löschen beim Synchronisieren fremde Dateien.
===== 7. Auf dem Smartphone =====
* **Wallet-App (Android: Catima):** Karte hinzufügen, QR-Code vom Bildschirm scannen, Kartenbild hinterlegen. Beim Öffnen wird der Bildschirm automatisch hell.
* **Sperrbildschirm:** Das erzeugte Hintergrundbild (1080 × 2400) als Sperrbildschirm setzen. So ist der Code ohne Entsperren sofort zur Hand.
* **E-Mail-Signatur:** ein Link „Visitenkarte →“ auf die Seite (siehe [[auftritt:e-mail-signaturen:start|Einheitliche E-Mail-Signaturen mit Gitea]]).