Inspiration
The East Bay Permaculture Guild has 15+ years of work parties, meetings and unconferences behind it, yet newcomers still ask the same question: where do I begin? Gardens, seed libraries, community fridges and mutual-aid projects exist all over the East Bay, but you only find them if you already know someone who knows. Community maps usually don't fix this: within a year they rot into abandoned pins nobody trusts. We wanted a map that explains why this work matters, shows how to take a first step, and is kept current by the community itself.
What it does
Rooted (the East Bay Regeneration Map) is a community-kept map and relationship commons, built around three people:
- Maya, a newcomer, reads a plain-language "why this matters today" intro. She searches and filters by type, neighbourhood, ways to participate, or scenario (heat, flooding). Each listing shows who it serves, whether it's active, how to get involved, and a trust block: source, verification status and last-checked date. She can sign up in seconds and land straight on upcoming work parties and events.
- Sam, a steward, claims his listing and updates its hours or marks it inactive in under a minute, without emailing a developer.
- Jo, a Guild volunteer, works a moderation queue. Every suggestion shows old vs. new with its source, and she can approve, edit or reject in one click. AI-assisted re-crawl findings arrive as unverified candidates and are never auto-published. A stale view surfaces anything not checked in 90 days, and an activity log records every decision.
It also includes:
- My next step, so returning volunteers see their next work party, what to bring, their skills and their contact preferences, with no re-onboarding.
- A consent-based newsletter.
- A Replicate page, so another community can fork the project and change one data file.
It works even with the backend offline, falling back to labelled sample data instead of crashing.
How we built it
We extended Garden Steward, the open-source, SMS-first volunteer platform the Guild's network already uses, rather than starting from scratch.
- Frontend: Vue 3, Vite, Pinia, Vue Router, Tailwind CSS and Leaflet with free OpenStreetMap maps.
- Backend: Strapi 5 on PostgreSQL, with JWT auth and self-serve registration. A dedicated map feed serves only public fields and rounds coordinates to neighbourhood level for private sites.
- Trust model: every listing carries its source, verification status and last-checked date, plus a 90-day stale queue and an audit log.
- Responsible AI: a documented re-crawl prompt (
docs/recrawl-prompt.md) finds candidates from public sources only, and a human approves each one. - Quality: automated Playwright tests cover every route and journey, axe-core accessibility scans pass WCAG 2.1 AA with zero serious or critical issues, and layouts were checked at 360, 768 and 1280px.
- The build was solo and AI-assisted: AI coding agents handled audits, implementation and QA under my direction.
Challenges we ran into
- Trust vs. openness: anyone can suggest a place, yet nothing unverified can look verified. We separated moderation data from public listings and put provenance on every page.
- Privacy: volunteer and garden records contain personal data. We built a privacy-safe public feed instead of opening up existing endpoints.
- Honesty under hackathon pressure: we didn't receive the Guild's workday SOP or V2 briefs, and we couldn't open the Lovable MVP. Rather than invent content, we labelled drafts "needs Guild review" and documented the tool evaluation in
docs/EVALUATION.md. - Real bugs found in QA: a permissions error was silently logging users out, the blog spinner never stopped, and event pages crashed without a backend. We caught and fixed all of them before the demo.
- Bringing an older codebase up to one accessible design system without breaking it.
Accomplishments that we're proud of
- One journey covers all three of the Guild's pathways: awareness, volunteer retention and discovery.
- The map can't silently go stale: last-checked dates, a stale queue and steward self-service keep it current.
- AI helps find new places, but a human always decides what gets published.
- Privacy is built in: private locations are shown at neighbourhood level only.
- Zero serious or critical accessibility issues on every public page.
- It costs $0 to run and about 15 minutes a week of volunteer time to maintain.
- An honest "What this demo shows" page separates what works from what's a prototype.
What we learned
- A map is only as useful as its freshness. Trust signals matter more than pin count.
- For grassroots groups, "no developer required to keep it alive" is the most important feature.
- Being honest about what's a demo, what's sample data and what's unverified builds more credibility than polish.
- Extending tools a community already uses beats building new ones.
- AI is most valuable as an assistant that proposes, with people who decide.
What's next for Rooted
- Deploy the backend so login, sign-up and RSVP work on the public site.
- Gather the Guild's workday SOP and V2 briefs, and have Guild experts review the training content.
- Turn moderation approvals into GitHub pull requests for full version history.
- Add real steward verification, replacing the demo claim.
- Add a privacy-safe public gardens directory.
- Switch on real newsletter sending through the backend's existing Resend integration.
- Help a revived San Francisco chapter replicate it: a data change, not a rebuild.
Built With
- accessibility
- ai-agents
- axe-core
- docker
- github
- javascript
- jwt
- leaflet.js
- node.js
- openstreetmap
- pinia
- playwright
- postgresql
- resend
- strapi
- tailwindcss
- twilio
- vercel
- vite
- vue-router
- vue.js
Log in or sign up for Devpost to join the conversation.