Web apps

Dog walker booking site with Stripe payments and SMS

Next.js booking app where clients pick a walk slot, pay via Stripe Checkout, and receive a Twilio SMS reminder 24 hours before.

nextjstypescripttailwindprismapostgresstripe

Built 1 time, downloaded 0 times.

Install from your terminal

Run this in your project folder. It signs you in, shows what changes and asks before it overwrites a file.

npx claude-lab add dog-walker-booking-site-with-stripe-payments-and-sms-d0163f
CLAUDE.md
# Dog walker booking site

## What this is

A booking website for one dog walker. Clients choose a time slot, pay online with Stripe, and receive an SMS reminder via Twilio 24 hours before the walk.

## Stack

- Next.js App Router, TypeScript strict
- Tailwind CSS
- Prisma ORM with PostgreSQL
- Stripe Checkout with webhooks
- Twilio SMS
- Vitest for unit tests
- Playwright for end-to-end tests

## Commands

- `npm run dev`: start the dev server on http://localhost:3000
- `npm run verify`: lint, typecheck, unit tests, build. Must pass before any change is called done.
- `npm run test:e2e`: Playwright end-to-end tests
- `npx prisma migrate dev`: apply schema changes locally

## Verification

- After every change, run `npm run verify`.
- If it fails, fix it before reporting back.
- Use the `verify` skill for the full checklist.

## Rules

### Money

- Never store card data. Stripe handles all card entry.
- Store only Stripe IDs and amounts in cents as integers.
- Show dollars to the user, formatted from cents.

### Secrets

- Never write real keys into any file.
- Use placeholders such as `YOUR_STRIPE_SECRET_KEY` in `.env.example`.
- Real values live only in `.env.local`, which is git-ignored.

### Bookings

- A slot is held only after the Stripe webhook confirms payment.
- Never trust the client redirect as proof of payment.

### Time

- Store all times in UTC.
- Display times in the walker's timezone, read from a config value.
- The default `America/New_York` is a placeholder. The user changes it.

### Phone numbers

- Store phone numbers in E.164 format.
- Send SMS only to clients who opted in.

## Testing

- For long test output, use the `test-runner` subagent so only failures come back to the main chat.

## Ask before

- Running Prisma migrations that drop or rename columns
- Changing Stripe webhook logic
- Deleting files
- Pushing to git

## Review

- `REVIEW.md` holds the review checklist. It is imported below so `/code-review` applies the same rules.

@REVIEW.md

## Gotchas

- Stripe webhooks need the Stripe CLI locally. Run this in a second terminal:
  `stripe listen --forward-to localhost:3000/api/stripe/webhook`
- Twilio trial accounts can only text verified numbers. Verify each test number in the Twilio console first.
- Prisma migrations that rename or drop columns need approval (see Ask before).
Use for my project