3.6 KiB
3.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Projekt
BistroUsky e-shop — webová aplikace pro prodej zákusků a cukrovinek. Produkčně použitelný e-shop s administrací, katalogem, košíkem, objednávkami a platbami.
Hlavní pravidla
- Neměň architekturu bez vysvětlení.
- Před větší změnou navrhni postup a počkej na souhlas.
- Po změně uveď, co bylo změněno a jak to otestovat.
- Nepřepisuj existující funkčnost, pokud to není nutné.
Tech stack
| Vrstva | Technologie |
|---|---|
| Framework | Next.js 16 (App Router) |
| Jazyk | TypeScript |
| Styling | Tailwind CSS v4 + shadcn/ui |
| Databáze | PostgreSQL + Prisma ORM |
| Autentizace | NextAuth.js v5 (beta) + @auth/prisma-adapter |
| Platby | Stripe |
| Resend + React Email | |
| Validace | Zod v4 |
| Testy | Vitest + @testing-library/react (unit), Playwright (E2E) |
Příkazy
npm install # instalace závislostí
npm run dev # vývojový server → http://localhost:3000
npm run build # produkční build
npm run lint # ESLint
npm test # Vitest (watch mode)
npx vitest run src/path/to/test.spec.ts # jeden test
npm run test:e2e # Playwright E2E testy
npm run db:migrate # aplikace nových DB migrací
npm run db:generate # regenerace Prisma klienta
npm run db:studio # Prisma Studio GUI
Architektura
src/
app/
(shop)/ # veřejná část e-shopu — layout a pages pro zákazníka
(admin)/ # admin sekce — chráněna rolí ADMIN
api/
auth/[...nextauth]/ # NextAuth handler
webhooks/ # Stripe webhook
components/
ui/ # shadcn/ui primitive komponenty (button, input, ...)
shop/ # doménové komponenty (ProductCard, CartItem, ...)
admin/ # admin komponenty (ProductForm, OrderTable, ...)
lib/
db.ts # Prisma client singleton — vždy importuj odtud
auth.ts # NextAuth konfigurace (handlers, auth, signIn, signOut)
stripe.ts # Stripe client
resend.ts # Resend client
emails/ # React Email šablony (OrderConfirmation, ...)
types/ # sdílené TypeScript typy a Zod schémata
prisma/
schema.prisma # datový model
migrations/ # DB migrace (generované, neupravuj ručně)
Klíčové konvence
- Server Actions pro mutace (formuláře, košík, objednávky) — ne API routes.
- API routes jen pro webhooky (Stripe) a veřejné REST endpointy.
- Zod schémata definovat v
src/types/a sdílet mezi Server Actions a klientem. - Prisma client importovat výhradně ze
src/lib/db.ts(singleton, zabraňuje memory leaks v dev). - Ceny ukládat vždy v haléřích (integer), zobrazovat konverzí
/100s formátováním. - Route groups
(shop)a(admin)oddělují layout a middleware ochranu — vmiddleware.tschránit/admin/*rolí ADMIN.
Doménový model (Prisma)
Klíčové vztahy:
Product→Category(N:1),ProductVariant[](1:N)Cart→CartItem[]→ProductVariant(guest přessessionId, přihlášený přesuserId)Order→OrderItem[]→ snapshot ceny (unitPrice) v době objednávkyUsermárole: CUSTOMER | ADMIN
Prostředí (.env)
DATABASE_URL # PostgreSQL connection string
AUTH_SECRET # NextAuth secret (generuj: npx auth secret)
STRIPE_SECRET_KEY
STRIPE_PUBLISHABLE_KEY
STRIPE_WEBHOOK_SECRET
RESEND_API_KEY
NEXT_PUBLIC_APP_URL # http://localhost:3000 ve vývoji