ImpactLink is a full-stack crowdfunding web application that empowers individuals and organisations to launch campaigns, raise funds, and make a real-world impact β securely and at scale.
Features Β· Tech Stack Β· Project Structure Β· Getting Started Β· API Overview Β· Security Β· Deployment
- π Secure Authentication β JWT-based login, signup, password reset via email OTP, and token refresh
- π Campaign Management β Create, edit, and delete fundraising campaigns with rich details, goals, and deadlines
- π³ Integrated Payments β Donate to campaigns via Razorpay (UPI, card, netbanking) with server-side payment verification
- π Personal Dashboard β Track your campaigns, donations made, and funds raised in real time
- π€ User Profile & Settings β Manage profile details, avatar, and account preferences
- π Search & Filter β Discover campaigns by category, goal, and progress
- π‘οΈ Admin Dashboard β Overview of platform-wide statistics (users, campaigns, donations)
- π Campaign Moderation β View and manage all campaigns across the platform
- π₯ User Management β View and manage registered users
- π¬ Contact Submissions β Review and respond to contact form messages
- π§ Automated Email Notifications β Transactional emails via Nodemailer with asynchronous processing via BullMQ + Redis
- π Scheduled Jobs β Automated campaign status management via node-cron
- π Error Monitoring β Real-time error tracking via Sentry (v10)
- π Structured Logging β HTTP and application logs via Morgan + Winston
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| Vite | Build tool & dev server |
| React Router v7 | Client-side routing |
| Framer Motion + GSAP | Animations & micro-interactions |
| Axios | HTTP client |
| Recharts | Data visualisation (dashboard charts) |
| Lucide React + React Icons | Icon libraries |
| Bootstrap 5 | Component styling base |
| React Toastify | Notifications |
| Technology | Purpose |
|---|---|
| Node.js + Express.js | REST API server |
| MongoDB + Mongoose | Primary database (ODM) |
| Redis + BullMQ | Job queue for async email delivery |
| JWT | Authentication & session management |
| Razorpay | Payment gateway integration |
| Nodemailer | Transactional email delivery |
| Helmet | HTTP security headers |
| express-rate-limit | Rate limiting (auth + general routes) |
| express-mongo-sanitize | NoSQL injection prevention |
| Winston + Morgan | Application & HTTP logging |
| Sentry | Real-time error tracking & performance |
| node-cron | Scheduled background jobs |
| bcryptjs | Password hashing |
| envalid | Environment variable validation |
crowdfunding/
βββ impactlink-frontend/ # React + Vite SPA
β βββ src/
β β βββ pages/ # Route-level page components
β β β βββ Home.jsx
β β β βββ Campaigns.jsx
β β β βββ CampaignDetails.jsx
β β β βββ CreateCampaign.jsx
β β β βββ EditCampaign.jsx
β β β βββ Dashboard.jsx
β β β βββ Profile.jsx
β β β βββ Settings.jsx
β β β βββ Donations.jsx
β β β βββ AdminDashboard.jsx
β β β βββ AdminUsers.jsx
β β β βββ AdminDonations.jsx
β β β βββ Login.jsx / Signup.jsx
β β β βββ ForgotPassword.jsx / ResetPassword.jsx
β β β βββ About.jsx / Contact.jsx
β β β βββ NotFound.jsx
β β βββ components/ # Reusable UI components (Navbar, Footer, etc.)
β β βββ context/ # React Context providers (Auth, etc.)
β β βββ services/ # API service layer
β β βββ utils/ # Utility functions & Axios instance
β β βββ assets/ # Static assets
β βββ index.html
β βββ vite.config.js
β
βββ impactlink-backend/ # Node.js + Express REST API
β βββ server.js # App entry point & middleware setup
β βββ routes/ # Route definitions
β β βββ auth.js # /api/auth
β β βββ campaign.js # /api/campaigns
β β βββ donation.js # /api/donations
β β βββ payment.js # /api/payments (Razorpay)
β β βββ dashboard.js # /api/dashboard
β β βββ admin.js # /api/admin
β β βββ admindash.js # /api/admin/dashboard
β β βββ user.js # /api/user
β β βββ contact.js # /api/contact
β βββ controllers/ # Business logic handlers
β βββ models/ # Mongoose schemas
β β βββ User.js
β β βββ Campaign.js
β β βββ Donation.js
β β βββ Token.js
β β βββ Contact.js
β β βββ Admin.js
β βββ middleware/ # Auth & error middleware
β βββ config/ # DB, Redis, env validation
β βββ jobs/ # node-cron scheduled tasks
β βββ queues/ # BullMQ queue definitions
β βββ workers/ # BullMQ worker processes (email)
β βββ utils/ # Winston logger & helpers
β βββ scripts/ # Database seed scripts
β
βββ README.md
- Node.js v18+ and npm
- MongoDB (local or MongoDB Atlas)
- Redis (optional β for email job queue)
- A Razorpay account (for payment features)
git clone https://github.com/atharvashivari/ImpactLink.git
cd ImpactLinkcd impactlink-backend
npm installCreate a .env file in impactlink-backend/:
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
JWT_REFRESH_SECRET=your_jwt_refresh_secret
RAZORPAY_KEY_ID=your_razorpay_key_id
RAZORPAY_KEY_SECRET=your_razorpay_key_secret
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password
REDIS_URL=redis://localhost:6379 # Optional
SENTRY_DSN=your_sentry_dsn # Optional
CLIENT_URL=http://localhost:5173Start the backend:
# Development (with hot reload)
npm run dev
# Production
npm startcd impactlink-frontend
npm installCreate a .env file in impactlink-frontend/:
VITE_API_URL=http://localhost:5000/api
VITE_RAZORPAY_KEY_ID=your_razorpay_key_idStart the frontend:
npm run devThe app will be available at http://localhost:5173.
To populate the database with demo campaigns, users, and donations:
cd impactlink-backend
node scripts/seedDatabase.jsAll API routes are prefixed with /api.
| Route | Description |
|---|---|
POST /api/auth/signup |
Register a new user |
POST /api/auth/login |
Login and receive JWT tokens |
POST /api/auth/logout |
Invalidate refresh token |
POST /api/auth/forgot-password |
Send password reset OTP |
POST /api/auth/reset-password |
Reset password with OTP |
GET /api/campaigns |
List all campaigns |
POST /api/campaigns |
Create a new campaign (auth required) |
GET /api/campaigns/:id |
Get campaign details |
PUT /api/campaigns/:id |
Update a campaign (owner only) |
DELETE /api/campaigns/:id |
Delete a campaign (owner only) |
POST /api/payments/create-order |
Create Razorpay payment order |
POST /api/payments/verify |
Verify payment & record donation |
GET /api/donations |
List user's donations (auth required) |
GET /api/dashboard |
Get user dashboard statistics |
GET /api/admin/dashboard |
Admin platform statistics |
POST /api/contact |
Submit a contact form message |
ImpactLink implements a multi-layered security approach:
| Measure | Implementation |
|---|---|
| HTTP Security Headers | helmet β sets CSP, HSTS, X-Frame-Options, etc. |
| NoSQL Injection Prevention | express-mongo-sanitize |
| Rate Limiting | Auth routes: 15 req/15 min Β· General: 100 req/15 min |
| Password Hashing | bcryptjs with salt rounds |
| JWT Authentication | Access token + refresh token rotation |
| Payment Verification | Razorpay signature verification server-side |
| Input Validation | Server-side validation on all sensitive inputs |
| Environment Validation | envalid β prevents startup with missing env vars |
| Error Monitoring | Sentry for real-time exception tracking |
The project is configured for deployment on:
- Frontend β Vercel (
vercel.jsonincluded) - Backend β Render (
render.yamlincluded) - Database β MongoDB Atlas
- Cache / Queue β Redis Cloud or Upstash
| File | Description |
|---|---|
docs/PRD.md |
Product Requirements Document β features, data models, user roles & roadmap |
docs/TECH_STACK.md |
Full tech stack reference with package versions & key design decisions |
Atharva Shivari
- GitHub: @atharvashivari
- Email: shivariatharva@gmail.com