Back to Projects

Green Pulse

A full-stack environmental community platform featuring interactive eco-challenges, member progress tracking, and a robust multi-role admin system.

Home Page

Overview

Green Pulse is a community-driven environmental platform designed to motivate individuals to take real-world eco-friendly actions. Users can browse, join, and complete sustainability challenges — earning points and tracking their environmental impact over time.

The platform is backed by a robust, role-based architecture that serves three distinct audiences: Members who engage with challenges, Admins who manage platform content, and Super Admins who oversee the entire operation with analytics and user management capabilities.

The project was deployed with a decoupled architecture — the Next.js frontend is hosted on Vercel and the Express.js + Prisma backend is deployed on Render, communicating via a secure REST API.

The Challenges

  • Implementing secure, multi-role authentication for Members, Admins, and Super Admins
  • Building a dynamic challenge system with real-time submission and approval workflows
  • Visualizing platform-wide analytics in an intuitive admin dashboard
  • Managing file uploads (profile images, challenge proofs) in a production environment
  • Ensuring stable deployment across two separate cloud providers (Vercel + Render)

The Solution

  • Implemented JWT-based auth with role-specific middleware and protected routes in Next.js
  • Built a full submission lifecycle: member submits → admin reviews → super admin approves
  • Integrated Recharts for interactive data visualizations across admin dashboards
  • Used FormData-based API calls to handle file uploads securely with Express.js
  • Resolved Prisma client output path issues and configured tsup for a stable production CJS build

Architecture & Tech Stack

I chose a modern, high-performance stack to ensure scalability and developer productivity.

Next.js 15TypeScriptNode.jsExpress.jsPostgreSQLPrisma ORMJWT AuthRechartsTailwind CSSFramer MotionZodTanStack QueryVercelRender

Core Capabilities

Multi-Role Access Control

Granular role-based access for Members, Admins, and Super Admins — each with dedicated dashboards, sidebars, and API permission layers.

Eco-Challenge System

Members can browse, join, and submit proof of completion for eco-challenges. Admins review and approve submissions through a streamlined workflow.

Admin Analytics Dashboard

Super Admins get an at-a-glance view of platform activity with Recharts visualizations for user growth, challenge completions, and submission trends.

Member Progress Tracking

Members track their earned points, completed challenges, and overall environmental impact through a personalized dashboard.

File Upload Support

Challenge submission proofs and profile images are handled via secure FormData uploads, processed by the Express.js backend.

Production-Ready Deployment

Frontend on Vercel with edge-optimized delivery and backend on Render with a TypeScript-compiled CJS bundle and live PostgreSQL database.

Key Engineering Decisions

One of the most technically involved aspects of the project was resolving Prisma's custom output path configuration in a bundled TypeScript production build. By configuring `tsup` to treat the Prisma client as external and setting the correct `NODE_PATH` on Render, the backend achieved a stable, production-grade CJS output.

The submission approval workflow introduced real-world state management challenges — solved by using TanStack Query with optimistic cache invalidation, ensuring the UI stays in sync with the backend without full page reloads.

Role-based routing in Next.js 15 was implemented via a `proxy.ts` middleware (replacing the deprecated `middleware.ts` pattern), guarding all dashboard routes based on the decoded JWT role claim.

Ready to see it in Action?

Explore the live deployment or deep dive into the source code on GitHub.