| π Guide | π― Purpose | β±οΈ Time |
|---|---|---|
| β‘ QUICK_START.md | TL;DR - Setup trong < 5 phΓΊt | 5 min |
| π SETUP_GUIDE.md | HΖ°α»ng dαΊ«n chi tiαΊΏt tα»«ng bΖ°α»c | 15 min |
| β SETUP_CHECKLIST.md | Checklist ΔαΊ£m bαΊ£o khΓ΄ng sΓ³t bΖ°α»c | 10 min |
| π§ Backend README | API documentation & setup | 10 min |
| π¨ Frontend README | UI components & development | 10 min |
This is a monorepo containing both frontend and backend applications:
task-management/
βββ π frontend/ # React + TypeScript frontend
βββ π backend/ # Node.js + Express API
βββ π docs/ # Documentation files
βββ π³ docker-compose.yml # Multi-service container setup
βββ π package.json # Workspace configuration
βββ π README.md # This file
- Task Management: Create, edit, delete, and organize tasks
- User Authentication: JWT-based secure authentication
- Real-time Updates: Live task updates across sessions
- Priority Management: High, Medium, Low priority levels
- Status Tracking: Pending, In Progress, Completed states
- Due Date Management: Calendar integration with notifications
- JWT Authentication: Secure token-based authentication
- Rate Limiting: API protection against abuse
- Input Validation: Comprehensive data validation
- SQL Injection Protection: Parameterized queries
- CORS Configuration: Secure cross-origin requests
- Caching: Redis caching for improved performance
- Search & Filter: Advanced filtering and search capabilities
- Bulk Operations: Multi-task operations
- Analytics: Task completion metrics and insights
- File Uploads: Task attachment support
- Email Notifications: Automated task reminders
- API Versioning: Future-proof API design
π For detailed step-by-step instructions, see SETUP_GUIDE.md
# Auto-setup environment files
setup-env.bat # Windows
./setup-env.sh # Linux/macOS# Windows
check-requirements.bat
# Linux/macOS
chmod +x check-requirements.sh
./check-requirements.sh# Windows
quick-start.bat
# Linux/macOS
chmod +x quick-start.sh
./quick-start.sh- Node.js 18.0.0 or higher (Download here)
- PostgreSQL 15 or higher (for local development)
- Docker (optional, for containerized setup)
-
Install Prerequisites:
- Install Node.js (required for development)
- Install Docker Desktop
-
Clone the repository
git clone https://github.com/trung157/task-management.git cd task-management -
Environment Setup
# Windows copy "backend\.env.example" "backend\.env" # Linux/macOS cp backend/.env.example backend/.env # Edit backend/.env with your configuration
-
Start with Docker
docker-compose up -d
-
Access the Application
- Frontend: http://localhost:8080
- Backend API: http://localhost:5000
- API Documentation: http://localhost:5000/docs
-
Install dependencies
npm install
-
Setup Database
# Start PostgreSQL and Redis # Create database: taskflow_db
-
Configure Environment
cd backend cp .env.example .env # Edit .env file with your database credentials
-
Run Database Migrations
npm run db:migrate
-
Start Development Servers
# Start both frontend and backend npm run dev # Or start individually npm run dev:backend # Backend on port 3000 npm run dev:frontend # Frontend on port 5173
- React 18 - Modern React with hooks
- TypeScript - Type-safe development
- Vite - Fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework
- React Query - Server state management
- React Router - Client-side routing
- Framer Motion - Animation library
- Node.js - JavaScript runtime
- Express.js - Web application framework
- TypeScript - Type-safe server development
- PostgreSQL - Primary database
- Redis - Caching and session storage
- JWT - Authentication tokens
- Winston - Logging framework
- Docker - Containerization
- Jest - Testing framework
- ESLint - Code linting
- Prettier - Code formatting
- GitHub Actions - CI/CD pipeline
# Run all tests
npm run test
# Backend tests
npm run test:backend
# Frontend tests
npm run test:frontend
# Integration tests
npm run test:integrationnpm run builddocker-compose -f docker-compose.prod.yml up -d- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- TaskFlow Team - Initial work
- React team for the amazing framework
- Express.js community for the robust backend framework
- PostgreSQL for the reliable database
- All open source contributors
Made with β€οΈ by TaskFlow Team
src/
βββ components/
β βββ TaskForm.tsx # Task creation/editing form
β βββ TaskList.tsx # Main task display with sections
β βββ TaskItem.tsx # Individual task card
β βββ TaskFilter.tsx # Search and filter controls
βββ types/
β βββ Task.ts # TypeScript type definitions
βββ styles/
βββ index.css # Global styles with design tokens
βββ App.css # Component-specific styles
- Design Tokens: Consistent spacing, colors, and typography
- Component Variants: Reusable component patterns
- Utility Classes: Tailwind CSS for rapid development
- Custom Properties: CSS variables for theming
- Node.js 18+
- npm or yarn
-
Clone the repository
git clone <repository-url> cd task-management
-
Install dependencies
npm install # or yarn install -
Start development server
npm run dev # or yarn dev -
Open in browser
http://localhost:5173
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLint
npm run type-check # Run TypeScript check- Fill in the task form in the main content area
- Set priority level (High, Medium, Low)
- Choose due date (optional)
- Click "Add Task" or press Enter
- Complete: Click the checkbox to mark as done
- Edit: Click the edit button on any task
- Delete: Click the delete button with confirmation
- Priority: Visual badges show priority levels
- Search: Type in the search box for real-time filtering
- Status: Filter by All, Pending, or Completed
- Priority: Filter by priority levels
- Clear: Use "Clear All" to reset filters
- Primary: Indigo to Purple gradient
- Secondary: Blue to Pink gradient
- Accent: Green for success, Red for urgent, Yellow for pending
- Neutrals: White/transparent overlays for glassmorphism
- Headings: Inter font family, semibold weights
- Body Text: System fonts for optimal readability
- UI Text: Consistent sizing scale (xs, sm, base, lg, xl, 2xl)
- Desktop: 4-column grid (1-3 split)
- Tablet: 2-column grid
- Mobile: Single column stack
- React 18+: Modern React with hooks and functional components
- TypeScript 5+: Full type safety and IntelliSense
- Tailwind CSS 3+: Utility-first CSS framework
- Vite 5+: Lightning-fast build tool
- PostCSS: CSS processing and optimization
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
- Code Splitting: Automatic route-based splitting
- Tree Shaking: Unused code elimination
- Image Optimization: WebP format support
- Lazy Loading: Components load on demand
- Database Integration: Persistent storage with API
- User Authentication: Multi-user support
- Task Categories: Organize tasks by category
- Drag & Drop: Reorder tasks and priorities
- Notifications: Browser notifications for due dates
- Offline Support: PWA with service workers
- Export/Import: CSV, JSON export capabilities
- Team Collaboration: Share tasks with others
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and linting
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
Built with β€οΈ using modern web technologies
Β© 2025 TaskFlow. All rights reserved.
You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])