Full-stack · Climate — 2025
A climate app that recommends native plants by retrieval over a vector index rather than by lookup table — so the advice tracks your actual coordinates and weather.
Built for World Environment Day
Image slot
EcoEcho — native plant recommendations from live local conditions
1600×1000 · app screenshot, ideally the recommendation view
Role
Solo build — schema, RAG pipeline, auth, front end
Year
2025
Stack
- Next.js 15
- Supabase
- pgvector
- Clerk
- HuggingFace
- Open-Meteo
The problem
Plant recommendation tools are almost always a hardcoded table keyed on a region name. That breaks the moment your conditions do not match the label on your region — the same district can hold a dozen microclimates, and a table has no way to say so. I wanted recommendations that reasoned from conditions rather than from a category.
Approach
Embedded a native-species corpus with HuggingFace sentence embeddings and stored the vectors in Supabase using pgvector, so retrieval is a similarity query rather than a join on a region column.
Pulled live conditions from Open-Meteo against the user's coordinates and folded them into the retrieval context, so the same location returns different guidance in different seasons.
Put Clerk in front for auth and per-user history, and built the whole thing on the Next.js App Router with server components doing the data work.
Results
- similarity search, not a lookup table
pgvector
similarity search, not a lookup table
- weather folded into every query
live
weather folded into every query
Image slot
EcoEcho recommendation results view
1600×1000
Image slot
EcoEcho retrieval pipeline diagram
1600×1000
What it came to
The interesting part was discovering how much of a 'RAG app' is actually corpus work. The retrieval quality tracked how carefully the species descriptions were written far more than it tracked the embedding model or the top-k.