A modern web application for managing Campo Verde Homeowners Association operations, built with React, TypeScript, and Supabase.
Campo Verde HOA v2 is a comprehensive management system designed to streamline HOA operations including:
- Resident Management: Track homeowners and tenants with phase/block/lot information
- Vehicle Sticker System: Manage different sticker types (Homeowner, Tenant, Courier, etc.) with pricing
- Purchase Tracking: Record sticker sales with detailed driver information and transaction history
- Secure Authentication: Role-based access control with Supabase Auth
- Real-time Updates: Live data synchronization across all users
- Frontend: React 19.1.0 + TypeScript
- Build Tool: Vite 6.3.5 with Hot Module Replacement
- Routing: TanStack Router v1.121.27 (file-based routing)
- State Management:
- TanStack Query v5.80.10 (server state)
- Zustand v5.0.5 (client state)
- React Context (authentication)
- Backend: Supabase (PostgreSQL + real-time subscriptions)
- Styling: TailwindCSS v4.1.10
- UI Components: Radix UI + shadcn/ui
- Forms: React Hook Form + Zod validation
- Deployment: Netlify
- Node.js 18+ and npm
- Supabase account and project (optional for development)
-
Clone the repository:
git clone <repository-url> cd campo-verde-hoa-v2
-
Install dependencies:
npm install
-
Environment setup (optional):
cp .env.example .env
Edit
.envand add your Supabase credentials:VITE_SUPABASE_URL=https://your-project-id.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-here
-
Start development server:
npm run dev
The app will be available at
http://localhost:5173/
- Secure sign-in/sign-up with Supabase Auth
- Protected routes with automatic redirects
- Session persistence and management
- Add, edit, and delete resident records
- Search and filter by phase, block, or lot
- Track resident purchase history
- Detailed resident profiles
- Configurable sticker types and pricing
- Color-coded sticker categories
- Active/inactive status management
- Bulk pricing updates
- Record sticker purchases with driver details
- Track AF numbers and plate numbers
- Support for renewals and new applications
- Penalty tracking and management
src/
├── components/ # Reusable UI components
│ ├── ui/ # shadcn/ui components
│ ├── app-sidebar.tsx # Main navigation
│ ├── resident-form.tsx
│ └── sticker-form.tsx
├── contexts/ # React contexts
│ └── AuthContext.tsx
├── hooks/ # Custom React hooks
├── lib/ # Utilities and configurations
│ ├── supabase.ts # Supabase client
│ └── utils.ts # Helper functions
├── routes/ # File-based routing
│ ├── __root.tsx # Root layout
│ ├── index.tsx # Landing page
│ ├── _auth/ # Authentication routes
│ └── _app/ # Protected app routes
└── types.ts # TypeScript interfaces
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
- Connect your repository to Netlify
- Set build settings:
- Build command:
npm run build - Publish directory:
dist
- Build command:
- Add environment variables in Netlify dashboard:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Deploy!
npm run build
# Upload the `dist` folder to your hosting providerresidents- Homeowner/tenant informationproducts- Sticker types and pricingpurchases- Transaction records
- Residents have many purchases
- Purchases belong to products (stickers)
- Real-time subscriptions for live updates
The app uses a sophisticated authentication system:
- Public routes:
/sign-in,/sign-up - Protected routes: Everything under
/_app/* - Automatic redirects: Based on authentication status
- Session management: Persistent login with Supabase
- Graceful fallbacks for missing Supabase configuration
- Timeout mechanisms to prevent infinite loading
- Comprehensive error boundaries
- Code splitting with TanStack Router
- Optimized bundle sizes
- Efficient re-rendering with React Query
- Strict TypeScript configuration
- Zod schema validation for all forms
- Type-safe API calls with Supabase
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is private and proprietary to Campo Verde Homeowners Association.
Infinite loading on homepage:
- Check browser console for errors
- Verify Supabase configuration
- Try hard refresh (Cmd+Shift+R)
Build errors:
- Clear node_modules:
rm -rf node_modules && npm install - Check TypeScript errors:
npm run build
Authentication issues:
- Verify Supabase URL and keys
- Check network connectivity
- Review browser console for auth errors
For technical support or feature requests, please contact the development team.