SwapBay is a modern online marketplace designed to make exchanging goods flexible, sustainable, and community-driven.
Users can buy, sell, or swap items directly, combining the convenience of e-commerce with the creativity of bartering.
- Frontend + API: http://165.227.222.189
SwapBay empowers people to exchange value, not just money.
By supporting both cash offers and item-for-item trades, the platform promotes sustainable reuse and creates an inclusive marketplace for students, hobbyists, and local communities.
The goal of SwapBay is to make secondhand exchange accessible, affordable, and environmentally friendly, encouraging users to trade what they have for what they need.
| Name & GitHub |
|---|
| Hailemariam |
| Sebahadin |
| Abinet |
| Amanuel |
| Krishiv |
Sprint 0 Roles:
- Scrum Master: Hailemariam
- Product Owner: Hailemariam
- Developers
- Amanuel
- Abinet
- Sebahadin
- Krishiv
(Roles rotate each sprint.)
The idea for SwapBay emerged during the Fall 2025 Agile Software Development & DevOps course.
Our team observed that most online marketplaces only allow cash-based transactions, which limits flexibility and accessibility for many users.
SwapBay addresses this by introducing the option to exchange goods directly through swaps, in addition to traditional buy-and-sell transactions.
This dual-offer model promotes sustainable consumption and encourages community engagement through a circular exchange economy.
The project follows an Agile/SCRUM development process, with iterative sprints, peer reviews, and continuous feedback loops.
These features together provide a comprehensive and user-friendly marketplace experience.
Accounts & Profile
- Register/login/logout with JWT sessions plus forgot/reset password emails
- Edit name, username, email, and avatar; delete account with data cleanup
Listings & Items
- Add items with category, condition, description, and uploaded images
- Keep items as private drafts or publish/unlist with seller offer type (money, swap, both)
- Mark items sold/swapped and block edits while listed or included in offers
Browse & Discovery
- Home feed of public listings (excludes your own) with search and filters by condition and offer type
- Listing cards show owner info with quick actions to message or make an offer
Offers
- Compose offers using cash, one of your items, or both; pick from available personal items
- Track outgoing offers with status filters and cancel pending ones
- Review incoming offers per listing, accept/reject; acceptance marks items unavailable and rejects competing offers
Messaging & Notifications
- Inbox with unread counts and per-conversation threads
- Direct messages between buyers and sellers plus system messages for offer updates
Media Uploads
- Authenticated uploads for avatars and item photos (JPEG/PNG/WEBP) served from
/uploads
These features together provide a comprehensive and user-friendly marketplace experience.
# Clone repo
git clone https://github.com/agile-students-fall2025/4-final-swapbay
# Move into frontend
cd front-end
# Install dependencies
npm install
# Run dev server
npm run devThe app will open at:
http://localhost:5173/
The backend now uses MongoDB (via Mongoose). Set up environment variables before starting:
cd back-end
cp .env.example .env # if provided, or create .env manually
MONGODB_URI=<your MongoDB connection string>
JWT_SECRET=<random-long-secret>
PORT=3000
NODE_ENV=production # for deployments
JWT_EXPIRES_IN=7d
FRONTEND_URL=http://localhost:5173 # or your deployed frontend URL
SENDGRID_API_KEY=<optional-for-reset>
SENDGRID_FROM_EMAIL=<verified-from-email>
# From repo root
cd back-end
# Install dependencies
npm install
# Start the API (reload on changes)
npm run dev
# Or run once for production-style start
npm startThe API listens on http://localhost:3000/ by default (configurable through the PORT env var).
# Run unit/integration tests
npm test
# Generate coverage report
npm run coverage
# Lint the codebase
npm run lintTest output and coverage artifacts stay inside back-end/tests and back-end/coverage.
We welcome collaboration from both team members and external contributors.
If you would like to contribute:
- Check existing issues to see if your idea already exists.
- Fork this repository and create a feature branch.
- Commit small, focused changes with clear messages.
- Push your branch and open a Pull Request to
main.
For detailed contribution guidelines, please see the CONTRIBUTING.md file.
| Layer | Technology |
|---|---|
| Frontend | React.js |
| Backend | Node.js / Express |
| Database | MongoDB / Mongoose |
| Styling | CSS |
| Version Control | Git & GitHub |
| Deployment | DigitalOcean droplet (Nginx + PM2) |
"Not everyone has cash, but everyone has something to trade."