Przejdź do treści
Biblioteka skilli
Programowanie · Budowanie i kod

cloudflare-full-stack-integration

/cloudflare-full-stack-integration

Dostarcza sprawdzone wzorce łączenia frontendu React z backendem Cloudflare Workers i Hono z Clerk i D1: klient API z tokenami, ProtectedRoute, CORS, weryfikacja JWT i konfiguracja wrangler.

Repozytorium
ClaudeSkillz ↗
Licencja
MIT
Ostatnia zmiana repozytorium
03.08.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
3
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
10
Przestarzałość

Brak sygnałów. Repozytorium zmienione 03.08.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Dostarcza sprawdzone wzorce łączenia frontendu React z backendem Cloudflare Workers i Hono z Clerk i D1: klient API z tokenami, ProtectedRoute, CORS, weryfikacja JWT i konfiguracja wrangler.

Oryginalny opis (EN)

Production-tested patterns for wiring a React frontend to a Cloudflare Workers + Hono backend with Clerk authentication and D1, including an API client that attaches auth tokens automatically, a ProtectedRoute auth gate with loading states, CORS middleware for dev and production, Clerk JWT verification middleware, wrangler.jsonc bindings, .dev.vars environment variables, and @cloudflare/vite-plugin config (the Worker and frontend share one dev port, so relative /api URLs are correct). Use when connecting frontend to backend, implementing an auth flow, or troubleshooting CORS errors, 401 Unauth

Jak działa

  1. When to Use This Skill
  2. What This Skill Provides
  3. Critical Architectural Insights
  4. Step-by-Step Integration Guide
  5. Common Issues and Solutions
  6. Integration Checklist
  7. Package Versions (Verified 2025-10-23)
  8. Official Documentation Links
  9. Production Evidence
  10. Token Efficiency
Sekcje z nagłówków SKILL.md, w oryginale · 380 linii, 1 293 słów
Podgląd SKILL.md
---
name: cloudflare-full-stack-integration
description: >-
  Production-tested patterns for wiring a React frontend to a Cloudflare Workers + Hono backend
  with Clerk authentication and D1, including an API client that attaches auth tokens
  automatically, a ProtectedRoute auth gate with loading states, CORS middleware for dev and
  production, Clerk JWT verification middleware, wrangler.jsonc bindings, .dev.vars environment
  variables, and @cloudflare/vite-plugin config (the Worker and frontend share one dev port, so
  relative /api URLs are correct). Use when connecting frontend to backend, implementing an auth
  flow, or troubleshooting CORS errors, 401 Unauthorized responses, auth tokens not passing, race
  conditions while auth is still loading, environment variable confusion, or D1 connection issues.
license: MIT
metadata:
  version: 1.0.0
  last_updated: 2025-10-23
  packages:
    - "@clerk/clerk-react: 5.53.3"
    - "@clerk/backend: 2.19.0"
    - "hono: 4.10.2"
    - "vite: 7.1.11"
    - "@cloudflare/vite-plugin: 1.13.14"
  production_tested: true
  token_savings: "60-70%"
  errors_prevented: "6+ common integration errors"
---

# Cloudflare Full-Stack Integration Patterns

Production-tested patterns for React + Cloudflare Workers + Hono + Clerk authentication.

## When to Use This Skill

Use this skill when you need to:

- Connect a React frontend to a Cloudflare Worker backend
- Implement authentication with Clerk in a full-stack app
- Set up API calls that automatically include auth tokens
- Fix CORS errors between frontend and backend
- Prevent race conditions with auth loading
- Configure environment variables correctly
- Set up D1 database access from API routes
- Create protected routes that require authentication

## What This Skill Provides

### Templates

**Frontend** (`templates/frontend/`):
- `lib/api-client.ts` - Fetch wrapper with automatic token attachment
- `components/ProtectedRoute.tsx` - Auth gate pattern with loading states

**Backend** (`templates/backend/`):
- `middleware/cors.ts` - CORS configuration for dev and production
- `middleware/auth.ts` - JWT verification with Clerk
- `routes/api.ts` - Example API routes with all patterns integrated

**Config** (`templates/config/`):
- `wrangler.jsonc` - Complete Workers configuration with bindings
- `.dev.vars.example` - Environment variables setup
- `vite.config.ts` - Cloudflare Vite plugin configuration

**References** (`references/`):
- `common-race-conditions.md` - Complete guide to auth loading issues

## Critical Architectural Insights

### 1. @cloudflare/vite-plugin Runs on SAME Port

**Key Insight**: The Worker and frontend run on the SAME port during development.

```typescript
// ✅ CORRECT: Use relative URLs
fetch('/api/data')

// ❌ WRONG: Don't use absolute URLs or proxy
fetch('http://localhost:8787/api/data')
```

**Why**: The Vite plugin runs your Worker using workerd directly in the dev server. No proxy needed!

### 2. CORS Must Be Applied BEFORE Routes

```typescript
// ✅ CORRECT ORDER
app.use('/api/*', cors())
app.post('/api/data', handler)

// ❌ WRONG ORDER - Will cause CORS errors
app.post('/api/data', handler)
app.use('/api/*', cors())
```

### 3. Auth Loading is NOT a Race Condition

Most "race conditions" are actually missing `isLoaded` checks:

```typescript
// ❌ WRONG: Calls API before token ready
useEffect(() => {
  fetch('/api/data') // 401 error!
}, [])

// ✅ CORRECT: Wait for auth to load
const { isLoaded, isSignedIn } = useSession()
useEffect(() => {
  if (!isLoaded || !isSignedIn) return
  fetch('/api/data') // Now token is ready
}, [isLoaded, isSignedIn])
```

### 4. Environment Variables Have Different Rules

**Frontend** (Vite):
- MUST start with `VITE_` prefix
- Defined in `.env` file
- Access: `import.meta.env.VITE_VARIABLE_NAME`

**Backend** (Workers):
- NO prefix required
- Defined in `.dev.vars` file (dev) or wrangler secrets (prod)
- Access: `env.VARIABLE_NAME`

### 5. D1 Bindings Are Always Available

D1 is accessed via bindings - no connection management needed:

```typescript
// ✅ CORRECT: Direct access via binding
const { results } = await env.DB.prepare('SELECT * FROM users').run()

// ❌ WRONG: No need to "connect" first
const connection = await env.DB.connect() // This doesn't exist!
```

## Step-by-Step Integration Guide

### Step 1: Project Setup

```bash
# Create project with Cloudflare Workers + React
npm create cloudflare@latest my-app
cd my-app

# Install dependencies
npm install hono @clerk/clerk-react @clerk/backend
npm install -D @cloudflare/vite-plugin @tailwindcss/vite
```

### Step 2: Configure Vite

Copy `templates/config/vite.config.ts` to your project root.

**Key points**:
- Includes `cloudflare()` plugin
- No proxy configuration needed
- Sets up path aliases for clean imports

### Step 3: Configure Wrangler

Copy `templates/config/wrangler.jsonc` to your project root.

**Update**:
- Replace `name` with your app name
- Add D1/KV/R2 bindings as needed
- Set `run_worker_first: ["/api/*"]` for API routes

### Step 4: Set Up Environment Variables

Create `.dev.vars` (gitignored):
```
CLERK_PUBLISHABLE_KEY=pk_test_xxxxx
CLERK_SECRET_KEY=sk_test_xxxxx
```

Create `.env` for frontend:
```
VITE_CLERK_PUBLISHABLE_KEY=pk_test_xxxxx
```

### Step 5: Add CORS Middleware

Copy `templates/backend/middleware/cors.ts` to your backend.

Apply in your main worker file:
```typescript
import { corsMiddleware } from './middleware/cors'

app.use('/api/*', (c, next) => corsMiddleware(c.env)(c, next))
```

**CRITICAL**: Apply this BEFORE defining routes!

### Step 6: Add Auth Middleware

Copy `templates/backend/middleware/auth.ts` to your backend.

Apply to protected routes:
```typescript
import { jwtAuthMiddleware } from './middleware/auth'

app.use('/api/protected/*', jwtAuthMiddleware(c.env.CLERK_SECRET_KEY))
```

### Step 7: Set Up API Client

Copy `templates/frontend/lib/api-client.ts` to your frontend.

Use in your App component:
```typescript
import { useApiClient } from '@/lib/api-client'

function App() {
  useApiClient() // Set up token access
  return <YourApp />
}
```

### Step 8: Create Protected Routes

Copy `templates/frontend/components/ProtectedRoute.tsx`.

Use to wrap authenticated pages:
```typescript
<ProtectedRoute>
  <Dashboard />
</ProtectedRoute>
```

### Step 9: Create API Routes

Copy `templates/backend/routes/api.ts` as a reference.

Pattern for all routes:
1. Apply CORS first
2. Apply auth middleware to protected routes
3. Extract user ID from JWT payload
4. Access D1/KV/R2 via env bindings
5. Return typed JSON responses

### Step 10: Test Integration

```bash
# Start dev server
npm run dev

# Both frontend and backend run on http://localhost:5173
# API routes: http://localhost:5173/api/*
# Frontend: http://localhost:5173/*
```

## Common Issues and Solutions

### Issue: 401 Unauthorized Errors

**Symptom**: API calls fail with 401 even though user is signed in

**Cause**: API called before Clerk session is loaded

**Fix**: Check `isLoaded` and `isSignedIn` before API calls
```typescript
const { isLoaded, isSignedIn } = useSession()
if (!isLoaded || !isSignedIn) return // Wait for auth
```

See: `references/common-race-conditions.md`

### Issue: CORS Errors

**Symptom**: "No 'Access-Control-Allow-Origin' header" errors

**Causes**:
1. CORS middleware not applied
2. CORS middleware applied after routes (wrong order)
3. Origin not allowed in production

**Fix**:
```typescript
// Apply BEFORE routes
app.use('/api/*', cors())
app.post('/api/data', handler)
```

For production, update `corsProdMiddleware` with your domain.

### Issue: Environment Variables Not Working

**Symptom**: Variables are `undefined` in frontend or backend

**Frontend Fix**:
- Variables MUST start with `VITE_`
- Must be in `.env` file (not `.dev.vars`)
- Access: `import.meta.env.VITE_NAME`

**Backend Fix**:
- Variables in `.dev.vars` for local dev
- Use `wrangler secret put NAME` for production
- Access: `env.NAME`

### Issue: D1 Queries Fail

**Symptom**: Database queries throw errors

**Causes**:
1. Binding not configured in wrangler.jsonc
2. SQL syntax errors
3. Not using parameterized queries

**Fix**:
```typescript
// ✅ CORRECT: Parameterized query
await env.DB.prepare('SELECT * FROM users WHERE id = ?')
  .bind(userId)
  .run()

// ❌ WRONG: SQL injection risk
await env.DB.prepare(`SELECT * FROM users WHERE id = ${userId}`).run()
```

### Issue: Token Not Attached to Requests

**Symptom**: Backend receives requests without Authorization header

**Cause**: Not using `apiClient` or not calling `useApiClient()` hook

**Fix**:
1. Call `useApiClient()` in App component
2. Use `apiClient.get()` instead of raw `fetch()`

```typescript
// In App.tsx
import { useApiClient } from '@/lib/api-client'
function App() {
  useApiClient() // MUST call this
  return <YourApp />
}

// In components
import { apiClient } from '@/lib/api-client'
const data = await apiClient.get('/api/data')
```

## Integration Checklist

Before deployment, verify:

**Frontend**:
- [ ] `useApiClient()` called in App component
- [ ] All protected pages wrapped in `<ProtectedRoute>`
- [ ] Check `isLoaded` before making API calls
- [ ] Environment variables start with `VITE_`
- [ ] Using `apiClient` for all API calls

**Backend**:
- [ ] CORS middleware applied BEFORE routes
- [ ] Auth middleware on `/api/protected/*` routes
- [ ] Environment variables in `.dev.vars` (dev) and secrets (prod)
- [ ] D1/KV/R2 bindings configured in wrangler.jsonc
- [ ] Using parameterized queries for D1

**Config**:
- [ ] `wrangler.jsonc` has correct bindings
- [ ] `vite.config.ts` includes `cloudflare()` plugin
- [ ] `.dev.vars` exists and is gitignored
- [ ] `.env` exists for frontend vars
- [ ] `run_worker_first: ["/api/*"]` in wrangler.jsonc

## Package Versions (Verified 2025-10-23)

All packages are current stable versions:

```json
{
  "@clerk/clerk-react": "5.53.3",
  "@clerk/backend": "2.19.0",
  "hono": "4.10.2",
  "vite": "7.1.11",
  "@cloudflare/vite-plugin": "1.13.14"
}
```

## Official Documentation Links

- **Cloudflare Vite Plugin**: https://developers.cloudflare.com/workers/vite-plugin/
- **Hono**: https://hono.dev/
- **Clerk**: https://clerk.com/docs
- **D1 Database**: https://developers.cloudflare.com/d1/
- **CORS on Workers**: https://developers.cloudflare.com/workers/examples/cors-header-proxy/

## Production Evidence

Patterns tested in:
- WordPress Auditor (https://wordpress-auditor.webfonts.workers.dev)
- Multiple Jezweb client projects
- All templates verified working 2025-10-23

## Token Efficiency

**Without this skill**: ~12k tokens + 2-4 integration errors
**With this skill**: ~4k tokens + 0 errors
**Savings**: ~67% tokens, 100% error prevention

---

**Remember**: Most integration issues are just missing `isLoaded` checks or wrong middleware order. Use the templates and follow the step-by-step guide!
Pliki w paczce (3)
  • README.md 7 KB
  • SKILL.json 11 KB
  • SKILL.md 11 KB

Wersje

W bazie nie ma innych skilli o nazwie cloudflare-full-stack-integration.

Identyczna treść występuje jeszcze w 1 innych folderach na GitHubie. Tu pokazujemy jedną, najlepiej ocenioną kopię.

Migawka bazy z 28.10.2026 · wersja paczki 20a414045ecb (skrót SHA-256 całej paczki)

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 95clerk-auth
    Integruje uwierzytelnianie Clerk w React/Vite, Next.js App Router i Cloudflare Workers: ClerkProvider, clerkMiddleware, weryfikacja tokenów, szablony JWT dla RBAC, Hono i testy E2E Playwright.
  • 100hono
    Pomaga budować API w Hono działające na Cloudflare Workers, Deno, Bun, Node.js, AWS Lambda i Vercel: walidacja Zod, JWT, CORS, middleware, klient RPC hc, JSX i streaming.
  • 95cloudflare-full-stack-scaffold
    Tworzy szkielet projektu full-stack: React 19, Cloudflare Workers i Hono z D1, KV, R2 i Workers AI, opcjonalnie Clerk, czat AI, Queues i Vectorize, Tailwind v4 i shadcn/ui.
  • 100cloudflare-workers
    Buduje i wdraża funkcje brzegowe w Cloudflare Workers i Wrangler: API, zadania cron i middleware brzegowy.
  • 100cloudflare-workers
    Buduje i wdraża funkcje brzegowe w Cloudflare Workers i Wrangler: API, zadania cron i middleware brzegowy.
  • 100cloudflare-workers
    Buduje i wdraża funkcje brzegowe w Cloudflare Workers i Wrangler: API, zadania cron i middleware brzegowy.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.