# Ten31 Transcripts Native macOS menu-bar app that auto-detects conference calls, records local audio, builds a visual-derived speaker timeline, and hands audio + timeline to the SparkControl backend for naming/transcription. See `docs/` for the full spec. This repo is at **Phase 0** (scaffold, permissions, backend health check). ## One-time setup 1. **Install Xcode** from the Mac App Store (free; ~40 GB). Open it once and accept the license prompt. 2. **Install XcodeGen** (generates the Xcode project from `project.yml`): ```sh brew install xcodegen ``` 3. **Set your signing team.** The Apple Team ID is kept out of source in a gitignored `Config/Signing.xcconfig`. Copy the template and set your team: ```sh cp Config/Signing.xcconfig.example Config/Signing.xcconfig # then set DEVELOPMENT_TEAM ``` `xcodegen` wires it in via `configFiles`, so **Signing & Capabilities** shows the team automatically — no manual selection. Keep the value stable so macOS preserves the app's permission (TCC) grants across rebuilds. Edit the xcconfig, not Xcode — `xcodegen generate` overwrites Xcode-side changes. 4. **Generate the project:** ```sh xcodegen generate ``` This creates `Ten31Transcripts.xcodeproj` (git-ignored — regenerate any time). 5. **Open it:** ```sh open Ten31Transcripts.xcodeproj ``` 6. Press **Run** (⌘R). > **Note:** after adding files in a new phase, re-run `xcodegen generate` and let > Xcode reload the project. The signing team persists because it lives in > `Config/Signing.xcconfig` (gitignored), so macOS permissions stay granted across > rebuilds. ## What Phase 0 does - Launches as a menu-bar-only app (no Dock icon). - Menu panel shows live status for the three permissions it needs — **Microphone**, **Screen Recording**, **Accessibility** — with Grant / Open Settings buttons. - Shows a **backend health check** (`GET /api/status`) against the configured host. - **Settings:** backend base URL, skip-TLS toggle (on by default for the self-signed cert), output folder, and adapter toggles (inert this phase). No audio capture, call detection, screen reading, or backend hand-off yet — those arrive in Phases 1–6 (`docs/04_BUILD_PLAN.md`). ## Project layout ``` project.yml # XcodeGen recipe → generates the .xcodeproj Ten31Transcripts/ App/ Ten31TranscriptsApp.swift, AppDelegate.swift UI/ MenuBarView, SettingsView, PermissionRow Permissions/PermissionsManager.swift Backend/ SparkControlHealth.swift, InsecureTrustDelegate.swift Settings/ AppSettings.swift Support/ Info.plist, Ten31Transcripts.entitlements Ten31TranscriptsTests/ # placeholder; real tests land in Phase 3 ``` ## Notes - **App Sandbox is off** and **Hardened Runtime is off** — this is a personal, LAN-only tool that must observe other apps. Revisit only if distributing. - The backend host is a private LAN address — set it in **Settings**, or seed it from the `SPARK_BACKEND_URL` env var; the committed default is only a neutral placeholder (`https://your-spark-backend.local`).