A curated directory of coffee farms and tea estates across India — with interactive maps, filtering, community submissions, and a PR-based publishing workflow.
Inspired by ooru.space — an open-source directory of public community spaces in India. We borrowed their three-column layout, minimalist design system, and the philosophy of keeping data as static files in git.
- Turborepo — monorepo with Vercel-native build pipeline
- apps/web — Next.js 15 public directory (statically generated from JSON data files)
- apps/admin — Next.js 15 admin panel (protected by Supabase Auth)
- packages/db — shared Supabase types and client
- Supabase — stores pending submissions
- Leaflet + OpenStreetMap — map tiles, no API key required
- GitHub API (Octokit) — admin approval opens a PR, merge = deploy
- Someone submits a farm via the public form
- Their address is geocoded via Nominatim (OpenStreetMap, free)
- The submission lands in the Supabase
submissionstable - An admin reviews it in
apps/adminand clicks Approve - The server creates a GitHub PR that adds the farm to
data/coffee-farms.jsonordata/tea-farms.json - Merging the PR triggers a Vercel rebuild — the farm appears on the site
No database queries at page load. No backend overhead. Just static JSON.
# 1. Install
pnpm install
# 2. Copy env vars
cp .env.example apps/web/.env.local
cp .env.example apps/admin/.env.local
# Fill in Supabase URL, anon key, service role key, and GitHub token
# 3. Run the schema
# Open Supabase Dashboard > SQL Editor > paste supabase/schema.sql > Run
# 4. Dev
pnpm dev # web → :3000, admin → :3001Deploy each app as a separate Vercel project. In each project settings set Root Directory to apps/web or apps/admin. Vercel auto-detects the Turborepo.
Set all environment variables from .env.example in the Vercel project settings.
For the GitHub token used in the admin app, create a fine-grained PAT with:
- Contents: Read & Write
- Pull requests: Write
| File | Contents |
|---|---|
data/coffee-farms.json |
Active coffee farms |
data/tea-farms.json |
Active tea estates |
Both files are the source of truth for the public site. They are updated exclusively through merged PRs — no direct database writes.
- Data (
data/*.json) — CC BY-SA 4.0 - Code — MIT
Inspired by ooru.space by the Samagata Foundation