A community marketplace for people who would
rather swap than scroll.
SwapSpot is a designed-and-built concept for a hybrid item exchange where
users can list goods, propose trades, mix barter with cash, and rate each
other after a successful transaction. This page walks through the
architecture, scope, and implementation as a code-review-ready portfolio piece.
Heads up:
SwapSpot is a portfolio concept. There is no live backend, public sign-up, or
hosted database. The full Django source is available on GitHub for review and local run.
9
REST Resources
10+
Django Models
2
Step Signup Flow
100%
Source Available
Case Study
The problem, and how SwapSpot answers it.
Most marketplaces force a choice: you either sell, or you trade. SwapSpot
imagines a single surface where neighbors can do either, or both — and
actually trust each other afterwards.
1The problem
People accumulate things they no longer need. Selling them outright is friction-heavy, and pure barter platforms struggle when one side wants cash and the other wants goods.
Cash-only marketplaces ignore non-monetary value.
Pure barter sites collapse when valuations don't match.
Reputation is fragmented across listing apps and chat.
2The approach
SwapSpot blends listings, proposals, and reviews into one flow. Users can post an item, send a proposal that mixes barter with cash, and build a verifiable rating after each transaction.
Hybrid proposals: items, money, or both.
Built-in negotiation, accept and reject states.
Post-transaction reviews feed an automatic average rating.
Scope
What was designed and built.
Every feature below ships in the source code: views, models, serializers, and templates. It runs locally; it just doesn't run in production.
Profiles & Auth
Two-step signup, profile editing, avatar uploads, and an automatic average rating on every profile.
Item Listings
Create, edit, and delete items with title, description, category, condition, price, listing type, and photo.
Search & Browse
Keyword search, category filtering, and a homepage feed of available items powered by ORM queries.
Proposal System
Send, accept, or reject exchange and purchase proposals. Hybrid offers with goods, cash, or a mix of both.
Ratings & Reviews
5-star ratings with average recalculation handled by Django signals after each new review lands.
Notifications
Per-user notifications for transaction updates, new proposals, and proposal status changes.
REST API
Full CRUD endpoints for every resource, exposed via Django REST Framework ViewSets and routers.
Static Showcase
This portfolio site is served from site/ on GitHub Pages, validated by GitHub Actions on each push.
Toolkit
The stack, with versions.
Pinned in requirements.txt for reproducibility. The repo runs locally on SQLite with zero extra setup.
Python3.13+Django6.0.5DRF3.17.1Pillow12.2.0SQLite3.xGitHub ActionsGitHub PagesSemantic HTML & CSS
Interface
REST API surface.
Every resource is exposed via a DRF ModelViewSet with full CRUD: list, create, retrieve, update, partial_update, destroy.
REST API endpoints exposed by SwapSpot
Endpoint
Resource
/api/users/
Users — accounts, profiles, and average rating.
/api/items/
Items — marketplace listings (sale, swap, or hybrid).
/api/proposals/
Exchange or purchase proposals between users.
/api/transactions/
Transactions completed from accepted proposals.
/api/reviews/
Post-transaction reviews and 5-star ratings.
/api/notifications/
In-app notifications for proposal and transaction events.
/api/tags/
Item tags for categorization and discovery.
/api/item-tags/
Through-table associating items with tags.
/api/payment-methods/
Per-user payment methods.
Architecture
Data flow at a glance.
A user's lifecycle, from listing an item to closing a deal and reviewing the other side.
1. ListUser creates an Item with category, condition, listing type.
2. ProposeAnother User sends a Proposal referencing items and an optional cash amount.
3. NegotiateThe owner accepts, rejects, or counter-proposes. A Notification is fired.
↓
4. TransactAn accepted Proposal becomes a Transaction with type and amount.
5. ReviewBoth sides leave a Review tied to the transaction with a 1–5 rating.
6. Re-rankA signal recomputes the user's average_rating automatically.
Want to read the source?
The whole project, including models, serializers, signals, tests, and templates, lives on GitHub. Clone it, install the deps, and you have a working local app in under five minutes.