Feature: Schmidt Hygiene GmbH als White-Label Demo (blaue CI, eigenes Logo, Live-Iframe)

This commit is contained in:
rene 2026-05-17 15:49:06 +02:00
parent 678a5f9a03
commit 533cb905fa
3 changed files with 81 additions and 16 deletions

View file

@ -0,0 +1,9 @@
<svg width="520" height="100" viewBox="0 0 520 100" xmlns="http://www.w3.org/2000/svg">
<!-- Icon: Blaues Quadrat mit Wassertropfen -->
<rect x="0" y="8" width="84" height="84" rx="18" fill="#1B4FBF"/>
<path d="M42 22 C42 22 23 44 23 58 C23 69.5 31.6 78 42 78 C52.4 78 61 69.5 61 58 C61 44 42 22 42 22Z" fill="white"/>
<circle cx="35" cy="53" r="5" fill="#1B4FBF" opacity="0.4"/>
<!-- Firmenname -->
<text x="100" y="50" font-family="Arial, Helvetica, sans-serif" font-size="30" font-weight="700" fill="#1B4FBF">Schmidt</text>
<text x="100" y="78" font-family="Arial, Helvetica, sans-serif" font-size="22" font-weight="400" fill="#4a5568">Hygiene GmbH</text>
</svg>

After

Width:  |  Height:  |  Size: 680 B

View file

@ -1,5 +1,6 @@
<script lang="ts"> <script lang="ts">
import logo from '$lib/assets/checkflo-logo.png'; import logo from '$lib/assets/checkflo-logo.png';
import schmidtLogo from '$lib/assets/schmidt-hygiene-logo.svg';
const features = [ const features = [
{ {
@ -53,18 +54,18 @@
<div class="devices"> <div class="devices">
<!-- Desktop: CSS Dashboard-Preview --> <!-- Desktop: CSS Dashboard Schmidt Hygiene -->
<div class="device-browser"> <div class="device-browser">
<div class="browser-bar"> <div class="browser-bar">
<div class="browser-dots"> <div class="browser-dots">
<span></span><span></span><span></span> <span></span><span></span><span></span>
</div> </div>
<div class="browser-url">app.musterprüfbetrieb.de/admin</div> <div class="browser-url">app.schmidt-hygiene.de/admin</div>
</div> </div>
<div class="browser-screen"> <div class="browser-screen">
<div class="dash-sidebar"> <div class="dash-sidebar">
<div class="dash-logo">checkflo<span>.de</span></div> <img src={schmidtLogo} alt="Schmidt Hygiene" class="dash-brand-logo" />
<div class="dash-nav-item active">Dashboard</div> <div class="dash-nav-item active schmidt">Dashboard</div>
<div class="dash-nav-item">Protokoll</div> <div class="dash-nav-item">Protokoll</div>
<div class="dash-nav-item">Stationen</div> <div class="dash-nav-item">Stationen</div>
</div> </div>
@ -92,34 +93,34 @@
<div class="dash-entries-title">Heutige Einträge</div> <div class="dash-entries-title">Heutige Einträge</div>
<div class="dash-entry"> <div class="dash-entry">
<span class="entry-badge ok">OK</span> <span class="entry-badge ok">OK</span>
<span class="entry-station">Kühlschrank 1 (Küche)</span> <span class="entry-station">Fleischkühltheke</span>
<span class="entry-temp">5 °C</span> <span class="entry-temp">2 °C</span>
<span class="entry-who">Maria S. · 07:42</span> <span class="entry-who">Thomas K. · 06:55</span>
</div> </div>
<div class="dash-entry"> <div class="dash-entry">
<span class="entry-badge ok">OK</span> <span class="entry-badge ok">OK</span>
<span class="entry-station">Kühlschrank 2 (Getränke)</span> <span class="entry-station">Wurstkühlschrank</span>
<span class="entry-temp">6 °C</span> <span class="entry-temp">3 °C</span>
<span class="entry-who">Klaus B. · 08:05</span> <span class="entry-who">Maria S. · 07:12</span>
</div> </div>
<div class="dash-entry"> <div class="dash-entry">
<span class="entry-badge warn">Abweichung</span> <span class="entry-badge warn">Abweichung</span>
<span class="entry-station">Tiefkühlzelle</span> <span class="entry-station">Tiefkühltruhe</span>
<span class="entry-temp">15 °C</span> <span class="entry-temp">16 °C</span>
<span class="entry-who">Sandra M. · 08:31</span> <span class="entry-who">Thomas K. · 08:03</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- Mobile: Live-Iframe --> <!-- Mobile: Live-Iframe Schmidt Hygiene (blau) -->
<div class="device-phone"> <div class="device-phone">
<div class="phone-frame"> <div class="phone-frame">
<div class="phone-notch"></div> <div class="phone-notch"></div>
<div class="phone-screen"> <div class="phone-screen">
<iframe <iframe
src="https://checkflo.de/s/b6b30daf-8bfe-4648-ba2b-6c42916d2264" src="https://checkflo.de/s/c0c9c394-6507-4f9f-bb03-584a7978587e"
title="checkflo Demo" title="Schmidt Hygiene Demo"
scrolling="no" scrolling="no"
></iframe> ></iframe>
</div> </div>
@ -361,6 +362,8 @@
padding: 0 0.25rem; padding: 0 0.25rem;
} }
.dash-logo span { color: #F97316; } .dash-logo span { color: #F97316; }
.dash-brand-logo { width: 100%; margin-bottom: 1rem; filter: brightness(0) invert(1); }
.dash-nav-item.schmidt { background: rgba(27,79,191,0.2); color: #6b9fff; }
.dash-nav-item { .dash-nav-item {
padding: 0.4rem 0.5rem; padding: 0.4rem 0.5rem;
border-radius: 5px; border-radius: 5px;

53
scripts/seed-schmidt.sh Executable file
View file

@ -0,0 +1,53 @@
#!/bin/bash
# Legt Demo-Tenant "Schmidt Hygiene GmbH" mit blauer CI an
set -euo pipefail
PB_URL="${PB_URL:-https://api.checkflo.de}"
if [ -z "${PB_EMAIL:-}" ] || [ -z "${PB_PASSWORD:-}" ]; then
echo "Aufruf: PB_EMAIL=... PB_PASSWORD=... ./seed-schmidt.sh"; exit 1
fi
TOKEN=$(curl -sf -X POST "$PB_URL/api/collections/_superusers/auth-with-password" \
-H "Content-Type: application/json" \
-d "{\"identity\":\"$PB_EMAIL\",\"password\":\"$PB_PASSWORD\"}" | jq -r '.token')
echo "✓ Eingeloggt"
# Tenant anlegen
TENANT=$(curl -sf -X POST "$PB_URL/api/collections/tenants/records" \
-H "Authorization: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Schmidt Hygiene GmbH",
"slug": "schmidt-hygiene",
"primary_color": "#1B4FBF",
"plan": "pro",
"active": true
}')
TENANT_ID=$(echo "$TENANT" | jq -r '.id')
echo "✓ Tenant: Schmidt Hygiene GmbH ($TENANT_ID)"
# Station anlegen (Kühltheke Metzgerei)
QR_ID=$(python3 -c "import uuid; print(str(uuid.uuid4()))" 2>/dev/null || cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen | tr '[:upper:]' '[:lower:]')
STATION=$(curl -sf -X POST "$PB_URL/api/collections/stations/records" \
-H "Authorization: $TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"tenant\": \"$TENANT_ID\",
\"name\": \"Fleischkühltheke\",
\"type\": \"kuehlschrank\",
\"target_temp_min\": 0,
\"target_temp_max\": 4,
\"qr_id\": \"$QR_ID\",
\"active\": true
}")
STATION_ID=$(echo "$STATION" | jq -r '.id')
echo "✓ Station: Fleischkühltheke ($QR_ID)"
echo ""
echo " QR-Scan URL: https://checkflo.de/s/$QR_ID"
echo " Tenant-ID: $TENANT_ID"
echo ""
echo " → Diese QR-URL in +page.svelte für den iPhone-Mockup eintragen"