DailyForge is an open-source fullstack MERN productivity app that lets you design, manage, and visualize your weekly routines — with drag-and-drop scheduling, a smart task library, and overlap protection built right in.
Most productivity tools are either too bloated or too simple. DailyForge is a no-nonsense weekly planner that gives you total control over your schedule — built by students, for students and professionals alike.
What it does:
- Build a reusable task library with custom durations, colors, and categories
- Design weekly routines by dragging tasks into a visual time grid
- Save, update, and delete routines with one click
- Automatically detects and prevents scheduling conflicts for the same day
Why it matters:
Most people don't fail to plan — they fail to stick to a plan. DailyForge makes routines feel visual and deliberate, making habits easier to build and track.
Key highlights:
- ⚡ Drag-and-drop weekly planner powered by
@dnd-kit - 🔒 Secure JWT authentication with bcrypt password hashing
- 🗂️ Reusable routine templates to clone and reuse schedules
- 🚫 Conflict detection — no overlapping tasks on the same day
- 📱 Clean, responsive UI built with React 19 + Tailwind CSS v4
| Service | URL |
|---|---|
| 🖥️ Frontend | https://dailyforge-frontend-lhjq.onrender.com |
| ⚙️ Backend API | https://dailyforge-backend.onrender.com |
⚠️ Deployed on Render's free tier — first load may take 30–60 seconds to spin up.
- Signup / Login with JWT-based session management
- Protected routes — unauthenticated users are redirected to login
- Passwords hashed with bcrypt
- Create tasks with: title, duration, color, and category
- Edit and delete tasks from your personal task library
- Tasks persist across sessions
- Drag tasks from your library onto a 7-day weekly grid
- Time-slot-based placement with visual feedback
- Overlap detection prevents conflicting task placement on the same day
- View all saved routines at a glance
- Quick access to edit or delete any routine
- Summary stats for your weekly schedule
- Save any routine as a reusable template
- Re-apply templates to any week in seconds
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| Vite | Build tool & dev server |
| Tailwind CSS v4 | Utility-first styling |
@dnd-kit/core |
Drag-and-drop interactions |
| Axios | HTTP client for API calls |
| React Router DOM v7 | Client-side routing |
| Lucide React | Icon library |
| Context API | Global auth state management |
| Technology | Purpose |
|---|---|
| Node.js | Runtime environment |
| Express.js v5 | REST API framework |
| MongoDB Atlas | Cloud database |
| Mongoose v9 | ODM for MongoDB |
| JSON Web Token (JWT) | Stateless authentication |
| Bcrypt | Password hashing |
| dotenv | Environment variable management |
| Nodemon | Dev server with hot-reload |
DailyForge/
│
├── backend/
│ ├── config/ # DB connection config
│ ├── controllers/
│ │ ├── authController.js # Signup, login logic
│ │ ├── routineController.js
│ │ └── taskController.js
│ ├── middlewares/
│ │ └── authMiddleware.js # JWT verification
│ ├── routes/
│ │ ├── authRoutes.js
│ │ ├── routineRoutes.js
│ │ └── taskRoutes.js
│ ├── src/
│ │ ├── models/ # Mongoose schemas
│ │ │ ├── User.model.js
│ │ │ ├── Task.model.js
│ │ │ └── Routine.model.js
│ │ └── server.js # Express app entry point
│ ├── .env # ← You create this (see below)
│ └── package.json
│
└── frontend/
├── public/
├── src/
│ ├── api/
│ │ └── axiosConfig.js # Axios base URL config
│ ├── components/
│ │ ├── Dashboard/
│ │ ├── Routine/
│ │ ├── Task/
│ │ ├── Navbar.jsx
│ │ └── ProtectedRoutes.jsx
│ ├── context/
│ │ └── AuthContext.jsx
│ ├── hooks/
│ │ └── useTasks.js
│ ├── pages/
│ │ ├── Dashboard.jsx
│ │ ├── RoutineBuilder.jsx
│ │ ├── Tasks.jsx
│ │ ├── Login.jsx
│ │ └── Signup.jsx
│ ├── utils/
│ ├── App.jsx
│ └── main.jsx
├── index.html
├── vite.config.js
└── package.json
Prerequisites: Node.js v18+, npm v9+, a free MongoDB Atlas account
git clone https://github.com/aryandas2911/DailyForge.git
cd DailyForgecd backend
npm installCreate your .env file (see the Environment Variables section below):
# Inside the /backend directory
cp .env.example .env # or manually create .envThen fill in your values (see the next section for what each variable means).
Start the backend dev server:
npm run dev✅ Server should start at
http://localhost:5000
Open a new terminal, then:
cd frontend
npm install
⚠️ Local dev note: The frontend base URL is hardcoded infrontend/src/api/axios.jsto point at the deployed backend. To test against your local backend, temporarily changebaseURLin that file tohttp://localhost:5000/api/.
Start the frontend dev server:
npm run dev✅ App should open at
http://localhost:5173
Open http://localhost:5173, sign up for an account, and start building your routines.
Create this file manually. Never commit it to git.
PORT=5000
MONGO_URI=your_mongodb_atlas_connection_string
JWT_SECRET=your_super_secret_key_here| Variable | Required | Description |
|---|---|---|
PORT |
✅ | Port on which the Express server runs (default: 5000) |
MONGO_URI |
✅ | Full MongoDB Atlas connection string — get it from your Atlas cluster's "Connect" menu |
JWT_SECRET |
✅ | Secret key for signing JWTs — use any long, random string (e.g., openssl rand -hex 32) |
How to get MONGO_URI:
- Log into MongoDB Atlas
- Create a free M0 cluster (if you haven't)
- Click Connect → Connect your application → Copy the connection string
- Replace
<password>with your DB user's password
The frontend has no environment variables. The API base URL is hardcoded in frontend/src/api/axios.js:
// frontend/src/api/axios.js
const api = axios.create({
baseURL: "https://dailyforge-backend.onrender.com/api/",
});Running locally? Change baseURL to http://localhost:5000/api/ while developing, and revert before committing.
We love contributions! DailyForge is actively participating in GSSoC 2026 and welcomes contributors of all experience levels.
📄 Read the full guidelines: CONTRIBUTING.md
1. Pick an issue
- Browse open issues
- Look for
good first issueif you're new - Comment on the issue to get it assigned before starting work
2. Fork & branch
git clone https://github.com/<your-username>/DailyForge.git
cd DailyForge
git checkout -b <type>/<short-description>Branch naming convention:
| Type | Example |
|---|---|
| New feature | feature/add-dark-mode |
| Bug fix | fix/login-redirect-loop |
| Documentation | docs/update-readme |
| Refactor | refactor/task-hook-cleanup |
3. Make your changes
- Keep changes focused — one issue per PR
- Follow the existing code style
- Test your changes locally before pushing
4. Open a Pull Request
- Fill out the PR template completely
- Link the issue it resolves using
Closes #<issue-number> - Request a review from a maintainer
⚠️ PRs without a linked issue or description will not be reviewed.
We use labels to organize work. Here's what they mean:
| Label | Meaning |
|---|---|
good first issue |
Small, well-scoped tasks — perfect for first-time contributors |
bug |
Something is broken or behaving incorrectly |
feature |
New functionality to be added |
documentation |
Improvements to README, guides, or inline comments |
help wanted |
Maintainers need external input or hands |
testing |
Adding or improving test coverage |
Tips for new contributors:
- Start with
good first issue— they're designed to be approachable - Don't hesitate to ask questions in the issue comments
- One issue at a time — don't take on multiple issues until your first PR is merged
Have questions, ideas, or want to connect with other contributors?
| Channel | Link |
|---|---|
| aryandas2911@gmail.com | |
| 🐛 Issues | GitHub Issues |
Built with ❤️ for GSSoC 2026
If DailyForge helped you, consider giving it a ⭐ — it helps more contributors find the project!



