Hot Cues · deployment status

1 thing broken

Build 97cf5df · production · checked Mon, 14 Sep 2026 00:47:35 GMT

OK

Database connection

Connected as hotcues_app.

OK

Database migrations

41 applied, latest: 20260913100000_contract_cc_emails.

OK

Login & invite database functions

All 19 present.

OK

Row-level security

Enforced on all tenant tables.

OK

Database permissions

Working.

OK

Tenant scoping

Working.

Check

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.

Broken

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.

Check

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.

Check

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.

OK

Platform admin

1 admin address configured.

OK

Session secret

Set.

OK

Public address

Links are built against https://www.hotcues.app.

OK

Signup

Invite-only — new businesses need an invite link (or a configured admin email).

OK

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.

Check

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.

Check

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.

Off

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>.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.

Off

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.