Imported from UsinaDeJusticia/simposio2026 (
AGENTS.md). Install upstream withnpx skills add UsinaDeJusticia/simposio2026. Copyright stays with the author.
AGENTS.md
Development Commands
Build & Development
npm run dev- Start development servernpm run build- Production buildnpm run start- Start production servernpm run lint- Run ESLint
Testing
No test framework is currently configured. When adding tests, check package.json for the appropriate test command.
Project Structure
app/- Next.js App Router pages and layoutscomponents/- React components (both page sections and shadcn/ui components)hooks/- Custom React hookslib/- Utility functions and data (e.g., speakers, schedule)types/- TypeScript type definitionspublic/- Static assets (images, fonts, etc.)
Code Style Guidelines
Imports
- External libraries first, then internal modules
- Use
@/alias for internal imports:- Components:
@/components/component-name - Utils:
@/lib/utils - Hooks:
@/hooks/hook-name
- Components:
- React imports:
import * as React from 'react' - Type-only imports use
import typewhere possible
TypeScript
- Strict mode is enabled in tsconfig.json
- Use explicit type annotations for function parameters and return types
- Component props interfaces:
interface Props { ... }ortype Props = { ... } - Use Readonly for immutable props:
Readonly<{ children: React.ReactNode }> - Generic event types:
React.FormEvent,React.ChangeEvent<HTMLInputElement>, etc. - Path aliases:
@/*maps to project root
Naming Conventions
- Components: PascalCase (e.g.,
RegistrationSection,ThemeProvider) - Functions/Variables: camelCase (e.g.,
cn,useIsMobile,handleSubmit) - Constants: SCREAMING_SNAKE_CASE for config (e.g.,
MOBILE_BREAKPOINT) - Files: kebab-case (e.g.,
registration-section.tsx,use-mobile.ts)
Component Patterns
- Client components MUST start with
'use client'directive at the very top - Use functional components with hooks
- Export components as named exports:
export function ComponentName() { ... } - For re-exports:
export { ComponentName }orexport default ComponentName
Styling (Tailwind CSS)
- Use the
cn()utility from@/lib/utilsfor conditional classes - Utility class order: spacing → layout → sizing → typography → colors → effects
- Responsive design:
className="md:text-xl"(mobile-first approach) - Use class-variance-authority (cva) for component variants (see button.tsx)
- Custom CSS variables via Tailwind:
var(--font-display), etc.
React Patterns
- State management with
useState,useEffect,useMemo,useCallbackas needed - Animations: Use
framer-motionwith<motion.div>components - Forms: Controlled components with
valueandonChange - shadcn/ui components from @radix-ui primitives
Error Handling
- Validate form inputs with
requiredattribute - Use try/catch for async operations
- Provide user feedback via alerts or toast notifications (Sonner available)
UI Components (shadcn/ui)
- Components located in
components/ui/ - Use Radix UI primitives with accessible patterns
- Follow the "new-york" style variant
- Use Lucide icons:
import { IconName } from 'lucide-react'
Formatting & Linting
- 2 space indentation
- No trailing semicolons
- Single quotes for strings
- Max line length: typically 80-100 characters
- Always run
npm run lintafter making changes to verify code quality
Accessibility
- Use semantic HTML elements (
section,main,nav, etc.) - All inputs must have associated labels (
htmlFor+id) - Images must have
alttext - Keyboard navigation support via Radix UI components
Performance
- Image optimization: Use
next/imagewith explicit width/height orfill - Code splitting: Next.js handles this automatically
- Dynamic imports for heavy components if needed
Internationalization
- The project uses
next-intlfor i18n support - Language: Spanish (
lang="es"in root layout)
Notes
- This is a Next.js 16 project with React 19
- TypeScript strict mode is enabled
- Uses Tailwind CSS v4 with custom design tokens
- shadcn/ui components are pre-installed and ready to use
- Framer Motion is available for animations