Coding
PromptBeginner5 minmarkdown
Markdown Converter
Agent skill for markdown-converter
23
This is a monorepo containing a Next.js application with Supabase and Prisma integration, managed with pnpm workspaces.
Sign in to like and favorite skills
This is a monorepo containing a Next.js application with Supabase and Prisma integration, managed with pnpm workspaces.
├── packages/ │ └── web/ # Next.js app │ ├── app/ # App Router (Next.js 15+) │ ├── lib/ │ │ ├── supabase/ # Supabase client configurations │ │ ├── prisma.ts # Prisma client singleton │ │ └── generated/prisma/ # Generated Prisma client │ └── prisma/ │ └── schema.prisma # Database schema ├── package.json # Root package.json with workspace scripts ├── pnpm-workspace.yaml # Workspace configuration └── .gitignore # Git ignore rules
pnpm dev # Start web package dev server pnpm --filter web dev # Alternative syntax
pnpm build # Build web package pnpm start # Start production server pnpm lint # Run linting
pnpm --filter web exec prisma db pull # Pull schema from Supabase pnpm --filter web exec prisma generate # Generate Prisma client pnpm --filter web exec prisma migrate dev # Run migrations
pnpm test # Run all tests pnpm test:watch # Run tests in watch mode pnpm test:ui # Open Vitest web UI pnpm test:coverage # Run tests with coverage
IMPORTANT: Always use import aliasing (
@/*) when importing files within the Next.js application. This project is configured with TypeScript path mapping for cleaner imports.
import Component from '@/components/MyComponent'; import { prisma } from '@/lib/prisma'; import { createClient } from '@/lib/supabase/client';
import { createClient } from '../../../lib/supabase/client'; import { prisma } from '../../lib/prisma'; import Component from './components/MyComponent';
@/lib/supabase/client - For client-side operations@/lib/supabase/server - For server-side operations with cookies@/lib/prisma// API Route example import { prisma } from '@/lib/prisma'; import { createClient } from '@/lib/supabase/client'; import { NextResponse } from 'next/server'; export async function GET() { // Use Supabase for real-time features const supabase = createClient(); const { data } = await supabase.from('users').select('*'); // Use Prisma for complex queries const userCount = await prisma.user.count(); return NextResponse.json({ data, userCount }); }
Environment variables are configured in:
.env.local - Next.js environment variables.env - Prisma environment variablesRequired variables:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYDATABASE_URL (for Prisma)DIRECT_URL (for Prisma migrations)This project uses Vitest for testing with jsdom environment and comprehensive coverage reporting.
CRITICAL CONVENTIONS:
filename.test.ts naming convention - NEVER use __tests__ directories@/* import aliasing in test fileslib/ ├── utils.ts ├── utils.test.ts # Colocated with utils.ts ├── supabase/ │ ├── client.ts │ └── client.test.ts # Colocated with client.ts components/ ├── Button.tsx └── Button.test.tsx # Colocated with Button.tsx
lib/ ├── utils.ts └── __tests__/ # DON'T DO THIS └── utils.test.ts # Should be colocated instead
describe, it, expect, vi available globally@/* paths work in testsTest API endpoint available at:
/api/test-prisma
@/* paths@/ import aliasing - never relative importspnpm --filter web <command>@/lib/prisma.env.local and .env/api/test-prisma endpointfilename.test.ts naming - NEVER __tests__/ directories