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.
- 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
- 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
- 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
- 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
- Command System: All actions executed through
/notnowcommands - 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
- 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
reposcope
-
Clone the repository
git clone https://github.com/yourusername/NotNow.git cd NotNow -
Build the application
dotnet build NotNow.Quake/NotNow.Quake.csproj
-
Configure your GitHub credentials
Create a
settings.local.jsonfile 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 } -
Run the application
dotnet run --project NotNow.Quake
- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Click "Generate new token"
- Give it a descriptive name (e.g., "NotNow Access")
- Select the
reposcope (full control of private repositories) - Set expiration as needed
- Click "Generate token"
- Copy the token immediately (you won't be able to see it again!)
The application is divided into three main panels:
- 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
- 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
- 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
- Click ➕ in the Issues panel
- Enter title and description
- Optionally set due date (YYYY-MM-DD format)
- Optionally set estimate (e.g., "2h30m" or "1d4h")
- Click "Create Issue"
The system automatically:
- Creates the GitHub issue
- Posts
/notnow initcommand - Sets status to "todo"
- Sets priority to "medium"
- Assigns to current user (if available)
- Applies due date and estimate if provided
Add Subtask:
- Select an issue
- Click ➕ in Subtasks section
- Enter title and estimate (format: 1d2h30m)
- Click save
Complete Subtask:
- Click checkbox next to subtask
- Enter time spent (format: 1h30m)
- Add optional notes
- Submit
Reopen Subtask:
- Click the checkbox of a completed subtask
Start Timer:
- Click "Log Time" button
- Future: Timer functionality planned
Log Time Manually:
- Click "Log Time" button
- Enter duration (e.g., "2h30m")
- Add description
- Submit
Add Tag:
- Click ➕ next to Tags
- Enter tag name
- 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
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
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 |
- appsettings.json - Base configuration (committed to repo)
- settings.local.json - Override with personal settings (gitignored)
{
"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"
}
}- .NET MAUI: Cross-platform UI framework
- Octokit.NET: GitHub API client library
- Material Icons: Icon font for UI elements
- System.Text.Json: JSON serialization
GitHubService: GitHub API operationsIssueStateParser: Parse commands and build stateIssueStateManager: Version control and embeddingCommandExecutor: Execute NotNow commandsCommandPostingService: Post commands to GitHub
- 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
TerminalPage: Main UI controllerIssueItem: View model for issue list- Custom controls for time tracking, tags, subtasks
- Load Issue → Check for embedded state → Use if fresh OR parse from comments
- Execute Command → Update local state → Post to GitHub → Update embedded state
- Filter Issues → Apply text/priority/status filters → Update display
- Verify GitHub token is valid and not expired
- Check repository name and owner are correct
- Ensure token has
reposcope - Check internet connection
- Fixed in latest version
- Clear browser cache if using web view
- Ensure you have the latest codebase
- Fixed in latest version
- Animation now runs in background thread
- Check PostCommandDelay in settings (default 1000ms)
- Verify no GitHub API rate limiting
- Check for error alerts in the application
- Ensure you have write access to the repository
- Check that issue body isn't too large (GitHub limit)
- Verify no special characters breaking JSON
Enable Developer Mode to:
- View raw JSON state
- See version numbers
- Check last command executed
- Verify state synchronization
Access via the 🖥️ button in the comments toolbar.
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
- Performance: Large issue lists (>50) may cause slight lag
- Validation: Some edge cases in time format validation
- Offline: Limited functionality when GitHub is unreachable
- Platform: Currently Windows-only (MAUI supports cross-platform)
- 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
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add/update tests
- Update documentation
- Submit a pull request
- Follow C# coding conventions
- Add XML documentation comments
- Include unit tests for new features
- Update README for user-facing changes
This project is licensed under the MIT License. See LICENSE file for details.
- Built with .NET MAUI
- GitHub API via Octokit.NET
- Icons from Material Design Icons
- Inspired by terminal-first development workflows
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki
NotNow.Quake - Professional GitHub issue management with advanced project tracking capabilities! 🚀
Version 1.0.0 | Last Updated: 2025-01-23