# Troubleshooting

The short list of things that actually go wrong, and how to fix them.

## The blog doesn't appear on my site

::::steps

:::step[Check the key and path]
The SDK container needs `data-key="pk_…"` (the *public* key from your site
page) and the `data-base-path` must match the blog's base path — `/blog`
unless you changed it.
:::

:::step[Check verification]
Delivery serves **verified sites only**. An unverified site returns 404
for every delivery URL. See [site verification](/docs/verification).
:::

:::step[Check the browser console]
A failing SDK fetch logs the HTTP status. 404 means key/path/verification;
anything else is worth reporting.
:::

::::

## Proxy returns 404 or an error page

- Test the upstream directly:
  `curl https://api.dailysmith.com/v1/render/pk_YOUR_KEY/blog` — if that
  works, the problem is the rewrite rule; compare it against
  [the templates](/docs/install-proxy) (the base path must be forwarded
  as-is).
- `"no blog is mounted at this path"` — the path your proxy forwards
  doesn't start with any blog's base path. Check for a stripped or doubled
  prefix.
- nginx specifically: keep `proxy_set_header Host api.dailysmith.com` and
  `proxy_ssl_server_name on`, or TLS to the API will fail.

## Verification keeps failing

Covered in detail on [site verification](/docs/verification) — it's almost
always DNS propagation, a redirecting well-known file, or a token copied
with extra characters.

## A post looks unstyled on my site

Rich components ship their stylesheet with the content. The SDK loads it
once as a cacheable `<link id="baas-md2-css">` (plus a small inline
`<style id="baas-theme-css">` for your theme palette, if you have one);
SSR/full pages inline everything instead. If components render as plain
text lists/paragraphs:

- SDK: confirm nothing on your page removes `<link>`/`<style>` elements
  injected into `<head>` after load, and that your Content-Security-Policy
  allows the API origin in `style-src` (see [the CSP block](/docs/install-sdk),
  plus `'unsafe-inline'` for the theme) — a blocked stylesheet fails
  silently in the console, not visibly on the page.
- If colors look wrong rather than missing, review your
  [theme](/docs/theming) — or remove it to fall back to the default
  palette.

## Generation is stuck or failed

- *Queued/generating* for more than ~10 minutes is not normal — the post
  page auto-refreshes; if it never resolves, retry the generation.
- *Failed* posts show the failing step and error in the generation trace.
  Transient model errors succeed on retry; a quota error means the month's
  credits are spent ([plans & quotas](/docs/billing)).

## My schedule didn't run

- Check it isn't **paused** — schedules pause themselves when the quota
  runs out, and stay paused until you resume them.
- The next-run time on the blog page is authoritative; times are computed
  in the schedule's timezone.

:::callout{severity=info title="Still stuck?"}
Every post carries a full generation trace and every API response is
plain HTTP you can `curl` — include both in a support message and it'll be
a short conversation.
:::
