SkillSwap is a peer-to-peer time-banking network where members barter their skills 1:1. Time is the currency: when you teach someone for an hour, you earn 1 credit, which you can then spend to learn from another member for an hour. Money never changes hands, and every skill is valued equally.
┌────────────────────────────────────────────────────────┐
│ SKILLSWAP │
├────────────────────────────────────────────────────────┤
│ │
│ Trade your hours, not your money. │
│ │
│ [ Start swapping ] [ How it works ] │
│ │
├────────────────────────────────────────────────────────┤
│ │
│ Teach: [ Python ] ↔ Learn: [ Guitar ] │
│ 1 credit transfers after both confirm completion │
│ │
├────────────────────────────────────────────────────────┤
│ [Explore Marketplace] [Community Wishlist] [Ledger]│
└────────────────────────────────────────────────────────┘
- Interactive Hero & Swap Simulator: Dynamic skill trade visualizer carousel and drop-down calculator simulator on the landing page for quick trade exploration.
- Two-Sided Booking Flow:
- Learners can browse active listings on the explore page and request sessions.
- Teachers can browse the Community Learning Board ("wants") and directly Offer to Teach using their existing active listings.
- Credit-Time Ledger: Real-time ledger showing running balance history of credits earned (taught) and spent (learned).
- Two-Sided Confirmation Security: Sessions only complete and transfer credits when both members confirm completion, ensuring security and fair exchange.
- Reputation System: Peer review scoring and written feedback visible on member profiles after completed sessions.
- Secure Authentication: Integrated JWT/cookie session handling via Better Auth with support for Google SSO and email/password accounts.
- Role & Path Protection: Secure React
AuthGuardclient protection coupled with backend route authorization policies ensuring users can only mutate resources they own.
- Framework: Next.js 16 (App Router)
- UI & Logic: React 19, TypeScript 5
- Icons: Gravity UI Icons
- Visuals & Charts: Recharts (for dashboard data display)
- Styling: TailwindCSS 4 & Vanilla CSS
- Framework: Express 5 (Node.js)
- Database: MongoDB (via Mongoose ODM)
- Authentication: Better Auth (with MongoDB Adapter)
- Validation: Zod schema validation
better-auth: Auth client integration@gravity-ui/icons: Modern flat line iconsrecharts: Interactive SVG chartstailwindcss&@tailwindcss/postcss: Utility-first CSS pipeline
mongoose: MongoDB Object Modelingbetter-auth&@better-auth/mongo-adapter: Database-backed sessionszod: Server-side schema runtime checkscors&express: API middleware and routingtsx: Development daemon running Typescript files directly
Follow this guide to run both the API server and frontend locally.
- Node.js (v18 or higher)
- MongoDB running locally or on Atlas
- Navigate to the
skillswap-serverdirectory:cd ../skillswap-server - Install dependencies:
npm install
- Setup environment variables by copying
.env.exampleto.env:PORT=4000 MONGODB_URI=mongodb://localhost:27017/skillswap BETTER_AUTH_SECRET=your_super_secret_better_auth_key BETTER_AUTH_URL=http://localhost:4000 CLIENT_ORIGINS=http://localhost:3000 GOOGLE_CLIENT_ID=your_google_oauth_client_id GOOGLE_CLIENT_SECRET=your_google_oauth_client_secret
- Start the server in development mode:
The backend server will run at
npm run dev
http://localhost:4000. You can test connection withGET http://localhost:4000/api/health.
- Navigate to the
skillswapclient directory:cd ../skillswap - Install dependencies:
npm install
- Copy
.env.exampleto.env.local:cp .env.example .env.local
- Start the development server:
npm run dev
- Open your browser and navigate to
http://localhost:3000.
Before pushing any changes, you can validate the codebases using the following scripts.
# Inside the skillswap client directory
npm run lint
npm run build# Inside the skillswap-server directory
npm run typecheck
npm run build