Startup and access
The stack refuses to start
The stack refuses to start
POSTGRES_PASSWORD or AUTH_SECRET. Both are required in the root .env and Compose refuses to start when either is missing or empty. Generate them, then start again.The API exits immediately on boot
The API exits immediately on boot
AUTH_SECRETis shorter than 32 characters. The API refuses to run with a weak signing secret. Generate one withopenssl rand -hex 32and recreate the API container.AUTH_COOKIE_SECUREisfalsewhileNODE_ENVisproduction, which the Docker image always sets. The log readsAUTH_COOKIE_SECURE must be true when NODE_ENV is production.Set it back totrueand see Sessions do not persist behind a proxy for ways to reach the stack without TLS. See What the API refuses to start with.
P3018 or P3009 and names the migration. See If a migration fails.I cannot register a second account
I cannot register a second account
AUTH_ALLOW_REGISTRATION=true and restart the API. See Authentication and accounts.I am signed out after a restart
I am signed out after a restart
AUTH_SECRET changed, which invalidates every session signature. Personal API tokens are unaffected. See Rotate secrets.Sessions do not persist behind a proxy
Sessions do not persist behind a proxy
AUTH_COOKIE_SECURE=true marks the cookie Secure, so a browser reaching the site over plain HTTP from another machine discards it. Setting it to false is not an option, because the Docker image then refuses to boot. Pick one of these instead.- Terminate TLS in front of port 3001 with your own reverse proxy and certificate.
- Compose the Cloudflare Tunnel overlay, which terminates TLS at Cloudflare.
- Forward the port over SSH and open
http://localhost:3001in Chrome or Firefox, which keep aSecurecookie on localhost without TLS. Safari does not. See Signing in returns to the sign in form.
Signing in returns to the sign in form
Signing in returns to the sign in form
Secure, and a browser stores it only over HTTPS or on an origin it treats as secure. Three causes cover almost every case.- Safari on plain HTTP, even on localhost. Chrome and Firefox keep a
Securecookie onhttp://localhostandhttp://127.0.0.1. Safari drops it there, sohttp://localhost:3001accepts the sign in and bounces straight back. WebKit tracks the gap as bug 281149, and the MDN compatibility data records it forSet-Cookie. Safari 27.0 announces support forSecurecookies on loopback hosts, but the change depends on the system cookie storage, and on macOS 26.6 that storage still drops the cookie, so Safari 27.0 there behaves as before. - Plain HTTP from another machine. A LAN address or any hostname that is not loopback is not a secure origin in any browser.
- Cookies blocked for the site. A browser setting, extension or policy that blocks all cookies discards the cookie even over HTTPS.
POST /api/backend/auth/register that answers 201, or a POST /api/backend/auth/login that answers 200, with a Set-Cookie: asobeast_session header, followed by no stored asobeast_session cookie, is this problem.Pick one fix.- Use Chrome or Firefox for a local evaluation on
http://localhost:3001. - Put TLS in front of the stack. For a local evaluation that works in Safari, run Caddy with the Caddyfile below and open
https://localhost. Caddy signs the certificate with its own local authority, which the system has to trust before Safari accepts it. - Compose the Cloudflare Tunnel overlay for a host you reach from elsewhere.
TRUST_PROXY=1 as Bring your own proxy describes. Do not set AUTH_COOKIE_SECURE=false to get past this, because the Docker image then refuses to boot.Admin surfaces
/admin/queues returns 404
/admin/queues returns 404
404 rather than 403 so it does not confirm it exists. Sign in and reload, or check that BULL_BOARD_ENABLED is not false. See The queue dashboard and the OpenAPI surface./admin/support returns 404 although I am signed in as the operator
/admin/support returns 404 although I am signed in as the operator
/docs returns 404
/docs returns 404
API_DOCS defaults to owner, which gates the documentation routes the same way. Sign in as the platform operator, or set API_DOCS=public if the surface should be readable by anyone. See The queue dashboard and the OpenAPI surface.The admin area says my workspace needs a plan
The admin area says my workspace needs a plan
/admin/queues, /docs and /metrics open only while the operator’s own workspace has a plan in force, so a lapsed trial or a trial still waiting for the email confirmation closes all of them. Confirm the email if the notice asks for it, choose a plan on the upgrade page, or set plan on the bootstrap workspace in the database. See When the operator’s workspace has no plan.Every admin surface answers 404 and no account is the operator
Every admin surface answers 404 and no account is the operator
ws_default was erased while other accounts survived, which older releases allowed from Settings. Check for it.AUTH_ALLOW_REGISTRATION=true and restart the API for the sign up, then set it back to false and restart again. An existing account whose workspace holds no apps works as well and needs no sign up. Replace the email with the account you chose.BILLING_ENABLED=true the admin surfaces also need an entitled operator, so add "plan" to the insert with 'ultimate' as its value. See Deleting the operator workspace.Collection
No rankings appeared overnight
No rankings appeared overnight
CRON_DAILY, which defaults to 0 3 * * * and is evaluated in UTC rather than in your local timezone. Check pipeline.lastDailyRunAt on /api/backend/health, then look at the queue dashboard for stuck or failed jobs. See The daily pipeline and rate limits.Rankings show >200 instead of a number
Rankings show >200 instead of a number
Collection is slow or jobs are backing up
Collection is slow or jobs are backing up
GET /jobs/budget. Remove keywords or markets rather than raising the limits, which risks the store throttling your IP address. See The daily pipeline and rate limits.The health badge says degraded after an upgrade
The health badge says degraded after an upgrade
/admin/queues, select the store queue, open its failed jobs and clean them. The badge recovers on the next health check. See The queue dashboard and the OpenAPI surface.Scores changed after upgrading
Scores changed after upgrading
formulaVersion that produced it, and the API queues one rescore for every tracked keyword whose latest score used an older version, through the same rate limited queues as weekly scoring. Until its job runs, a keyword keeps its old numbers and the table says “Older formula”. A large list takes a while: about 100 minutes per 150 App Store keywords at the default rate limit. See Popularity, difficulty and opportunity.A store import fails to parse
A store import fails to parse
Alerts and AI
Webhook alerts never arrive
Webhook alerts never arrive
Email alerts never arrive
Email alerts never arrive
SMTP_HOST and SMTP_FROM are set. One without the other leaves it off. Check the delivery log for a relay rejection, which usually means the envelope sender is not on a domain the relay accepts. Mail that arrives but lands in spam needs the sending domain authenticated. See Email deliverability.A confirmation, recovery or invitation email never arrives
A confirmation, recovery or invitation email never arrives
account channel, with the event naming what it was for, verification, recovery or invitation, and one of three outcomes./metrics as asobeast_account_mail_attempts over the last day, and mail.failures.clustered fires once a fifth of the attempts are being refused. See Hosted observability.The relay is verified once before the first message of a process, so a wrong host, port or credential fails with the relay’s own response rather than being discovered by a customer who never got their link.Alert links point at localhost or are missing
Alert links point at localhost or are missing
WEB_PUBLIC_URL is unset, so the link field is null by design rather than a guess that would not open. Set it to your public origin. See Hosting behind TLS and a reverse proxy.The AI endpoints return 409
The AI endpoints return 409
OPENAI_API_KEY is unset, which disables the AI audit, the metadata drafts card and action explanations. Every other feature works without it. See Enable the optional AI features.