HomeIdentityEngineeringContact
Back to All Projects
FEATURED10 / 10

Volunteer Connect

Full-featured volunteer management platform with dual-role accounts, application workflow, real-time messaging, and star-rating review system — built on clean MVC architecture.

Node.jsExpressMongoDB EJSbcryptjsMVC
View Source
Solo Project
2
Account Roles
MVC
Architecture
Full
Application Workflow
Review System

The Challenge

Volunteer organizations and potential volunteers have no unified platform for opportunity discovery, application management, and direct communication. Everything happens through disconnected emails, WhatsApp groups, and spreadsheets.

  • No discovery platform — volunteers can't browse available opportunities in one place
  • No application tracking — organizations manage applicants via spreadsheets or email threads
  • No direct messaging — communication scattered across WhatsApp, email, and phone calls
  • No feedback system — no way for volunteers to review organizations or vice versa
  • No accountability — no audit trail for application status changes

Engineering Thinking

Designed as a dual-role platform — users register as either a Volunteer or an Organization. Both roles share the same auth system but see completely different dashboards and capabilities. This avoids the complexity of a single "super user" model.

The application workflow follows a state machine pattern: Browse → Apply → Pending → Approved/Rejected. Each transition is logged, and both parties can track the current state at any time.

Built on strict MVC architecture — Models (Mongoose schemas), Views (EJS templates), Controllers (Express route handlers). This separation made the codebase easy to navigate and extend as features were added iteratively.

CHOSEN

Node.js + Express + MongoDB (MVC)

Clean separation of concerns. EJS server-side rendering for fast initial load. MongoDB for flexible document schemas.

REJECTED

React SPA + REST API

Overkill for the scope. Server-rendered EJS is faster to develop solo and doesn't need a separate frontend build step.

Key Systems

Dual-Role Account System

  • Volunteer accounts: browse opportunities, apply, message, review
  • Organization accounts: post opportunities, manage applicants, respond
  • bcryptjs password hashing with salt rounds
  • Session store persisted in MongoDB

Application Workflow

  • Browse → Apply → Pending → Approved / Rejected
  • Status transitions logged with timestamps
  • Both parties see current application state
  • Organization can bulk-approve or reject applicants

Messaging System

  • Conversation threads per opportunity application
  • Organization ↔ Volunteer direct messaging
  • Message history persisted in MongoDB
  • Notification indicators for unread messages

Review & Rating System

  • Star rating (1–5) + text review per experience
  • Reviews visible on organization profile
  • Average rating computed and displayed
  • Review moderation capability for admins

What Broke & What I Learned

Challenge 01
Dual-Role Authorization Complexity
Ensuring Volunteers can't access Organization-only routes (and vice versa) required careful middleware layering. A single missed auth check on one route could expose the wrong dashboard. Built role-specific middleware that wraps every route group.
Lesson: Never rely on UI hiding for access control. Every route must independently verify the user's role server-side.
Challenge 02
Mongoose Schema Design for Conversations
Modeling conversations between two different user types (Volunteer and Organization) with MongoDB references was tricky. Had to decide between embedding messages in application documents vs. a separate conversations collection. Chose separate collection for scalability.
Lesson: In MongoDB, embed for read-heavy data, reference for write-heavy data. Conversations are write-heavy — they grow unbounded.

What It Achieved

Outcome
Complete Platform
Dual-role accounts, opportunity listing, application workflow, messaging, and reviews — full volunteer management lifecycle.
Outcome
Clean MVC Codebase
Strict Model-View-Controller separation with Express. Easy to extend, audit, and maintain as a solo developer.
Outcome
Secure Auth System
bcryptjs hashing, role-based route protection, MongoDB session store, and CSRF-safe form handling.

Screenshots

Platform Dashboard — Coming Soon
Messaging System — Coming Soon
Previous
AttendPro