# C3 Generated Configuration

## Output Structure

```
my-app/
├── src/index.ts          # Worker entry point
├── wrangler.jsonc        # Cloudflare config
├── package.json          # Scripts
├── tsconfig.json
└── .gitignore
```

## wrangler.jsonc

```jsonc
{
  "$schema": "https://raw.githubusercontent.com/cloudflare/workers-sdk/main/packages/wrangler/config-schema.json",
  "name": "my-app",
  "main": "src/index.ts",
  "compatibility_date": "2026-01-27",
}
```

## Binding Placeholders

C3 generates **placeholder IDs** that must be replaced before deploy:

```jsonc
{
  "kv_namespaces": [{ "binding": "MY_KV", "id": "placeholder_kv_id" }],
  "d1_databases": [{ "binding": "DB", "database_id": "00000000-..." }],
}
```

**Replace with real IDs:**

```bash
npx wrangler kv namespace create MY_KV   # Returns real ID
npx wrangler d1 create my-database       # Returns real database_id
```

**Deployment error if not replaced:**

```
Error: Invalid KV namespace ID "placeholder_kv_id"
```

## Scripts

```json
{
  "scripts": {
    "dev": "wrangler dev",
    "deploy": "wrangler deploy",
    "cf-typegen": "wrangler types"
  }
}
```

## Type Generation

Run after adding bindings:

```bash
npm run cf-typegen
```

Generates `.wrangler/types/runtime.d.ts`:

```typescript
interface Env {
  MY_KV: KVNamespace
  DB: D1Database
}
```

## Post-Creation Checklist

1. Review `wrangler.jsonc` - check name, compatibility_date
2. Replace placeholder binding IDs with real resource IDs
3. Run `npm run cf-typegen`
4. Test: `npm run dev`
5. Deploy: `npm run deploy`
6. Add secrets: `npx wrangler secret put SECRET_NAME`
