Skip to content

enogrob/project-today-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

75 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Project Today Manager

Homepage

project image

Contents

Summary

The Zsh Today Manager is a comprehensive CLI tool designed to implement a Getting Things Done (GTD) workflow using the file system as the foundation. This project provides a sophisticated task and project management system that seamlessly integrates with the Zsh shell environment. The system transforms traditional project management into an elegant file-system-based workflow that promotes transparency, portability, and developer-friendly operations.

The core strength of this system lies in its three-component architecture: Projects for managing your project portfolio, Scheduled for flexible time-based project scheduling, and Today for managing current active tasks. The tool supports multiple scheduling patterns including ISO dates (YYYY-MM-DD), recurring schedules (daily, weekday, weekend), and specific day abbreviations, making it highly adaptable to different workflow patterns. The automatic processing of scheduled items ensures that your daily workflow stays current without manual intervention.

What makes this project particularly compelling is its object-oriented bash approach combined with a development environment that seamlessly integrates with macOS workflows. The file system implementation provides complete transparency into your project state while maintaining the flexibility to work with existing development tools and practices. This makes it an ideal solution for developers who want a lightweight, scriptable project management system that doesn't impose heavy GUI overhead or complex dependencies.

Architecture

%% Pastel colors and emoticons for clarity and friendliness
graph TD
  A["๐Ÿง‘โ€๐Ÿ’ป User Input"] --> B{"๐Ÿงฉ Command Parser"}
  B -->|"๐Ÿ“ projects"| C["๐Ÿ“‚ Projects Module"]
  B -->|"โฐ scheduled"| D["๐Ÿ—“๏ธ Scheduled Module"]
  B -->|"๐Ÿ“… today"| E["๐ŸŒž Today Module"]
  B -->|"โ“ help/version"| F["๐Ÿ› ๏ธ Core Functions"]

  subgraph "File System Layer ๐Ÿ—„๏ธ"
    G["๐Ÿ“ ~/Projects"]
    H["๐Ÿ“… ~/Scheduled"]
    I["๐ŸŒž ~/Today"]
    J["๐Ÿงฉ Project Templates"]
  end

  subgraph "Projects Management ๐Ÿ—‚๏ธ"
    C --> K["๐Ÿ” List Projects"]
    C --> L["โœจ Create New Project"]
    L --> J
    K --> G
    L --> G
  end

  subgraph "Scheduling System โณ"
    D --> M["๐Ÿ“ Schedule Item"]
    D --> N["๐Ÿ“‹ List Scheduled"]
    D --> O["โžก๏ธ Process Scheduled โ†’ Today"]
    M --> P{"๐Ÿ”Ž Validate Schedule Type"}
    P -->|"๐Ÿ“† ISO Date"| Q["๐Ÿ“… Date Validation"]
    P -->|"๐Ÿ” Recurring"| R["๐Ÿ”„ Pattern Validation"]
    P -->|"๐Ÿ“… Day Names"| S["๐Ÿ”ค Day Abbreviation Check"]
    Q --> H
    R --> H
    S --> H
    O --> T["๐Ÿค– Auto-Migration Logic"]
  end

  subgraph "Today Workflow ๐ŸŒž"
    E --> U["๐Ÿ“‹ List Today's Tasks"]
    E --> V["๐Ÿš€ Jump to Project"]
    E --> W["โœ… End Task"]
    E --> X["๐Ÿ“ฆ Archive Today"]
    T --> I
    U --> I
    V --> G
    W --> I
    X --> I
  end

  subgraph "Daily Automation ๐Ÿ”„"
    Y["โฐ Cron/Manual Trigger"]
    Y --> O
    O --> Z{"๐Ÿ—“๏ธ Schedule Type"}
    Z -->|"๐Ÿ“† Date-based"| AA["๐Ÿ—‘๏ธ Remove After Date"]
    Z -->|"๐Ÿ” Recurring"| BB["โ™ป๏ธ Keep Active"]
    AA --> H
    BB --> H
  end

  %% Pastel color styles
  style G fill:#fce4ec,stroke:#f8bbd0,stroke-width:2px
  style H fill:#e1f5fe,stroke:#b3e5fc,stroke-width:2px
  style I fill:#f3e5f5,stroke:#ce93d8,stroke-width:2px
  style J fill:#fff3e0,stroke:#ffe0b2,stroke-width:2px
  style C fill:#e3f2fd,stroke:#90caf9,stroke-width:2px
  style D fill:#f1f8e9,stroke:#aed581,stroke-width:2px
  style E fill:#fffde7,stroke:#fff59d,stroke-width:2px
  style F fill:#ede7f6,stroke:#b39ddb,stroke-width:2px
Loading

Alternative Perspectives

1. Class Diagram - Structural Relationships (Click to expand)
classDiagram
  class TodayManager {
    TodayManager ๐ŸŒž
    +String TODAY_VERSION
    +String TODAY_HOME
    +String TODAY_PROJECTS
    +String TODAY_SCHEDULED
    +Array TODAY_PROJECT_TYPES
    +setup()
    +version()
    +help()
  }
  class ProjectsModule {
    ProjectsModule ๐Ÿ“‚
    +list(filter)
    +new(name, type)
    +validateType(type)
    +getTemplates()
  }
  class ScheduledModule {
    ScheduledModule ๐Ÿ—“๏ธ
    +init(project, tags)
    +list()
    +archive()
    +end(project)
    +today()
    +validateTags(tags)
    +processRecurring()
  }
  class TodayModule {
    TodayModule ๐ŸŒž
    +init(project)
    +list()
    +jump(identifier)
    +end(project)
    +archive()
    +print()
  }
  class FileSystemInterface {
    FileSystemInterface ๐Ÿ—„๏ธ
    +createSymlink(source, target)
    +removeSymlink(path)
    +listDirectory(path)
    +validatePath(path)
  }
  class ScheduleValidator {
    ScheduleValidator ๐Ÿ”Ž
    +validateISODate(date)
    +validateRecurring(pattern)
    +validateDayAbbrev(days)
    +isFutureDate(date)
  }
  TodayManager "1" --> "1" ProjectsModule
  TodayManager "1" --> "1" ScheduledModule
  TodayManager "1" --> "1" TodayModule
  ProjectsModule --> FileSystemInterface
  ScheduledModule --> FileSystemInterface
  TodayModule --> FileSystemInterface
  ScheduledModule --> ScheduleValidator
  ScheduledModule "1" --> "*" TodayModule : migrates_to
  ProjectsModule "1" --> "*" ScheduledModule : schedules
  ProjectsModule "1" --> "*" TodayModule : activates
Loading
2. Journey Process - State Transitions (Click to expand)
stateDiagram-v2
  [*] --> ProjectCreation: "โœจ User wants new project"
  ProjectCreation --> ProjectExists: "๐Ÿ†• tdpn project_name type"
  ProjectExists --> SchedulingDecision: "๐Ÿ”€ Project ready"
  SchedulingDecision --> ImmediateWork: "๐Ÿš€ Work now"
  SchedulingDecision --> FutureScheduling: "โณ Schedule for later"
  ImmediateWork --> TodayActive: "๐ŸŒž tdyi project_name"
  FutureScheduling --> DateScheduled: "๐Ÿ“† tdsi project_name YYYY-MM-DD"
  FutureScheduling --> RecurringScheduled: "๐Ÿ” tdsi project_name daily/weekday/weekend"
  FutureScheduling --> DayScheduled: "๐Ÿ“… tdsi project_name mon,tue,fri"
  DateScheduled --> ScheduledList: "โฑ๏ธ Waiting"
  RecurringScheduled --> ScheduledList: "โฑ๏ธ Waiting"
  DayScheduled --> ScheduledList: "โฑ๏ธ Waiting"
  ScheduledList --> TodayActive: "๐Ÿค– tdyia (auto-migration)"
  TodayActive --> WorkInProgress: "๐Ÿš€ tdyj N (jump to project)"
  WorkInProgress --> TodayActive: "๐Ÿ”„ Continue working"
  WorkInProgress --> Completed: "โœ… tdye project_name"
  Completed --> Archived: "๐Ÿ“ฆ tdya (archive)"
  Archived --> [*]: "๐Ÿ Day complete"
  TodayActive --> Archived: "๐ŸŒ™ End of day"
  ScheduledList --> ScheduledList: "๐Ÿ” Recurring items remain"
  DateScheduled --> [*]: "๐Ÿ—‘๏ธ Date-based items auto-removed"
Loading
3. Mind Map - Interconnected Themes (Click to expand)
mindmap
  root((๐ŸŒž Zsh Today Manager))
    GTD Philosophy ๐Ÿง 
      Getting Things Done โœ…
      File System Workflow ๐Ÿ—„๏ธ
      Transparency ๐Ÿ‘๏ธ
      Developer Friendly ๐Ÿ‘จโ€๐Ÿ’ป
    Project Management ๐Ÿ—‚๏ธ
      Portfolio View ๐Ÿ“‚
      Template System ๐Ÿงฉ
      Type Categorization ๐Ÿท๏ธ
      Creation Workflow โœจ
    Scheduling Intelligence โณ
      ISO Date Support ๐Ÿ“†
      Recurring Patterns ๐Ÿ”
      Day Abbreviations ๐Ÿ“…
      Auto Migration ๐Ÿค–
      Future Validation ๐Ÿ”ฎ
    Daily Workflow ๐ŸŒž
      Today's Focus ๐ŸŽฏ
      Task Navigation ๐Ÿš€
      Completion Tracking โœ…
      Archive System ๐Ÿ“ฆ
    Technical Excellence ๐Ÿ†
      Zsh Integration ๐Ÿš
      Object Oriented Bash ๐Ÿง‘โ€๐Ÿ’ป
      Symbolic Links ๐Ÿ”—
      Directory Structure ๐Ÿ—‚๏ธ
      Alias System ๐Ÿท๏ธ
    User Experience ๐Ÿ˜Š
      CLI Simplicity ๐Ÿ’ป
      Color Coding ๐ŸŽจ
      Clear Feedback ๐Ÿ’ฌ
      Error Handling โš ๏ธ
      Help System ๐Ÿ†˜
    Automation ๐Ÿค–
      Daily Processing ๐Ÿ”„
      Scheduled Migration โฉ
      Recurring Maintenance โ™ป๏ธ
      Background Tasks ๐Ÿ’ค
Loading

Key Concepts

  • GTD Workflow: A Getting Things Done implementation using file system structures to manage tasks and projects transparently
  • Symbolic Links: Core mechanism using symlinks to represent project states without duplicating files, enabling efficient transitions between scheduled and active states
  • Three-Layer Architecture: Projects (portfolio), Scheduled (future work), and Today (current focus) providing clear separation of concerns
  • Schedule Validation: Comprehensive tag system supporting ISO dates, recurring patterns (daily/weekday/weekend), and day abbreviations with future-date validation
  • Auto-Migration: Intelligent daily processing that automatically moves scheduled items to today's active list based on scheduling criteria
  • Project Templates: Extensible template system supporting different project types (course, tutorial, rails, go, etc.) for rapid project initialization
  • Object-Oriented Bash: Structured shell scripting approach using namespaced functions and consistent method naming conventions
  • File System Transparency: All project states are visible and manipulable through standard file system tools, ensuring no vendor lock-in
  • Alias Integration: Comprehensive alias system (tdp*, tds*, tdy*) providing intuitive command shortcuts for all operations
  • Positional Navigation: Numeric references allowing quick jumping to projects by their list position rather than full names

Tech Stack

  • Shell Environment: Zsh with SH_WORD_SPLIT and KSH_ARRAYS options for enhanced compatibility
  • Scripting Language: Bash/Zsh with object-oriented programming patterns and namespaced function design
  • File System: Unix/Linux file system operations using symbolic links for state management
  • Build Tools: No build process required - direct shell script execution with source-based installation
  • Version Control: Git for source code management and distribution
  • Operating System: macOS (primary target) with Unix/Linux compatibility through standard shell commands
  • Terminal Tools: Standard Unix utilities (ls, awk, grep, date, mv, ln, find) for file operations and text processing
  • Date Processing: Native date command with ISO 8601 format support and timestamp calculations
  • Dependency Management: Shell-based source and export system for environment variable management
  • Installation Method: Git clone with manual setup - no package manager dependencies
  • Directory Structure: Structured home directory layout (~/Projects, ~/Today, ~/Scheduled) for organized workflow
  • Text Processing: AWK for parsing command output and file names with position-based field extraction
  • Error Handling: Exit codes and conditional testing for robust error detection and user feedback
  • Documentation: Markdown README with mermaid diagrams for comprehensive project documentation

Getting Started

System Requirements:

  • macOS or Unix/Linux system
  • Zsh shell (macOS default)
  • Git for installation
  • Standard Unix utilities (ls, awk, grep, date, mv, ln, find)

Installation Steps:

  1. Clone the repository:
pushd /tmp
git clone [email protected]:enogrob/zsh-today-manager.git
cd zsh-today-manager
  1. Initial setup and testing:
source ./today
  1. Install to your Projects directory:
mv zsh-today-manager ~/Projects
  1. Add to your shell configuration:
echo "test -f ~/Projects/zsh-today-manager/today && source ~/Projects/zsh-today-manager/today" >> ~/.zshrc
source ~/.zshrc
popd
  1. Verify installation:
today --version
today --help

Directory Structure Created:

  • ~/Projects/ - Main project portfolio directory
  • ~/Today/ - Current day's active projects
  • ~/Scheduled/ - Future and recurring scheduled projects

Usage Examples

Basic Project Management:

# List all projects
$ tdpl
tutorial-building-debian
project-rails-blog
elixir-tutorial

# Create a new project with template
$ tdpn my-new-app rails
$ tdpn learn-go tutorial

Scheduling Workflows:

# Schedule for a specific date
$ tdsi important-project 2025-07-15

# Set up daily recurring task
$ tdsi daily-standup daily

# Schedule for specific weekdays
$ tdsi team-meeting mon,wed,fri

# Schedule for weekdays only
$ tdsi development-work weekday

Daily Workflow:

# Process scheduled items for today
$ tdyia

# List today's active projects
$ tdyl
1 2025-07-06 daily-standup
2 2025-07-06 important-project

# Jump to a project by number
$ tdyj 1
# Now in ~/Projects/daily-standup

# End a completed task
$ tdye daily-standup

# Archive today's completed work
$ tdya

Advanced Scheduling Examples:

# List scheduled items
$ tdsl
1 2025-07-10 project-deadline
2 daily morning-routine
3 mon,wed,fri team-sync

# View comprehensive status
$ today help
# Shows all available commands and aliases

Contributing Guidelines

This project follows standard open source contribution practices:

Development Workflow:

  • Fork the repository on GitHub
  • Create a feature branch from main
  • Make your changes with appropriate testing
  • Ensure all shell scripts follow the existing code style
  • Submit a pull request with clear description

Code Standards:

  • Use consistent function naming with underscore prefixes (_module.function)
  • Follow object-oriented bash patterns established in the codebase
  • Include error handling and user feedback for all operations
  • Maintain compatibility with Zsh and standard Unix utilities
  • Add appropriate comments for complex logic

Testing Requirements:

  • Test on macOS and Unix/Linux environments
  • Verify all aliases work correctly
  • Test scheduling validation with various input formats
  • Ensure file system operations handle edge cases properly

Issue Reporting:

  • Use GitHub issues for bug reports and feature requests
  • Provide system information (OS, shell version) for bugs
  • Include steps to reproduce any issues
  • Suggest improvements with specific use cases

License

This project is released under standard open source licensing. Check the repository for specific license details and copyright information.

References

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published