Let's Code is a high-performance, full-stack DSA (Data Structures and Algorithms) preparation platform. It is designed for developers to solve algorithmic challenges, follow structured learning paths, and engage in meaningful technical discussions with peers.
Experience the platform here: View Demo Here
- React.js (Vite) – High-performance component-based UI.
- Tailwind CSS – Modern utility-first styling.
- React Context API – Centralized state management for Authentication.
- Axios – Secure API communication with interceptors.
- React Toastify – Real-time user feedback and notifications.
- Node.js & Express.js – Scalable and fast server-side architecture.
- MongoDB & Mongoose – Flexible NoSQL data modeling and storage.
- Judge0 - Online code execution engine for support with 20+ Languages support.
- Passport.js – Secure Google OAuth 2.0 integration and Github Login.
- JWT (JSON Web Tokens) – Cookie-based, stateless session management.
- Multer and Cloudinary - For file upload and providing links to the files
- Vercel – Frontend hosting with advanced API rewrites/proxies.
- Render – Reliable backend service deployment.
- Structured Learning Paths: Curriculum-based progress tracking for specific DSA topics.
- Test Mode Enablement: To promote distraction free learning enviroment while practicing problems.
- Community Discussions: Interactive discussion system and comments for every problem to share insights and solutions.
- HandPicked Questions - Questions are handpicked and given with details like acceptance rate, difficulty meter etc
frontend
├── .gitignore
├── eslint.config.js
├── index.html
├── package-lock.json
├── package.json
├── public
│ └── assets
├── README.md
├── .env
├── .env.example
├── src
│ ├── App.css
│ ├── App.jsx
│ ├── components
│ │ ├── Button.jsx
│ │ ├── Card.jsx
│ │ ├── CodeEditor.jsx
│ │ ├── CompilerOutput.jsx
│ │ ├── CountdownTimer.jsx
│ │ ├── Discussion.jsx
│ │ ├── Loader.jsx
│ │ ├── Modal.jsx
│ │ ├── Navbar.jsx
│ │ ├── ProtectedRoute.jsx
│ │ └── Sidebar.jsx
│ ├── constants
│ │ └── boilerplates.js
│ ├── context
│ │ ├── AuthContext.jsx
│ │ ├── compilerContext.jsx
│ │ └── themecontext.jsx
│ ├── hooks
│ │ ├── useCompiler.js
│ │ ├── useFetchProblems.js
│ │ └── useMobile.js
│ ├── main.jsx
│ ├── pages
│ │ ├── AboutPage.jsx
│ │ ├── AddQuestionPage.jsx
│ │ ├── CompleteProfile.jsx
│ │ ├── Dashboard.jsx
│ │ ├── ForgotPassword.jsx
│ │ ├── Home.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ ├── Privacy.jsx
│ │ ├── ProblemDetail.jsx
│ │ ├── ProblemList.jsx
│ │ ├── Register.jsx
│ │ ├── SubmissionDetails.jsx
│ │ ├── SubmissionsPage.jsx
│ │ ├── Terms.jsx
│ │ ├── UserProfile.jsx
│ │ └── VerifyEmail.jsx
│ └── utils
│ ├── faceMask.js
│ ├── formatDate.js
│ ├── languageMap.js
│ └── validation.js
├── tailwind.config.js
├── vercel.json
└── vite.config.js
backend
├── .gitignore
├── .env
├── .env.example
├── controllers
│ ├── comment.controller.js
│ ├── discussions.controllers.js
│ ├── notifications.controller.js
│ ├── paths.controllers.js
│ ├── questions.contollers.js
│ └── user.controllers.js
├── middleware
│ ├── adminProtected.middleware.js
│ ├── auth.middleware.js
│ ├── multer.middleware.js
│ └── userProtected.middleware.js
├── models
│ ├── comments.models.js
│ ├── discussions.models.js
│ ├── notifications.models.js
│ ├── paths.models.js
│ ├── questions.models.js
│ ├── submissions.models.js
│ └── user.models.js
├── package-lock.json
├── package.json
├── routes
│ ├── comments.routes.js
│ ├── discussion.routes.js
│ ├── notifications.routes.js
│ ├── paths.routes.js
│ ├── questions.routes.js
│ └── user.routes.js
├── server.js
├── temp
│ └── profile_urls
├── utils
│ ├── asyncHandler.js
│ ├── cloudinary.js
│ ├── dbConnect.js
│ ├── EmailServices
│ │ ├── otpemailpasswordforgot.js
│ │ ├── sendEmail.js
│ │ └── sendVerifyEmail.js
│ ├── errorHandler.js
│ ├── expressError.js
│ ├── geminiHelp.js
│ ├── getLeetcodeData.js
│ ├── isValidObjectId.js
│ └── passport.js
└── validations
├── addCommentValidation.js
├── commentReplyValidation.js
├── discussionPost.js
├── forgotPassword.js
├── passwordresetValidation.js
├── profileEditValidation.js
├── profileValidation.js
└── registrationValidation.js
git clone https://github.com/your-userName/Lets-Code.git
cd Lets-Codecd backend
npm install
cp .env.example .env
npm run devcd frontend
npm install
cp .env.example .env
npm run devThis repository includes a docker-compose.yml in the root-directory that builds both frontend and backend services.
- Docker installed locally and running
- Docker Compose
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.envFrom the project root:
- Normal Mode
docker compose up --build- Detached Mode - Background
docker compose up -d --build- Frontend:
http://localhost:5173 - Backend:
http://localhost:3000
docker compose downAny contributions you make are greatly appreciated.
Open an issue to describe bugs or glitches.
Suggest new features by opening an issue with the enhancement label.
Fork the Project.
git checkout -b feature/AmazingFeature
git commit -m 'Add some AmazingFeature'
git push origin feature/AmazingFeature
Open a PR with a valid feature name and comments
The project is licensed under the terms included in the LICENSE file
https://lets-code.pranava-pai.live
https://github.com/Pranava-Pai-N/Lets-Code
Developed with ❤ by Pranava Pai N