Build and manage a full-stack e-commerce bakery platform on Cloudflare Workers with Next.js 15, including storefront, admin dashboard, delivery tracking, loyalty programs, and payment processing.
Build and manage a full-stack e-commerce bakery platform (Sweet Angel Bakery) on Cloudflare Workers with Next.js 15. Includes customer storefront, admin management, delivery tracking, loyalty program, and Square/Stripe payment processing.
**Merchant Provider Abstraction**: Payment processor abstraction in `src/lib/merchant-provider/`. Factory pattern dynamically selects Square or Stripe. To add new provider, implement interface in `providers/` and update factory.
**Type-Safe Server Actions (ZSA)**: All server operations use `createServerAction()` with Zod validation. Actions co-located in `*.actions.ts` files.
**Session Storage**: Sessions stored in Cloudflare KV (not D1) for edge performance. Max 5 sessions/user, 30-day expiration.
**Delivery System**: Timezone-aware delivery dates, route optimization with Google Maps, ETA tracking.
**Product Customizations**: Flexible addon system with price adjustments stored as JSON in order items.
```bash
pnpm dev # Start dev server (localhost:3000)
pnpm db:migrate:dev # Apply migrations to local SQLite
pnpm db:studio # Open Drizzle Studio (visual DB explorer)
pnpm email:dev # Preview email templates (localhost:3001)
```
```bash
pnpm db:generate [NAME] # Generate migration from schema changes
pnpm db:migrate:prod # Apply migrations to production D1
```
```bash
pnpm build # Next.js build
pnpm deploy # Build with OpenNext + deploy to Cloudflare
pnpm cf-typegen # Generate Cloudflare binding types
```
```bash
pnpm scrape:products # Scrape products from external source
pnpm sync:square # Sync with Square API
pnpm import:square # Import products from Square
```
**General Rules**:
**Imports**:
**State Management**:
**Styling**:
**Critical Rules**:
**Database Access Pattern**:
```typescript
const db = getDB(); // Cached via React cache()
await db.query.userTable.findFirst({ where: eq(...) });
```
**Migration Workflow**:
1. Edit `src/db/schema.ts`
2. Run `pnpm db:generate migration-name`
3. Apply: `pnpm db:migrate:dev` (local) or `pnpm db:migrate:prod` (production)
**Session Access**:
**Key Files**:
**Bindings in `wrangler.jsonc`**:
**Important**: After editing `wrangler.jsonc`, always run `pnpm cf-typegen` to regenerate types.
**Security**:
**Rate Limiting**:
**Email Templates**:
Use the merchant provider abstraction in `src/lib/merchant-provider/`. Never hardcode Square or Stripe logic directly - always go through the factory pattern for provider-agnostic code.
1. `pnpm install`
2. Copy `.dev.vars.example` → `.dev.vars` (Cloudflare credentials, API keys)
3. Copy `.env.example` → `.env` (public keys: Turnstile, Square, Stripe, Google OAuth)
4. `pnpm db:migrate:dev` - Create local database
5. `pnpm dev` - Start development server
GitHub Actions CI/CD (`.github/workflows/deploy.yml`) triggers on push to `main`:
1. Install dependencies
2. Migrate local D1
3. `pnpm deploy` (OpenNext build + Cloudflare deploy)
4. Apply remote D1 migrations
5. Purge CDN cache
**Adding a new feature**:
1. Check existing patterns in route structure
2. Create server action in `*.actions.ts` with Zod validation
3. Use Server Components for data fetching
4. Add client interactivity with `"use client"` only where needed
5. Update database schema if needed (follow migration workflow)
6. Test locally with `pnpm dev` and Drizzle Studio
**Database changes**:
1. Edit `src/db/schema.ts`
2. `pnpm db:generate add-new-column`
3. `pnpm db:migrate:dev`
4. Deploy: `pnpm db:migrate:prod`
**Adding a new payment provider**:
1. Implement interface in `src/lib/merchant-provider/providers/new-provider.ts`
2. Update factory in `src/lib/merchant-provider/factory.ts`
3. Add provider-specific env vars to `.dev.vars` and `.env`
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/e-commerce-store-bakery-platform/raw