The shop app gets its help panel, and its last two old screens catch up

Ask Behavision: a panel beside any screen that talks to the head-office
assistant as the signed-in user - setup questions and 'is my shop
working' answered by the same thing, without leaving the app. The
assistant's prompt now knows how the product is set up (installation
codes, adding a camera, what a placement verdict means, the model
download on first run), so it is the help and not only the analyst. A
PC running on its own has nobody to ask and gets the essentials as text.

Cameras and Customers were still on the pre-redesign markup - the add
camera drawer ran off the right edge of the window because it used a
class the new stylesheet never sized. Both are rebuilt: cameras as
picture-led cards with connection and 'proven' as two separate claims
and a placement check laid out as the two steps it is; the customer
record as a proper sheet.

mock.js renders the app in a browser with fake bindings
(?mock=fresh|standalone|claimed, dev server only), so a screen can be
put in front of somebody without a Windows build. It is how these were
reviewed.

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:22:16 +05:30
parent 4c62fc0ef3
commit 7021d5d2f5
17 changed files with 677 additions and 253 deletions

View File

@@ -8,6 +8,7 @@ import Setup from './views/Setup.jsx'
import Live from './views/Live.jsx'
import Customers from './views/Customers.jsx'
import Cameras from './views/Cameras.jsx'
import Assistant from './views/Assistant.jsx'
// Three screens, and the trim is by AUDIENCE rather than by taste.
//
@@ -36,6 +37,7 @@ export default function App() {
// A standalone PC can join head office later. That is the same Setup screen,
// reached deliberately rather than because the app will not open otherwise.
const [linking, setLinking] = useState(false)
const [helping, setHelping] = useState(false)
useEffect(() => {
(async () => {
@@ -96,6 +98,9 @@ export default function App() {
))}
</nav>
<EngineBox />
<button className="helpbtn" onClick={() => setHelping(h => !h)} aria-pressed={helping}>
<img src={logo} alt="" /><span>Ask Behavision</span><Icon.Chevron size={14} />
</button>
<div className="who">
{session.standalone
? <>
@@ -121,6 +126,7 @@ export default function App() {
</div>
</aside>
<main className="main"><Current session={session} /></main>
{helping && <Assistant session={session} onClose={() => setHelping(false)} />}
</div>
)
}