Skip to content

EthanMacDonald/ToDoText

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

README: Project: "Hybrid Task Manager"

Description: | A minimalist, powerful plain-text task management system blending the strengths of Todo.txt (simplicity and metadata-richness) and TaskPaper (hierarchical clarity). Designed to be human-friendly, intuitive, scriptable, and platform-independent.

Philosophy: | This system aims to:

- Simplify task management: Using intuitive plain-text formatting.
- Enhance clarity: Support structured, hierarchical tasks with clear visual indentations.
- Increase flexibility: Rich metadata tagging (priorities, due dates, progress, and contexts).
- Promote automation: Easy scripting and integration with other productivity tools.
- Ensure portability: Accessible from any text editor, device, and operating system.

Syntax: Tasks: Incomplete: "- [ ] Task description" Complete: "- [x] Task description" Example: | - [ ] Call Sarah about event planning - [x] Submit expense report

Projects:
  Description: "Lines ending with ':' denote project areas or categories."
  Example: |
    Work:

Subtasks:
  Description: "Indented tasks under parent tasks represent subtasks."
  Example: |
    - [ ] Organize workshop
        - [ ] Book venue
        - [x] Send initial invitations

Notes:
  Description: "Plain lines indented beneath tasks or projects serve as notes."
  Example: |
    - [ ] Plan holiday party
        Consider outdoor options in case of nice weather

Metadata Tags:
  Priority: "(priority:A|B|C...)"
  Due Date: "(due:YYYY-MM-DD)"
  Done Date: "(done:YYYY-MM-DD)"
  Follow-up Date: "(followup:YYYY-MM-DD)"
  On Hold Until: "(onhold:YYYY-MM-DD|text_condition)"
  Frequency: "(freq:daily|weekly:Mon,Wed|monthly:15|monthly:3rd Tue|yearly:06-24|custom:14d)"
  Last Done: "(lastdone:YYYY-MM-DD) (optional, for recurring tasks)"
  Example: |
    - [ ] Prepare quarterly report (priority:A due:2025-07-15)
    - [x] Submit expense report (done:2025-06-20 priority:B)
    - [ ] Follow up with client (priority:B followup:2025-07-10)
    - [ ] Review contract proposal (priority:A onhold:2025-07-20)
    - [ ] Wait for client approval (onhold:waiting for email from jalil)
    - [ ] Pay rent (freq:monthly:1 lastdone:2025-06-01)
    - [ ] Take medication (freq:daily lastdone:2025-06-24)
    - [ ] Team meeting (freq:weekly:Mon,Thu lastdone:2025-06-23)
    - [ ] Review goals (freq:custom:90d lastdone:2025-04-01)
    - [ ] Team lunch (freq:monthly:3rd Tue lastdone:2025-06-17)
    - [ ] Celebrate anniversary (freq:yearly:06-24 lastdone:2024-06-24)

  Multiple metadata tags can be included within a single set of parentheses, separated by spaces. Each tag should be in the format key:value.
  
  Follow-up System:
    The follow-up feature helps track tasks that require future attention after completion. This is perfect for tasks that are "done" but need a follow-up action later.
    
    How it works:
    - Add a `followup:YYYY-MM-DD` tag to any task to mark it for follow-up
    - Tasks with follow-up dates appear in a special "Follow-up Required" section
    - These tasks cannot be checked off via the dashboard checkbox (since they require follow-up)
    - Follow-up tasks are sorted by follow-up date (nearest first)
    - In the dashboard, follow-up tasks display a purple "Follow-up" tag for easy identification
    - Use the edit form to modify or remove follow-up dates
    
    Examples:
    - [ ] Submit proposal (priority:A done:2025-06-30 followup:2025-07-15) @Work
    - [ ] Send follow-up email (followup:2025-07-05) +ClientProject
    - [ ] Review meeting notes (done:2025-06-25 followup:2025-07-01)
    
    Use cases:
    - Tasks completed but requiring follow-up (e.g., "Submit application" → follow up in 2 weeks)
    - Scheduled check-ins or reviews
    - Time-delayed actions after task completion
    - Reminders to follow up on delegated work
  
  On Hold System:
    The on hold feature helps manage tasks that cannot be worked on until a specific date or condition is met. Tasks marked with `onhold:YYYY-MM-DD` or `onhold:text_condition` are temporarily suspended and grouped separately from active tasks.
    
    How it works:
    - Add an `onhold:YYYY-MM-DD` tag to put a task on hold until a specific date
    - Add an `onhold:text_condition` tag to put a task on hold until a condition is met (e.g., "waiting for email from john")
    - Date-based holds are automatically released when the date passes
    - Text-based holds remain active until manually removed
    - Tasks on hold appear in a special "On Hold" section between active and completed tasks
    - If a subtask is on hold, a copy of the parent task (showing only the on-hold subtask) appears in the "On Hold" section
    - On-hold tasks are sorted by onhold date (earliest release date first), with text conditions at the end
    - In the dashboard, onhold tasks display a special "On Hold" tag for easy identification
    - Use the edit form to modify or remove onhold dates/conditions when circumstances change
    
    Examples:
    - [ ] Review contract proposal (priority:A onhold:2025-07-20) @Office
    - [ ] Start new project (onhold:waiting for budget approval) +ProjectBeta
    - [ ] Schedule team retreat (priority:B onhold:2025-07-15) +TeamEvents
    - [ ] Update documentation (priority:C) +Docs @Computer
        - [ ] Review current docs
        - [ ] Add new API endpoints (onhold:waiting for dev team input)
    
    Use cases:
    - Tasks waiting for external dependencies (e.g., "Review proposal" → on hold until client responds)
    - Seasonal or time-sensitive tasks (e.g., "Plan holiday party" → on hold until November)
    - Tasks blocked by other work that must be completed first
    - Personal tasks that can't be started until a specific life event or date
    - Subtasks that are blocked while the main task can proceed
  
  Recurring Tasks:
    - Use the `freq:` tag to specify recurrence:
        - `daily` (every day)
        - `weekly:Mon,Wed` (specific days of the week)
        - `monthly:15` (specific day of the month)
        - `monthly:3rd Tue` (nth weekday of the month)
        - `yearly:06-24` (specific date each year)
        - `custom:14d` (every 14 days)
    - Optionally, use `lastdone:` to track the last completion date.
    - When a recurring task is completed, update the `lastdone:` date to the completion date.
    - Example:
        - [ ] Backup files (freq:weekly:Fri lastdone:2025-06-20)
        - [ ] Pay credit card bill (freq:monthly:5 lastdone:2025-06-05)
        - [ ] Team lunch (freq:monthly:3rd Thu lastdone:2025-06-19)

  Examples:
    - [ ] Prepare quarterly report (priority:A due:2025-07-15)
    - [x] Submit expense report (done:2025-06-20 priority:B)
    - [ ] Follow up on proposal (priority:A followup:2025-07-10)
    - [ ] Review contract proposal (priority:A onhold:2025-07-20)
    - [ ] Plan event (priority:C freq:monthly:1)
    - [ ] Water plants (freq:daily lastdone:2025-06-24)
    - [ ] Test smoke alarms (freq:yearly:06-24 lastdone:2024-06-24)
    - [ ] Review goals (freq:custom:90d lastdone:2025-04-01)
    - [ ] Complete project (done:2025-06-25 followup:2025-07-08) +ProjectAlpha

  Notes:
    - All metadata tags must be inside one set of parentheses, e.g. (priority:A due:2025-07-15 onhold:2025-07-22).
    - Tags can appear in any order within the parentheses.
    - The parser will extract all key:value pairs from the parentheses, so you can include as many as needed.
    - If you include multiple sets of parentheses, only the first will be parsed for metadata.
    - Avoid using spaces within values (e.g., use freq:monthly:3rd Tue not freq:monthly:3rd  Tue).
    - Follow-up dates and onhold dates should be in YYYY-MM-DD format for proper sorting and display.

Context, Area, and Project Tags

    Context tags (`@`), area tags (`&`), and project tags (`+`) enhance clarity and usability by clearly indicating the context or environment needed, the life area involved, and categorizing tasks within their relevant projects.

  Context Tags (`@`)**:
    Describe the ideal environment or tool required to complete a task.
    
    Examples:
      `@Office`: Tasks to complete at work.
      `@Home`: Tasks best handled at home.
      `@Phone`: Tasks involving phone calls.
      `@Online`: Tasks requiring internet access.

  Area Tags (`&`)**:
    Represent broad life areas or domains of responsibility.
    
    Examples:
      `&Work`: Professional responsibilities and tasks.
      `&Personal`: Personal life and individual goals.
      `&Health`: Health and wellness related tasks.
      `&Finances`: Financial planning and money management.

  Project Tags (`+`)**:
    Categorize tasks within specific projects or focused initiatives.

    Examples:
      `+WebsiteRedesign`: Tasks related to redesigning the company website.
      `+VacationPlanning`: Tasks for planning an upcoming vacation.
      `+HomeSecurity`: Tasks related to improving home security.
      `+SkillDevelopment`: Tasks for learning new skills.

  Example**:
    - [ ] Finalize annual budget report +FinancialPlanning &Finances @Office
    - [ ] Schedule client follow-up call +SalesQ4 &Work @Phone
    - [ ] Prepare content for website +WebsiteRedesign &Work @Online
    - [ ] Organize garage +HomeOrganization &Personal @Home

Getting Started: Prerequisites: | - Python 3.7 or higher - Node.js and npm (for web dashboard) - Git (recommended)

Environment Setup: |
  **IMPORTANT: Before running any scripts or the dashboard, set up the Python virtual environment:**
  
  1. Create and configure the virtual environment:
     ```shell
     ./scripts/setup_environment.sh
     ```
     
     This script will:
     - Create a `.todo_env` virtual environment
     - Install all required Python dependencies (FastAPI, Google Calendar API, pandas, etc.)
     - Generate a `requirements.txt` file with all installed packages
  
  2. The environment will be automatically activated when you run the dashboard
  
  **Manual Environment Activation** (if needed):
  ```shell
  source .todo_env/bin/activate
  ```
  
  **Environment Dependencies Included**:
  - FastAPI & Uvicorn (web backend)
  - Google Calendar API libraries (google-api-python-client, google-auth-*)
  - Data processing (pandas, numpy, python-dateutil)
  - Development tools (black, flake8, pytest)

Installation: |
  1. Clone or download the project to your desired directory
  2. Run the environment setup script (see Environment Setup above)
  3. Your system is now ready to use!

Usage: |
  1. **Start the Web Dashboard** (Recommended):
     ```shell
     ./scripts/initialize_dashboard.sh
     ```
     This automatically:
     - Activates the `.todo_env` virtual environment
     - Starts the FastAPI backend server
     - Starts the React frontend development server
     - Displays URLs for both frontend and backend
  
  2. **Stop the Dashboard**:
     ```shell
     ./scripts/stop_dashboard.sh
     ```
  
  3. **Manual Script Usage** (with virtual environment):
     ```shell
     source .todo_env/bin/activate
     python scripts/[script_name].py
     ```

Web Dashboard: |
  The project includes a modern web dashboard for task management with Google Calendar integration:
  
  Features:
  - View tasks organized by area headers and grouped by due dates
  - Filter by area, context, and project with labeled dropdown menus
  - Sort by priority, due date, or no sorting
  - Check off tasks and recurring tasks
  - **Follow-up System**: Tasks with follow-up dates are grouped in a special "Follow-up Required" section
    - Follow-up tasks display purple "Follow-up" tags for easy identification
    - Sorted by follow-up date (nearest first)
    - Cannot be checked off via checkbox (requires follow-up action)
    - Edit follow-up dates using the built-in task editor
  - Push tasks with due dates to Google Calendar
  - Statistics and task analysis
  - Responsive, clean UI
  
  **Quick Start** (Recommended):
  ```shell
  # First time setup
  ./scripts/setup_environment.sh
  
  # Start dashboard
  ./scripts/initialize_dashboard.sh
  ```
  
  **Manual Setup** (if needed):
  1. Ensure virtual environment is set up (see Environment Setup above)
  2. Backend (FastAPI):
     ```shell
     source .todo_env/bin/activate
     cd dashboard/backend
     uvicorn app:app --reload
     ```
  3. Frontend (React + TypeScript):
     ```shell
     cd dashboard/frontend
     npm install
     npm run dev
     ```
  
  **Google Calendar Integration**:
  - Place your `credentials.json` file in the `log_files/` directory
  - Run `python scripts/push_due_dates_to_calendar.py` to sync tasks with due dates
  - The script will automatically handle authentication and create calendar events
  
  Access at: http://localhost:5173 (frontend) and http://localhost:8000 (backend API)

Recommended_Project_Structure: |
  todo_auto/
  ├── tasks.txt
  ├── recurring_tasks.txt
  ├── requirements.txt                 # Generated by setup script
  ├── .todo_env/                       # Python virtual environment
  ├── scripts/
  │   ├── setup_environment.sh         # Environment setup script
  │   ├── initialize_dashboard.sh      # Dashboard startup script
  │   ├── stop_dashboard.sh           # Dashboard stop script
  │   ├── push_due_dates_to_calendar.py
  │   └── [other utility scripts]
  ├── dashboard/
  │   ├── backend/ (FastAPI)
  │   └── frontend/ (React + TypeScript)
  ├── log_files/
  │   ├── credentials.json            # Google API credentials
  │   ├── token.json                  # Google API token (auto-generated)
  │   ├── backend.log                 # Backend logs
  │   └── frontend.log                # Frontend logs
  ├── outputs/ (automatically created)
  ├── archive_files/
  └── README.md

Output Files: |
  Sorted tasks are automatically saved in the `outputs/` directory.

Google Calendar Integration: | Automatically sync tasks with due dates to your Google Calendar.

Setup:
1. Ensure virtual environment is configured: `./scripts/setup_environment.sh`
2. Obtain Google Calendar API credentials:
   - Go to the Google Cloud Console
   - Enable the Google Calendar API
   - Create credentials (OAuth 2.0 Client ID)
   - Download the credentials file as `credentials.json`
   - Place it in the `log_files/` directory

Usage:
```shell
# Activate environment and sync tasks
source .todo_env/bin/activate
python scripts/push_due_dates_to_calendar.py
```

Features:
- Automatically deletes old calendar events to avoid duplicates
- Creates new events for all tasks with due dates in format `(due:YYYY-MM-DD)`
- Handles authentication automatically after initial setup
- Provides detailed logging of all operations

Environment Management: | Virtual Environment Benefits: - Isolated Python dependencies - Consistent package versions across setups - No conflicts with system Python packages - Easy environment recreation

**Common Commands:**
```shell
# Set up environment (first time or reset)
./scripts/setup_environment.sh

# Activate environment manually
source .todo_env/bin/activate

# Deactivate environment
deactivate

# View installed packages
pip list

# Update requirements file
pip freeze > requirements.txt
```

**Troubleshooting:**
- If you get import errors, ensure the virtual environment is activated
- If the environment is corrupted, delete `.todo_env/` and run setup again
- The dashboard initialization script will check for the environment automatically

Automation and Extensibility: | - Integrate tasks with calendars (.ics file generation). - Automate daily summaries or reminders using scheduled tasks (cron, Windows Task Scheduler).

Licensing_and_Contribution: | This project is provided freely for personal use, modification, and extension.

Conclusion: | Enjoy your productivity journey with clarity, simplicity, and effectiveness!

CSV Export Tool: | Export your tasks to CSV format for analysis, reporting, or integration with other tools.

Script: `make_csv.py`

Features:
  - Parses tasks.txt and extracts all metadata and tags
  - Exports to CSV with separate columns for each field
  - Handles projects (+Project), areas (&Area), contexts (@Context), priorities, due dates, etc.
  - Maintains area information and task hierarchy (indent levels)
  - Leaves fields blank when no data is present

Usage:
  **With virtual environment** (recommended):
    ```shell
    source .todo_env/bin/activate
    python3 scripts/make_csv.py
    ```
  
  Basic export:
    ```shell
    python3 scripts/make_csv.py
    ```
  
  Custom input/output files:
    ```shell
    python3 scripts/make_csv.py --input tasks.txt --output my_tasks.csv
    ```
  
  Verbose output (shows parsing details):
    ```shell
    python3 scripts/make_csv.py --verbose
    ```
  
  Help:
    ```shell
    python3 scripts/make_csv.py --help
    ```

CSV Columns:
  - line_number: Original line number in tasks.txt
  - completed: True/False completion status
  - completion_date: Date when task was marked complete
  - priority: Task priority (A, B, C, etc.)
  - description: Task text without tags
  - area: Section/area the task belongs to
  - project: Primary +Project tag
  - extra_projects: Additional +Project tags
  - context: Primary @Context tag
  - extra_contexts: Additional @Context tags
  - due_date, created_date, done_date: Date metadata
  - recurring: Recurrence pattern
  - progress: Progress percentage
  - indent_level: Indentation depth for subtasks
  - Additional metadata fields as discovered

Output: Creates `outputs/tasks_export.csv` by default, ready for import into spreadsheets or databases.

About

A tool for managing a to do list in text files.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published