A mobile-first Progressive Web App (PWA) to map local produce vendors in Jersey, with a special focus on "Hedge Veg" stalls and farm shops.
- 🗺️ Interactive map showing vendor locations across Jersey
- 🥕 Browse locally available produce by type
- 🔍 Search for vendors by name, parish, or produce type
- ⭐ Save favorite vendors for quick access
- 📱 Mobile-first responsive design
- 🌟 Review system for sharing experiences
- 📷 Photo gallery for each vendor location
- 📋 Detailed vendor information including operating hours
- React 18 with TypeScript
- Vite for build tooling
- Leaflet for interactive maps
- Supabase for backend (Auth, Database, Storage)
- PostGIS for geospatial features
- Tailwind CSS for styling
- Docker for containerization
- Node.js 20 or later
- Docker and Docker Compose
- Supabase account and project
- Tailscale (for development)
-
Clone the repository:
git clone https://github.com/willtwilson/jersey-produce-vendors.git cd jersey-produce-vendors -
Install dependencies:
npm install
-
Copy environment variables:
cp .env.example .env
-
Update
.envwith your Supabase credentials:VITE_SUPABASE_URL=your_supabase_project_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key -
Start the development server:
npm run dev
-
Build for production:
npm run build
The application requires a Supabase database with the following tables:
- vendors
- produce
- vendor_produce
- operating_hours
- vendor_photos
- reviews
SQL scripts for database setup are located in the scrapers directory:
create_vendors_table.sql: Creates the table structureseed_vendors.sql: Seeds the database with initial vendor data
To set up the database:
- Create a new Supabase project
- Run the SQL scripts in the Supabase SQL editor
- Enable Row Level Security (RLS) policies as needed
jersey-produce-vendors/
├── src/
│ ├── components/ # Reusable components
│ │ └── ui/ # UI components
│ ├── pages/ # Page components
│ ├── contexts/ # React context providers
│ ├── hooks/ # Custom hooks
│ ├── lib/ # Library code
│ ├── services/ # Service layer
│ └── types/ # TypeScript types
├── public/ # Static assets
└── scrapers/ # SQL scripts for database setup
- Fork the repository
- Create your 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.