Merge branch 'main' of github.com:makerkit/next-supabase-saas-kit-turbo

This commit is contained in:
gbuomprisco
2025-06-06 13:11:01 +08:00
36 changed files with 1838 additions and 1542 deletions

170
AGENTS.md Normal file
View 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
View 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

View File

@@ -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": [

View File

@@ -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"

View File

@@ -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"
},

View File

@@ -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"
}
}

View File

@@ -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": {
"*": {

View File

@@ -21,7 +21,7 @@
"@kit/supabase": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:*",
"zod": "^3.25.31"
"zod": "^3.25.53"
},
"typesVersions": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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

View File

@@ -20,7 +20,7 @@
"@kit/shared": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@kit/wordpress": "workspace:*",
"@types/node": "^22.15.23"
"@types/node": "^22.15.30"
},
"typesVersions": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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"
},

View File

@@ -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": {
"*": {

View File

@@ -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": {

View File

@@ -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",

View File

@@ -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": {

View File

@@ -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"

View File

@@ -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": {

View File

@@ -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"

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -16,7 +16,7 @@
"@kit/eslint-config": "workspace:*",
"@kit/prettier-config": "workspace:*",
"@kit/tsconfig": "workspace:*",
"zod": "^3.25.31"
"zod": "^3.25.53"
},
"typesVersions": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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": {

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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": {
"*": {

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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"

View File

@@ -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:*",