Thank you for your interest in contributing to Neo UI Framework! This document provides guidelines and best practices for contributing to the project.
- Node.js 20+ and npm 10+
- Docker and Docker Compose (for containerized deployment)
- Access to a NetApp Neo API instance
- A running Neo instance Neo Quickstart
- React 19.1 - UI framework
- TypeScript 5.9 - Type safety
- Vite 7.1 - Build tool and dev server
- React Router 7.9 - Client-side routing
- shadcn/ui - Component primitives
- Radix UI - Accessible component foundations
- Tailwind CSS 4.1 - Utility-first styling
- Tabler Icons - Icon set
- Recharts 2.15 - Data visualization
- React Hook Form 7.65 - Form management
- Zod 4.1 - Schema validation
- clsx, tailwind-merge - Class name utilities
- date-fns - Date manipulation
- sonner - Toast notifications
neo-ui-framework/
βββ src/
β βββ components/
β β βββ data-tables/ # Table components for data display
β β βββ dialogs/ # Modal dialogs and forms
β β βββ navs/ # Navigation components
β β βββ pages/ # Main page components
β β βββ sections/ # Reusable page sections
β β βββ services/ # API service layer
β β βββ sidebars/ # Sidebar navigation
β β βββ ui/ # shadcn/ui primitives
β βββ hooks/ # Custom React hooks
β βββ lib/ # Utility functions
β βββ App.tsx # Main application component
β βββ main.tsx # Application entry point
βββ public/ # Static assets
βββ Dockerfile # Production container image
βββ docker-compose.yml # Development orchestration
βββ nginx.conf # nginx configuration template
βββ entrypoint.sh # Container startup script
βββ vite.config.ts # Vite configuration
-
Fork & clone the Repository Fork the repo from GitHub to your nickhandle/organization then clone:
git clone https://github.com/your-username/neo-ui-framework.git cd neo-ui-framework npm install -
Install dependencies
npm install
-
Create a Feature Branch
git checkout -b feature/your-feature-name # or git checkout -b fix/your-bug-fix -
Start the development server with hot reload
- Start your Neo API backend
- Update proxy target in
vite.config.tsif needed - Run
npm run dev - Click the "Key" icon and enter your Neo credentials
-
Make Your Changes
- Write clean, readable code
- Follow existing patterns and conventions
- Add comments for complex logic
-
Linting Your Changes
npm run lint
-
Commit Your Changes
git add . git commit -m "feat: add new feature description" # or git commit -m "fix: resolve issue description"
-
Building
npm run build
Preview the production build:
npm run preview
-
Build and run your own container
docker build -t neo-ui-framework . docker run -d -p 8080:80 -e NEO_API=http://your-neo-api:8080 neo-ui-frameworkSee QUICKSTART.md for more details.
-
Push and Create Pull Request
git push origin feature/your-feature-nameWe follow the Conventional Commits specification:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
Examples:
feat: add file search dialog with advanced filters
fix: resolve authentication token expiration issue
docs: update API integration examples
refactor: simplify share form validation logic
- Strict Mode: Always enabled (
tsconfig.json) - Type Everything: Avoid
any, use proper types orunknown - Type Imports: Use
import typefor type-only imports whenverbatimModuleSyntaxis enabledimport type { UserResponse } from '@/components/services/models' import { NeoApiService } from '@/components/services/neo-api'
- Functional Components: Use function components with hooks
- Hooks: Follow React hooks rules (use eslint-plugin-react-hooks)
- Props: Define explicit interface for component props
interface MyComponentProps { data: DataType onAction: (id: string) => void } export function MyComponent({ data, onAction }: MyComponentProps) { // ... }
- Tailwind Classes: Use utility classes, avoid custom CSS when possible
- shadcn/ui: Don't modify generated components in
src/components/ui/ - Responsive: Mobile-first approach with breakpoint prefixes
<div className="flex flex-col gap-4 md:flex-row lg:gap-6">
- File Structure: Follow existing patterns
- Pages β
src/components/pages/ - Data tables β
src/components/data-tables/ - Dialogs β
src/components/dialogs/ - Services β
src/components/services/
- Pages β
- Imports: Use
@/alias for src importsimport { Button } from '@/components/ui/button' import { NeoApiService } from '@/components/services/neo-api'
- Local State: Prefer
useStatefor component-specific state - Shared State: Use props drilling or lift state up
- API State: Managed in
App.tsxviauseNeoApihook - Forms: Use
react-hook-formwith Zod validation
- Try-Catch: Wrap API calls appropriately
- User Feedback: Use toast notifications (sonner)
import { toast } from 'sonner' try { await apiCall() toast.success('Operation completed!') } catch (error) { toast.error('Operation failed!') }
- Authentication Errors: Throw
AuthenticationErrorfor session issues
-
Lint Check
npm run lint
- Fix all warnings and errors
- Don't disable rules without discussion
-
Type Check
npm run build
- Ensure no TypeScript errors
- Verify build completes successfully
-
Visual Testing
- Test in both light and dark themes
- Check responsive behavior (mobile, tablet, desktop)
- Verify all interactive elements work
-
Cross-Browser (if applicable)
- Test in Chrome, Firefox, Safari
- Ensure consistent behavior
When adding new features, consider:
-
API Integration
- Add types to
models.tsx - Add methods to
neo-api.tsx - Update
fetchSystemDataif needed
- Add types to
-
UI Components
- Use existing shadcn/ui components
- Add new ones via
npx shadcn@latest add <component>
-
Documentation
- Update README.md with new features
- Add inline comments for complex logic
- Update prop interfaces with JSDoc if helpful
- Semantic HTML: Use proper HTML elements
- ARIA Labels: Add labels for screen readers
- Keyboard Navigation: Ensure all actions are keyboard-accessible
- Focus Management: Visible focus indicators
- Component Patterns: Follow existing patterns for similar features
- Spacing: Use Tailwind spacing scale consistently
- Colors: Use theme color variables
className="bg-background text-foreground border-border"
- Loading States: Show spinners/skeletons during data fetch
- Error States: Display clear error messages
- Success States: Confirm successful actions with toasts
- Empty States: Provide helpful messages when no data
Before adding new dependencies:
- Check Alternatives: See if existing dependencies can solve the problem
- Bundle Size: Consider impact on bundle size
- Maintenance: Check if the package is actively maintained
- Discussion: Open an issue to discuss the addition
When adding:
npm install package-name
# Update package.json- Code Quality: Readable, maintainable, follows patterns
- Type Safety: Proper TypeScript usage
- Performance: No obvious performance issues
- Security: No security vulnerabilities
- Documentation: Clear comments and docs
- Testing: Changes work as expected
- Be Responsive: Address feedback promptly
- Ask Questions: If feedback is unclear, ask for clarification
- Discussion: Engage in constructive technical discussion
- Update: Make requested changes and push updates
When reporting bugs, include:
- Description: Clear description of the issue
- Steps to Reproduce: Detailed steps to reproduce
- Expected Behavior: What should happen
- Actual Behavior: What actually happens
- Environment: Browser, OS, Neo version
- Screenshots: If applicable
- Console Errors: Any errors in browser console
When requesting features:
- Use Case: Describe the problem you're trying to solve
- Proposed Solution: Your idea for solving it
- Alternatives: Other solutions you've considered
- Additional Context: Any other relevant information
- React Documentation
- TypeScript Handbook
- Tailwind CSS Documentation
- shadcn/ui Documentation
- Vite Documentation
- Be Respectful: Treat others with respect and kindness
- Be Constructive: Provide helpful, constructive feedback
- Be Patient: Everyone is learning and improving
- Be Inclusive: Welcome contributors of all skill levels
- Be Professional: Maintain a professional tone in all communications
If you have questions:
- Search existing issues
- Ask in the discussion forum
- Contact maintainers
Thank you for contributing to Neo UI Framework! π