Welle 3 · Doku (Bedienung, Betrieb, offene Fäden) und Oberfläche: Rückfragen im Meldungstext, Sprung zu Lucy

- BEDIENUNG.md: Welle 1 bis 3 für den Alltag (Rückfragen, Antworttasten, Lucys Freiheiten, Wartungsfenster,
  Zertifikate, Neu entdeckt, Docker-Dienste, Was ist neu, Zeitleiste, Strg+K, Zeitpläne, neue Telegram-Nachrichten)
- BETRIEB.md: Lucy (Freiheiten, Rückfragen, Untersuchungen, Wochenbericht, Hermes-Neustart für neue Werkzeuge),
  Wartungsfenster im Homelab-Teil
- OFFENE-FAEDEN.md: Welle 2 und 3 erledigt, was am 27.09. zu beobachten ist
- Einstellungen: Meldungen-Karte nennt Rückfragen und Wochenbericht; #lucy fasst nach, wenn Karten nachladen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-26 09:32:46 +02:00
co-authored by Claude Opus 5.5
parent 6904bcbfb0
commit 67c82f5f73
21 changed files with 156 additions and 26 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{i as e,r as t}from"./dist-aE7UmubC.js";import{G as n,W as r}from"./index-Bumw6krN.js";import{a as i,i as a,n as o,r as s,t as c}from"./sheet-DG7u1mB-.js";var l=t(),u=e();function d(e){let t=(0,l.c)(8),{onSchliessen:d}=e,f;t[0]===d?f=t[1]:(f=e=>!e&&d(),t[0]=d,t[1]=f);let p;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,u.jsxs)(a,{className:`p-0`,children:[(0,u.jsx)(i,{asChild:!0,children:(0,u.jsx)(`div`,{children:(0,u.jsx)(r,{})})}),(0,u.jsx)(s,{className:`sr-only`,children:`Bereiche und Seiten`})]}),t[2]=p):p=t[2];let m;t[3]===d?m=t[4]:(m=(0,u.jsxs)(o,{side:`left`,className:`flex flex-col gap-7 border-white/[0.06] bg-[#0a0d14] px-4 pt-5 pb-[calc(1.25rem+env(safe-area-inset-bottom))] data-[side=left]:w-[300px]`,children:[p,(0,u.jsx)(n,{onGewaehlt:d})]}),t[3]=d,t[4]=m);let h;return t[5]!==f||t[6]!==m?(h=(0,u.jsx)(c,{open:!0,onOpenChange:f,children:m}),t[5]=f,t[6]=m,t[7]=h):h=t[7],h}export{d as MenueSchublade};
import{i as e,r as t}from"./dist-aE7UmubC.js";import{G as n,W as r}from"./index-DRAkqVZT.js";import{a as i,i as a,n as o,r as s,t as c}from"./sheet-DG7u1mB-.js";var l=t(),u=e();function d(e){let t=(0,l.c)(8),{onSchliessen:d}=e,f;t[0]===d?f=t[1]:(f=e=>!e&&d(),t[0]=d,t[1]=f);let p;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,u.jsxs)(a,{className:`p-0`,children:[(0,u.jsx)(i,{asChild:!0,children:(0,u.jsx)(`div`,{children:(0,u.jsx)(r,{})})}),(0,u.jsx)(s,{className:`sr-only`,children:`Bereiche und Seiten`})]}),t[2]=p):p=t[2];let m;t[3]===d?m=t[4]:(m=(0,u.jsxs)(o,{side:`left`,className:`flex flex-col gap-7 border-white/[0.06] bg-[#0a0d14] px-4 pt-5 pb-[calc(1.25rem+env(safe-area-inset-bottom))] data-[side=left]:w-[300px]`,children:[p,(0,u.jsx)(n,{onGewaehlt:d})]}),t[3]=d,t[4]=m);let h;return t[5]!==f||t[6]!==m?(h=(0,u.jsx)(c,{open:!0,onOpenChange:f,children:m}),t[5]=f,t[6]=m,t[7]=h):h=t[7],h}export{d as MenueSchublade};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,7 +9,7 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<title>Homelab Orchestrator</title>
<script type="module" crossorigin src="/assets/index-Bumw6krN.js"></script>
<script type="module" crossorigin src="/assets/index-DRAkqVZT.js"></script>
<link rel="modulepreload" crossorigin href="/assets/dist-aE7UmubC.js">
<link rel="modulepreload" crossorigin href="/assets/button-BHVKhtQ6.js">
<link rel="modulepreload" crossorigin href="/assets/dist-CakcBaML.js">
+10 -2
View File
@@ -228,6 +228,10 @@ function Meldungen() {
07:00 als eine Morgenmeldung. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und
schreibt es in den Verlauf.
</p>
<p className="text-sm text-text-2">
Fragt Lucy vorher, antwortest du in Telegram mit „ja“ und der Nummer oder tippst auf die Antworttaste unter dem
Eingabefeld — das löst genau die gefragte Aktion aus. Sonntags um 07:30 kommt ihr Wochenbericht.
</p>
<p className="text-sm text-text-2">
Der Test schickt eine kurze Meldung über den echten Meldeweg, als dringend, damit sie auch nachts sofort kommt.
</p>
@@ -647,9 +651,13 @@ export function EinstellungenSeite() {
const box = useEinstellungenStand(true)
const boxProps = { e: box.data, laedt: box.isPending, fehler: box.error?.message }
// Strg+K „Lucys Freiheiten“ führt mit #lucy hierher (beim Öffnen der Seite; ohne Router-Hook, damit die Seite auch
// allein testbar bleibt).
// allein testbar bleibt). Die Karten darüber laden nach und schieben Lucy nach unten — deshalb zweimal nachfassen.
useEffect(() => {
if (window.location.hash === "#lucy") document.getElementById("lucy")?.scrollIntoView({ block: "start" })
if (window.location.hash !== "#lucy") return
const hin = () => document.getElementById("lucy")?.scrollIntoView({ block: "start" })
hin()
const zeiten = [700, 1800].map((ms) => window.setTimeout(hin, ms))
return () => zeiten.forEach((z) => window.clearTimeout(z))
}, [])
return (
<div className="grid gap-5 md:gap-6 xl:grid-cols-2">