A modern resident parking spot sharing platform that transforms chaotic WhatsApp group coordination into a streamlined web application. Harbor Parking enables residents in residential buildings to efficiently share unused parking spots, set availability windows, and coordinate guest parking.
- Smart Spot Sharing: Register your parking spots and set availability windows
- Real-time Dashboard: View available spots and claim them instantly
- Admin Management: Building administrators can approve users and verify spot ownership
- Mobile Responsive: Optimized for mobile-first usage with dark theme
- Secure & Private: Row-level security with Supabase authentication
- API-First: Complete REST API with OpenAPI 3.0 specification
Visit Harbor Parking (if deployed)
- Frontend: Next.js 15.4.5 with App Router & TypeScript
- Styling: Tailwind CSS v4 with PostCSS
- Backend: Supabase (PostgreSQL + Auth + Real-time)
- Authentication: Supabase Auth with email/password
- Deployment: Vercel
- Documentation: OpenAPI 3.0 specification
The main hub where users manage their spots and find available parking.
Easy registration and availability scheduling for your parking spots.
Streamlined approval workflow for new users and spot verification.
- Node.js 18+ and npm
- Supabase account and project
-
Clone the repository
git clone https://github.com/ylapscher/harbor-parking.git cd harbor-parking -
Install dependencies
npm install
-
Set up environment variables
cp .env.local.template .env.local
Fill in your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_service_role_key (optional)
-
Set up the database
Run the SQL scripts in your Supabase dashboard to create the required tables and RLS policies. See Database Setup below.
-
Start the development server
npm run dev
Open http://localhost:3000 to view the application.
The application requires the following Supabase tables with Row Level Security:
profiles- User profile data with approval statusparking_spots- Parking spot ownership and detailsavailabilities- Time windows when spots are availableclaims- Reservation system for spot claiming
- Go to your Supabase project dashboard
- Navigate to the SQL Editor
- Run the database migration scripts (contact for setup scripts)
- Enable Row Level Security on all tables
- Configure authentication policies
The app uses Supabase Auth with the following flow:
- Sign Up: Users register with email/password
- Email Verification: Users verify their email address
- Profile Creation: System creates a profile record
- Admin Approval: Building admin approves new users
- Full Access: Approved users can use all features
- Resident: Can register spots, set availability, and claim spots
- Admin: Can approve users, verify spot ownership, and access admin dashboard
- Super Admin: Full system access (configured via database)
app/
βββ auth/ # Authentication pages
βββ dashboard/ # Main user dashboard
βββ profile/ # User profile management
βββ admin/ # Admin interface
βββ layout.tsx # Root layout
components/
βββ auth/ # Login/signup forms
βββ parking/ # Spot cards, modals
βββ dashboard/ # Dashboard components
βββ layout/ # Navigation, layout
- RESTful API following OpenAPI 3.0 specification
- JWT authentication with Supabase
- Real-time updates via Supabase subscriptions
- Comprehensive error handling and validation
# Development server with Turbopack
npm run dev
# Production build
npm run build
# Start production server
npm start
# Run ESLint
npm run lint
# Type checking
npm run type-check- TypeScript strict mode enabled
- ESLint with Next.js configuration
- Prettier for code formatting
- Path aliases:
@/*maps to project root
Complete API documentation is available via OpenAPI 3.0 specification:
- JSON Format:
/openapi.json - YAML Format:
/openapi.yaml - Generated Types:
/types/api.ts
// Claim a parking spot
const response = await fetch('/api/claims', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
availability_id: 'uuid-here',
notes: 'Need spot for meeting'
})
})- Connect your repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy - Vercel will automatically build and deploy
NEXT_PUBLIC_SUPABASE_URL=your_production_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_production_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_production_service_keyWe welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Harbor Parking was created to solve the common problem of parking coordination in residential buildings. Instead of chaotic WhatsApp group messages, residents now have a professional platform to:
- Share spots efficiently when traveling or not using their car
- Find parking quickly when having guests or needing temporary spots
- Coordinate fairly with transparent availability and claiming system
- Reduce conflicts through structured approval and verification workflows
- Documentation: See CLAUDE.md for development guidance
- Business Requirements: See BUSINESS_REQUIREMENTS.md
- Issues: Create a GitHub issue for bugs or feature requests
- Email: Contact your building administrator for account approval
Built with β€οΈ for residential communities