Inspiration

My understanding of climate change is that a lot of people are interested but don't know how to help. They want to make a difference but struggle to find local environmental events like tree plantings, beach cleanups, or recycling drives happening in their area. Meanwhile, passionate organizers lack visibility for their initiatives. GreenScan bridges this gap by connecting eco-warriors to actionable opportunities based on their location, turning climate concern into climate action.

What it does

GreenScan is a location-based platform that connects people to eco-friendly events in their area. Users can:

  • Discover events by searching locations (e.g., "Cebu, Philippines")
  • Create events with AI-generated descriptions that inspire participation
  • Manage their events with email-based ownership (delete only your own posts)
  • Browse diverse activities including tree plantings, beach cleanups, recycling drives, and community gardens

The AI-powered description generator helps organizers craft compelling event posts in seconds, removing the barrier of "I don't know what to write."

How we built it

Tech Stack:

  • Frontend: React + TypeScript + Vite, deployed on Vercel
  • Backend: Node.js + Express + TypeScript, deployed on Render
  • Database: Supabase (PostgreSQL)
  • AI: Hugging Face Inference API (google/flan-t5-base model)

Architecture: Full-stack monorepo with separate frontend and backend folders. The backend exposes REST APIs for CRUD operations and AI generation. Supabase handles data persistence with location-based filtering using SQL's ILIKE operator. The frontend uses localStorage for simple email-based ownership without complex authentication.

Workflow: Users enter their email → create events → AI generates engaging descriptions → events stored in Supabase → location filter enables discovery → only organizers can delete their own events.

Challenges we ran into

  1. API Credit Exhaustion: Ran out of OpenAI credits mid-development. Pivoted to Hugging Face's free tier, requiring prompt restructuring and response handling changes.

  2. TypeScript ES Modules: Fought Cannot use import statement errors. Solved by adding "type": "module" to package.json and switching from ts-node to tsx.

  3. Exposed API Keys: Accidentally committed .env to GitHub, triggering push protection. Learned proper .gitignore practices and secret management the hard way.

  4. Render Build Failures: Backend couldn't find compiled files. Fixed by explicitly configuring tsconfig.json's outDir and rootDir.

  5. Time Pressure: Built the entire app in 5 hours, forcing ruthless prioritization and MVP thinking.

Accomplishments that we're proud of

  • Shipped a working product with AI integration in under 5 hours
  • Zero authentication complexity while maintaining ownership control through email validation
  • Graceful AI fallbacks ensuring the app never breaks if Hugging Face is down
  • Responsive design that works seamlessly on mobile and desktop
  • Production deployment on free tiers (Render + Vercel + Supabase) with zero costs

What we learned

  • AI isn't magic: Prompt engineering and fallback strategies are critical for reliability
  • Deployment is different from development: Environment variables, CORS, and build configurations matter immensely
  • Security first: One careless commit can expose secrets; prevention beats remediation
  • Simplicity wins: Email-based ownership > complex auth systems for MVPs
  • Pivoting is a skill: When OpenAI failed, switching to Hugging Face saved the project

What's next for GreenScan

  1. Smart NLP Search: "Find tree planting events near me this weekend" using natural language queries
  2. Impact Tracking: User profiles showing trees planted, trash collected, carbon offset
  3. Event RSVPs: Participant counts and notifications for organizers
  4. Mobile App: React Native version for on-the-go event discovery
  5. Gamification: Badges, leaderboards, and community challenges to boost engagement
  6. Partnerships: Integrate with existing environmental organizations for verified events

Built With

Share this project:

Updates