dd-cards fails loudly and specifically at boot rather than half-starting. Every message below is
quoted from the resource itself, so you can match it against your console exactly.

## Boot errors

### `no supported framework found`

> dd-cards: no supported framework found. Start qbx_core or qb-core, set `Config.Framework`
> explicitly, or add a bridge for your own framework.

Neither `qbx_core` nor `qb-core` was **started** when dd-cards resolved its bridges.

Almost always a start-order problem rather than a missing resource. dd-cards checks
`GetResourceState`, so the framework has to be started _before_ it in `server.cfg`:

```cfg
ensure qbx_core
ensure dd-cards      # after, not before
```

### `no supported inventory found`

> dd-cards: no supported inventory found. Start ox_inventory or qb-inventory, set
> `Config.Inventory` explicitly, or add a bridge for your own inventory.

Same cause, same fix — `ensure` your inventory before dd-cards.

### `no framework bridge at bridge/…/server.lua`

> dd-cards: no framework bridge at bridge/`<name>`/server.lua. Check `Config.Framework`.

`Config.Framework` names something that has no bridge file. Usually a typo. The same message exists
for inventory, interaction and menu, each naming its own config option.

Adding a bridge for a resource dd-cards does not ship is covered on [Custom bridges](/docs/dd-cards/bridges).

### `Config.Interaction is 'qb-drawtext' but qb-core is not started`

> dd-cards: `Config.Interaction` is 'qb-drawtext' but qb-core is not started. That prompt ships
> inside qb-core; there is no separate qb-drawtext resource.

There is no resource called `qb-drawtext` to install — the prompt lives inside qb-core. Either start
qb-core, or use `Config.Interaction = 'ox_lib'` for the equivalent ox_lib prompt.

### `Config.Menu is 'qb-menu' but qb-menu is not started`

Exactly what it says. Start qb-menu, or set `Config.Menu = 'auto'` to use ox_lib's context menu.

## Startup messages that are not errors

On a healthy boot dd-cards prints which implementation it picked for each category:

```
dd-cards: using qbx_core as framework.
dd-cards: using ox_inventory as inventory.
dd-cards: using ox_target for fabric interaction.
dd-cards: using ox_lib for menus.
dd-cards: using lb-phone for notifications.
```

Worth reading when something behaves unexpectedly — if `'auto'` resolved to a different resource
than you assumed, this is where it says so.

## Common setup problems

### No ped at the fabric

Check `Config.Fabric[1].coords`. The `w` component is the heading the ped faces; if the ped is there
but facing a wall, that value needs turning 180 degrees.

### Items show as broken icons

The six `.png` files from `install/inventory/images` were not copied into your inventory's image
folder — `ox_inventory/web/images/` or `qb-inventory/html/images/`. See
[Items & images](/docs/dd-cards/items).

### Using the box or the card does nothing

- **ox_inventory** — the `export` lines are missing from the item definitions. Both
  `business_card_box` and `business_card` need their `client.export` entry.
- **qb-inventory** — the items are not `useable = true` in `qb-core/shared/items.lua`.

### Cards from different designs merge in the inventory

The box and the card are stacking. They must be `stack = false` on ox_inventory, or
`unique = true` on qb-core. Each carries its own metadata — which design it holds, and how many
cards remain — so stacking merges unrelated designs into one pile.

### The first order fails with a database error

The tables do not exist. Either set
[`AutoInsertSql = true`](/docs/dd-cards/configuration/server#autoinsertsql), or import
`install/sql/dd-cards.sql` by hand.

### The walk-up prompt appears even though ox_target is installed

`Config.Interaction` ships as `'ox_lib'`, not `'auto'`. Change it to `'auto'` (or `'ox_target'`) —
see [Client config](/docs/dd-cards/configuration/client#interaction).

### Players never get the "order ready" message

Check which provider was chosen in the boot log. If it resolved to `ox_lib`, no supported phone was
started. If it resolved to `lb-phone`, note that lb-phone cannot deliver to an offline player — the
order is still ready and waiting in the Orders menu. See
[offline delivery](/docs/dd-cards/compatibility#offline-notification-delivery).

## Player-facing messages

These come from `locales/en.json` and are shown to players, not to you — but several point at a
server-side cause worth knowing:

| Message                                            | What it usually means                                                                                                                      |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| "The price changed, check the order again"         | The quote was recalculated between opening the designer and submitting — normally because the player's material stock changed              |
| "That box couldn't be read from your inventory"    | The inventory bridge's `getSlot` returned nothing for that slot                                                                            |
| "That box has lost the design it was printed from" | The box's metadata is missing its template reference — typically a bridge that drops metadata, or a template row deleted from the database |
| "That isn't a business card box"                   | The item in that slot is not `Config.Items.box`; check for a rename that was applied in only one place                                     |
| "You've used all 5 template slots"                 | Working as intended — the five-slot limit is enforced by a unique key in the database                                                      |
| "You don't have space for that"                    | The inventory refused the box on weight or slots                                                                                           |

## Still stuck?

Include the boot log lines showing which bridges were resolved — they narrow almost every problem
down immediately. Contact details are in the footer of every page.
