{"id":31699426,"url":"https://github.com/sumitmadaan16/tasknest","last_synced_at":"2026-04-10T02:53:58.384Z","repository":{"id":305468310,"uuid":"1022960467","full_name":"sumitmadaan16/TaskNest","owner":"sumitmadaan16","description":"A modern task management application built with a full-stack architecture.","archived":false,"fork":false,"pushed_at":"2025-07-20T08:30:30.000Z","size":3404,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-29T21:53:09.674Z","etag":null,"topics":["backend","java","postgresql","reactjs","rest-api","restful-api","spring-boot","spring-data","spring-data-jpa","spring-mvc"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sumitmadaan16.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-20T08:12:47.000Z","updated_at":"2025-09-29T20:02:59.000Z","dependencies_parsed_at":"2025-07-20T10:16:31.509Z","dependency_job_id":"26ab2d8a-cbaa-4eed-9532-9eac85c2e4c8","html_url":"https://github.com/sumitmadaan16/TaskNest","commit_stats":null,"previous_names":["sumitmadaan25/tasknest","sumitmadaan16/tasknest"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sumitmadaan16/TaskNest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumitmadaan16%2FTaskNest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumitmadaan16%2FTaskNest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumitmadaan16%2FTaskNest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumitmadaan16%2FTaskNest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sumitmadaan16","download_url":"https://codeload.github.com/sumitmadaan16/TaskNest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumitmadaan16%2FTaskNest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000703,"owners_count":26082806,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","java","postgresql","reactjs","rest-api","restful-api","spring-boot","spring-data","spring-data-jpa","spring-mvc"],"created_at":"2025-10-08T19:43:51.805Z","updated_at":"2025-10-08T19:43:54.261Z","avatar_url":"https://github.com/sumitmadaan16.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TaskNest\n\nA full-stack task management application built with React and Spring Boot, featuring user authentication, personalized task lists, and real-time synchronization.\n\n## Features\n\n- **User Authentication**: Secure JWT-based authentication system\n- **Personal Task Lists**: Each user has their own isolated task list\n- **Task Management**: Create, edit, delete, and mark tasks as complete\n- **Favorites**: Mark important tasks as favorites for priority sorting\n- **Custom List Titles**: Each user can personalize their list title\n- **Search Functionality**: Quickly find tasks with real-time search\n- **Responsive Design**: Works seamlessly on desktop and mobile devices\n- **Dark Theme**: Modern, eye-friendly dark interface\n\n## Tech Stack\n\n### Frontend\n- **React** (18.x) - UI framework\n- **Axios** - HTTP client for API requests\n- **React Icons** - Icon library\n- **CSS3** - Custom styling with animations\n\n### Backend\n- **Spring Boot** (3.x) - Application framework\n- **Spring Security** - Authentication and authorization\n- **JWT** (JSON Web Tokens) - Stateless authentication\n- **JPA/Hibernate** - Database ORM\n- **MySQL** - Relational database\n- **Lombok** - Boilerplate code reduction\n\n## Prerequisites\n\n- **Node.js** (v16 or higher)\n- **npm** or **yarn**\n- **Java** (JDK 17 or higher)\n- **Maven** (3.6 or higher)\n- **MySQL** (8.0 or higher)\n\n## Installation\n\n### Database Setup\n\n1. Create a MySQL database:\n```sql\nCREATE DATABASE tasknest;\n```\n\n2. Update database credentials in `src/main/resources/application.properties`:\n```properties\nspring.datasource.url=jdbc:mysql://localhost:3306/tasknest\nspring.datasource.username=your_username\nspring.datasource.password=your_password\nspring.jpa.hibernate.ddl-auto=update\n```\n\n### Backend Setup\n\n1. Clone the repository:\n```bash\ngit clone \u003crepository-url\u003e\ncd TaskNest\n```\n\n2. Build and run the Spring Boot application:\n```bash\nmvn clean install\nmvn spring-boot:run\n```\n\nThe backend will start on `http://localhost:8080`\n\n### Frontend Setup\n\n1. Navigate to the frontend directory:\n```bash\ncd frontend\n```\n\n2. Install dependencies:\n```bash\nnpm install\n```\n\n3. Start the development server:\n```bash\nnpm run dev\n```\n\nThe frontend will start on `http://localhost:5173`\n\n## Project Structure\n\n```\nTaskNest/\n├── src/\n│   ├── main/\n│   │   ├── java/com/project/TaskNest/\n│   │   │   ├── config/\n│   │   │   │   └── SecurityConfig.java\n│   │   │   ├── controller/\n│   │   │   │   ├── AuthController.java\n│   │   │   │   ├── ItemController.java\n│   │   │   │   └── UserController.java\n│   │   │   ├── dto/\n│   │   │   │   ├── AuthRequest.java\n│   │   │   │   ├── AuthResponse.java\n│   │   │   │   └── RegisterRequest.java\n│   │   │   ├── model/\n│   │   │   │   ├── Items.java\n│   │   │   │   └── User.java\n│   │   │   ├── repo/\n│   │   │   │   ├── ItemRepo.java\n│   │   │   │   └── UserRepo.java\n│   │   │   ├── security/\n│   │   │   │   ├── CustomUserDetailsService.java\n│   │   │   │   ├── JwtAuthenticationFilter.java\n│   │   │   │   └── JwtUtil.java\n│   │   │   └── TaskNestApplication.java\n│   │   └── resources/\n│   │       └── application.properties\n│   └── test/\n├── frontend/\n│   ├── src/\n│   │   ├── components/\n│   │   │   ├── ActiveCount.jsx\n│   │   │   ├── AddItem.jsx\n│   │   │   ├── Footer.jsx\n│   │   │   ├── Header.jsx\n│   │   │   ├── Item.jsx\n│   │   │   ├── ItemList.jsx\n│   │   │   ├── List.jsx\n│   │   │   ├── Login.jsx\n│   │   │   ├── Register.jsx\n│   │   │   └── SearchItem.jsx\n│   │   ├── App.jsx\n│   │   ├── App.css\n│   │   ├── index.css\n│   │   └── main.jsx\n│   ├── package.json\n│   └── vite.config.js\n├── pom.xml\n└── README.md\n```\n\n## API Endpoints\n\n### Authentication\n- `POST /api/auth/register` - Register new user\n- `POST /api/auth/login` - User login\n- `GET /api/auth/validate` - Validate JWT token\n\n### User\n- `GET /api/user/profile` - Get user profile\n- `PUT /api/user/list-title` - Update list title\n\n### Items\n- `GET /api/items` - Get all user items\n- `POST /api/items` - Create new item\n- `PUT /api/items/{id}` - Update item\n- `DELETE /api/items/{id}` - Delete item\n- `POST /api/items/reorder` - Get reordered items\n\n## Security Features\n\n- **JWT Authentication**: Stateless authentication using JSON Web Tokens\n- **Password Encryption**: BCrypt password hashing\n- **CORS Configuration**: Configured for frontend origin\n- **User Isolation**: Each user can only access their own data\n- **Token Validation**: Automatic token validation on protected routes\n\n## Database Schema\n\n### Users Table\n```sql\nCREATE TABLE users (\n    id BIGINT PRIMARY KEY AUTO_INCREMENT,\n    username VARCHAR(255) UNIQUE NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL,\n    password VARCHAR(255) NOT NULL,\n    role VARCHAR(50) NOT NULL DEFAULT 'USER',\n    enabled BOOLEAN NOT NULL DEFAULT TRUE,\n    list_title VARCHAR(255) DEFAULT 'list',\n    created_at TIMESTAMP,\n    updated_at TIMESTAMP\n);\n```\n\n### Items Table\n```sql\nCREATE TABLE items (\n    id BIGINT PRIMARY KEY AUTO_INCREMENT,\n    title VARCHAR(255) NOT NULL,\n    checked BOOLEAN DEFAULT FALSE,\n    favourite BOOLEAN DEFAULT FALSE,\n    user_id BIGINT NOT NULL,\n    FOREIGN KEY (user_id) REFERENCES users(id)\n);\n```\n\n## Usage\n\n1. **Register**: Create a new account with username, email, and password\n2. **Login**: Sign in with your credentials\n3. **Add Tasks**: Use the input field to add new tasks\n4. **Manage Tasks**: \n   - Click checkbox to mark as complete\n   - Click star icon to mark as favorite\n   - Click edit icon to modify task text\n   - Click trash icon to delete task\n5. **Search**: Use the search bar to filter tasks\n6. **Customize**: Click the edit icon next to the list title to personalize it\n7. **Logout**: Click the logout button to end your session\n\n## Configuration\n\n### JWT Configuration\nUpdate JWT settings in `application.properties`:\n```properties\njwt.secret=your-secret-key-here\njwt.expiration=86400000\n```\n\n### CORS Configuration\nUpdate allowed origins in `SecurityConfig.java`:\n```java\nconfiguration.setAllowedOrigins(Arrays.asList(\"http://localhost:5173\"));\n```\n\n## Development\n\n### Running Tests\n```bash\nmvn test\n```\n\n### Building for Production\n\nBackend:\n```bash\nmvn clean package\njava -jar target/TaskNest-0.0.1-SNAPSHOT.jar\n```\n\nFrontend:\n```bash\nnpm run build\n```\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Database Connection Error**\n   - Verify MySQL is running\n   - Check database credentials in application.properties\n   - Ensure database exists\n\n2. **CORS Error**\n   - Verify frontend URL in SecurityConfig.java matches your dev server\n   - Check that backend is running on port 8080\n\n3. **JWT Token Issues**\n   - Clear localStorage in browser\n   - Re-login to get new token\n   - Check token expiration settings\n\n4. **Items Not Showing**\n   - Verify user_id column exists in items table\n   - Check browser console for errors\n   - Verify authentication token is valid\n\n## Future Enhancements\n\n- Task categories/tags\n- Due dates and reminders\n- Task sharing and collaboration\n- File attachments\n- Dark/Light theme toggle\n- Export tasks to CSV/PDF\n- Mobile app (React Native)\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Contributors\n\n- Your Name - Initial work\n\n## Acknowledgments\n\n- React Icons for the icon library\n- Spring Boot community for excellent documentation\n- JWT.io for JWT implementation resources\n\n  \n\u003cimg width=\"783\" height=\"838\" alt=\"Screenshot 2025-10-02 051332\" src=\"https://github.com/user-attachments/assets/8ca863f2-c3d8-4ffb-ab7b-c2066554ae5f\" /\u003e\n\u003cimg width=\"604\" height=\"940\" alt=\"Screenshot 2025-10-02 051403\" src=\"https://github.com/user-attachments/assets/c9b089ab-3cba-423e-945a-1ee0679529e5\" /\u003e\n\u003cimg width=\"1908\" height=\"960\" alt=\"Screenshot 2025-10-02 051501\" src=\"https://github.com/user-attachments/assets/f7a976b1-c12a-4842-8ee3-226dc394b962\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumitmadaan16%2Ftasknest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsumitmadaan16%2Ftasknest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumitmadaan16%2Ftasknest/lists"}