A premium, full-featured accommodation rental platform built with Next.js 15, React, Framer Motion, Supabase, and Tailwind CSS. Features a sticky search bar, modern UI/UX, user and host dashboards, messaging system, and comprehensive booking management.
- Smart Search: Sticky search bar with advanced filtering (location, dates, guests, price range, property type, amenities)
- Browse Listings: Beautiful grid/list view with sorting options (price, rating)
- Listing Details: Comprehensive property information with image gallery, amenities, host info, and pricing
- User Dashboard: Profile management, saved listings, trip history, messages
- Wishlist Management: Save favorite properties for later
- Host Dashboard: Real-time earnings, booking statistics, and performance metrics
- Listing Management: Create, edit, and monitor multiple properties
- Booking System: Manage upcoming bookings, guest requests, and confirmations
- Analytics: Track earnings, occupancy rates, and booking trends
- Superhost Recognition: Rating and review system with response time tracking
- Real-time Chat: Instant messaging between guests and hosts
- Conversation Management: Organized message threads with unread indicators
- Typing Indicators: See when the other person is typing
- Modern Design System: Purple-to-indigo primary colors with coral accents
- Smooth Animations: Framer Motion for fluid interactions and transitions
- Responsive Layout: Mobile-first design that works on all devices
- Glassmorphism Effects: Modern frosted glass UI elements
- Dark Mode Support: Full dark theme implementation
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- Animations: Framer Motion
- State Management: Zustand
- Database: Supabase (PostgreSQL)
- Authentication: Supabase Auth
- UI Components: shadcn/ui + custom components
- Data Fetching: SWR (for client-side caching)
- Icons: Lucide React
app/
βββ page.tsx # Homepage with hero and featured listings
βββ search/
β βββ page.tsx # Search results with advanced filtering
βββ listing/
β βββ [id]/page.tsx # Listing details page
βββ auth/
β βββ login/page.tsx # Login page
β βββ signup/page.tsx # Sign up page
βββ dashboard/
β βββ page.tsx # Guest dashboard
βββ host/
β βββ dashboard/page.tsx # Host dashboard
βββ messages/
β βββ page.tsx # Messaging interface
βββ globals.css # Global styles and theme
components/
βββ header/
β βββ search-header.tsx # Sticky search header
βββ listings/
β βββ listing-card.tsx # Listing card component
βββ search/
β βββ filter-sidebar.tsx # Advanced filters
βββ messaging/
βββ chat-window.tsx # Chat interface
lib/
βββ supabase/
β βββ client.ts # Browser client
β βββ server.ts # Server client
β βββ middleware.ts # Session management
βββ store/
βββ search-store.ts # Zustand search state
scripts/
βββ 001_create_tables.sql # Database schema
βββ 002_create_rls_policies.sql # Row-level security
βββ ... # Continue running scripts in numeric order
- Node.js 18+ and pnpm
- Supabase account
- Git
- Clone and install
git clone <repository-url>
cd rotaly-platform
pnpm install- Setup environment variables
Create a
.env.localfile with your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
NEXT_PUBLIC_DEV_SUPABASE_REDIRECT_URL=http://localhost:3000- Setup database
Run all SQL scripts in the
scripts/folder in numeric order (001 β latest), including booking integrity guards:
- Execute
scripts/001_create_tables.sql - Execute
scripts/002_create_rls_policies.sql - Execute remaining scripts sequentially up to
scripts/016_booking_integrity_guards.sql
- Run development server
pnpm devVisit http://localhost:3000 in your browser.
Run these commands before opening a pull request:
pnpm lint
pnpm typecheck
pnpm test
pnpm buildUse pnpm ci:check for the local CI-equivalent baseline.
pnpm test: run unit and component tests with Vitestpnpm test:coverage: generate a coverage report for the current test suitepnpm test:e2e: run Playwright smoke tests
The initial suite focuses on utilities, hooks, and smoke coverage for form behavior. Expand coverage around booking, auth, and dashboard flows as those areas stabilize.
- Use
pnpmfor dependency management - Keep SQL migrations versioned in
scripts/ - Do not commit secrets; use
.env.localfor local development - Open PRs with the provided templates and keep scope narrow
See CONTRIBUTING.md for the contributor workflow and review expectations.
The search header remains fixed at the top of the page and compresses while scrolling. Features:
- Real-time location search
- Date range picker
- Guest count selector
- Responsive design on mobile
Filter listings by:
- Price range (min/max)
- Property type (apartment, villa, cabin, etc.)
- Amenities (WiFi, pool, kitchen, etc.)
- Guest capacity
- Location
Guests can:
- Manage profile and preferences
- View upcoming trips
- Access saved listings
- View messages and reviews
Hosts can:
- Monitor earnings and bookings
- Manage listings
- Track analytics and metrics
- Respond to booking requests
- View guest messages
- Organize conversations by contact
- See unread message count
- Real-time chat interface
- Typing indicators
- Timestamp on messages
The app uses Supabase with the following main tables:
profiles: User profileshosts: Host-specific informationlistings: Property listingslisting_images: Property imagesbookings: Booking recordsreviews: Guest reviewsmessages: Chat messagesconversations: Messaging threadswishlists: Saved properties
All tables have proper Row-Level Security (RLS) policies for data protection.
- Payment processing with Stripe
- Email notifications
- Advanced analytics dashboard
- Automated pricing suggestions
- Photo verification for hosts
- Map-based search
- Mobile app
- Calendar sync
- Review moderation
- Customer support system
The color scheme uses OKLch color space:
- Primary: Indigo (oklch(0.55 0.25 265))
- Accent: Coral/Amber (oklch(0.62 0.22 35))
- Secondary: Light amber (oklch(0.95 0.015 45))
Modify app/globals.css to customize colors, spacing, and typography.
- Server-side rendering for initial page load
- Image optimization with Next.js Image component
- Efficient database queries with proper indexing
- Client-side state management with Zustand
- Code splitting and lazy loading
- Row-Level Security (RLS) on all database tables
- Secure session management with HTTP-only cookies
- Password hashing with bcrypt
- CSRF protection
- Input validation and sanitization
- OAuth integration ready
Deploy to Vercel:
- Push code to GitHub
- Connect repository to Vercel
- Add environment variables in Vercel Settings
- Deploy with one click
For production:
- Enable RLS on all Supabase tables
- Set up automated backups
- Configure rate limiting
- Enable HTTPS
- Set up monitoring and alerting
MIT License - feel free to use this project for personal or commercial purposes.
Contributions are welcome! Please feel free to submit a Pull Request.
Built with β€οΈ using modern web technologies. Ready for production deployment!