JoinSkill is a full-stack collaborative learning portal. Users can register, set up a profile, discover mentors, chat, start video sessions, take skill certification tests, and get AI-powered mentor responses.
- Frontend (Netlify): https://join-skill.netlify.app
- Backend (Render): https://joinskill-main.onrender.com
⚠️ Render free tier sleeps after 15 min of inactivity. First request may take 30–60 seconds.
| Variable | Value |
|---|---|
PORT |
10000 |
JWT_SECRET |
any long random string |
CLIENT_ORIGIN |
https://join-skill.netlify.app |
NODE_ENV |
production |
| Variable | Value |
|---|---|
VITE_API_URL |
https://joinskill-main.onrender.com |
VITE_SOCKET_URL |
https://joinskill-main.onrender.com |
VITE_ANTHROPIC_API_KEY |
sk-ant-xxxxxxxx (your Anthropic key) |
npm install
npm run dev- Frontend: http://localhost:5173
- Backend: http://localhost:5000
Create a .env file in the root (copy from .env.example):
PORT=5000
JWT_SECRET=joinskill-local-secret
CLIENT_ORIGIN=http://localhost:5173,http://127.0.0.1:5173
VITE_API_URL=http://127.0.0.1:5000
VITE_SOCKET_URL=http://127.0.0.1:5000
VITE_ANTHROPIC_API_KEY=sk-ant-xxxxxxxxDemo login:
- Username:
demo - Password:
password123
- Push code to GitHub
- Go to render.com → New Web Service
- Connect your repo
- Set environment variables (see table above)
- Build command:
npm install - Start command:
node server/index.js - Add a Disk → mount path:
/opt/render/project/src/server(persists DB + uploads)
- Go to netlify.com → Import from Git
- Build command:
npm run build - Publish directory:
dist - Set environment variables (see table above)
- Deploy
| Layer | Tech |
|---|---|
| Frontend | React 18, Vite, Lucide Icons |
| Backend | Node.js, Express, Socket.IO |
| Auth | JWT + bcrypt |
| AI Chat | Anthropic Claude API (claude-sonnet-4) |
| Video | WebRTC + Socket.IO signaling |
| Database | JSON flat-file (server/data/db.json) |
| Hosting | Netlify (frontend) + Render (backend) |
- Register / Login with JWT authentication
- Profile setup with photo upload
- Skill & interest based user discovery
- AI Mentor Chat (powered by Claude API)
- AI Video Session (simulated with Claude API)
- Real-time messaging with Socket.IO
- WebRTC peer-to-peer video sessions
- Skill certification tests
- AI profile scoring & skill recommendations
"Failed to fetch" on login/register
→ Check VITE_API_URL in Netlify env vars points to https://joinskill-main.onrender.com
"Sorry, I'm having a technical issue" in AI chat
→ Check VITE_ANTHROPIC_API_KEY is set in Netlify env vars
Server cold start (30–60s delay) → Render free tier sleeps. Wait and retry.
CORS error in browser console
→ Check CLIENT_ORIGIN in Render env vars is set to https://join-skill.netlify.app