Connections
Microsoft Outlook Mail, Calendar and Teams. Tokens are encrypted server-side; the browser never sees them. Sync is bounded and pull-based.
Azure app registration
- Open Entra admin center → App registrations → New registration.
- Add a Web redirect URI matching
MICROSOFT_REDIRECT_URI, e.g.https://your-app/api/public/microsoft/oauth/callback. - Under Certificates & secrets, create a client secret and copy the value.
- Under API permissions, add delegated Microsoft Graph scopes (listed below) and grant consent.
Secrets — Project Settings → Secrets
MICROSOFT_TENANT_IDDirectory (tenant) ID from Entra ID → App registration.
MICROSOFT_CLIENT_IDApplication (client) ID from the same registration.
MICROSOFT_CLIENT_SECRETClient secret value (generated under Certificates & secrets).
MICROSOFT_REDIRECT_URIMust exactly match the Web redirect URI on the app registration (e.g. https://your-app/api/public/microsoft/oauth/callback).
MICROSOFT_TOKEN_ENCRYPTION_KEY32-byte AES key in base64. Generate with `openssl rand -base64 32`. Used to encrypt tokens at rest.
Database (Lovable Cloud)
SUPABASE_URLProvided by Lovable Cloud.
SUPABASE_SERVICE_ROLE_KEYServer-only. Never exposed to the browser.
Database is available. Encrypted-token schema is deployed.
Not connected. When it is, Mission Control can speak a briefing instead of making you read one.
- Spoken Today briefings
- Decision readouts
- Important outcome cues
Audio stays opt-in and off by default. Text remains the primary surface — nothing will ever be spoken that you cannot also read.
Audio Operations
Foundation ready, playback not connected.
Wave 1 — Decide faster
Hear the same recap that is already on screen, spoken once, only when the owner asks for it.
Where: Today, decision detail, outcome detail
Guard: Speech is always click-to-play and never contains anything the screen does not already show.
A short fixed sound after a decision or outcome actually changes, so the result registers without re-reading the screen.
Where: Approvals, outcomes
Guard: Five fixed cues only, resolved server-side; a cue can never carry information that is not also written on screen.
Wave 2 — Capture and follow
An authenticated adult speaks a short update; the words arrive as editable text in the existing form, reviewed before anything is saved.
Where: Record Update form
Guard: Transcription only, never auto-submitted, and the recording is not retained by default.
Follow the spoken briefing with the matching words highlighted, so listening and reading stay in step.
Where: Command Briefing playback
Guard: Timing data only decorates text that was already approved; it can never introduce new words.
Wave 3 — Reach and experiment
The same briefing in another language, produced in advance rather than live.
Where: Today briefing
Guard: The original text and transcript are always kept and shown, so a translation is never the only record.
A rare five-to-twelve second spoken alert when something genuinely blocks the owner.
Where: Owner-blocking changes only
Guard: Opt-in, rare by design, and only ever repeats text the owner can already read.
A held-button voice mode for working through a queue out loud, read-only until something is explicitly confirmed on screen.
Where: Bounded review session
Guard: Push-to-talk only, never listening in the background, and no irreversible action can be triggered by voice.
Nothing here plays yet. Your saved preferences below are kept, and stay off until playback is connected and you switch them on.
Short fixed sounds for a handful of decisions and outcomes.
Lets a briefing be spoken when you click play. Never on its own.
Text stays the primary surface — nothing is ever spoken that you cannot also read. Speech is always click-to-play. When the Blade audio connection is ready, automatic fixed cues will still require both this opt-in and a prior interaction on the page, so nothing can make a sound on a page you have only just opened.