Skip to content

Latest commit

 

History

History
438 lines (351 loc) · 13.8 KB

File metadata and controls

438 lines (351 loc) · 13.8 KB

NotNow Logo NotNow.Quake

A powerful GitHub issue management application with advanced task tracking and time management capabilities

NotNow.Quake is a comprehensive MAUI-based desktop application that transforms GitHub Issues into a full-featured project management system with embedded state tracking, subtasks, time tracking, and priority management - all synchronized through GitHub's infrastructure.

🌟 Key Features

Core Functionality

  • GitHub Integration: Direct integration with GitHub Issues API via Octokit.NET
  • Embedded State Management: Issues maintain state directly in GitHub issue bodies using versioned JSON
  • Multi-Repository Support: Switch between multiple GitHub repositories seamlessly
  • Real-time Synchronization: All changes immediately sync with GitHub
  • Offline Resilience: Embedded state allows viewing cached data when comments can't be loaded

Issue Management

  • Visual Status Indicators:
    • Checkbox for quick close/reopen
    • Status badges (Todo, In Progress, Blocked, Done)
    • Priority indicators (Critical 🔴, High 🟡, Medium 🔵, Low ⚪)
    • Due date warnings (overdue in red, today in orange, tomorrow in green)
  • Advanced Filtering:
    • Text search across titles and tags
    • Priority-based filtering
    • Hide/show closed issues toggle
    • Real-time filtering as you type
  • Bulk Operations: Create, update, close, and reopen issues
  • Auto-initialization: New issues automatically initialized with NotNow tracking

Task Management

  • Subtask System:
    • Create unlimited subtasks per issue
    • Independent completion tracking
    • Time estimates per subtask
    • Quick complete/reopen with time logging
  • Tags Management: Add, remove, and filter by custom tags
  • Due Dates: Set and track due dates with visual indicators
  • Time Estimates: Track estimated vs actual time

Time Tracking

  • Work Sessions: Start/stop timer or log time manually
  • Weekly Calendar View: Visual representation of time spent per day
  • Session History: Complete audit trail of all work sessions
  • Time Aggregation: Automatic calculation of total time per issue
  • Subtask Time: Log time when completing subtasks

Advanced Features

  • Command System: All actions executed through /notnow commands
  • State Versioning: Track state changes with version numbers
  • Comment Types: Separate command and discussion comments
  • Notes System: Add categorized internal notes
  • Loading Indicators: Visual feedback during API operations
  • Developer Mode: View raw JSON state for debugging

🚀 Getting Started

Prerequisites

  • Windows 10/11 (version 1809 or later)
  • .NET 9.0 SDK
  • Visual Studio 2022 or VS Code with C# extensions
  • GitHub Personal Access Token with repo scope

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/NotNow.git
    cd NotNow
  2. Build the application

    dotnet build NotNow.Quake/NotNow.Quake.csproj
  3. Configure your GitHub credentials

    Create a settings.local.json file in the NotNow.Quake folder:

    {
      "GitHubRepositories": [
        {
          "Id": "main-repo",
          "Owner": "your-github-username",
          "Repository": "your-repo-name",
          "PersonalAccessToken": "ghp_your_token_here",
          "DisplayName": "Main Repository"
        },
        {
          "Id": "secondary-repo",
          "Owner": "your-org",
          "Repository": "other-repo",
          "PersonalAccessToken": "ghp_your_token_here",
          "DisplayName": "Secondary Repository"
        }
      ],
      "DefaultRepositoryId": "main-repo",
      "PostCommandDelay": 1000,
      "MaxIssuesOpen": 15,
      "MaxIssuesClosed": 10
    }
  4. Run the application

    dotnet run --project NotNow.Quake

Creating a GitHub Personal Access Token

  1. Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
  2. Click "Generate new token"
  3. Give it a descriptive name (e.g., "NotNow Access")
  4. Select the repo scope (full control of private repositories)
  5. Set expiration as needed
  6. Click "Generate token"
  7. Copy the token immediately (you won't be able to see it again!)

📖 Usage Guide

Interface Overview

The application is divided into three main panels:

Left Panel - Issues List

  • Header Toolbar:
    • ➕ Create new issue
    • 👁️ Toggle closed issues visibility
    • 🔴🟡🔵⚪ Priority filters
  • Issue List:
    • ☐/☑ Checkbox for close/reopen
    • Issue number and title
    • Visual indicators (priority, status, due date, subtask count)
  • Filter Bar: Live search by title or tags

Center Panel - Issue Details

  • Issue Information:
    • Title and description
    • Status buttons (Todo, In Progress, Blocked, Done)
    • Priority buttons (Critical, High, Medium, Low)
    • Metadata (Assignee, Due Date, Estimate)
  • Tags Section: Add/remove tags
  • Subtasks Section:
    • List with checkboxes
    • Add new subtask button
    • Complete with time logging
  • Time Tracking:
    • Weekly calendar view
    • Daily time totals
    • Log time manually button

Right Panel - Comments & Commands

  • Toolbar:
    • 💬 Add comment
    • 📝 Add note
    • 🖥️ Developer mode
    • 🔀 Toggle command visibility
  • Comments List: All issue comments with metadata
  • Input Forms: Context-sensitive forms for adding content

Common Workflows

Creating and Initializing an Issue

  1. Click ➕ in the Issues panel
  2. Enter title and description
  3. Optionally set due date (YYYY-MM-DD format)
  4. Optionally set estimate (e.g., "2h30m" or "1d4h")
  5. Click "Create Issue"

The system automatically:

  • Creates the GitHub issue
  • Posts /notnow init command
  • Sets status to "todo"
  • Sets priority to "medium"
  • Assigns to current user (if available)
  • Applies due date and estimate if provided

Managing Subtasks

Add Subtask:

  1. Select an issue
  2. Click ➕ in Subtasks section
  3. Enter title and estimate (format: 1d2h30m)
  4. Click save

Complete Subtask:

  1. Click checkbox next to subtask
  2. Enter time spent (format: 1h30m)
  3. Add optional notes
  4. Submit

Reopen Subtask:

  • Click the checkbox of a completed subtask

Time Tracking

Start Timer:

  1. Click "Log Time" button
  2. Future: Timer functionality planned

Log Time Manually:

  1. Click "Log Time" button
  2. Enter duration (e.g., "2h30m")
  3. Add description
  4. Submit

Using Tags

Add Tag:

  1. Click ➕ next to Tags
  2. Enter tag name
  3. Press Enter or click submit

Remove Tag:

  • Click ✖ on the tag pill

Filter by Tag:

  • Type tag name in the filter box at bottom of issues list

Priority and Status Management

Change Status:

  • Click status button in issue details (Todo → In Progress → Blocked → Done)

Change Priority:

  • Click priority button in issue details

Filter by Priority:

  • Toggle priority filter buttons in issues header

Command System

All actions generate /notnow commands posted to GitHub:

Command Description Example
init Initialize issue tracking /notnow init
status Change issue status /notnow status in_progress
priority Set priority level /notnow priority high
assign Assign to user /notnow assign @username
due Set due date /notnow due 2025-02-01
estimate Set time estimate /notnow estimate 4h
tags add Add tags /notnow tags add bug,frontend
tags remove Remove tags /notnow tags remove bug
subtask add Add subtask /notnow subtask add "Fix bug" --estimate 2h
complete Complete subtask /notnow complete st1 --time 1h30m
reopen Reopen subtask /notnow reopen st1
time Log time /notnow time 2h30m --description "Fixed bug"
comment Add comment /notnow comment "Status update"
note Add categorized note /notnow note "Internal note" --category design

⚙️ Configuration

Configuration Files

  1. appsettings.json - Base configuration (committed to repo)
  2. settings.local.json - Override with personal settings (gitignored)

Configuration Options

{
  "GitHubRepositories": [
    {
      "Id": "unique-id",
      "Owner": "github-username-or-org",
      "Repository": "repository-name",
      "PersonalAccessToken": "ghp_token",
      "DisplayName": "Friendly Name"
    }
  ],
  "DefaultRepositoryId": "unique-id",
  "PostCommandDelay": 1000,        // Milliseconds to wait after posting
  "StateStaleTimeout": 300000,     // 5 minutes in milliseconds
  "MaxIssuesOpen": 15,             // Maximum open issues to load
  "MaxIssuesClosed": 10,           // Maximum closed issues to load
  "Window": {
    "Width": 1200,
    "Height": 800,
    "StartPosition": "CenterScreen"
  }
}

🏗️ Architecture

Technology Stack

  • .NET MAUI: Cross-platform UI framework
  • Octokit.NET: GitHub API client library
  • Material Icons: Icon font for UI elements
  • System.Text.Json: JSON serialization

Core Components

Services

  • GitHubService: GitHub API operations
  • IssueStateParser: Parse commands and build state
  • IssueStateManager: Version control and embedding
  • CommandExecutor: Execute NotNow commands
  • CommandPostingService: Post commands to GitHub

State Management

  • Embedded State: JSON state stored in issue body
  • Version Tracking: Increment version on each change
  • Conflict Detection: Stale state detection (>5 minutes)
  • Fallback Parsing: Parse from comments if no embedded state

UI Components

  • TerminalPage: Main UI controller
  • IssueItem: View model for issue list
  • Custom controls for time tracking, tags, subtasks

Data Flow

  1. Load Issue → Check for embedded state → Use if fresh OR parse from comments
  2. Execute Command → Update local state → Post to GitHub → Update embedded state
  3. Filter Issues → Apply text/priority/status filters → Update display

🔧 Troubleshooting

Common Issues

"Failed to load issues"

  • Verify GitHub token is valid and not expired
  • Check repository name and owner are correct
  • Ensure token has repo scope
  • Check internet connection

"Duplicate tags appearing"

  • Fixed in latest version
  • Clear browser cache if using web view
  • Ensure you have the latest codebase

"Loading animation freezes"

  • Fixed in latest version
  • Animation now runs in background thread

"Changes not syncing"

  • Check PostCommandDelay in settings (default 1000ms)
  • Verify no GitHub API rate limiting
  • Check for error alerts in the application

"Embedded state not updating"

  • Ensure you have write access to the repository
  • Check that issue body isn't too large (GitHub limit)
  • Verify no special characters breaking JSON

Debug Mode

Enable Developer Mode to:

  1. View raw JSON state
  2. See version numbers
  3. Check last command executed
  4. Verify state synchronization

Access via the 🖥️ button in the comments toolbar.

📁 Project Structure

NotNow.Quake/
├── Views/
│   ├── TerminalPage.xaml          # Main UI layout (XAML)
│   └── TerminalPage.xaml.cs       # UI logic and event handlers
├── Models/
│   └── IssueItem.cs              # View model for issues
├── Services/                      # Local service implementations
├── Platforms/                     # Platform-specific code
│   └── Windows/                   # Windows-specific implementations
├── Resources/                     # Icons, fonts, styles
├── MauiProgram.cs                # Dependency injection setup
├── App.xaml.cs                   # Application lifecycle
├── appsettings.json              # Base configuration
├── settings.local.json           # Personal configuration (gitignored)
├── Design.md                     # UML diagrams and architecture
└── README.md                     # This file

🐛 Known Issues

  1. Performance: Large issue lists (>50) may cause slight lag
  2. Validation: Some edge cases in time format validation
  3. Offline: Limited functionality when GitHub is unreachable
  4. Platform: Currently Windows-only (MAUI supports cross-platform)

🚀 Roadmap

  • Active timer functionality
  • Bulk operations on multiple issues
  • Export time reports
  • Keyboard shortcuts for all actions
  • Dark/Light theme toggle
  • Cross-platform support (macOS, Linux)
  • Offline mode with sync queue
  • Custom workflow definitions
  • Integration with other issue trackers
  • Plugin system for extensions

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add/update tests
  5. Update documentation
  6. Submit a pull request

Code Standards

  • Follow C# coding conventions
  • Add XML documentation comments
  • Include unit tests for new features
  • Update README for user-facing changes

📄 License

This project is licensed under the MIT License. See LICENSE file for details.

🙏 Acknowledgments

📞 Support


NotNow.Quake - Professional GitHub issue management with advanced project tracking capabilities! 🚀

Version 1.0.0 | Last Updated: 2025-01-23