design anpassung

This commit is contained in:
2026-06-23 00:06:31 +02:00
parent 1891ec0a51
commit cbea23083d
30 changed files with 785 additions and 547 deletions
+45 -45
View File
@@ -2,37 +2,37 @@
<section class="hero">
<div class="hero-copy">
<span class="eyebrow">Pilotbetrieb fuer Teams und Vereine</span>
<h1>Die digitale Kaffeeliste ist bereit fuer echte Pilotstandorte, nicht fuer leere Demo-Versprechen.</h1>
<p class="lead">Aktuell wird der Ablauf mit ausgewaehlten Teams verfeinert: Pilotmandanten koennen sich registrieren, Mitglieder fuer die Selbstbuchung anlegen und Backoffice-Prozesse fuer Papierlisten, Einzahlungen und spaetere RFID-Anbindung realistisch testen.</p>
<span class="eyebrow">Digitale Kaffeeliste für Teams, Vereine und Standorte</span>
<h1>Kaffeekasse verwalten, ohne Zettel und Tabellen auseinanderzuhalten.</h1>
<p class="lead">Mitglieder buchen ihren Kaffee selbst, Einzahlungen landen am richtigen Konto und Papierlisten können später sauber nacherfasst werden. So sehen Verantwortliche jederzeit, wer gebucht, bezahlt oder noch offen hat.</p>
<div class="button-row">
<?php if ($setupComplete): ?>
<a class="button button-primary" href="<?= e(url('/register')) ?>">Pilotmandant anlegen</a>
<a class="button button-primary" href="<?= e(url('/register')) ?>">Kaffeeliste anlegen</a>
<a class="button button-secondary" href="<?= e(url('/admin/login')) ?>">Plattform-Login</a>
<?php else: ?>
<a class="button button-primary" href="<?= e(url('/install')) ?>">Installation starten</a>
<a class="button button-primary" href="<?= e(url('/install')) ?>">Kaffeeliste installieren</a>
<?php endif; ?>
</div>
<ul class="metric-row">
<li><strong>1</strong><span>gemeinsames Ledger fuer Selbstbuchung, Papier und spaetere RFID-Events</span></li>
<li><strong>Pilot</strong><span>klare Trennung zwischen Member-Self-Service und Standort-Backoffice</span></li>
<li><strong>100%</strong><span>PHP/MySQL-Betrieb fuer klassisches Webhosting</span></li>
<li><strong>Digital</strong><span>Kaffee direkt selbst oder durch die Verwaltung buchen</span></li>
<li><strong>Papier</strong><span>Strichlisten nachtragen und gesammelt abschließen</span></li>
<li><strong>Saldo</strong><span>Offene Beträge pro Person nachvollziehen</span></li>
</ul>
</div>
<aside class="hero-card">
<h2>Worauf der Pilot gerade abzielt</h2>
<h2>Was die Kaffeeliste abnimmt</h2>
<ul class="feature-list">
<li>Owner-Onboarding mit sofort nutzbarem Testmandanten</li>
<li>Mitglieder-Logins fuer schlanke Selbstbuchung statt Volladmin-Anmutung</li>
<li>Papierlisten als Entwurf, Nacherfassung und sauberes Ledger-Posting</li>
<li>Einzahlungen, Salden und Audit-Trail fuer das Standortteam</li>
<li>RFID-Devices, Karten und Event-Inbox fuer spaetere Automatisierung</li>
<li>Kaffeeliste mit verantwortlicher Person einrichten</li>
<li>Mitglieder mit oder ohne Login anlegen</li>
<li>Produkte, Preise und Einzahlungen nachvollziehbar pflegen</li>
<li>Papierlisten als Entwurf erfassen und gesammelt übernehmen</li>
<li>Kartenleser und Karten vorbereiten, wenn später RFID dazukommt</li>
</ul>
<?php if (is_array($stats)): ?>
<div class="stats-panel">
<div><strong><?= e((string) $stats['tenants']) ?></strong><span>Pilotmandanten in der Datenbank</span></div>
<div><strong><?= e((string) $stats['tenants']) ?></strong><span>Kaffeelisten in der Datenbank</span></div>
<div><strong><?= e((string) $stats['members']) ?></strong><span>Mitglieder</span></div>
<div><strong><?= e((string) $stats['events']) ?></strong><span>Buchungsvorfaelle</span></div>
<div><strong><?= e((string) $stats['events']) ?></strong><span>Buchungen</span></div>
</div>
<?php endif; ?>
</aside>
@@ -40,53 +40,53 @@
<section class="content-grid">
<article class="card">
<span class="eyebrow">Heute stabil</span>
<h2>Eine Buchungslogik fuer reale Nutzung</h2>
<p>Jede Kaffee- oder Tee-Buchung landet im selben Ledger. Ob jemand digital bucht, ob das Standortteam eine Papierliste erfasst oder spaeter ein RFID-Leser Events einspeist: Salden, Historie und Auswertungen bleiben konsistent.</p>
<span class="eyebrow">Buchungen</span>
<h2>Aus jedem Strich wird ein nachvollziehbarer Vorgang</h2>
<p>Ob online gebucht, von der Verwaltung erfasst oder aus einer Papierliste übernommen: Jede Buchung landet im gemeinsamen Verlauf und wirkt sich direkt auf den Mitgliedssaldo aus.</p>
</article>
<article class="card">
<span class="eyebrow">Pilotfokus</span>
<h2>Self-Service fuer Mitglieder, Backoffice fuers Standortteam</h2>
<p>Der Pilot trennt bewusst zwischen einfacher Selbstbuchung und administrativen Seiten. Dadurch wirkt der Zugang fuer Mitglieder alltagstauglich, waehrend Produkte, Einzahlungen und Korrekturen beim Standortteam bleiben.</p>
<span class="eyebrow">Verantwortung</span>
<h2>Mitglieder buchen selbst, die Kaffeekasse bleibt geordnet</h2>
<p>Mitglieder erfassen ihren Verbrauch schnell selbst. Verantwortliche pflegen Preise, buchen Einzahlungen, korrigieren Fehler und sehen offene Beträge pro Kaffeeliste.</p>
</article>
<article class="card">
<span class="eyebrow">Rahmen</span>
<h2>Ehrlicher Rollout statt Schein-Automatisierung</h2>
<p>Reset-Flow, Exporte und Korrekturhilfen werden gerade an echten Pilotablaeufen geschliffen. Gleichzeitig bleibt der technische Kern schlank genug fuer klassisches Webhosting mit PHP, MySQL und Webroot auf `public/`.</p>
<span class="eyebrow">Papierliste</span>
<h2>Papier bleibt möglich, die Abrechnung wird trotzdem sauber</h2>
<p>Wochen- oder Monatslisten können weiter genutzt, später nachgetragen und gesammelt abgeschlossen werden. So verschwinden keine Zettel und keine offenen Beträge mehr im Chaos.</p>
</article>
</section>
<section class="plans">
<div class="section-head">
<span class="eyebrow">Pilotstufen</span>
<h2>Die Startkonfiguration im Pilot, nicht die finale Vermarktung</h2>
<span class="eyebrow">Pakete</span>
<h2>Vom digitalen Start bis zur erweiterten Kaffeekasse</h2>
</div>
<div class="plan-grid">
<article class="plan-card">
<h3>Starter</h3>
<p>Fuer kleine Teams mit digitaler Buchung und moeglichst wenig Abstimmungsaufwand im Alltag.</p>
<p>Für Teams, die ihre Kaffeekasse zuerst digital und ohne Zusatzhardware führen wollen.</p>
<ul>
<li>Mitglieder, Produkte und Selbstbuchung</li>
<li>Schlanke Navigation fuer Member-Logins</li>
<li>Schneller Einstieg fuer den ersten Pilotstandort</li>
<li>Mitglieder, Produkte und Preise verwalten</li>
<li>Buchungen und Einzahlungen digital erfassen</li>
<li>Offene Beträge pro Person einsehen</li>
</ul>
</article>
<article class="plan-card highlighted">
<h3>Team</h3>
<p>Fuer Organisationen, die Papierlisten und digitale Prozesse im Pilot parallel fahren.</p>
<p>Für Organisationen, die digitale Buchungen und Papierlisten parallel nutzen.</p>
<ul>
<li>Papierlisten-Workflow mit Nacherfassung</li>
<li>Backoffice fuer Einzahlungen und Korrekturen</li>
<li>Vorbereitung fuer spaetere Export- und Supportpfade</li>
<li>Papierlisten nacherfassen und gesammelt buchen</li>
<li>Einzahlungen, Korrekturen und offene Beträge verwalten</li>
<li>Buchungen als Tabelle exportieren</li>
</ul>
</article>
<article class="plan-card">
<h3>Business</h3>
<p>Fuer Standorte mit RFID-Roadmap, hoeheren Betriebsanforderungen und fruehem Integrationsbedarf.</p>
<p>Für Standorte, die später Kartenleser oder verbindlichere Abläufe ergänzen möchten.</p>
<ul>
<li>RFID-Devices, Karten und Intake-API</li>
<li>Release-, Backup- und Deployment-Rahmen</li>
<li>Frueher Blick auf Betriebs- und Supportprozesse</li>
<li>Kartenleser vorbereiten und Karten zuweisen</li>
<li>RFID-Ereignisse standortbezogen empfangen</li>
<li>Betriebs-, Sicherungs- und Supportprozesse planen</li>
</ul>
</article>
</div>
@@ -94,15 +94,15 @@
<section class="timeline card">
<div class="section-head">
<span class="eyebrow">Pilotablauf</span>
<h2>So startet ein neuer Standort realistisch</h2>
<span class="eyebrow">Einrichtung</span>
<h2>In wenigen Schritten zur nutzbaren Kaffeeliste</h2>
</div>
<ol class="step-list">
<li>Plattform installieren und ersten Admin anlegen.</li>
<li>Pilotmandant registrieren, Owner-Onboarding abschliessen und Produkte vorbelegen.</li>
<li>Mitglieder fuer Selbstbuchung anlegen und Standort-Backoffice abstimmen.</li>
<li>Digitale Buchungen und Papierlisten parallel im Team einsetzen.</li>
<li>RFID-Geraete spaeter ueber die Event-Inbox anbinden, ohne das Kernledger umzubauen.</li>
<li>Kaffeeliste mit verantwortlicher Person registrieren.</li>
<li>Mitglieder, Produkte und Preise anlegen.</li>
<li>Buchungen und Einzahlungen im Alltag erfassen.</li>
<li>Papierlisten nachtragen oder Kartenleser später ergänzen.</li>
</ol>
</section>
+18 -18
View File
@@ -1,24 +1,24 @@
<?php require __DIR__ . '/../partials/layout-top.php'; ?>
<section class="page-head">
<span class="eyebrow">Pilot-Onboarding</span>
<h1>Pilotmandant registrieren</h1>
<p>Dieses Formular legt einen echten Teststandort an. Bitte nur verwenden, wenn Organisation, Ansprechpartner und Startpreis fuer den Pilotbetrieb abgestimmt sind.</p>
<span class="eyebrow">Neue Kaffeeliste einrichten</span>
<h1>Kaffeeliste registrieren</h1>
<p>Legen Sie eine Kaffeeliste für Ihr Büro, Team oder Ihren Verein an. Danach können Sie Mitglieder, Produkte, Einzahlungen und Papierlisten verwalten.</p>
</section>
<div class="two-column">
<form class="card form-card" method="post" action="<?= e(url('/register')) ?>">
<?= csrf_field($csrf) ?>
<label>
<span>Team- / Standortname</span>
<span>Name der Kaffeeliste</span>
<input type="text" name="tenant_name" value="<?= e((string) old('tenant_name')) ?>" required>
</label>
<label>
<span>Kurzname fuer die Login-URL</span>
<input type="text" name="tenant_slug" value="<?= e((string) old('tenant_slug')) ?>" placeholder="mein-team">
<span>Kurzname für die Webadresse</span>
<input type="text" name="tenant_slug" value="<?= e((string) old('tenant_slug')) ?>" placeholder="kaffeeliste-nord">
</label>
<label>
<span>Pilotstufe</span>
<span>Paket</span>
<select name="plan">
<option value="starter">Starter</option>
<option value="team" selected>Team</option>
@@ -26,33 +26,33 @@
</select>
</label>
<label>
<span>Startpreis pro Kaffee in EUR</span>
<span>Standardpreis pro Kaffee in EUR</span>
<input type="number" name="default_price_eur" min="0.50" step="0.05" value="<?= e((string) old('default_price_eur', '1.20')) ?>">
</label>
<label>
<span>Ansprechpartner / Owner</span>
<span>Verantwortliche Person</span>
<input type="text" name="owner_name" value="<?= e((string) old('owner_name')) ?>" required>
</label>
<label>
<span>Login-E-Mail fuer den Owner</span>
<span>E-Mail-Adresse für die Verwaltung</span>
<input type="email" name="owner_email" value="<?= e((string) old('owner_email')) ?>" required>
</label>
<label>
<span>Startpasswort fuer den Owner</span>
<span>Startpasswort</span>
<input type="password" name="owner_password" minlength="12" required>
</label>
<button class="button button-primary" type="submit">Pilotmandant anlegen</button>
<button class="button button-primary" type="submit">Kaffeeliste anlegen</button>
</form>
<aside class="card">
<span class="eyebrow">Vor dem Absenden</span>
<span class="eyebrow">Hinweise</span>
<ul class="feature-list">
<li>Die Registrierung erzeugt sofort einen nutzbaren Testmandanten</li>
<li>Owner-Zugang und erstes Mitglied werden automatisch angelegt</li>
<li>Systemquellen fuer digital, Papier, Backoffice und RFID stehen direkt bereit</li>
<li>Die Self-Service-Navigation fuer Mitglieder bleibt spaeter schlanker als das Admin-Backoffice</li>
<li>Die Registrierung erzeugt sofort eine nutzbare Kaffeeliste</li>
<li>Der erste Verwaltungszugang wird automatisch angelegt</li>
<li>Mitglieder, Produkte, Einzahlungen und Papierlisten können danach ergänzt werden</li>
<li>Passwörter müssen mindestens 12 Zeichen haben</li>
</ul>
<p class="muted">Wenn ihr erst unverbindlich pruefen wollt, startet lieber mit einem klar benannten Pilotteam statt mit Fantasiedaten. Das macht spaetere Login-, Reset- und Supportablaeufe deutlich sauberer.</p>
<p class="muted">Ein klarer Name hilft später bei Login, Rückfragen und mehreren Kaffeelisten im selben Umfeld.</p>
</aside>
</div>