Clothes Donation App
A bilingual full-stack platform that lets people donate used clothes and lets others browse and claim them, built around a Node.js and MongoDB backend with an admin moderation layer.
A stronger hero that frames this project like a real case study instead of a plain information page.
Impact
Overview
Clothes Donation App is a community-driven platform for redistributing used clothing: donors list items with photos and details, and people looking for clothes can browse, filter, and reach out directly.
Unlike the React/Next.js-heavy projects in my portfolio, this one is built on a classic server-rendered Node.js stack — Express, MongoDB, and EJS — which shows I can work comfortably outside a single framework when the project calls for it.
Problem
Clothing donation is often informal and hard to coordinate: donors don't have an easy way to show what they have, and people looking for clothes don't have a simple way to browse what's available nearby.
The platform needed to support real-world constraints — image uploads, categories, locations, moderation, and a low-friction way for two strangers to connect — while staying accessible in both Arabic and English.
Key Features
- Image uploads via Multer, stored and served through Cloudinary
- Direct WhatsApp integration so donors and recipients can connect instantly
- Filtering by category, location, and availability status
- Full Arabic/English bilingual interface with RTL support
- Admin panel for reviewing, approving, and managing donation listings
- Security hardening with Helmet.js, rate limiting, and input validation
Timeline
Defined the donor/recipient flow, categories, and moderation needs for a community clothing marketplace.
Built the Express API and MongoDB schema for donations, categories, locations, and status.
Wired up Multer and Cloudinary for image handling, plus an admin panel to manage listings.
Implemented server-rendered EJS views with Tailwind CSS and full Arabic/English support.
Added Helmet, rate limiting, and input validation before deploying to a persistent Node host.
User Workflow
- A donor creates a listing with photos, a category, and a location, which is uploaded through Multer and stored on Cloudinary.
- Recipients browse and filter active donations by category, location, and availability.
- When someone finds an item they want, they reach the donor directly through an integrated WhatsApp link rather than an in-app messaging system.
- Admins can review, moderate, and manage donation status through a dedicated admin panel.
Architecture
- Express.js handles routing, server-rendered views, and API logic on top of Node.js.
- MongoDB stores donation listings, categories, and user-submitted data with a flexible document schema.
- EJS templates render the bilingual UI server-side, styled with Tailwind CSS.
- Multer handles multipart image uploads, which are passed to Cloudinary for hosting and delivery.
- Helmet, rate limiting, and validation middleware protect the app against common web vulnerabilities.
Technical Focus
- Designed a MongoDB schema flexible enough for varied clothing categories, locations, and statuses.
- Implemented a full image upload pipeline from client form to Cloudinary storage.
- Built an admin moderation layer separate from the public donor/recipient experience.
- Applied server-side security practices (Helmet, rate limiting, validation) suited to a persistent Node deployment rather than a serverless one.
Challenges Solved
- Coordinating image upload, storage, and display across Multer, Cloudinary, and server-rendered EJS views.
- Designing a moderation flow that keeps listings trustworthy without adding heavy friction for donors.
- Supporting full bilingual RTL/LTR rendering in a server-rendered template stack rather than a component framework.
- Choosing infrastructure (persistent hosting over serverless) to match the app's session and upload requirements.
Deployment
- The app is designed for persistent Node hosting such as Railway or Render, since it relies on sessions and file uploads rather than a stateless serverless model.
Outcome
Clothes Donation App shows I can build and ship a complete server-rendered full-stack product — data model, uploads, moderation, security, and bilingual UI — outside of the React/Next.js stack I use most often.