Feature: Schmidt Hygiene GmbH als White-Label Demo (blaue CI, eigenes Logo, Live-Iframe)
This commit is contained in:
parent
678a5f9a03
commit
533cb905fa
3 changed files with 81 additions and 16 deletions
9
app/src/lib/assets/schmidt-hygiene-logo.svg
Normal file
9
app/src/lib/assets/schmidt-hygiene-logo.svg
Normal 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 |
|
|
@ -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
53
scripts/seed-schmidt.sh
Executable 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"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue