iPhone-first coaching for T-Mobile virtual retail reps.
The maintained app is now the single iOS app in apps/ios. Its primary runtime is the built
React/Vite PWA bundled into the app, so the iPhone app keeps the cyberpunk Kip visuals, liquid/glass
styling, scroll behavior, and current rep workflows while the hosted PWA winds down.
There should be exactly one Xcode project for this product:
apps/ios/CustomerConnectiOS.xcodeproj
Open the team project:
npm run ios:openBuild the app for the simulator:
npm run ios:buildRun the full local iOS doctor check:
npm run ios:doctorRun the core Swift tests:
npm run ios:testRun the full iOS guardrail:
npm run guard:iosCanonical Xcode project:
apps/ios/CustomerConnectiOS.xcodeproj
Canonical scheme:
CustomerConnectiOS
Use CustomerConnectiOS when Xcode Cloud asks which product to build. CustomerConnectCore is the
shared Swift package used by the app; it is not the installable app.
The PWA source remains because it is the source of truth for the iOS app's bundled web runtime.
- Install dependencies:
npm install - Start the app:
npm run dev
The app always ships with instant local coaching from the embedded data layer plus the current weekly-update.json.
AI enrichment is optional and never blocks the rep flow. The PWA builds a local plan first, then tries to sharpen it in the background when AI is configured.
Kip chat uses deterministic app/generated data as the factual answer first. Optional local model polish can run in-browser through MediaPipe LLM Inference with Gemma 3 270M IT web:
- Default model path:
/models/gemma3-270m-it-q8-web.task - Override path:
VITE_KIP_GEMMA_MODEL_URL - If the local model pack is missing or unsupported, Kip still answers from local app knowledge.
Recommended for deployment:
AI_COMPLETIONS_URLAI_MODELAI_API_KEY
Those power the Vercel /api/ai proxy so keys stay off the client.
Direct browser fallback is also supported for local/internal testing only:
VITE_AI_COMPLETIONS_URLVITE_AI_MODELVITE_AI_API_KEY
Health check only:
npm run check:ai -- --url=https://meridianvrtesting.com --health-only
Full smoke test:
npm run check:ai -- --url=https://meridianvrtesting.com
The smoke test fails fast if the Vercel proxy is missing config, the auth is wrong, or the model returns an empty response.
- No AI config: the app still works with local coaching only.
- AI timeout or provider failure: the local plan stays visible.
- First load: the app now waits for the weekly data before generating the plan so promos and intel populate consistently.