ML-Powered Campus Sharing Economy Platform
A production-grade, real-time marketplace where verified college students rent, sell, give, recover lost items, and fulfill community requests — powered by intelligent recommendations and event-driven architecture.
Live App: https://sharenet-web-1.onrender.com
Note for Judges & Evaluators: Gmail (
@gmail.com) sign-up is temporarily enabled for evaluation and testing purposes. This allows judges to register and explore the full platform without needing a.eduor.ac.inemail. This access will be disabled after the evaluation period. In production, only verified college email domains are permitted.
Every semester across Indian and global campuses:
- Students spend thousands on items they only need for weeks (projectors, books, lab equipment)
- Lost belongings go unclaimed because there's no centralized, trusted recovery system
- There is no verified, college-scoped platform — generic marketplaces (OLX, Facebook groups) have zero identity verification, no trust systems, and no campus boundaries
- Students who need specific items have no way to broadcast that demand to peers who might have them
Result: Wasted money, wasted resources, broken trust, and a fragmented campus experience.
ShareNet transforms every campus into a self-sustaining circular economy. It combines a three-mode marketplace, a verified lost & found system, a community wanted board, and ML-powered recommendations — all scoped by college domain and backed by a behavioral trust engine.
Unlike generic platforms, ShareNet enforces trust at the infrastructure level: OTP-verified campus emails, domain-scoped item visibility, behavioral trust scores, and structured transaction lifecycles with dispute resolution.
ShareNet is not a single shared marketplace. It is a multi-tenant platform where every college operates as an independent, isolated ecosystem — all from a single deployment.
┌─────────────────────────────────────────────────────────────────┐
│ ShareNet (Single Deployment) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ IIIT │ │ IIT │ │ NIT │ ...100+ │
│ │ Lucknow │ │ Bombay │ │ Trichy │ colleges │
│ │ │ │ │ │ │ │
│ │ Items │ │ Items │ │ Items │ │
│ │ Users │ │ Users │ │ Users │ │
│ │ Lost&Found │ │ Lost&Found │ │ Lost&Found │ │
│ │ Wanted │ │ Wanted │ │ Wanted │ │
│ │ Trust Scores│ │ Trust Scores│ │ Trust Scores│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ↕ Zero data leakage between campuses ↕ │
└─────────────────────────────────────────────────────────────────┘
How it works:
| Aspect | Implementation |
|---|---|
| Identity Scoping | User's collegeDomain is extracted from their verified email at registration (e.g., iiitl.ac.in, iitb.ac.in) |
| Data Isolation | All item queries, recommendations, and feeds are filtered by collegeDomain — a student at IIIT Lucknow never sees items listed at IIT Bombay |
| Automatic Onboarding | New colleges are onboarded the moment a student signs up with a valid .edu / .ac.in / .edu.in domain — no manual setup required |
| Independent Ecosystems | Each campus has its own marketplace, lost & found board, wanted board, trust scores, and transaction history |
| Scalability | Adding a new campus costs zero infrastructure — the platform scales horizontally by college domain without any code or configuration changes |
Why this matters: A student at IIIT Lucknow sees only items, lost posts, and wanted requests from IIIT Lucknow. This keeps the experience hyperlocal, relevant, and trustworthy — exactly how a campus community should work. And yet, the entire system runs on a single deployment, making it operationally simple and cost-effective to scale to hundreds of colleges.
100+ Indian college domains supported out of the box — IIITs, IITs, NITs, and more. New domains are auto-detected or can be added via GitHub Issues.
| Capability | What It Does | Why It Matters |
|---|---|---|
| ML-Powered Recommendations | Scores items using user behavior, category affinity, recency, and trust signals | Personalized discovery — users find what they need faster |
| Three-Mode Marketplace | Rent / Sell / Give in a single listing flow | Covers every sharing use case on campus |
| Instant Claim Queues | Fair, first-come queue system for free items | Eliminates race conditions and favoritism |
| Lost & Found + Verification | Multi-step claim flow with owner-set security questions | Prevents false claims; only verified owners recover items |
| Wanted Board + Offers | Students post needs; peers make competing offers | Demand-driven supply — solves the "I can't find it" problem |
| Real-Time Rich Chat | Text, images, GPS location, meetup proposals — per transaction | No need for external messaging; everything stays in context |
| Behavioral Trust Scores | 0–100 score updated from real transaction outcomes | Self-regulating community; trust is earned, not claimed |
| Full Transaction Lifecycle | Request → Agreement → Active → Return → Complete (with disputes) | Structured accountability from start to finish |
| OTP-Verified College Scoping | 6-digit OTP via Resend; items scoped to .edu / .ac.in domains |
Only real students; only your campus |
| Automated Reminders & Alerts | Cron-based daily checks for upcoming returns and overdue items | Reduces late returns; protects both parties |
ShareNet's recommendation system goes beyond simple filtering. It implements a multi-signal scoring model that learns from user behavior:
Score = CategoryAffinity(3) + TrustSignal(1) + ModeRelevance(1) + RecencyBoost(2)
| Signal | Weight | How It Works |
|---|---|---|
| Category Affinity | +3 | Analyzes user's past requests and listings to build a category preference vector |
| Owner Trust Signal | +1 | Prioritizes items from high-trust owners (score > 70) |
| Mode Relevance | +1 | Boosts rent/sell items (higher engagement intent) |
| Recency Boost | +2 | Surfaces items listed within the last 7 days |
Items are scored, ranked, and the top 6 are surfaced as "Picked for You" on the browse page — each with a visual "Recommended" badge. Recommended items are deduplicated from the main feed to prevent redundancy.
Why this matters: Users see relevant items immediately instead of scrolling through hundreds of listings. This drives engagement and faster transactions.
Every item listing supports one of three modes:
| Mode | Use Case | Example |
|---|---|---|
| Rent | Temporary use with return date | "Borrow my DSLR for the weekend — ₹200/day" |
| Sell | Permanent transfer | "Selling my Data Structures textbook — ₹150" |
| Give | Free distribution | "Giving away my old hoodie — free to claim" |
Instant Claim (for Give mode): Owners can enable a queue-based system where users join a claim queue instantly without owner approval. The system enforces maxClaimers limits — once the queue is full, the item shows "Fully Claimed." This eliminates manual review overhead for high-demand free items.
Counter-Offer System: Owners can respond to requests with modified terms. Full negotiation history is preserved, creating a transparent bargaining trail.
This isn't a simple "post and hope" system. ShareNet implements a structured verification pipeline:
Report → Claim Submitted → Verification Questions Sent → Answers Reviewed
→ Claim Verified → Chat Opens → Meetup Coordinated → Resolved
- Verification Questions: When posting a lost item, the owner sets custom security questions (e.g., "What sticker is on the back?"). Only the real owner would know the answers.
- Claim Review: The poster reviews answers before approving. False claims are rejected.
- Dedicated Chat: Once verified, a rich chat channel opens with image sharing, GPS location, and meetup proposals.
- Resolution Tracking: Posts are marked as resolved, providing campus-wide recovery statistics.
Why this matters: On most campuses, lost items are posted in WhatsApp groups with zero verification. Anyone can claim anything. ShareNet adds accountability.
A reverse-marketplace where demand creates supply:
- Student posts what they need (title, description, budget, urgency level)
- Other students browse wanted posts and make offers (with price, description, photos)
- The requester reviews competing offers and accepts the best one
- A private chat channel opens for coordination
Urgency Levels: Low → Medium → High → Urgent — visually color-coded so the community can prioritize.
Why this matters: Traditional marketplaces only work when supply is already listed. The wanted board captures latent demand and activates supply that wouldn't otherwise be listed.
ShareNet uses Socket.IO for a fully event-driven real-time layer:
| Feature | Implementation |
|---|---|
| Private Chat Rooms | Isolated rooms per transaction, claim, and offer |
| Typing Indicators | Real-time typing / stop-typing events with 1s debounce |
| Image Uploads | FormData → Backend → Cloudinary → URL returned via socket |
| GPS Location Sharing | Browser Geolocation API → coordinates sent → rendered as Google Maps link |
| Meetup Proposals | Structured proposals (date/time/location/notes) with Accept/Decline actions |
| Push Notifications | Server emits notification events for all lifecycle transitions |
All messages are persisted in MongoDB — users see full history when they reopen a chat.
Trust isn't a static rating — it's a dynamic, behavior-driven metric that reflects real transaction outcomes:
| Behavior | Impact |
|---|---|
| On-time return | +5 |
| Successful transaction completion | +3 |
| Dispute resolved in your favor | +5 |
| Late return (1–3 days) | -5 |
| Late return (3+ days) | -10 |
| Dispute raised against you | -15 |
- Every user starts at 50 / 100
- Trust scores are displayed on profiles, item cards, and within the ML recommendation engine (high-trust owners get priority)
- The system creates a self-regulating community — bad actors are deprioritized organically
Every transaction follows a structured, auditable state machine:
REQUESTED → ACCEPTED → AGREEMENT_PROPOSED → ACTIVE → RETURN_PENDING → COMPLETED
↘ DISPUTED
| Stage | What Happens |
|---|---|
| Agreement Proposal | Owner sets final price, duration, terms, start date |
| Dual Confirmation | Both parties must confirm before transaction goes active |
| Automated Reminders | Cron job sends reminders 3 days, 1 day, and day-of return date |
| Overdue Alerts | Automatic notifications if return date passes |
| Dispute Flow | Either party can raise a dispute with explanation |
Why this matters: Unstructured sharing (WhatsApp, word of mouth) has no accountability. ShareNet's lifecycle creates a paper trail that protects both parties.
Enter Email → Detect College Domain → Send 6-Digit OTP (Resend API) → Verify → Register
- Supports 100+ Indian college domains (IIITs, IITs, NITs, and more)
- Dynamically detects valid
.edu/.ac.in/.edu.inpatterns - Items are automatically scoped to the user's
collegeDomain— students only see items from their own campus - New colleges can be added via GitHub Issues
┌──────────────────────────────────────────────────────────────────┐
│ FRONTEND │
│ React 19 · Vite · Tailwind CSS · Zustand · React Router 7 │
│ Socket.IO Client · Axios · Lucide Icons · date-fns │
└───────────────────────┬──────────────────────────────────────────┘
│ REST API (Axios) + WebSocket (Socket.IO)
┌───────────────────────▼──────────────────────────────────────────┐
│ BACKEND │
│ Express.js · JWT + Refresh Token Auth · Multer (file uploads) │
│ Socket.IO Server · node-cron (reminders) · Resend (OTP email) │
│ ML Recommendation Engine · Trust Score Engine │
└───────────┬───────────────────────┬──────────────────────────────┘
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ MongoDB │ │ Cloudinary │
│ Atlas │ │ (Media CDN) │
└─────────────────┘ └─────────────────┘
ShareNet-Web/
├── ShareNet/ # Frontend (React + Vite)
│ ├── src/
│ │ ├── components/
│ │ │ ├── ui/ # Design system: Button, Card, Modal, Badge, Avatar, TrustScore, Loader
│ │ │ ├── layout/ # Navbar, Layout wrapper
│ │ │ ├── items/ # ItemCard, ItemFilters, ItemForm, ClaimQueue, CounterOfferModal
│ │ │ ├── transactions/ # TransactionCard, AgreementForm, NegotiationHistory
│ │ │ ├── chat/ # ChatBox (transaction-scoped real-time chat)
│ │ │ └── wanted/ # OfferChatBox, OfferCard
│ │ ├── pages/ # 18+ route-level page components
│ │ ├── stores/ # Zustand state management (auth, items, transactions, notifications, etc.)
│ │ ├── hooks/ # Custom hooks (useClaimChat, useOfferChat — Socket.IO integration)
│ │ └── lib/ # Axios instance (interceptors, refresh logic), Socket.IO client
│ └── public/ # Static assets, SPA redirect rules
│
└── professional-backend-structure/ # Backend (Express + MongoDB)
└── src/
├── controllers/ # 10 controller files — all business logic
├── models/ # 12 Mongoose schemas with indexes and virtuals
├── routes/ # 10 Express routers — RESTful API design
├── middlewares/ # JWT verification, Multer file upload
├── services/ # Reminder cron service (daily automated checks)
├── utils/ # ApiError, ApiResponse, Cloudinary upload, OTP email, college registry
├── socket.js # Socket.IO event handlers (chat, typing, notifications)
├── app.js # Express app with CORS, security middleware
└── index.js # Server entry point
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | React 19, Vite, React Router 7 | SPA with file-based-like routing |
| State Management | Zustand | Lightweight, scalable store architecture |
| Styling | Tailwind CSS, Lucide React | Utility-first CSS + consistent icon system |
| Real-Time | Socket.IO (Client + Server) | WebSocket-based chat, typing, notifications |
| Backend | Express.js, Node.js | RESTful API with middleware pipeline |
| Auth | JWT + Refresh Tokens, bcrypt | Stateless auth with automatic token rotation |
| Database | MongoDB Atlas + Mongoose | Document store with schema validation and indexes |
| Media | Cloudinary + Multer | CDN-backed image upload pipeline |
| Resend API | Transactional OTP emails | |
| Scheduling | node-cron | Daily reminder and overdue alert checks |
| Module | Key Endpoints | Auth |
|---|---|---|
| Users | register, login, logout, send-otp, verify-otp, current-user, update-account, avatar, profile/:userId |
Mixed |
| Items | CRUD, my-items, recommendations, availability toggle |
Protected |
| Requests | create, accept, reject, instant-claim, claim-queue, counter-offer, pickup-details |
Protected |
| Transactions | list, detail, propose-agreement, confirm-agreement, mark-returned, confirm-return, dispute |
Protected |
| Messages | GET / POST per transaction |
Protected |
| Lost & Found | CRUD, claims, post-claims, my-claims, received-claims, verify, reject, resolve |
Protected |
| Wanted Items | CRUD, detail, offers, accept-offer, reject-offer |
Protected |
| Claim Chat | messages, send-message, send-image, send-location, propose-meetup, respond-meetup |
Protected |
| Offer Chat | messages, send-message, send-image, send-location, propose-meetup, respond-meetup |
Protected |
| Notifications | list, unread-count, mark-read, mark-all-read |
Protected |
| Service | Platform | Configuration |
|---|---|---|
| Frontend | Render (Static Site) | Build: npm run build · Publish: dist · Rewrite: /* → /index.html |
| Backend | Render (Web Service) | Build: npm install · Start: npm start |
| Database | MongoDB Atlas | Free M0 cluster |
| Media CDN | Cloudinary | Free tier (25 GB storage, 25 GB bandwidth) |
| Dimension | ShareNet | Generic Marketplaces |
|---|---|---|
| Identity | OTP-verified college email; campus-scoped | Open registration; no verification |
| Discovery | ML-powered personalized recommendations | Basic keyword search |
| Modes | Rent + Sell + Give + Lost & Found + Wanted | Usually sell-only |
| Trust | Behavioral trust score from real transactions | Star ratings (easily gamed) |
| Communication | In-context rich chat with location, meetups, images | "Contact via WhatsApp" |
| Accountability | Structured lifecycle with agreements, reminders, disputes | No structure |
| Lost & Found | Built-in with verification questions | Non-existent |
| Demand Capture | Wanted board turns needs into offers | Users can only browse existing supply |
| Fair Distribution | Instant Claim queues for free items | First-come chaos |
| Tool | Version |
|---|---|
| Node.js | 18+ |
| MongoDB | Local or Atlas |
| Cloudinary | cloudinary.com (free) |
| Resend | resend.com (free) |
cd professional-backend-structure
npm install
cp .env.example .env # Fill in MongoDB URI, JWT secrets, Cloudinary, Resend keys
mkdir -p public/temp
npm run dev # Runs on http://localhost:8000cd ShareNet
npm install
cp .env.example .env # Set VITE_API_URL=http://localhost:8000/api/v1
npm run dev # Runs on http://localhost:5173ShareNet is open source. We welcome contributions from the community.
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit changes (
git commit -m 'Add your feature') - Push to branch (
git push origin feature/your-feature) - Open a Pull Request
Have a college that's not supported? Open an issue and we'll add the domain.
Built for students. Driven by trust. Scaled for every campus.
Share more. Spend less. Build community.