Landing-Marketing / SEO-Infrastruktur / a11y-Viewport)
This commit is contained in:
@@ -7,6 +7,9 @@
|
|||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
RewriteCond %{REQUEST_URI} ^/(var|database|scripts|docs|app|lib)/ [NC]
|
RewriteCond %{REQUEST_URI} ^/(var|database|scripts|docs|app|lib)/ [NC]
|
||||||
RewriteRule ^ - [F]
|
RewriteRule ^ - [F]
|
||||||
|
|
||||||
|
# Konventionelle /sitemap.xml auf die dynamische, host-korrekte Sitemap.
|
||||||
|
RewriteRule ^sitemap\.xml$ sitemap.php [L]
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
<FilesMatch "^(env\.local\.php|env\.local\.example\.php|\.env.*|composer\.(json|lock))$">
|
<FilesMatch "^(env\.local\.php|env\.local\.example\.php|\.env.*|composer\.(json|lock))$">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>AGB – Kaffeeliste</title>
|
<title>AGB – Kaffeeliste</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+88
-1
@@ -63,10 +63,25 @@ body.public-page {
|
|||||||
|
|
||||||
.public-hero p {
|
.public-hero p {
|
||||||
color: #3d4449;
|
color: #3d4449;
|
||||||
font-size: 1.15em;
|
|
||||||
max-width: 34rem;
|
max-width: 34rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.public-hero-lead {
|
||||||
|
font-size: 1.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-hero-sub {
|
||||||
|
font-size: 1.05em;
|
||||||
|
color: #38761d;
|
||||||
|
margin-top: -0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-hero-reassure {
|
||||||
|
font-size: 0.85em;
|
||||||
|
color: #7f888f;
|
||||||
|
margin-top: 0.85rem;
|
||||||
|
}
|
||||||
|
|
||||||
.public-section {
|
.public-section {
|
||||||
padding: 4rem 6vw;
|
padding: 4rem 6vw;
|
||||||
}
|
}
|
||||||
@@ -117,6 +132,78 @@ body.public-page {
|
|||||||
background: #eef4ea;
|
background: #eef4ea;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Trust-Band direkt unter dem Hero: faktische Vertrauensanker, kein Fließtext. */
|
||||||
|
.public-trust {
|
||||||
|
background: #38761d;
|
||||||
|
padding: 1rem 6vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-trust ul {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0;
|
||||||
|
max-width: 72rem;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 0.5rem 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-trust li {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 0.9em;
|
||||||
|
padding-left: 1.4rem;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-trust li:before {
|
||||||
|
content: "\2713";
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Zielgruppen-Chips zur Selbst-Identifikation des Besuchers. */
|
||||||
|
.public-audience-list {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0;
|
||||||
|
max-width: 60rem;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-audience-list li {
|
||||||
|
border: solid 1px rgba(210, 215, 217, 0.9);
|
||||||
|
border-radius: 999px;
|
||||||
|
padding: 0.5rem 1.1rem;
|
||||||
|
color: #3d4449;
|
||||||
|
background: #ffffff;
|
||||||
|
font-size: 0.95em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-price {
|
||||||
|
font-family: "Roboto Slab", serif;
|
||||||
|
font-size: 1.5em;
|
||||||
|
color: #38761d;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-price span {
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: 0.55em;
|
||||||
|
color: #7f888f;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-cta-reassure {
|
||||||
|
font-size: 0.85em;
|
||||||
|
color: #7f888f;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
.public-fineprint {
|
.public-fineprint {
|
||||||
max-width: 72rem;
|
max-width: 72rem;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Datenschutzerklärung – Kaffeeliste</title>
|
<title>Datenschutzerklärung – Kaffeeliste</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ $result = $token !== ''
|
|||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste E-Mail verifizieren</title>
|
<title>Kaffeeliste E-Mail verifizieren</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste</title>
|
<title>Kaffeeliste</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
</head>
|
</head>
|
||||||
<body class="is-preload">
|
<body class="is-preload">
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Impressum – Kaffeeliste</title>
|
<title>Impressum – Kaffeeliste</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+132
-52
@@ -1,13 +1,83 @@
|
|||||||
<?php require_once __DIR__ . '/app/bootstrap.php'; ?>
|
<?php
|
||||||
|
require_once __DIR__ . '/app/bootstrap.php';
|
||||||
|
|
||||||
|
// Absolute Basis-URL fuer Open-Graph/Canonical: die Landingpage laeuft auf der
|
||||||
|
// Marketing-Domain (nicht APP_HOST), daher aus dem aktuellen Request ableiten.
|
||||||
|
$landingScheme = app_is_https() ? 'https' : 'http';
|
||||||
|
$landingHost = (string)($_SERVER['HTTP_HOST'] ?? '');
|
||||||
|
$landingBase = $landingHost !== '' ? $landingScheme . '://' . $landingHost : '';
|
||||||
|
$landingUrl = $landingBase !== '' ? $landingBase . '/' : '';
|
||||||
|
$landingImage = $landingBase !== '' ? $landingBase . '/assets/images/landing-hero.png' : '';
|
||||||
|
$metaDescription = 'Kaffeeliste automatisiert die Abrechnung eurer Kaffeekasse: Guthaben, Zahlungen und offene Beträge immer im Blick. In 5 Minuten startklar, kostenlos für Teams bis 10 Personen.';
|
||||||
|
|
||||||
|
$faqItems = [
|
||||||
|
['Wie schnell ist meine Kaffeeliste startklar?', 'Kundenkonto anlegen, Mitglieder eintragen, loslegen. Es ist keine Einrichtung durch uns nötig, und die bestehenden Abläufe rund um Striche und Einzahlungen bleiben dieselben.'],
|
||||||
|
['Was kostet die Kaffeeliste?', 'Bis 10 Teilnehmer kostenlos, danach gestaffelt nach Teamgröße ab 3,99 € im Monat – ohne Kosten pro Kopf.'],
|
||||||
|
['Sind unsere Daten von denen anderer Kunden getrennt?', 'Ja. Jeder Kunde hat einen eigenen, isolierten Bereich für Mitglieder, Buchungen und Einstellungen. Diese Trennung ist fester Bestandteil der App und wird automatisiert geprüft.'],
|
||||||
|
['Wer darf in unserem Team was ändern?', 'Ihr vergebt Rollen wie Administrator, Kassenwart oder Mitglied gezielt pro Person – und könnt den Zugang jederzeit wieder entziehen, ohne den Mitgliedseintrag selbst zu löschen.'],
|
||||||
|
['Können wir unsere Daten exportieren oder löschen lassen?', 'Ja. Ihr könnt alle gespeicherten Daten jederzeit als Export herunterladen und einzelne Mitglieder oder euren gesamten Kundenbereich selbstständig wieder entfernen lassen.'],
|
||||||
|
['Müssen wir PayPal nutzen?', 'Nein, PayPal ist optional und lässt sich in den Mandant-Einstellungen aktivieren. Einzahlungen können weiterhin auch manuell erfasst werden.'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$faqLd = [
|
||||||
|
'@context' => 'https://schema.org',
|
||||||
|
'@type' => 'FAQPage',
|
||||||
|
'mainEntity' => array_map(static function (array $item): array {
|
||||||
|
return [
|
||||||
|
'@type' => 'Question',
|
||||||
|
'name' => $item[0],
|
||||||
|
'acceptedAnswer' => ['@type' => 'Answer', 'text' => $item[1]],
|
||||||
|
];
|
||||||
|
}, $faqItems),
|
||||||
|
];
|
||||||
|
|
||||||
|
$productLd = [
|
||||||
|
'@context' => 'https://schema.org',
|
||||||
|
'@type' => 'SoftwareApplication',
|
||||||
|
'name' => 'Kaffeeliste',
|
||||||
|
'applicationCategory' => 'BusinessApplication',
|
||||||
|
'operatingSystem' => 'Web',
|
||||||
|
'description' => $metaDescription,
|
||||||
|
'offers' => [
|
||||||
|
['@type' => 'Offer', 'price' => '0', 'priceCurrency' => 'EUR', 'description' => 'Bis 10 Teilnehmer'],
|
||||||
|
['@type' => 'Offer', 'price' => '3.99', 'priceCurrency' => 'EUR', 'description' => 'Bis 25 Teilnehmer / Monat'],
|
||||||
|
['@type' => 'Offer', 'price' => '7.99', 'priceCurrency' => 'EUR', 'description' => 'Bis 50 Teilnehmer / Monat'],
|
||||||
|
['@type' => 'Offer', 'price' => '12.99', 'priceCurrency' => 'EUR', 'description' => 'Bis 150 Teilnehmer / Monat'],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$jsonFlags = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
|
||||||
|
?>
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste – die digitale Kaffeekasse für Teams</title>
|
<title>Kaffeeliste – die digitale Kaffeekasse, die von allein mitrechnet</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="description" content="Kaffeeliste automatisiert die Abrechnung eurer Kaffeekasse: Guthaben, Zahlungen und offene Beträge immer im Blick – ab 0 € im Monat, in Minuten startklar." />
|
<meta name="description" content="<?php echo htmlspecialchars($metaDescription, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<meta name="theme-color" content="#38761d" />
|
||||||
|
<?php if ($landingUrl !== ''): ?>
|
||||||
|
<link rel="canonical" href="<?php echo htmlspecialchars($landingUrl, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<?php endif; ?>
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:site_name" content="Kaffeeliste" />
|
||||||
|
<meta property="og:title" content="Die Kaffeekasse, die von allein mitrechnet" />
|
||||||
|
<meta property="og:description" content="<?php echo htmlspecialchars($metaDescription, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<meta property="og:locale" content="de_DE" />
|
||||||
|
<?php if ($landingUrl !== ''): ?>
|
||||||
|
<meta property="og:url" content="<?php echo htmlspecialchars($landingUrl, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($landingImage !== ''): ?>
|
||||||
|
<meta property="og:image" content="<?php echo htmlspecialchars($landingImage, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<meta name="twitter:image" content="<?php echo htmlspecialchars($landingImage, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<?php endif; ?>
|
||||||
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
|
<meta name="twitter:title" content="Die Kaffeekasse, die von allein mitrechnet" />
|
||||||
|
<meta name="twitter:description" content="<?php echo htmlspecialchars($metaDescription, ENT_QUOTES, 'UTF-8'); ?>" />
|
||||||
|
<link rel="preload" as="image" href="assets/images/landing-hero.png" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
|
<script type="application/ld+json"><?php echo json_encode($productLd, $jsonFlags); ?></script>
|
||||||
|
<script type="application/ld+json"><?php echo json_encode($faqLd, $jsonFlags); ?></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="is-preload public-page">
|
<body class="is-preload public-page">
|
||||||
<div class="public-shell">
|
<div class="public-shell">
|
||||||
@@ -21,14 +91,41 @@
|
|||||||
</nav>
|
</nav>
|
||||||
<div class="public-hero-content">
|
<div class="public-hero-content">
|
||||||
<h1>Die Kaffeekasse, die von allein mitrechnet</h1>
|
<h1>Die Kaffeekasse, die von allein mitrechnet</h1>
|
||||||
<p>Die Striche macht ihr weiterhin ganz klassisch an der Maschine – auf der ausgedruckten Liste, wie eh und je. Den Rest übernimmt Kaffeeliste: Guthaben, Zahlungen und offene Beträge sind für alle jederzeit auf einen Blick sichtbar. Schluss mit Kopfrechnen, Excel-Tabellen und dem lästigen Kassensturz am Monatsende.</p>
|
<p class="public-hero-lead">Schluss mit Kopfrechnen, Zettelwirtschaft und dem lästigen Kassensturz am Monatsende. Wer wie viel offen hat, sieht jeder auf einen Blick – ihr macht nur noch die Striche, den Rest erledigt Kaffeeliste.</p>
|
||||||
|
<p class="public-hero-sub"><strong>In 5 Minuten startklar. Kostenlos für Teams bis 10 Personen.</strong></p>
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
<li><a href="<?php echo htmlspecialchars(app_primary_url('register.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button primary big">Kostenlos einrichten</a></li>
|
<li><a href="<?php echo htmlspecialchars(app_primary_url('register.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button primary big">Kostenlos einrichten</a></li>
|
||||||
<li><a href="<?php echo htmlspecialchars(app_primary_url('login.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button big">Zur App</a></li>
|
<li><a href="<?php echo htmlspecialchars(app_primary_url('login.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button big">Zur App</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p class="public-hero-reassure">Keine Kreditkarte nötig · in wenigen Minuten startklar · jederzeit kündbar</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section class="public-trust" aria-label="Auf einen Blick">
|
||||||
|
<ul>
|
||||||
|
<li>Bis 10 Personen kostenlos</li>
|
||||||
|
<li>Ohne Kreditkarte starten</li>
|
||||||
|
<li>DSGVO-konform: Daten jederzeit export- & löschbar</li>
|
||||||
|
<li>§ 19 UStG – keine Mehrwertsteuer</li>
|
||||||
|
<li>Bestehende Abläufe bleiben</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="public-section public-audience">
|
||||||
|
<header class="major">
|
||||||
|
<h2>Für jede Teeküche gemacht</h2>
|
||||||
|
<p>Überall dort, wo mehrere Leute an einer Maschine trinken – und am Ende niemand nachrechnen will.</p>
|
||||||
|
</header>
|
||||||
|
<ul class="public-audience-list">
|
||||||
|
<li>Büros & Agenturen</li>
|
||||||
|
<li>Arzt- & Zahnarztpraxen</li>
|
||||||
|
<li>Vereine</li>
|
||||||
|
<li>Werkstätten & Betriebe</li>
|
||||||
|
<li>Kanzleien</li>
|
||||||
|
<li>Gemeinschaftsküchen</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section class="public-section">
|
<section class="public-section">
|
||||||
<header class="major">
|
<header class="major">
|
||||||
<h2>So funktioniert's</h2>
|
<h2>So funktioniert's</h2>
|
||||||
@@ -55,68 +152,68 @@
|
|||||||
|
|
||||||
<section class="public-section">
|
<section class="public-section">
|
||||||
<header class="major">
|
<header class="major">
|
||||||
<h2>Alles rund um die Kaffeekasse</h2>
|
<h2>Was dein Team davon hat</h2>
|
||||||
<p>Kein Feature-Wildwuchs – nur, was ein Team wirklich braucht.</p>
|
<p>Für alle, die einfach nur Kaffee trinken wollen – ohne Diskussionen über die Kasse.</p>
|
||||||
</header>
|
</header>
|
||||||
<div class="public-grid">
|
<div class="public-grid">
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Immer der richtige Zugriff</h3>
|
<h3>Jeder sieht seinen Stand</h3>
|
||||||
<p>Neue Kolleg:innen sind in einer Minute angelegt, wer geht, ist genauso schnell wieder draußen. Rollen wie Admin oder Kassenwart vergebt ihr gezielt – zum Beispiel für die Praktikantin, die nur Striche einträgt, aber nichts an den Einstellungen ändern kann.</p>
|
<p>Kein Nachfragen, kein böses Erwachen: Guthaben oder offener Betrag stehen jederzeit im eigenen Dashboard – am Handy in der Teeküche oder am Rechner.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Nie wieder „Wer hat schon bezahlt?"</h3>
|
<h3>Strich in zwei Sekunden</h3>
|
||||||
<p>Jede Einzahlung, jeder Strich, jede Korrektur landet automatisch im gemeinsamen Kontobuch – nachvollziehbar bis zum ersten Tag. Praktisch beim Jahresabschluss: ein Klick, fertig.</p>
|
<p>Ein Tipp auf „Ein Strich" oder „Zwei Striche" im eigenen Konto – der Verbrauch wird automatisch richtig zugeordnet. Nichts eintragen, nichts nachtragen.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Bezahlen in 10 Sekunden</h3>
|
<h3>Bezahlen ohne Kleingeld</h3>
|
||||||
<p>Wer offen ist, bekommt einen fertigen PayPal-Link mit passendem Betrag. Kein Bargeld, kein Wechselgeld-Chaos in der Teeküche.</p>
|
<p>Offener Betrag? Ein fertiger PayPal-Link mit dem passenden Betrag wartet schon. Kein Bargeld, kein „Ich hab's gleich".</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Die Liste an der Wand bleibt</h3>
|
<h3>Die Liste an der Wand bleibt</h3>
|
||||||
<p>Ausdrucken, aufhängen, fertig – mit eigenem Hinweistext als Wasserzeichen und automatisch passender Zeilengröße, egal ob 5 oder 150 Kolleg:innen mitmachen.</p>
|
<p>Der vertraute Ausdruck neben der Maschine bleibt – jetzt mit eurem eigenen Hinweistext als Wasserzeichen und automatisch passender Zeilengröße.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Alle informiert, ohne Rundmail-Chaos</h3>
|
<h3>Ein Hinweis für alle</h3>
|
||||||
<p>Ein Hinweisbanner für „Die Maschine ist kaputt" oder eine Erinnerungsmail an alle mit offenem Betrag – in einer Minute verschickt statt einzeln nachgefragt.</p>
|
<p>„Maschine ist kaputt" oder „Neue Sorte da"? Ein Banner erscheint für alle sichtbar in der App – ohne Rundmail und Zettel am Kühlschrank.</p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="public-section public-highlight">
|
<section class="public-section public-highlight">
|
||||||
<header class="major">
|
<header class="major">
|
||||||
<h2>6 Gründe, warum Verwalter Kaffeeliste lieben</h2>
|
<h2>6 Gründe, warum Kassenwarte Kaffeeliste lieben</h2>
|
||||||
<p>Für Admin und Kassenwart macht das den größten Unterschied im Alltag.</p>
|
<p>Der Papierkram der Kaffeekasse – ab jetzt erledigt sich der größtenteils selbst.</p>
|
||||||
</header>
|
</header>
|
||||||
<div class="public-grid public-steps public-advantages">
|
<div class="public-grid public-steps public-advantages">
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<span class="public-step-number">1</span>
|
<span class="public-step-number">1</span>
|
||||||
<h3>Kein Taschenrechner mehr</h3>
|
<h3>Kein Taschenrechner mehr</h3>
|
||||||
<p>Salden berechnen sich automatisch. Keine manuelle Addition von Strichen und Zahlungen am Monatsende.</p>
|
<p>Salden berechnen sich automatisch. Nie wieder Striche und Zahlungen am Monatsende von Hand zusammenzählen.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<span class="public-step-number">2</span>
|
<span class="public-step-number">2</span>
|
||||||
<h3>Ein Klick statt Excel-Akrobatik</h3>
|
<h3>Jahresabschluss auf Knopfdruck</h3>
|
||||||
<p>Jahresabschluss, Mitgliederliste, Export – direkt aus der App statt mühsamer Tabellenpflege nebenbei.</p>
|
<p>Auswertung fürs ganze Jahr direkt aus der App – statt Excel-Formeln zu pflegen, die keiner mehr versteht.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<span class="public-step-number">3</span>
|
<span class="public-step-number">3</span>
|
||||||
<h3>Erinnerungen laufen von allein</h3>
|
<h3>Erinnerungen laufen von allein</h3>
|
||||||
<p>Eine Info-Mail an alle mit offenem Betrag, statt jede Person einzeln anzuschreiben oder anzusprechen.</p>
|
<p>Eine Info-Mail an alle mit offenem Betrag statt jede Person einzeln anzuschreiben oder in der Küche anzusprechen.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<span class="public-step-number">4</span>
|
<span class="public-step-number">4</span>
|
||||||
<h3>Mitgliederverwaltung in Sekunden</h3>
|
<h3>Mitglieder in Sekunden verwaltet</h3>
|
||||||
<p>Neue Kolleg:innen anlegen, alte deaktivieren, Rollen vergeben – ohne Rückfragen, wer worauf Zugriff hat.</p>
|
<p>Neue Kolleg:innen anlegen, alte deaktivieren, Rollen vergeben – ohne Rückfragen, wer worauf Zugriff hat.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<span class="public-step-number">5</span>
|
<span class="public-step-number">5</span>
|
||||||
<h3>PayPal-Abgleich ohne Nachrechnen</h3>
|
<h3>PayPal-Abgleich ohne Nachrechnen</h3>
|
||||||
<p>Eingehende Zahlungen ordnen sich automatisch dem richtigen Mitglied zu – kein Abgleich von Hand mehr.</p>
|
<p>Eingehende Zahlungen lassen sich per Export einlesen und dem richtigen Mitglied zuordnen – inklusive Dublettenprüfung.</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<span class="public-step-number">6</span>
|
<span class="public-step-number">6</span>
|
||||||
<h3>Der Stand ist immer griffbereit</h3>
|
<h3>Kein Feilschen mehr</h3>
|
||||||
<p>Ob am Handy in der Teeküche oder am Rechner im Büro: Der Kassenstand ist nie veraltet oder in der falschen Datei.</p>
|
<p>Jede Buchung ist nachvollziehbar bis zum ersten Tag. Diskussionen über „Ich hab aber weniger getrunken" erledigen sich von selbst.</p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -129,19 +226,19 @@
|
|||||||
<div class="public-grid">
|
<div class="public-grid">
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Bis 10 Teilnehmer</h3>
|
<h3>Bis 10 Teilnehmer</h3>
|
||||||
<p><strong>Kostenlos</strong></p>
|
<p class="public-price">Kostenlos</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Bis 25 Teilnehmer</h3>
|
<h3>Bis 25 Teilnehmer</h3>
|
||||||
<p><strong>3,99 € / Monat</strong></p>
|
<p class="public-price">3,99 €<span> / Monat</span></p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Bis 50 Teilnehmer</h3>
|
<h3>Bis 50 Teilnehmer</h3>
|
||||||
<p><strong>7,99 € / Monat</strong></p>
|
<p class="public-price">7,99 €<span> / Monat</span></p>
|
||||||
</article>
|
</article>
|
||||||
<article class="public-feature">
|
<article class="public-feature">
|
||||||
<h3>Bis 150 Teilnehmer</h3>
|
<h3>Bis 150 Teilnehmer</h3>
|
||||||
<p><strong>12,99 € / Monat</strong></p>
|
<p class="public-price">12,99 €<span> / Monat</span></p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
<p class="public-fineprint">Mehr als 150 Teilnehmer? <a href="<?php echo htmlspecialchars(app_primary_url('preise.php'), ENT_QUOTES, 'UTF-8'); ?>">Preis auf Anfrage</a>. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet – die genannten Beträge sind die tatsächlich zu zahlenden Endpreise. Details unter <a href="<?php echo htmlspecialchars(app_primary_url('preise.php'), ENT_QUOTES, 'UTF-8'); ?>">Preise</a>.</p>
|
<p class="public-fineprint">Mehr als 150 Teilnehmer? <a href="<?php echo htmlspecialchars(app_primary_url('preise.php'), ENT_QUOTES, 'UTF-8'); ?>">Preis auf Anfrage</a>. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet – die genannten Beträge sind die tatsächlich zu zahlenden Endpreise. Details unter <a href="<?php echo htmlspecialchars(app_primary_url('preise.php'), ENT_QUOTES, 'UTF-8'); ?>">Preise</a>.</p>
|
||||||
@@ -162,30 +259,12 @@
|
|||||||
<h2>Häufige Fragen</h2>
|
<h2>Häufige Fragen</h2>
|
||||||
</header>
|
</header>
|
||||||
<div class="public-faq">
|
<div class="public-faq">
|
||||||
|
<?php foreach ($faqItems as $item): ?>
|
||||||
<div class="public-panel">
|
<div class="public-panel">
|
||||||
<h3>Wie schnell ist meine Kaffeeliste startklar?</h3>
|
<h3><?php echo htmlspecialchars($item[0], ENT_QUOTES, 'UTF-8'); ?></h3>
|
||||||
<p>Kundenkonto anlegen, Mitglieder eintragen, loslegen. Es ist keine Einrichtung durch uns nötig, und die bestehenden Abläufe rund um Striche und Einzahlungen bleiben dieselben.</p>
|
<p><?php echo htmlspecialchars($item[1], ENT_QUOTES, 'UTF-8'); ?></p>
|
||||||
</div>
|
|
||||||
<div class="public-panel">
|
|
||||||
<h3>Was kostet die Kaffeeliste?</h3>
|
|
||||||
<p>Bis 10 Teilnehmer kostenlos, danach gestaffelt nach Teamgröße ab 3,99 € im Monat – ohne Kosten pro Kopf. Details unter <a href="<?php echo htmlspecialchars(app_primary_url('preise.php'), ENT_QUOTES, 'UTF-8'); ?>">Preise</a>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="public-panel">
|
|
||||||
<h3>Sind unsere Daten von denen anderer Kunden getrennt?</h3>
|
|
||||||
<p>Ja. Jeder Kunde hat einen eigenen, isolierten Bereich für Mitglieder, Buchungen und Einstellungen. Diese Trennung ist fester Bestandteil der App und wird automatisiert geprüft.</p>
|
|
||||||
</div>
|
|
||||||
<div class="public-panel">
|
|
||||||
<h3>Wer darf in unserem Team was ändern?</h3>
|
|
||||||
<p>Ihr vergebt Rollen wie Administrator, Kassenwart oder Mitglied gezielt pro Person – und könnt den Zugang jederzeit wieder entziehen, ohne den Mitgliedseintrag selbst zu löschen.</p>
|
|
||||||
</div>
|
|
||||||
<div class="public-panel">
|
|
||||||
<h3>Können wir unsere Daten exportieren oder löschen lassen?</h3>
|
|
||||||
<p>Ja. Ihr könnt alle gespeicherten Daten jederzeit als Export herunterladen und einzelne Mitglieder oder euren gesamten Kundenbereich selbstständig wieder entfernen lassen.</p>
|
|
||||||
</div>
|
|
||||||
<div class="public-panel">
|
|
||||||
<h3>Müssen wir PayPal nutzen?</h3>
|
|
||||||
<p>Nein, PayPal ist optional und lässt sich in den Mandant-Einstellungen aktivieren. Einzahlungen können weiterhin auch manuell erfasst werden.</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -198,6 +277,7 @@
|
|||||||
<li><a href="<?php echo htmlspecialchars(app_primary_url('register.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button primary big">Kundenkonto anlegen</a></li>
|
<li><a href="<?php echo htmlspecialchars(app_primary_url('register.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button primary big">Kundenkonto anlegen</a></li>
|
||||||
<li><a href="<?php echo htmlspecialchars(app_primary_url('login.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button big">Zur App</a></li>
|
<li><a href="<?php echo htmlspecialchars(app_primary_url('login.php'), ENT_QUOTES, 'UTF-8'); ?>" class="button big">Zur App</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p class="public-cta-reassure">Bis 10 Personen kostenlos · keine Kreditkarte nötig · jederzeit kündbar</p>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste Login</title>
|
<title>Kaffeeliste Login</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste Passwort vergessen</title>
|
<title>Kaffeeliste Passwort vergessen</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste Passwort zurücksetzen</title>
|
<title>Kaffeeliste Passwort zurücksetzen</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Preise – Kaffeeliste</title>
|
<title>Preise – Kaffeeliste</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+1
-1
@@ -51,7 +51,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
<head>
|
<head>
|
||||||
<title>Kaffeeliste Registrierung</title>
|
<title>Kaffeeliste Registrierung</title>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link rel="stylesheet" href="assets/css/main.css" />
|
<link rel="stylesheet" href="assets/css/main.css" />
|
||||||
<link rel="stylesheet" href="assets/css/public.css" />
|
<link rel="stylesheet" href="assets/css/public.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
User-agent: *
|
||||||
|
Allow: /$
|
||||||
|
Allow: /landing.php
|
||||||
|
Allow: /preise.php
|
||||||
|
Allow: /impressum.php
|
||||||
|
Allow: /agb.php
|
||||||
|
Allow: /datenschutz.php
|
||||||
|
Disallow: /index.php
|
||||||
|
Disallow: /login.php
|
||||||
|
Disallow: /register.php
|
||||||
|
Disallow: /konto.php
|
||||||
|
Disallow: /backoffice.php
|
||||||
|
Disallow: /var/
|
||||||
|
Disallow: /app/
|
||||||
|
Disallow: /scripts/
|
||||||
|
|
||||||
|
Sitemap: /sitemap.xml
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
// Dynamische Sitemap: gibt absolute URLs anhand des tatsaechlichen Request-
|
||||||
|
// Hosts aus, damit sie unabhaengig von der Domain (Marketing-Domain, Test-
|
||||||
|
// umgebung) immer korrekt ist. Per .htaccess auch unter /sitemap.xml erreichbar.
|
||||||
|
require_once __DIR__ . '/app/bootstrap.php';
|
||||||
|
|
||||||
|
$scheme = app_is_https() ? 'https' : 'http';
|
||||||
|
$host = (string)($_SERVER['HTTP_HOST'] ?? '');
|
||||||
|
$base = $host !== '' ? $scheme . '://' . $host : '';
|
||||||
|
|
||||||
|
$pages = ['', 'preise.php', 'impressum.php', 'agb.php', 'datenschutz.php'];
|
||||||
|
|
||||||
|
header('Content-Type: application/xml; charset=utf-8');
|
||||||
|
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
||||||
|
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
|
||||||
|
foreach ($pages as $page) {
|
||||||
|
$loc = $base . '/' . $page;
|
||||||
|
echo ' <url><loc>' . htmlspecialchars($loc, ENT_QUOTES, 'UTF-8') . '</loc></url>' . "\n";
|
||||||
|
}
|
||||||
|
echo '</urlset>' . "\n";
|
||||||
Reference in New Issue
Block a user