Hot Cues · deployment status
1 thing broken
Build 97cf5df · production · checked Mon, 14 Sep 2026 00:47:35 GMT
Database connection
Connected as hotcues_app.
Database migrations
41 applied, latest: 20260913100000_contract_cc_emails.
Login & invite database functions
All 19 present.
Row-level security
Enforced on all tenant tables.
Database permissions
Working.
Tenant scoping
Working.
Notification queue
5 waiting, oldest since 2026-07-30T10:29:50.411Z.
Fix: CRON_SECRET is not set, so /api/cron/outbox refuses every request and nothing drains. Set it in Vercel and redeploy.
Login codes
Nowhere to send them. Only addresses in HOTCUES_ADMIN_EMAILS can sign in (code on screen).
Fix: To let your team sign in with emailed codes, add RESEND_API_KEY + MAIL_FROM. (HOTCUES_OTP=supabase also works, but only with Custom SMTP configured in Supabase — their built-in mailer can't send codes.) Meanwhile: set passwords for your team from the People page.
Other email (invites, notices)
No provider configured — invites cannot be emailed.
Fix: Optional. Invite links can be copied from the People page and sent however you like.
Login codes on screen
On — codes appear on the sign-in screen for the 1 admin address only.
Fix: Fine while you set up. Remove HOTCUES_SHOW_LOGIN_CODES once email delivery works.
Platform admin
1 admin address configured.
Session secret
Set.
Public address
Links are built against https://www.hotcues.app.
Signup
Invite-only — new businesses need an invite link (or a configured admin email).
Sign-in
Password only. Set each person's password from People (or your own in Settings) — nobody signs in with an emailed code until this changes.
Break-glass login
DEV_USERNAME + DEV_PASSWORD are set — that exact email/password signs in regardless of the database, mail, or Supabase.
Fix: Fine while you're getting set up. Remove both variables once normal sign-in is solid, so this isn't a standing credential.
Background sending (cron)
CRON_SECRET is not set, so the cron route refuses every request and queued email/notifications never send.
Fix: Set CRON_SECRET in Vercel to any strong value (Vercel's cron sends it automatically) and redeploy.
Inbound email (replies land on their event)
Not configured — clients can receive your email but their replies never come back into the app.
Fix: Set EMAIL_INBOUND_SIGNING_SECRET (any strong value) and EMAIL_INBOUND_ADDRESS (the mailbox your provider's inbound parse delivers to), then point the provider's inbound webhook at /api/webhooks/email?secret=<value>.
Card payments & staff payouts (Stripe)
Not configured — invoices work, but card capture and automated staff payouts stay off (manual/P2P recording still works).
Fix: Set STRIPE_SECRET_KEY + STRIPE_WEBHOOK_SECRET (and STRIPE_CONNECT_CLIENT_ID for staff payouts), then redeploy.
Photo uploads
Not configured — photos can still be added to an inquiry by pasting an image link, but nobody can upload from their phone.
Fix: No file storage set. Point S3_ENDPOINT / S3_BUCKET / S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY / S3_PUBLIC_URL at any S3-compatible bucket (Cloudflare R2, Supabase Storage, AWS), or add BLOB_READ_WRITE_TOKEN (Vercel → Storage → Blob). Until then a photo can still be added by pasting an image URL.
Google connect (calendar push + Gmail sending)
Not configured — the Settings → Integrations Google connect: booked events pushed to Google Calendar and client email sent from the connected Gmail stays off.
Fix: Set GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET + GOOGLE_REDIRECT_URI, then redeploy. See docs/INTEGRATIONS.md for the wiring status.
QuickBooks sync
Not configured — mirroring invoices and payments into QuickBooks stays off.
Fix: Set QBO_CLIENT_ID + QBO_CLIENT_SECRET (+ QBO_ENVIRONMENT), then redeploy. See docs/INTEGRATIONS.md for the wiring status.
Hot Cues subscriptions (Stripe billing)
Not configured — self-serve Free→Pro upgrades on the Settings page, with the plan synced from Stripe subscriptions (point a Stripe webhook at /api/webhooks/stripe-billing) stays off.
Fix: Set STRIPE_SECRET_KEY + HOTCUES_PRICE_YEARLY (and/or HOTCUES_PRICE_MONTHLY) + STRIPE_BILLING_WEBHOOK_SECRET, then redeploy. See docs/INTEGRATIONS.md for the wiring status.
Apple Music song search
Not configured — catalog search against Apple Music — the primary search backbone (Spotify's API is closed to new apps, so Apple is the one that scales to your tenants) stays off.
Fix: Set APPLE_MUSIC_TEAM_ID + APPLE_MUSIC_KEY_ID + APPLE_MUSIC_PRIVATE_KEY (MusicKit key from the $99/yr Apple Developer Program), then redeploy. See docs/INTEGRATIONS.md for the wiring status.
Spotify song search
Not configured — matching client song requests against the real streaming catalog stays off.
Fix: Set SPOTIFY_CLIENT_ID + SPOTIFY_CLIENT_SECRET, then redeploy. See docs/INTEGRATIONS.md for the wiring status.
Call transcription
Not configured — transcripts of recorded planning calls stays off.
Fix: Set OPENAI_API_KEY (or DEEPGRAM_API_KEY), then redeploy. See docs/INTEGRATIONS.md for the wiring status.
AI suggestion extraction
Not configured — Claude reading call transcripts and pasted consult notes into staged suggestions (without the key, a basic song-line reader still runs; every suggestion is human-approved before applying) stays off.
Fix: Set ANTHROPIC_API_KEY, then redeploy. See docs/INTEGRATIONS.md for the wiring status.
In-app video calls
Not configured — real video rooms and call recording stays off.
Fix: Set LIVEKIT_URL + LIVEKIT_API_KEY + LIVEKIT_API_SECRET, then redeploy. See docs/INTEGRATIONS.md for the wiring status.
Push notifications
Not configured — phone push delivery for the notification queue stays off.
Fix: Set EXPO_ACCESS_TOKEN, then redeploy. See docs/INTEGRATIONS.md for the wiring status.
Machine-readable version at /api/health. This page shows configuration state only — never data, secrets, or connection strings.