The assistant is Loya, and she lives in the top-right corner

A name, a voice and a door. The prompt now asks for a colleague on the
shop floor - answer first, one to three sentences, the shop's name and
the person's name, the one thing to do next - instead of a report with
headings. Both apps put her behind the Loyaly mark in the top-right
corner of every screen, because a buddy you have to find in a sidebar
is not around.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KGcjxF1cNLcuwc3DAPcnfj
This commit is contained in:
2026-09-19 13:42:35 +05:30
parent 2835252bb3
commit 51b9cb9743
15 changed files with 82 additions and 47 deletions

View File

@@ -79,8 +79,8 @@ export default function App() {
<div className="who">
<button className={'ask-btn' + (asking ? ' on' : '')}
onClick={() => setAsking(a => !a)}>
<span aria-hidden="true">✳</span> Ask
onClick={() => setAsking(a => !a)} title="Ask Loya">
<span className="mark" aria-hidden="true" /> Loya
</button>
<span className="name">{user.full_name || user.email}</span>
<span className="role">{isAdmin ? 'platform admin' : user.role}</span>

View File

@@ -458,7 +458,7 @@ button.ghost.danger:hover { border-color: var(--bad); }
/* ---------------------------------------------------------- assistant --- */
.with-assistant { display: flex; flex: 1; min-height: 0; }
.with-assistant .page { flex: 1; min-width: 0; }
.ask-btn { background: var(--accent-dim); color: var(--accent); border: 0;
.ask-btn { display: inline-flex; align-items: center; gap: 7px; background: var(--accent-dim); color: var(--accent); border: 0;
border-radius: 7px; padding: 7px 13px; cursor: pointer;
font-size: 13.5px; font-weight: 550; display: flex; align-items: center; gap: 7px; }
.ask-btn:hover, .ask-btn.on { background: var(--accent); color: #04161B; }
@@ -566,3 +566,5 @@ button.ghost.danger:hover { border-color: var(--bad); }
/* The code is read off a screen or a phone call, so it is set wide. */
.codefield { font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
letter-spacing: .04em; text-transform: uppercase; }
.ask-btn .mark { width: 18px; height: 18px; }

View File

@@ -59,8 +59,8 @@ export default function Assistant({ open, onClose }) {
<aside className="assistant" role="complementary" aria-label="Assistant">
<header className="assistant-head">
<div>
<b>Ask Behavision</b>
<span className="sub">It reads your shops’ own data to answer.</span>
<b>Loya</b>
<span className="sub">Your Behavision buddy — knows your shops, cameras and numbers.</span>
</div>
<button className="ghost" onClick={onClose} aria-label="Close assistant">✕</button>
</header>
@@ -68,7 +68,7 @@ export default function Assistant({ open, onClose }) {
<div className="assistant-body">
{off ? (
<p className="sub pad">
The assistant is not switched on for this server.
Loya is not switched on for this server.
</p>
) : history.length === 0 ? (
<div className="suggest">
@@ -104,7 +104,7 @@ export default function Assistant({ open, onClose }) {
ref={inputRef}
value={draft}
onChange={e => setDraft(e.target.value)}
placeholder="Ask about your shops…"
placeholder="Ask Loya…"
disabled={busy}
/>
<button className="primary" disabled={busy || !draft.trim()}>Ask</button>