Skip to content

chiefpansancolt/todo-list

Todo List Desktop App

Todo List App Logo

πŸš€ A modern, elegant desktop todo application

Built with Electron, React 19, TypeScript, and Tailwind CSS

TypeScript React Electron Tailwind CSS


πŸ“Έ Screenshot

Todo List App Screenshot

Clean, modern interface with dark mode support


✨ Features

🎯 Task Management

  • Create, Edit & Delete - Full CRUD operations with intuitive UI
  • Task Completion - Mark tasks as done with smooth animations
  • Bulk Operations - Delete multiple tasks at once
  • Smart Sorting - Auto-sort by priority, due date, and overdue status

🏷️ Organization

  • Custom Categories - Color-coded categories with visual indicators
  • Priority Levels - High, Medium, Low priority with visual cues
  • Due Dates - Calendar picker with overdue notifications
  • Extra Details - Rich text details with popover display

🎨 User Experience

  • Drag & Drop - Reorder active tasks effortlessly
  • Dark Mode - System-aware theme switching
  • Keyboard Shortcuts - Full productivity shortcuts support
  • Animations - Smooth transitions and micro-interactions
  • Responsive Design - Adaptive layout for different window sizes

πŸ’Ύ Data Management

  • Persistent Storage - Local file-based storage
  • Export Options - JSON (full backup) and CSV (analysis)
  • Import Support - Restore from previous exports
  • Data Validation - Robust error handling and data integrity

🌍 Internationalization

  • Multi-language Support - 10 languages included
  • Dynamic Language Switching - Change language without restart
  • Localized Date Formats - Region-appropriate date displays

πŸ› οΈ Tech Stack

Frontend

  • React 19 - Latest React with concurrent features
  • TypeScript - Full type safety and IntelliSense
  • Tailwind CSS v4 - Utility-first styling with custom design system
  • Radix UI - Accessible component primitives
  • React Icons - Comprehensive icon library

Desktop

  • Electron 36 - Cross-platform desktop framework
  • electron-vite - Fast Vite-powered build system
  • electron-builder - Multi-platform packaging

Development

  • ESLint - Code quality and consistency
  • Prettier - Code formatting
  • TypeScript strict mode - Enhanced type checking

πŸš€ Quick Start

Prerequisites

  • Node.js v18 or higher
  • npm, yarn, or pnpm

Installation

# Clone the repository
git clone https://github.com/chiefpansancolt/todo-list-app.git
cd todo-list-app

# Install dependencies
npm install

Development

# Start development server with hot reload
npm run dev

# The app will open automatically with:
# - Hot reload for renderer process
# - Automatic restart for main process
# - DevTools enabled

Building for Production

# Build for current platform
npm run build:unpack

# Platform-specific builds
npm run build:win     # Windows (NSIS installer)
npm run build:mac     # macOS (DMG)
npm run build:linux   # Linux (AppImage, Snap, Deb)

πŸ“ Project Structure

β”œβ”€β”€ app/                    # Renderer Process (React App)
β”‚   β”œβ”€β”€ components/         # React Components
β”‚   β”‚   β”œβ”€β”€ ui/            # Reusable UI Components (shadcn/ui)
β”‚   β”‚   β”œβ”€β”€ TodoApp.tsx    # Main Application
β”‚   β”‚   β”œβ”€β”€ TaskItem.tsx   # Task Component
β”‚   β”‚   └── TaskModal.tsx  # Task Form Modal
β”‚   β”œβ”€β”€ hooks/             # Custom React Hooks
β”‚   β”‚   └── useTodoStore.ts # State Management
β”‚   β”œβ”€β”€ styles/            # Styling
β”‚   β”‚   β”œβ”€β”€ globals.css    # Global Styles & Variables
β”‚   β”‚   └── todo.css       # Component-specific Styles
β”‚   └── types/             # TypeScript Definitions
β”‚       β”œβ”€β”€ todo.d.ts      # Core Data Types
β”‚       └── props.d.ts     # Component Props
β”œβ”€β”€ lib/                   # Electron Processes
β”‚   β”œβ”€β”€ main/              # Main Process
β”‚   β”‚   β”œβ”€β”€ main.ts        # App Entry Point
β”‚   β”‚   β”œβ”€β”€ app.ts         # Window & Menu Management
β”‚   β”‚   └── todoHandlers.ts # IPC Data Handlers
β”‚   └── preload/           # Preload Scripts
β”‚       β”œβ”€β”€ preload.ts     # Context Bridge Setup
β”‚       └── api.ts         # IPC API Wrapper
β”œβ”€β”€ locales/               # Internationalization
β”‚   β”œβ”€β”€ en/                # English Translations
β”‚   └── [lang]/            # Other Languages
β”œβ”€β”€ resources/             # App Resources
β”‚   └── build/             # Build Assets
└── electron.vite.config.ts # Build Configuration

⌨️ Keyboard Shortcuts

Shortcut Action
Ctrl/Cmd + N New Task
Ctrl/Cmd + T Manage Categories
Ctrl/Cmd + D Toggle Dark Mode
Ctrl/Cmd + Shift + D Toggle Delete Mode
Ctrl/Cmd + I Import Data
Ctrl/Cmd + Shift + E Export as JSON
Escape Cancel/Close Modal

πŸ—οΈ Architecture

State Management

Uses a custom hook pattern with useTodoStore:

  • Local state with React hooks
  • Persistent storage via IPC
  • Optimistic updates with error handling

IPC Communication

Secure communication between processes:

  • contextBridge for security
  • Type-safe IPC channels
  • Async/await pattern for data operations

Data Flow

React Components β†’ useTodoStore β†’ IPC β†’ Main Process β†’ File System

File Storage

~/Library/Application Support/Todo List/  (macOS)
%APPDATA%/Todo List/                      (Windows)
~/.config/Todo List/                      (Linux)
β”œβ”€β”€ tasks.json      # Task data
β”œβ”€β”€ categories.json # Category definitions
└── language.json   # User preferences

🎨 Customization

Adding New Languages

  1. Create language file in locales/[lang]/index.ts
  2. Add language to locales/index.ts
  3. Update menu in lib/main/app.ts

Custom Themes

Modify CSS variables in app/styles/globals.css:

:root {
  --primary: oklch(0.623 0.214 259.815);
  --background: oklch(1 0 0);
  /* ... other variables */
}

Component Development

Follow the established patterns:

  • Use TypeScript for all components
  • Implement proper accessibility
  • Include proper error boundaries
  • Add loading states where appropriate

πŸ“¦ Packaging & Distribution

Build Outputs

  • Windows: .exe installer (NSIS)
  • macOS: .dmg disk image
  • Linux: .AppImage and .deb packages

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit changes: git commit -m 'Add amazing feature'
  4. Push to branch: git push origin feature/amazing-feature
  5. Open a Pull Request

Development Guidelines

  • Follow TypeScript strict mode
  • Use conventional commit messages
  • Add tests for new features
  • Update documentation

πŸ› Troubleshooting

Common Issues

Data not saving:

  • Check app permissions for file system access
  • Verify user data directory is writable

πŸ“ˆ Changelog

For complete changelog, see CHANGELOG.md


πŸ’– Support the Project

If you find this project helpful, consider supporting its development:

GitHub Sponsors Ko-fi Patreon

Your support helps:

  • πŸš€ New Features - Continued development and improvements
  • πŸ› Bug Fixes - Faster issue resolution and testing
  • πŸ“š Documentation - Better guides and tutorials
  • 🌍 Community - Maintaining Discord server and support

πŸ“„ License

MIT License - see LICENSE for details.


πŸ™ Acknowledgments


Built with ❀️ by chiefpansancolt

πŸ’¬ Discord β€’ 🌟 GitHub