Merge branch 'main' of github.com:makerkit/next-supabase-saas-kit-turbo
This commit is contained in:
170
AGENTS.md
Normal file
170
AGENTS.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# Project Agents.md Guide for OpenAI Codex
|
||||
|
||||
This Agents.md file provides comprehensive guidance for OpenAI Codex and other AI agents working with this codebase.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Makerkit - Supabase SaaS Starter Kit (Turbo Edition) is a multi-tenant SaaS application built with Next.js, Supabase, and Tailwind CSS. The project uses a Turborepo monorepo structure with distinct apps for the main web application, development tools, and e2e testing.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Monorepo Structure
|
||||
|
||||
- `/apps/web` - Main Next.js SaaS application
|
||||
- `/apps/dev-tool` - Development utilities (runs on port 3010)
|
||||
- `/apps/e2e` - Playwright end-to-end tests
|
||||
- `/packages/` - Shared packages and utilities
|
||||
- `/tooling/` - Build tools, linting, and development scripts
|
||||
|
||||
### Core Technologies
|
||||
|
||||
- **Next.js 15** with App Router and Turbopack
|
||||
- **Supabase** for database, auth, and storage
|
||||
- **React 19** with React Compiler
|
||||
- **TypeScript** with strict configuration
|
||||
- **Tailwind CSS 4** for styling
|
||||
- **Turborepo** for monorepo management
|
||||
|
||||
### Multi-Tenant Architecture
|
||||
|
||||
The application uses a dual account model:
|
||||
|
||||
- **Personal Accounts**: Individual user accounts (auth.users.id = accounts.id)
|
||||
- **Team Accounts**: Shared workspaces with members, roles, and permissions
|
||||
- Data is associated with accounts via foreign keys for proper access control
|
||||
|
||||
## Common Commands
|
||||
|
||||
### Development
|
||||
|
||||
```bash
|
||||
# Start all apps in development
|
||||
pnpm dev
|
||||
|
||||
# Start specific app
|
||||
pnpm --filter web dev # Main app (port 3000)
|
||||
pnpm --filter dev-tool dev # Dev tools (port 3010)
|
||||
|
||||
# Build all apps
|
||||
pnpm build
|
||||
|
||||
# Run tests
|
||||
pnpm test # All tests
|
||||
pnpm --filter e2e test # E2E tests only
|
||||
```
|
||||
|
||||
### Code Quality
|
||||
|
||||
```bash
|
||||
# Lint all code
|
||||
pnpm lint
|
||||
pnpm lint:fix # Auto-fix issues
|
||||
|
||||
# Format code
|
||||
pnpm format
|
||||
pnpm format:fix # Auto-fix formatting
|
||||
|
||||
# Type checking
|
||||
pnpm typecheck
|
||||
```
|
||||
|
||||
### Database Operations
|
||||
|
||||
```bash
|
||||
# Start Supabase locally
|
||||
pnpm supabase:web:start
|
||||
|
||||
# Reset database with latest schema
|
||||
pnpm supabase:web:reset
|
||||
|
||||
# Generate TypeScript types from database
|
||||
pnpm supabase:web:typegen
|
||||
|
||||
# Run database tests
|
||||
pnpm supabase:web:test
|
||||
|
||||
# Create migration from schema changes
|
||||
pnpm --filter web supabase:db:diff
|
||||
|
||||
# Stop Supabase
|
||||
pnpm supabase:web:stop
|
||||
```
|
||||
|
||||
## Database Guidelines
|
||||
|
||||
### Schema Management
|
||||
|
||||
- Database schemas are in `apps/web/supabase/schemas/`
|
||||
- Create new schemas as `<number>-<name>.sql`
|
||||
- After schema changes: run `pnpm --filter web supabase:db:diff` then `pnpm supabase:web:reset`
|
||||
|
||||
### Security & RLS
|
||||
|
||||
- **Always enable RLS** on new tables unless explicitly instructed otherwise
|
||||
- Use helper functions for access control:
|
||||
- `public.has_role_on_account(account_id, role?)` - Check team membership
|
||||
- `public.has_permission(user_id, account_id, permission)` - Check specific permissions
|
||||
- `public.is_account_owner(account_id)` - Verify account ownership
|
||||
- Associate data with accounts using foreign keys for proper access control
|
||||
|
||||
### Type Generation
|
||||
|
||||
Import auto-generated types from `@kit/supabase/database`:
|
||||
|
||||
```typescript
|
||||
import { Tables } from '@kit/supabase/database';
|
||||
|
||||
type Account = Tables<'accounts'>;
|
||||
```
|
||||
|
||||
## Development Patterns
|
||||
|
||||
### Data Fetching
|
||||
|
||||
- **Server Components**: Use `getSupabaseServerClient()` directly
|
||||
- **Client Components**: Use `useSupabase()` hook + React Query's `useQuery`
|
||||
- Prefer Server Components and pass data down to Client Components when needed
|
||||
|
||||
### Server Actions
|
||||
|
||||
- Always use `enhanceAction` from `@kit/next/actions`
|
||||
- Name files as `server-actions.ts` and functions with `Action` suffix
|
||||
- Place Zod schemas in separate files for reuse with forms
|
||||
- Use `'use server'` directive at top of file
|
||||
|
||||
### Error Handling & Logging
|
||||
|
||||
- Use `@kit/shared/logger` for logging
|
||||
- Don't swallow errors - handle them appropriately
|
||||
- Provide context without sensitive data
|
||||
|
||||
### Component Organization
|
||||
|
||||
- Route-specific components in `_components/` directories
|
||||
- Route-specific utilities in `_lib/` directories
|
||||
- Server-side utilities in `_lib/server/`
|
||||
- Global components and utilities in root-level directories
|
||||
|
||||
### Permission Patterns
|
||||
|
||||
- Check permissions before data operations using helper functions
|
||||
- Guard premium features with subscription checks (`public.has_active_subscription`)
|
||||
- Use role hierarchy to control member management actions
|
||||
- Primary account owners have special privileges that cannot be revoked
|
||||
|
||||
## Testing
|
||||
|
||||
### E2E Tests
|
||||
|
||||
```bash
|
||||
pnpm --filter e2e test # Run all E2E tests
|
||||
```
|
||||
|
||||
Test files are in `apps/e2e/tests/` organized by feature area.
|
||||
|
||||
## Important Notes
|
||||
|
||||
- Uses pnpm as package manager
|
||||
- Database types are auto-generated - don't write manually if shape matches DB
|
||||
- Always use explicit schema references in SQL (`public.table_name`)
|
||||
- Documentation available at: https://makerkit.dev/docs/next-supabase-turbo/introduction
|
||||
170
CLAUDE.md
Normal file
170
CLAUDE.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Makerkit - Supabase SaaS Starter Kit (Turbo Edition) is a multi-tenant SaaS application built with Next.js, Supabase, and Tailwind CSS. The project uses a Turborepo monorepo structure with distinct apps for the main web application, development tools, and e2e testing.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Monorepo Structure
|
||||
|
||||
- `/apps/web` - Main Next.js SaaS application
|
||||
- `/apps/dev-tool` - Development utilities (runs on port 3010)
|
||||
- `/apps/e2e` - Playwright end-to-end tests
|
||||
- `/packages/` - Shared packages and utilities
|
||||
- `/tooling/` - Build tools, linting, and development scripts
|
||||
|
||||
### Core Technologies
|
||||
|
||||
- **Next.js 15** with App Router and Turbopack
|
||||
- **Supabase** for database, auth, and storage
|
||||
- **React 19** with React Compiler
|
||||
- **TypeScript** with strict configuration
|
||||
- **Tailwind CSS 4** for styling
|
||||
- **Turborepo** for monorepo management
|
||||
|
||||
### Multi-Tenant Architecture
|
||||
|
||||
The application uses a dual account model:
|
||||
|
||||
- **Personal Accounts**: Individual user accounts (auth.users.id = accounts.id)
|
||||
- **Team Accounts**: Shared workspaces with members, roles, and permissions
|
||||
- Data is associated with accounts via foreign keys for proper access control
|
||||
|
||||
## Common Commands
|
||||
|
||||
### Development
|
||||
|
||||
```bash
|
||||
# Start all apps in development
|
||||
pnpm dev
|
||||
|
||||
# Start specific app
|
||||
pnpm --filter web dev # Main app (port 3000)
|
||||
pnpm --filter dev-tool dev # Dev tools (port 3010)
|
||||
|
||||
# Build all apps
|
||||
pnpm build
|
||||
|
||||
# Run tests
|
||||
pnpm test # All tests
|
||||
pnpm --filter e2e test # E2E tests only
|
||||
```
|
||||
|
||||
### Code Quality
|
||||
|
||||
```bash
|
||||
# Lint all code
|
||||
pnpm lint
|
||||
pnpm lint:fix # Auto-fix issues
|
||||
|
||||
# Format code
|
||||
pnpm format
|
||||
pnpm format:fix # Auto-fix formatting
|
||||
|
||||
# Type checking
|
||||
pnpm typecheck
|
||||
```
|
||||
|
||||
### Database Operations
|
||||
|
||||
```bash
|
||||
# Start Supabase locally
|
||||
pnpm supabase:web:start
|
||||
|
||||
# Reset database with latest schema
|
||||
pnpm supabase:web:reset
|
||||
|
||||
# Generate TypeScript types from database
|
||||
pnpm supabase:web:typegen
|
||||
|
||||
# Run database tests
|
||||
pnpm supabase:web:test
|
||||
|
||||
# Create migration from schema changes
|
||||
pnpm --filter web supabase:db:diff
|
||||
|
||||
# Stop Supabase
|
||||
pnpm supabase:web:stop
|
||||
```
|
||||
|
||||
## Database Guidelines
|
||||
|
||||
### Schema Management
|
||||
|
||||
- Database schemas are in `apps/web/supabase/schemas/`
|
||||
- Create new schemas as `<number>-<name>.sql`
|
||||
- After schema changes: run `pnpm --filter web supabase:db:diff` then `pnpm supabase:web:reset`
|
||||
|
||||
### Security & RLS
|
||||
|
||||
- **Always enable RLS** on new tables unless explicitly instructed otherwise
|
||||
- Use helper functions for access control:
|
||||
- `public.has_role_on_account(account_id, role?)` - Check team membership
|
||||
- `public.has_permission(user_id, account_id, permission)` - Check specific permissions
|
||||
- `public.is_account_owner(account_id)` - Verify account ownership
|
||||
- Associate data with accounts using foreign keys for proper access control
|
||||
|
||||
### Type Generation
|
||||
|
||||
Import auto-generated types from `@kit/supabase/database`:
|
||||
|
||||
```typescript
|
||||
import { Tables } from '@kit/supabase/database';
|
||||
|
||||
type Account = Tables<'accounts'>;
|
||||
```
|
||||
|
||||
## Development Patterns
|
||||
|
||||
### Data Fetching
|
||||
|
||||
- **Server Components**: Use `getSupabaseServerClient()` directly
|
||||
- **Client Components**: Use `useSupabase()` hook + React Query's `useQuery`
|
||||
- Prefer Server Components and pass data down to Client Components when needed
|
||||
|
||||
### Server Actions
|
||||
|
||||
- Always use `enhanceAction` from `@kit/next/actions`
|
||||
- Name files as `server-actions.ts` and functions with `Action` suffix
|
||||
- Place Zod schemas in separate files for reuse with forms
|
||||
- Use `'use server'` directive at top of file
|
||||
|
||||
### Error Handling & Logging
|
||||
|
||||
- Use `@kit/shared/logger` for logging
|
||||
- Don't swallow errors - handle them appropriately
|
||||
- Provide context without sensitive data
|
||||
|
||||
### Component Organization
|
||||
|
||||
- Route-specific components in `_components/` directories
|
||||
- Route-specific utilities in `_lib/` directories
|
||||
- Server-side utilities in `_lib/server/`
|
||||
- Global components and utilities in root-level directories
|
||||
|
||||
### Permission Patterns
|
||||
|
||||
- Check permissions before data operations using helper functions
|
||||
- Guard premium features with subscription checks (`public.has_active_subscription`)
|
||||
- Use role hierarchy to control member management actions
|
||||
- Primary account owners have special privileges that cannot be revoked
|
||||
|
||||
## Testing
|
||||
|
||||
### E2E Tests
|
||||
|
||||
```bash
|
||||
pnpm --filter e2e test # Run all E2E tests
|
||||
```
|
||||
|
||||
Test files are in `apps/e2e/tests/` organized by feature area.
|
||||
|
||||
## Important Notes
|
||||
|
||||
- Uses pnpm as package manager
|
||||
- Database types are auto-generated - don't write manually if shape matches DB
|
||||
- Always use explicit schema references in SQL (`public.table_name`)
|
||||
- Documentation available at: https://makerkit.dev/docs/next-supabase-turbo/introduction
|
||||
@@ -10,10 +10,10 @@
|
||||
"dependencies": {
|
||||
"@ai-sdk/openai": "^1.3.22",
|
||||
"@hookform/resolvers": "^5.0.1",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"ai": "4.3.16",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"nodemailer": "^7.0.3",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
@@ -25,18 +25,18 @@
|
||||
"@kit/shared": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@tailwindcss/postcss": "^4.1.7",
|
||||
"@types/node": "^22.15.23",
|
||||
"@tailwindcss/postcss": "^4.1.8",
|
||||
"@types/node": "^22.15.30",
|
||||
"@types/nodemailer": "6.4.17",
|
||||
"@types/react": "19.1.6",
|
||||
"@types/react-dom": "19.1.5",
|
||||
"@types/react-dom": "19.1.6",
|
||||
"babel-plugin-react-compiler": "19.1.0-rc.2",
|
||||
"pino-pretty": "^13.0.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"tailwindcss": "4.1.7",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"tailwindcss": "4.1.8",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"typescript": "^5.8.3",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"prettier": "@kit/prettier-config",
|
||||
"browserslist": [
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.52.0",
|
||||
"@types/node": "^22.15.23",
|
||||
"@types/node": "^22.15.30",
|
||||
"dotenv": "16.5.0",
|
||||
"node-html-parser": "^7.0.1",
|
||||
"totp-generator": "^1.0.0"
|
||||
|
||||
@@ -54,40 +54,40 @@
|
||||
"@makerkit/data-loader-supabase-core": "^0.0.10",
|
||||
"@makerkit/data-loader-supabase-nextjs": "^1.2.5",
|
||||
"@marsidev/react-turnstile": "^1.1.0",
|
||||
"@nosecone/next": "1.0.0-beta.7",
|
||||
"@nosecone/next": "1.0.0-beta.8",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"date-fns": "^4.1.0",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"next-sitemap": "^4.2.3",
|
||||
"next-themes": "0.4.6",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"react-i18next": "^15.5.2",
|
||||
"recharts": "2.15.3",
|
||||
"sonner": "^2.0.3",
|
||||
"sonner": "^2.0.5",
|
||||
"tailwind-merge": "^3.3.0",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kit/eslint-config": "workspace:*",
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@next/bundle-analyzer": "15.3.2",
|
||||
"@tailwindcss/postcss": "^4.1.7",
|
||||
"@types/node": "^22.15.23",
|
||||
"@next/bundle-analyzer": "15.3.3",
|
||||
"@tailwindcss/postcss": "^4.1.8",
|
||||
"@types/node": "^22.15.30",
|
||||
"@types/react": "19.1.6",
|
||||
"@types/react-dom": "19.1.5",
|
||||
"@types/react-dom": "19.1.6",
|
||||
"babel-plugin-react-compiler": "19.1.0-rc.2",
|
||||
"cssnano": "^7.0.7",
|
||||
"pino-pretty": "^13.0.0",
|
||||
"prettier": "^3.5.3",
|
||||
"supabase": "^2.23.4",
|
||||
"tailwindcss": "4.1.7",
|
||||
"supabase": "^2.24.3",
|
||||
"tailwindcss": "4.1.8",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"typescript": "^5.8.3"
|
||||
},
|
||||
|
||||
@@ -46,10 +46,10 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@manypkg/cli": "^0.24.0",
|
||||
"@turbo/gen": "^2.5.3",
|
||||
"@turbo/gen": "^2.5.4",
|
||||
"cross-env": "^7.0.3",
|
||||
"prettier": "^3.5.3",
|
||||
"turbo": "2.5.3",
|
||||
"turbo": "2.5.4",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"@kit/eslint-config": "workspace:*",
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/node": "^22.15.23"
|
||||
"@types/node": "^22.15.30"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"@kit/supabase": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -26,15 +26,15 @@
|
||||
"@kit/supabase": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@types/react": "19.1.6",
|
||||
"date-fns": "^4.1.0",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"react-i18next": "^15.5.2",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@types/react": "19.1.6",
|
||||
"next": "15.3.2",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"dependencies": {
|
||||
"@stripe/react-stripe-js": "^3.7.0",
|
||||
"@stripe/stripe-js": "^7.3.1",
|
||||
"stripe": "^18.1.1"
|
||||
"stripe": "^18.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kit/billing": "workspace:*",
|
||||
@@ -29,9 +29,9 @@
|
||||
"@kit/ui": "workspace:*",
|
||||
"@types/react": "19.1.6",
|
||||
"date-fns": "^4.1.0",
|
||||
"next": "15.3.2",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'server-only';
|
||||
|
||||
import { StripeServerEnvSchema } from '../schema/stripe-server-env.schema';
|
||||
|
||||
const STRIPE_API_VERSION = '2025-04-30.basil';
|
||||
const STRIPE_API_VERSION = '2025-05-28.basil';
|
||||
|
||||
/**
|
||||
* @description returns a Stripe instance
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"@kit/shared": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/wordpress": "workspace:*",
|
||||
"@types/node": "^22.15.23"
|
||||
"@types/node": "^22.15.30"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@types/node": "^22.15.23",
|
||||
"@types/node": "^22.15.30",
|
||||
"@types/react": "19.1.6",
|
||||
"react": "19.1.0",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@types/node": "^22.15.23",
|
||||
"@types/node": "^22.15.30",
|
||||
"@types/react": "19.1.6",
|
||||
"wp-types": "^4.68.0"
|
||||
},
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
"@kit/supabase": "workspace:*",
|
||||
"@kit/team-accounts": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"zod": "^3.25.31"
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -34,19 +34,19 @@
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@types/react": "19.1.6",
|
||||
"@types/react-dom": "19.1.5",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"@types/react-dom": "19.1.6",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"next-themes": "0.4.6",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"react-i18next": "^15.5.2",
|
||||
"sonner": "^2.0.3",
|
||||
"zod": "^3.25.31"
|
||||
"sonner": "^2.0.5",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"prettier": "@kit/prettier-config",
|
||||
"typesVersions": {
|
||||
|
||||
@@ -20,16 +20,16 @@
|
||||
"@kit/ui": "workspace:*",
|
||||
"@makerkit/data-loader-supabase-core": "^0.0.10",
|
||||
"@makerkit/data-loader-supabase-nextjs": "^1.2.5",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"@types/react": "19.1.6",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"zod": "^3.25.31"
|
||||
"react-hook-form": "^7.57.0",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"exports": {
|
||||
".": "./src/index.ts",
|
||||
|
||||
@@ -28,15 +28,15 @@
|
||||
"@kit/ui": "workspace:*",
|
||||
"@marsidev/react-turnstile": "^1.1.0",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@types/react": "19.1.6",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"react-i18next": "^15.5.2",
|
||||
"sonner": "^2.0.3",
|
||||
"zod": "^3.25.31"
|
||||
"sonner": "^2.0.5",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"prettier": "@kit/prettier-config",
|
||||
"typesVersions": {
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
"@kit/supabase": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@types/react": "19.1.6",
|
||||
"lucide-react": "^0.511.0",
|
||||
"lucide-react": "^0.513.0",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-i18next": "^15.5.2"
|
||||
|
||||
@@ -32,21 +32,21 @@
|
||||
"@kit/supabase": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"@types/react": "19.1.6",
|
||||
"@types/react-dom": "19.1.5",
|
||||
"@types/react-dom": "19.1.6",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"lucide-react": "^0.511.0",
|
||||
"next": "15.3.2",
|
||||
"lucide-react": "^0.513.0",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"react-i18next": "^15.5.2",
|
||||
"sonner": "^2.0.3",
|
||||
"zod": "^3.25.31"
|
||||
"sonner": "^2.0.5",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"prettier": "@kit/prettier-config",
|
||||
"typesVersions": {
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/shared": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"next": "15.3.2",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-i18next": "^15.5.2"
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
"@kit/resend": "workspace:*",
|
||||
"@kit/shared": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/node": "^22.15.23",
|
||||
"zod": "^3.25.31"
|
||||
"@types/node": "^22.15.30",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/nodemailer": "6.4.17",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
"@kit/mailers-shared": "workspace:*",
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/node": "^22.15.23",
|
||||
"zod": "^3.25.31"
|
||||
"@types/node": "^22.15.30",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"@kit/eslint-config": "workspace:*",
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/react": "19.1.6",
|
||||
"react": "19.1.0",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/react": "19.1.6",
|
||||
"react": "19.1.0",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"./config/server": "./src/sentry.client.server.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/nextjs": "^9.22.0",
|
||||
"@sentry/nextjs": "^9.27.0",
|
||||
"import-in-the-middle": "1.14.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/supabase": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"next": "15.3.2",
|
||||
"zod": "^3.25.31"
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"next": "15.3.3",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@kit/ui": "workspace:*",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@types/react": "19.1.6",
|
||||
"@types/react-dom": "19.1.5",
|
||||
"@types/react-dom": "19.1.6",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"zod": "^3.25.31"
|
||||
"react-hook-form": "^7.57.0",
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@supabase/ssr": "^0.6.1",
|
||||
"@supabase/supabase-js": "2.49.8",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@supabase/supabase-js": "2.49.10",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@types/react": "19.1.6",
|
||||
"next": "15.3.2",
|
||||
"next": "15.3.3",
|
||||
"react": "19.1.0",
|
||||
"server-only": "^0.0.1",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "1.1.1",
|
||||
"input-otp": "1.4.2",
|
||||
"lucide-react": "^0.511.0",
|
||||
"lucide-react": "^0.513.0",
|
||||
"react-top-loading-bar": "3.0.2",
|
||||
"recharts": "2.15.3",
|
||||
"tailwind-merge": "^3.3.0"
|
||||
@@ -43,24 +43,24 @@
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@tanstack/react-query": "5.77.2",
|
||||
"@tanstack/react-query": "5.80.6",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"@types/react": "19.1.6",
|
||||
"@types/react-dom": "19.1.5",
|
||||
"@types/react-dom": "19.1.6",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"eslint": "^9.27.0",
|
||||
"next": "15.3.2",
|
||||
"eslint": "^9.28.0",
|
||||
"next": "15.3.3",
|
||||
"next-themes": "0.4.6",
|
||||
"prettier": "^3.5.3",
|
||||
"react-day-picker": "^8.10.1",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"react-hook-form": "^7.57.0",
|
||||
"react-i18next": "^15.5.2",
|
||||
"sonner": "^2.0.3",
|
||||
"tailwindcss": "4.1.7",
|
||||
"sonner": "^2.0.5",
|
||||
"tailwindcss": "4.1.8",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"typescript": "^5.8.3",
|
||||
"zod": "^3.25.31"
|
||||
"zod": "^3.25.53"
|
||||
},
|
||||
"prettier": "@kit/prettier-config",
|
||||
"exports": {
|
||||
|
||||
2812
pnpm-lock.yaml
generated
2812
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -13,16 +13,16 @@
|
||||
"format": "prettier --check \"**/*.{js,json}\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@next/eslint-plugin-next": "15.3.2",
|
||||
"@next/eslint-plugin-next": "15.3.3",
|
||||
"@types/eslint": "9.6.1",
|
||||
"eslint-config-next": "15.3.2",
|
||||
"eslint-config-turbo": "^2.5.3",
|
||||
"typescript-eslint": "8.33.0"
|
||||
"eslint-config-next": "15.3.3",
|
||||
"eslint-config-turbo": "^2.5.4",
|
||||
"typescript-eslint": "8.33.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"eslint": "^9.27.0",
|
||||
"eslint": "^9.28.0",
|
||||
"typescript": "^5.8.3"
|
||||
},
|
||||
"prettier": "@kit/prettier-config"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"@trivago/prettier-plugin-sort-imports": "5.2.2",
|
||||
"prettier": "^3.5.3",
|
||||
"prettier-plugin-tailwindcss": "^0.6.11"
|
||||
"prettier-plugin-tailwindcss": "^0.6.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
|
||||
Reference in New Issue
Block a user