A web-based platform where users can collaboratively create, share, and review learning paths for various roles and experiences.
- πΊοΈ Create & Share Roadmaps: Build structured learning paths with steps and resources
- π·οΈ Community Tags: Tag roadmaps with custom tags (roles, skills, experience levels)
- π Browse Roadmaps: Explore community-created learning paths
- βοΈ Edit Roadmaps: Creators can update their roadmaps anytime
- π Advanced Filtering: Filter by resource type (Free/Paid), tags, and sort by trending or newest
- π Community Voting: Upvote/downvote roadmaps with spam protection
- π¬ Comments & Feedback: Engage with creators and learners through comments
- π€ Creator Profiles: View creator information with avatars on roadmaps
- β Mark Steps Complete: Track your progress through each roadmap
- π Visual Progress Bars: See completion percentage at a glance
- π― Completion Badge: Get congratulated when you finish a roadmap
- πΎ Persistent Tracking: Your progress is saved and syncs across devices
- π Google Sign-In: Quick and secure authentication via Google OAuth
- π Dark Mode: Beautiful dark theme by default with automatic system detection
- π± Mobile Responsive: Fully optimized mobile and desktop experience
- π¨ Modern UI: Eye-pleasing minimal design with Tailwind CSS v4
- π½ Collapsible Cards: Clean card-based interface with expandable resource sections
- β¨ Smooth Animations: Gradient backgrounds, micro-interactions, and smooth transitions
- π― Clean Learning Path: Card-based step layout optimized for all screen sizes
- React - UI framework
- Tailwind CSS - Utility-first styling
- React Router - Client-side routing
- Vite - Build tool and dev server
- Supabase JS Client - Authentication and database client
- Node.js - Runtime environment
- Express - Web framework
- Supabase - PostgreSQL database & authentication
- CORS - Cross-origin resource sharing
open-path/
βββ frontend/ # React frontend application
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Page components
β β βββ context/ # React context (Auth)
β β βββ services/ # API service layer
β β βββ utils/ # Utility functions
β βββ package.json
βββ backend/ # Express backend API
β βββ routes/ # API route handlers
β β βββ roadmaps.js # Roadmap CRUD operations
β β βββ votes.js # Voting system
β β βββ comments.js # Comments system
β β βββ tags.js # Tags system
β β βββ progress.js # Progress tracking
β βββ middleware/ # Auth middleware
β βββ utils/ # Supabase client
β βββ package.json
βββ docs/ # Documentation
βββ database-schema.md # Complete database schema
βββ API_DOCUMENTATION.md # All API endpoints
βββ UI_UX_REVAMP_v1.1.md # Design system & UI guidelines
- Node.js (v20.18.1 or higher)
- npm (v11.5.2 or higher)
- Supabase account (free tier works)
- Google Cloud Console project (for OAuth)
-
Create a new project at supabase.com
-
Go to SQL Editor and run the setup scripts:
- First:
docs/supabase-setup.sql(main database schema) - Then:
docs/progress-tracking-schema.sql(progress tracking feature)
- First:
-
Enable Google OAuth Provider:
- Go to Authentication > Providers
- Enable Google provider
- Add your Google OAuth credentials (Client ID & Secret)
- Set redirect URL:
http://localhost:5173(for development)
-
Get your Supabase credentials:
- Go to Settings > API
- Copy your Project URL and anon/public key
# Install all dependencies (root, backend, and frontend) with one command
npm run install:allQuick Setup (One Command!):
# Copy environment templates for both backend and frontend
npm run setup:envThis will create:
backend/.env.developmentfrontend/.env.development
Then edit both files with your Supabase credentials:
Required values:
SUPABASE_URL- Your Supabase project URLSUPABASE_ANON_KEY- Your Supabase anon/public key- Frontend variables must be prefixed with
VITE_
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable Google+ API
- Go to Credentials > Create Credentials > OAuth 2.0 Client ID
- Add authorized redirect URIs:
http://localhost:5173(development)- Your Supabase project's auth callback URL (from Supabase dashboard)
- Copy Client ID and Secret to Supabase Google provider settings
From the root directory, run both frontend and backend with one command:
npm run devThis will start:
- Backend API on
http://localhost:5000 - Frontend app on
http://localhost:5173
Both will run concurrently in the same terminal with colored output.
If you prefer to run them in separate terminals:
Terminal 1 - Backend:
npm run dev:backend
# or: cd backend && npm run devTerminal 2 - Frontend:
npm run dev:frontend
# or: cd frontend && npm run devDeploy both frontend and backend to Vercel with serverless functions:
Quick Deploy:
- Push your code to GitHub/GitLab/Bitbucket
- Import project to Vercel
- Set environment variables in Vercel dashboard (see VERCEL_DEPLOYMENT.md)
- Update Google OAuth and Supabase redirect URLs
- Deploy! β¨
π Complete Guide: See VERCEL_DEPLOYMENT.md
Why Vercel:
- β Single deployment for frontend + backend
- β 100K serverless invocations/day (vs Netlify's 125K/month)
- β Global edge network with low latency
- β Automatic HTTPS and Git integration
- β Free tier perfect for this app
- β Auto-configured via vercel.json
Frontend:
- Vercel, Cloudflare Pages, GitHub Pages
- Any static hosting service
Backend:
- Railway, Render, Heroku
- Any Node.js hosting service
Frontend:
cd frontend
npm run build
npm run previewBackend:
cd backend
npm startGET /api/roadmaps- Get all roadmaps (with filters)GET /api/roadmaps/:id- Get roadmap by IDPOST /api/roadmaps- Create roadmap (auth required)PUT /api/roadmaps/:id- Update roadmap (creator only)DELETE /api/roadmaps/:id- Delete roadmap (creator only)
GET /api/votes/roadmap/:roadmapId- Get user's vote (auth required)POST /api/votes- Cast/update vote (auth required)DELETE /api/votes/:roadmapId- Remove vote (auth required)
GET /api/comments/roadmap/:roadmapId- Get all comments for roadmapPOST /api/comments- Create comment (auth required)PUT /api/comments/:id- Update comment (author only)DELETE /api/comments/:id- Delete comment (author only)
GET /api/progress/roadmap/:roadmapId- Get user's progress (auth required)GET /api/progress/summary/:roadmapId- Get progress summary (auth required)POST /api/progress/toggle- Toggle step completion (auth required)
- API Documentation - Complete API reference with all endpoints
- Database Schema - Database structure and relationships
- UI/UX Design System - Design principles and component guide
- Deployment Guide - Deploy to Vercel (recommended)
roadmaps- Main roadmap data with votinglearning_steps- Ordered steps within roadmapsresources- Learning resources (Free/Paid, Video/Article/etc)tags- Custom tags for categorizationvotes- User votes on roadmaps (spam-protected)comments- User comments with moderationuser_progress- Track completion of steps
- β Browse all roadmaps
- β View roadmap details
- β Apply filters and sorting
- β Read comments
- β Cannot create roadmaps
- β Cannot vote
- β Cannot comment
- β All public user features
- β Create new roadmaps
- β Edit/delete own roadmaps
- β Upvote/downvote roadmaps (with spam protection)
- β Post comments
- β Edit/delete own comments
- β Track progress on roadmaps
- β View personal progress statistics
SUPABASE_URL=your_supabase_project_url
SUPABASE_ANON_KEY=your_supabase_anon_key
PORT=5000
NODE_ENV=development
FRONTEND_URL=http://localhost:5173VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_API_URL=http://localhost:5000-
CORS errors: Make sure
FRONTEND_URLin backend .env matches your frontend URL -
Authentication not working:
- Verify Google OAuth credentials in Supabase
- Check redirect URLs are correctly configured
- Clear browser cache and cookies
-
Database errors:
- Ensure all SQL scripts from
docs/supabase-setup.sqlwere executed - Check RLS policies are enabled
- Ensure all SQL scripts from
-
Cannot create roadmap:
- Make sure you're signed in
- Check browser console for errors
- Verify backend server is running
Contributions are welcome! Please feel free to submit issues and pull requests.
ISC
For issues and questions, please open an issue on the GitHub repository.