Wish Freely, Share Widely
A wish-list web app where you can save what you want, share it with others, and explore public wishes from the community.
| Layer | Stack |
|---|---|
| Client | React 18, MUI 5, Redux Toolkit, React Router 6, Webpack, Zod |
| Server | Node.js, Express, MongoDB, Mongoose |
| Auth | JWT (httpOnly cookies), bcrypt |
| Mailgun | |
| Storage | Cloudinary (profile photos) |
| Deploy | Heroku-ready |
- Register, Login, Logout
- Email verification
- Forgot password / Reset password
- Protected routes
- Profile page with photo upload
- Edit name, birthday, password
- Email verified badge
- Create wishes (name, description, price, priority, links)
- Edit wishes (modal)
- Delete wishes
- Mark as purchased / wanted
- Visibility: private, shared, or public
- Public feed of wishes
- View shared wish by link (
/wish/:id)
- Copy share link
- Share via email (mailto)
wishoo/
├── client/ # React frontend
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ ├── slices/ # RTK Query API
│ │ ├── validation/ # Zod schemas + tests
│ │ └── ...
│ └── package.json
├── server/ # Express backend
│ ├── src/
│ │ ├── controllers/
│ │ ├── models/
│ │ ├── routes/
│ │ ├── middlewares/
│ │ ├── validation/
│ │ └── util/
│ └── package.json
└── package.json # Root scripts
- Node.js 18+
- MongoDB
- Mailgun account (for email)
- Cloudinary account (for profile photos)
# Install dependencies
npm run setup
# Or separately
npm run setup:client
npm run setup:serverServer (e.g. server/.env):
MONGODB_URI=mongodb://...
JWT_SECRET=your-secret
PORT=5001
MAILGUN_API_KEY=key-...
MAILGUN_DOMAIN=sandbox...
CLOUDINARY_CLOUD_NAME=...
CLOUDINARY_API_KEY=...
CLOUDINARY_API_SECRET=...
NODE_ENV=development
Client (e.g. client/.env):
BASE_SERVER_URL=http://localhost:5001
# Dev: client + server concurrently
npm run dev
# Or separately
npm run dev:client # Client on port 8080
npm run dev:server # Server on port 5001# Build client for production
npm run build:client
# Run client tests
cd client && npm test| Package | Version |
|---|---|
| wishoo (root) | 0.0.1 |
| wishoo-client | 0.0.1 |
| wishoo-server | 0.0.1 |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/user |
No | Register |
| POST | /api/user/login |
No | Login |
| POST | /api/user/logout |
No | Logout |
| GET | /api/user/profile |
Yes | Get profile |
| GET | /api/wish/feed |
No | Public wishes feed |
| GET | /api/wish |
Yes | My wishes |
| POST | /api/wish |
Yes | Create wish |
| GET | /api/wish/:id |
Optional | Get wish (visibility checked) |
| PUT | /api/wish/:id |
Yes | Update wish |
| DELETE | /api/wish/:id |
Yes | Delete wish |
ISC © Farshad Abbaspour