BlocksDeveloper and ops

Doctor Checklist, Pro

The results of your app's setup checks, grouped by area, with what each one found and how to fix it. Run the checks again once you've fixed something.

Checks that tell you whether the app is set up correctly after a deploy, each failed one with how to fix it.

Production Setup

The database, auth, billing, AI, email and scheduled jobs checked, with a second run after the migrations were applied.

Pro

Production setup

2 of 11 checks failed, 3 need a look and 1 was skipped. Checked 5 minutes ago.

Database

  • Passed

    Connection

    Postgres 17.2 at db.acme-internal.example.com:5432

  • Failed

    Migrations

    2 migrations pending: 0007_saved_views, 0008_api_keys

    Apply the pending migrations before the app serves requests.

    Terminal
    npm run db:migrate

Auth

  • Passed

    Auth secret

    BETTER_AUTH_SECRET is set and isn’t the placeholder

  • Passed

    App URL

    BETTER_AUTH_URL is https://app.acme.example.com

Billing

  • Failed

    Stripe webhook secret

    BILLING_PROVIDER is stripe, but STRIPE_WEBHOOK_SECRET isn’t set

    Copy the signing secret from your webhook endpoint in the Stripe Dashboard into STRIPE_WEBHOOK_SECRET, then redeploy.

    Read Stripe’s guide
  • Skipped

    Plan prices

    Skipped until the Stripe webhook secret is set

AI

  • Passed

    Model

    anthropic/claude-sonnet-4.5 through AI Gateway

  • Warning

    AI Gateway key

    AI_GATEWAY_API_KEY isn’t set, so calls rely on Vercel’s OIDC token, which only exists on Vercel

    Create a key in your Vercel team’s AI Gateway settings and set AI_GATEWAY_API_KEY if you host anywhere else.

Email

  • Warning

    Email provider

    Emails are written to the server log, not sent

    Connect an email provider so invites and sign-in links reach people.

Jobs

  • Warning

    Purge job

    CRON_SECRET isn’t set, so deleted records are never removed

    Set CRON_SECRET to a random value; your scheduler sends it with each purge request.

    Terminal
    openssl rand -base64 32

MCP

  • Passed

    MCP endpoint

    Serving https://app.acme.example.com/api/mcp

Tracking Health

Analytics tracking checked one check after another, with the SDK update passing on the second run.

Pro

Tracking health

0of 6 passed

3 of 6 checks need a look. Checked 52 minutes ago.
  1. Events arriving

    The last one came in 2 seconds ago, from lumen.so.
    Passed540 ms
  2. Page views

    Captured on every page, 1,284 in the last hour.
    Passed430 ms
  3. People identified

    Only 12% of events belong to a person. Call identify() once someone signs in.
    Warning720 ms
    After sign-in
    hindsight.identify(user.id, {  email: user.email,  plan: user.plan,})
  4. Your own events

    8 of your own events arrived today, signup_started the latest.
    Passed360 ms
  5. Ad blockers

    About 1 in 6 visits blocks cdn.hindsight.example.
    Warning610 ms

    Send events through your own domain, so blockers let them through.

    Set up a proxy
  6. SDK version

    @hindsight/next 2.3.0. Version 2.4.1 stops events being lost when a tab closes.
    Warning380 ms

    Update the package, then deploy.

    Terminal
    npm install @hindsight/next@latest

On this page