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.