A comprehensive property rental platform built with Next.js, TypeScript, and Supabase, featuring both customer and admin dashboards with full CRUD functionality.
- Customer Registration & Login: Secure user authentication with role-based access
- Admin Dashboard Access: Token-based admin authentication with enhanced permissions
- Session Management: Persistent sessions with automatic refresh
- Route Protection: Middleware-based protection for admin and customer routes
- Full CRUD Operations: Create, read, update, and delete properties
- Image & Video Upload: Support for multiple media files per property
- Advanced Filtering: Search by location, type, availability, and price
- Pagination: Efficient handling of large property datasets
- Amenities Management: Dynamic amenity addition and removal
- Customer Dashboard: Booking history, favorites, and profile management
- Admin Dashboard: Complete user oversight and property analytics
- Role-based Access Control: Separate interfaces for customers and administrators
- Property Statistics: Occupancy rates, revenue tracking, and performance metrics
- Booking Management: Real-time booking status and customer information
- Revenue Analytics: Financial reporting and trend analysis
- Frontend: Next.js 14, TypeScript, Tailwind CSS
- Backend: Next.js API Routes, Supabase
- Database: PostgreSQL (via Supabase)
- Authentication: Supabase Auth
- Deployment: Vercel (configured with GitHub Actions)
- Icons: Lucide React
- Node.js 18+
- npm or yarn
- Supabase account
-
Clone the repository
git clone https://github.com/masilo-dev/cozy-haven.git cd cozy-haven -
Install dependencies
npm install
-
Environment Setup
cp .env.example .env.local
Update the environment variables in
.env.local:NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
-
Database Setup
- Create a new Supabase project
- Run the SQL migrations (see
/supabasefolder) - Configure Row Level Security (RLS) policies
-
Run the development server
npm run dev
-
Access the application
- Frontend: http://localhost:3000
- Admin Dashboard: http://localhost:3000/admin/dashboard
- Customer Dashboard: http://localhost:3000/customer/dashboard
- Email: admin@cozyhaven.co.uk
- Password: admin123
- Email: customer@example.com
- Password: customer123
POST /api/auth/login- User loginPOST /api/auth/register- User registrationPOST /api/auth/logout- User logoutGET /api/auth/profile- Get user profile
GET /api/admin/properties- List all properties (with pagination/filtering)POST /api/admin/properties- Create new propertyPUT /api/admin/properties- Update propertyDELETE /api/admin/properties- Delete propertyGET /api/admin/dashboard- Admin dashboard dataGET /api/admin/users- User managementGET /api/admin/bookings- Booking management
GET /api/customer/dashboard- Customer dashboard dataGET /api/customer/bookings- Customer bookingsGET /api/properties- Public property listingsGET /api/properties/[id]- Property details
src/
├── app/ # Next.js 13+ app directory
│ ├── admin/ # Admin dashboard pages
│ ├── customer/ # Customer dashboard pages
│ ├── auth/ # Authentication pages
│ ├── api/ # API routes
│ └── layout.tsx # Root layout
├── components/ # Reusable components
│ ├── admin/ # Admin-specific components
│ ├── layout/ # Layout components
│ └── ui/ # UI components
├── lib/ # Utility libraries
│ ├── auth.ts # Authentication service
│ ├── auth-context.tsx # React auth context
│ └── supabase.ts # Supabase client
└── middleware.ts # Route protection middleware
The project includes GitHub Actions workflows for automatic deployment:
- Push to master branch triggers automatic deployment
- Environment secrets must be configured in GitHub repository settings:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYVERCEL_TOKENORG_IDPROJECT_ID
npm run build
npm start-
Create feature branch
git checkout -b feature/your-feature-name
-
Make changes and test locally
npm run dev npm run lint
-
Commit and push
git add . git commit -m "Description of changes" git push origin feature/your-feature-name
-
Create Pull Request to master branch
id(UUID, Primary Key)title(Text)description(Text)location(Text)price(Numeric)price_type(Enum: 'night', 'month')bedrooms(Integer)bathrooms(Numeric)guests(Integer)images(JSON Array)amenities(JSON Array)type(Enum: 'short-term', 'long-term')available(Boolean)featured(Boolean)created_at(Timestamp)updated_at(Timestamp)
- Enhanced with custom metadata for roles
rolefield in user_metadata ('admin' or 'customer')
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is proprietary software owned by Cozy Haven Holdings.
For support and questions, contact: admin@cozyhaven.co.uk
Cozy Haven Holdings - Premium Property Rentals Across England