Parts
Expo companion, challenge APIs, triangle mark, phone landing page.
App
- Expo app:
apps/askrue/(screens inApp.jstoday). - Screens: enroll · home (TOTP + pending) · scan · mark · settings.
- Mark renderer:
apps/askrue/src/components/TriangleMark.js(+ webassets/js/askrue-mark.js).
Web phone landing
D:\6-ruezals.chat-web-services\askrue-phone.html— “key, not the chat.”- Phone browser hitting login redirects here.
APIs (bind contract)
- After bind, device calls use
Authorization: Bearer <device_token>. POST /api/askrue/device/bind—{ login, password, totp_code?, device_id, label }→ device token; one primary;409 PRIMARY_EXISTSif another primary.GET /api/askrue/device/me·POST …/heartbeat·GET …/totp(optional AskRue™ code helper — not Echo login).GET /api/askrue/challenges/pending→{ challenges: [{ id, app_key, created_ip, expires_at, … }] }.POST /api/askrue/challenges/:id/decide{ allow: true|false }— phone discards anygrant_token; website poll completes session.POST /api/askrue/mark/verify{ mark }·GET …/mark/display.- Website highway (not phone):
POST /api/auth/phone-challenge(+ poll/complete withgrant_token).
Pyramid key wiring (live Bar)
- UI:
askrue-login-page.jshighway button → create challenge → poll → complete. - Spectacle: electrical pyramid + molecules on
index.html(AskRue™ origin — stop expanding here). - Phone browser →
askrue-phone.html(“key, not the chat”).
Finder law (shared with AskRue™ face)
- Three corner triangles (TL / TR / BL).
- Nested outlines: 18px white → 18px black → 18px white (not QR squares/circles).
- Echo
TriangleMark.jsshould match web (replace single gold stroke).
Look tokens
- Gold
#c8962a· BG#0a0a0c· panel#141418· muted#8a8494
- Gate enroll / otpauth plate → AskRue™ (stop).