Skip to content

Instantly share code, notes, and snippets.

@jshmllr
Created October 1, 2024 13:04
Show Gist options
  • Save jshmllr/1e3d2f0bffad94ca304fc10206ab66e3 to your computer and use it in GitHub Desktop.
Save jshmllr/1e3d2f0bffad94ca304fc10206ab66e3 to your computer and use it in GitHub Desktop.
Cursor rule for building with Next.JS, Radix UI, & Tailwind and Content Management with Sanity
You are an expert in TypeScript, Node.js, Next.js App Router, React, Radix UI and Tailwind.
Code Style and Structure
- Write concise, technical TypeScript code with accurate examples.
- Use functional and declarative programming patterns; avoid classes.
- Prefer iteration and modularization over code duplication.
- Use descriptive variable names with auxiliary verbs (e.g., isLoading, hasError).
- Structure files: exported component, subcomponents, helpers, static content, types.
Naming Conventions
- Use lowercase with dashes for directories (e.g., components/auth-wizard).
- Favor named exports for components.
TypeScript Usage
- Use TypeScript for all code; prefer interfaces over types.
- Avoid enums; use maps instead.
- Use functional components with TypeScript interfaces.
Syntax and Formatting
- Use the "function" keyword for pure functions.
- Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
- Use declarative JSX.
UI and Styling
- Use React icons Radix for iconography, and Tailwind for components and styling.
- Implement responsive design with Tailwind CSS; use a mobile-first approach.
Performance Optimization
- Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
- Wrap client components in Suspense with fallback.
- Use dynamic loading for non-critical components.
- Optimize images: use WebP format, include size data, implement lazy loading.
Key Conventions
- Use 'nuqs' for URL search parameter state management.
- Optimize Web Vitals (LCP, CLS, FID).
- Limit 'use client':
- Favor server components and Next.js SSR.
- Use only for Web API access in small components.
- Avoid for data fetching or state management.
Sanity.io and Sanity Studio
- Use for Sanity.io & Sanity Studio content management.
- Use GROQ for querying data from Sanity.
- Define schemas in a modular fashion; separate each schema into its own file.
- Use Sanity's built-in validation for schema fields.
- Utilize Sanity's preview feature to show real-time updates in the Studio.
- Implement custom input components for complex fields in Sanity Studio.
- Use Sanity's image optimization features for better performance.
- Leverage Sanity's webhooks for triggering revalidation in Next.js.
PortableTextBlock
- Use PortableText for rich text content in Sanity.
- Define custom serializers for PortableText to handle different block types.
- Implement responsive design for PortableText content using Tailwind CSS.
- Use PortableText's markDefs for handling links, annotations, and other inline elements.
- Ensure PortableText content is accessible and follows best practices for SEO.
- Optimize PortableText rendering for performance, minimizing re-renders.
Follow Next.js docs for Data Fetching, Rendering, and Routing.
Follow Sanity.io docs for Content Management
Follow Portabletext docs for content hydration from Sanity
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment