EcoLink Ghana - recycling into climate action (mobile app, dashboard, Supabase backend)
# EcoLink Ghana
Turning everyday recycling into climate action — household + collector **mobile app** (React Native / Expo / TypeScript), a **web dashboard** (React / Vite) for recycler, assembly & admin roles, and a **Supabase** backend.
> Full spec-compliance audit & current-state details: see `Ecolink Docs/ECOLINK_CURRENT_STATE.md`.
---
## 🗂 Structure
```
backend/
supabase/
migrations/ # 001..018 (all applied to the live DB)
functions/ # no-show-timeout · threshold-alert · send-push-notification (Deno edge functions, deployed live)
frontend/
mobile/ # React Native (Expo) + TypeScript — household + collector
dashboard/ # React (Vite) + Tailwind — recycler / assembly / admin
legacy/
web-simulation/ # superseded by frontend/mobile (kept for reference)
```
## 🚀 Quickstart
```bash
# Backend — link CLI to the live project (already linked on this machine)
cd backend
supabase migration list # 001..018 all applied remotely
# Mobile
cd frontend/mobile
npm install
cp .env.example .env # then paste the REAL Supabase URL + anon key
npx expo start
# Dashboard
cd frontend/dashboard
npm install
cp .env.example .env # then add VITE_SUPABASE_URL + VITE_SUPABASE_ANON_KEY
npm run dev
```
## ☁️ Live Supabase
| Item | Value |
|---|---|
| Project ref | `xtuftjflvsplqwnprcun` |
| Region | West Europe (London) |
| Dashboard |
supabase.com |
| REST host |
xtuftjflvsplqwnprcun.supaba… |
### Migration status (live DB)
- **001** — full schema + RLS + EcoPoints functions/triggers — ✅ applied (via dashboard)
- **002** — auto-create profile on signup (`handle_new_user`) + staff-role signup guard — ✅ applied via `supabase db push` (2026-07-31), verified live
- **003** — staff-role guard inverted (blocks only `anon`/`authenticated`) + `revoke execute` — ✅ applied
- **004** — owner-scoped RLS policies + security-definer award trigger + `notifications` t …