A polished MERN-style lost-and-found web application built with React, Vite, Tailwind CSS, Express, MongoDB, and Cloudinary. This project demonstrates a full-stack workflow, file upload handling, responsive UI, and modern frontend/back-end best practices.
- Full stack architecture with a React client and Express server
- Vite 8 powered React app for fast local development and production builds
- Tailwind CSS responsive styling with custom visuals and mobile-first layout
- Multer file upload pipeline for image uploads
- Cloudinary integration for remote media hosting, with a safe local fallback
- MongoDB with Mongoose for data persistence
- React Router v6 routing across Home, Items, and Upload pages
- Search and filtering for items by name, description, or location
- Claim and Share actions on item cards using clipboard + Web Share API
- Static public assets driven from
client/public/images - Sample data fallback from
client/src/data/items.jswhen backend items are unavailable
app.js— Express server entry pointserver/— API controllers, routes, models, and upload folderserver/configs/connectDb.jsserver/controllers/items.controllers.jsserver/models/item.model.jsserver/routes/items.routes.js
client/— React frontend app built with Viteclient/src/main.jsxclient/src/App.jsxclient/src/mainapp/MainApp.jsxclient/src/components/— UI components likeNavbarandItemclient/src/pages/—Home,Items,Uploadclient/src/data/items.js— local sample item data fallbackclient/public/images/— public image assets used across the site
- Responsive homepage with CTA sections
- Item listing page with responsive grid and fallback sample data
- Item upload form with file upload and backend storage
- Search bar available on the items page only
- Local sample image usage from
client/public/images Claimbutton copies claim details to clipboard and provides user feedbackSharebutton uses browser native sharing when available, otherwise copies share text- Robust file upload handling with
multipart/form-data - Static serving of uploaded images from
server/uploads - Graceful server error handling for port conflicts
- Cloudinary / local fallback upload strategy for reliable deployment
- Environment variables stored in
.env - Separation of concerns between frontend and backend
- Async/await plus try/catch error handling
- Modular Express routers and controllers
- Static asset fallback for broken image URLs
- Responsive layout and mobile-first UI
- Semantic and accessible button interactions
- Clean project scripts for development and production
- Clone the repository
git clone <repo-url>
cd finder- Install root dependencies
npm install- Install client dependencies
cd client
npm install- Create a
.envfile in the root
Use this format:
MONGO_URI=your_mongodb_connection_string
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secretFrom the project root:
npm run devThis command runs both the server and the client concurrently.
npm run server
npm run clientFrom the project root:
npm run buildThen run the server with:
npm startThis project is designed to showcase real-world skills:
- building a modern frontend with React, Vite, and Tailwind
- building a backend API with Express and MongoDB
- managing file uploads and cloud media storage
- writing reusable UI components and responsive layouts
- handling failures gracefully and supporting fallback data
If you review this repository, you’ll see a complete end-to-end experience with practical production-ready patterns.
MIT