SalesID is an AI sales copilot case for macOS. It explores how a consent-first desktop overlay can assist live calls by combining screen context, OCR, speech transcription, local retrieval, and short German response suggestions.
Sales teams need fast context during calls, but a live assistant becomes risky if it captures screen or microphone data without explicit consent and clear local boundaries.
I framed SalesID as a native macOS copilot case with a consent-first overlay, ScreenCaptureKit context capture, Vision OCR, STT scaffolding, local RAG/LLM service boundaries, and compact German response suggestions.
- Require consent before screen or microphone capture starts
- Keep overlay UI compact enough for live-call pressure
- Split OCR, STT, RAG, and LLM responsibilities into explicit service boundaries
- Prefer local localhost services for the case-study architecture
- Treat privacy and permission UX as a product signal, not an afterthought
SalesID reads as a focused AI sales copilot case: native UI, real-time context, privacy-aware capture, and practical AI assistance rather than a generic chat wrapper.
- Native macOS overlay UX for real-time sales assistance
- Consent-gated capture flow before screen or microphone access starts
- ScreenCaptureKit plus Vision OCR for contextual screen understanding
- Local service boundaries for STT, RAG, and LLM routing
- Compact German suggestion UI designed for live-call pressure
- Overlay UI implemented with frosted background, compact default size (220x84), and German localization
- Consent dialog shown on first launch; capture starts only after acceptance
- Screen capture (ScreenCaptureKit) wired to OCR (Vision) with throttling
- IPC to local services: RAG and LLM router (HTTP); STT pipeline scaffolded (WebSocket)
- Configured entitlements and microphone usage description
- Debug build is green in Xcode 16 on macOS 15
- Start local services (in separate terminals):
cd services/stt && uvicorn server:app --host 127.0.0.1 --port 8765
cd services/rag && uvicorn server:app --host 127.0.0.1 --port 8770
cd services/llm && uvicorn server:app --host 127.0.0.1 --port 8780- Build and run the macOS app (Debug):
xcodebuild -scheme SalesID -configuration Debug buildToggle overlay visibility with Cmd+Option+Space.
SalesID/macOS appSalesIDApp.swift,RootView.swift,OverlayView.swift(UI)ScreenCapture.swift(ScreenCaptureKit)OCR.swift(Vision)AudioEngine.swift(mic capture, WebSocket streaming scaffold)IPC.swift(HTTP calls to RAG and LLM)ConsentManager.swift,ConsentView.swift(consent gating)Resources/de.lproj/Localizable.strings(German localization)SalesID.entitlements,Info.plist
services/(see build_instructions.md for reference services; not yet committed here)
Create .env at repo root for service settings (see build_instructions.md for suggested values). Fixed localhost ports:
- STT: 8765 (WebSocket ws://127.0.0.1:8765/ws)
- RAG: 8770 (HTTP)
- LLM: 8780 (HTTP)
- Implement consent event persistence in Supabase (non-sensitive ops data)
- Finish STT service integration and switch to
metaldevice when available - RAG ingest UI and export/delete operations
- Performance profiling to p95 ≤ 700 ms end-to-end
Proprietary. All rights reserved.