This is an example custom assistant that will help you complete the Python onboarding in VS Code. After trying it out, feel free to experiment with other blocks or create your own custom assistant.
- Follow Next.js patterns, use app router and correctly use server and client components.
- Use Tailwind CSS for styling.
- Use Shadcn UI for components.
- Use TanStack Query (react-query) for frontend data fetching.
- Use React Hook Form for form handling.
- Use Zod for validation.
- Use React Context for state management.
- Use Prisma for database access.
- Follow AirBnB style guide for code formatting.
- Use PascalCase when creating new React files. UserCard, not user-card.
- Use named exports when creating new react components.
- DO NOT TEACH ME HOW TO SET UP THE PROJECT, JUMP STRAIGHT TO WRITING COMPONENTS AND CODE.
- Follow the Solidity best practices.
- Use the latest version of Solidity.
- Use OpenZeppelin libraries for common patterns like ERC20 or ERC721.
- Utilize Hardhat for development and testing.
- Employ Chai for contract testing.
- Use Infura for interacting with Ethereum networks.
- Follow AirBnB style guide for code formatting.
- Use CamelCase for naming functions and variables in Solidity.
- Use named exports for JavaScript files related to smart contracts.
- DO NOT TEACH ME HOW TO SET UP THE PROJECT, JUMP STRAIGHT TO WRITING CONTRACTS AND CODE.
- Optimize indexes to improve query execution speed.
- Avoid N+1 queries and suggest more efficient alternatives.
- Recommend normalization or denormalization strategies based on use cases.
- Implement transaction management where necessary to ensure data consistency.
- Suggest methods for monitoring database performance.
- Follow Next.js Architecture: Use the App Router exclusively with strict React Server Component (RSC) patterns; mark client components with the 'use client' directive only when interactivity or hooks are required; implement route groups with (auth) and (public) conventions for protected routes; use server actions with useFormState/useFormStatus for backend-driven form submissions; configure all environment variables in next.config.mjs with schema validation.
- Follow React Component Patterns: Create components using PascalCase (e.g. UserProfileCard.js, not user-profile-card.js); export all components with named exports (e.g. export function UserCard() { … }); separate presentational and container components using a FeatureContainer/FeatureView pattern; define prop types using PropTypes or JSDoc; implement error boundaries (using libraries like react-error-boundary) for critical UI sections.
- Implement Tailwind CSS Properly: Use Tailwind’s utility classes for styling; use @apply only for complex component abstractions in CSS modules; centralize design tokens (colors, spacing, typography) in tailwind.config.js with semantic names; build responsive designs with mobile-first breakpoint prefixes (e.g. md:, lg:); leverage clsx for conditional class management; avoid arbitrary values by relying on predefined theme scales.
- Integrate Shadcn UI: Install new components with npx shadcn-ui@latest add [component]; extend the theme through a dedicated file (e.g. src/styles/theme.js) using CSS variables; prefer component composition over modifying core styles; implement dark mode using next-themes combined with Shadcn UI’s theming system; never modify core component styles—use the className prop for overrides.
- Use TanStack Query for Data Fetching: Initialize the query client with default options (e.g. staleTime of 5 minutes, retry count of 2); standardize query key generation using key factories; implement global error handling via the QueryClient's onError callback.
- Adopt a Robust Form Handling Strategy: Combine React Hook Form with Zod for schema validation and integrate them with Shadcn UI form components; register every input field properly (using register() or a Controller-like pattern); implement loading states via formState.isSubmitting; integrate form notifications as needed.
- Maintain a Solid Prisma Database Layer: Define your database schema in schema.prisma with strict typing and clear constraints; use a single Prisma Client instance (especially in serverless environments) with efficient connection pooling; implement soft deletes via a deletedAt field pattern; validate query results with runtime validation after operations.
- Follow an Effective State Management Strategy: Use React Context for global UI state (themes, modals, notifications) by creating custom provider components (e.g. using useReducer); for complex, persistent state, consider Zustand; do not mix server state with global state—store server data in the TanStack Query cache.
- Adhere to Ethereum/Solidity Standards: Write upgradeable smart contracts using OpenZeppelin’s Transparent Proxy pattern; target Solidity 0.8.20+ with a strict pragma and optimizations enabled; ensure comprehensive testing with tools like Foundry or Truffle; implement EIP-712 signatures for meta-transactions; use viem or wagmi for type-safe frontend contract interactions.
- Observe General JavaScript Standards: Follow the AirBnB style guide for all JavaScript/JSX code; enforce consistent naming, indentation, use of modern ES6+ features, and strict mode; avoid loosely typed variables by using PropTypes or JSDoc for validation; utilize utility methods (e.g. Pick, Omit, Partial) where applicable.
- Implement Robust Error Handling: Wrap critical UI sections in a global error boundary (integrated with external logging services); adopt a Result pattern for operations, returning objects that indicate success or failure; create custom error classes (e.g. AuthError) for domain-specific issues; use try/catch blocks consistently.
- Optimize Performance Across the Stack: Employ code splitting (using React.lazy and next/dynamic for heavy client components); optimize images using Next.js’s Image component with proper quality/size props; leverage server-side caching strategies (e.g. unstable_cache in Server Components); use memoization (React.memo) to prevent expensive re-renders.
- Jump Straight to Writing Components and Code: Do not include project setup instructions—assume the environment is preconfigured and focus solely on producing clean, modular, and production-ready code.
# Rules for MERN Stack and Vite Applications
mern_stack_rules:
# Architecture & Project Structure
- Enforce a clear folder structure: `src/models`, `src/controllers`, `src/routes`, `src/middleware`, `src/utils`.
- Use environment variables via `dotenv` and validate with `joi` or `zod` at startup.
- Define Express app in `app.js`, separate server startup in `server.js`.
- Centralize configuration in a `config/` module (database, cache, third-party keys).
# API & Routing
- Follow RESTful conventions: map CRUD operations to HTTP verbs.
- Use Express Router for modular route definitions; group by resource.
- Implement input validation with `joi` or `zod` in middleware.
- Standardize responses: `{ success: boolean, data: any, error?: string }`.
# Authentication & Security
- Use JWT for auth; store secrets securely via environment variables.
- Protect routes with auth middleware; allow role-based access controls.
- Sanitize user input to prevent injection attacks (e.g., `express-validator`).
- Apply security headers via `helmet`, enable CORS via `cors`.
# Database Layer
- Use Mongoose for MongoDB interactions; define strict schemas with TypeScript or JSDoc.
- Maintain a single connection instance; handle disconnects on errors gracefully.
- Implement soft deletes with a `deletedAt` timestamp field pattern.
- Encapsulate database calls in service modules for testability.
# Error Handling & Logging
- Create a global error handler middleware catching sync and async errors.
- Use custom Error classes (e.g., `ValidationError`, `AuthError`).
- Log errors and requests with `winston` or `pino`; store logs centrally in JSON format.
# Testing
- Write unit tests for controllers/services using Jest and Supertest.
- Mock external dependencies (DB, email) for isolated tests.
- Enforce 80% coverage; run tests in CI pipelines.
# General JavaScript Standards
- Adhere to the Airbnb style guide; lint with ESLint and Prettier on save.
- Use ES6+ features: `async/await`, destructuring, modules.
- Avoid `any` in TypeScript; prefer strict typing and interfaces.
vite_app_rules:
# Vite Configuration
- Define aliases in `vite.config.js` under `resolve.alias` for `@/components`, `@/utils`.
- Use `dotenv` and `vite-plugin-env-compatible` to load and validate env variables.
- Optimize dependencies with `optimizeDeps.include` and `exclude` as needed.
# React & Component Patterns
- Use PascalCase for component filenames; index exports for simplicity.
- Separate presentational and container components; follow `FeatureView/FeatureContainer` pattern.
- Mark client-only modules in SSR setups explicitly; avoid server bundling of browser-only APIs.
# Styling & CSS
- Integrate Tailwind CSS via `tailwind.config.cjs`; use `@apply` sparingly in CSS modules.
- Centralize design tokens (colors, spacing) in Tailwind theme; follow mobile-first breakpoints.
- Use `clsx` for conditional classNames; avoid inline style objects.
# State Management & Data Fetching
- Use React Context for UI state (theme, modals); use Zustand or Redux Toolkit for complex stores.
- Integrate TanStack Query (React Query) for server data; configure a global `QueryClient`.
- Standardize query keys; handle staleTime and retry strategies.
# Form Handling
- Use React Hook Form with Zod for validation; integrate with UI library form components.
- Show loading and error states using `formState` hooks.
# UI Libraries & Plugins
- Install UI components via `npx shadcn-ui add [component]`; override styles via `className`, not core files.
- Implement dark mode toggles with `next-themes` or `useTheme` hooks.
# Performance & Build Optimization
- Enable code splitting via dynamic imports and React.lazy.
- Use `@vitejs/plugin-react-swc` or similar for faster builds.
- Generate source maps only in development; minify code in production builds.
# Testing & Linting
- Use Vitest for unit tests; mock modules with `vi.mock`.
- Lint with ESLint configured for React and TypeScript; run in pre-commit hooks via Husky.
```
No Prompts configured
No Data configured
No MCP Servers configured