Get Stuff Done (or Get Shit Done, if you're feeling snarky) β A privacy-first task manager based on the Eisenhower Matrix.
π Live App: gsd.vinny.dev π¦ Current Version: 7.8.1 π Latest: Docker self-hosting, TanStack integration, Eisenhower launch screen, UX polish
The Eisenhower Matrix is a productivity framework that helps you prioritize tasks by urgency and importance. It's named after President Dwight D. Eisenhower, who famously said: "What is important is seldom urgent, and what is urgent is seldom important."
The matrix divides tasks into four quadrants:
- Do First (Urgent + Important) β Crises, deadlines, emergencies. Handle these immediately.
- Schedule (Not Urgent + Important) β Strategic planning, learning, relationship building. This is where you should spend most of your time.
- Delegate (Urgent + Not Important) β Interruptions, some emails, other people's priorities. Delegate these when possible.
- Eliminate (Not Urgent + Not Important) β Time-wasters, busy work, mindless scrolling. Minimize or eliminate these.
GSD Task Manager is a completely private task manager that runs entirely in your browser. Your tasks never leave your device β everything is stored locally using IndexedDB.
- β Eisenhower Matrix β Organize tasks by urgency and importance across four quadrants
- β Task Dependencies β Define blocking relationships between tasks with circular dependency prevention
- β Recurring Tasks β Automatically recreate tasks on daily, weekly, or monthly schedules
- β Tags & Labels β Categorize tasks with custom tags for easy filtering
- β Subtasks & Checklists β Break down complex tasks into manageable steps with progress tracking
- β Batch Operations β Select and manage multiple tasks at once (complete, move, tag, delete)
- β Smart Search β Search across titles, descriptions, tags, and subtasks
- β Dashboard View β Visualize productivity patterns with interactive charts
- β Completion Metrics β Track daily, weekly, and monthly completion rates
- β Streak Tracking β Monitor current and longest completion streaks
- β Quadrant Distribution β Analyze where your time and energy is focused
- β Tag Analytics β View completion rates and usage statistics per tag
- β Trend Analysis β 7/30/90-day trend views with line and bar charts
- β Privacy-first β All data stored locally in IndexedDB (no server by default)
- β Optional Cloud Sync β Multi-device sync via self-hosted PocketBase with Google/GitHub OAuth
- β Export/Import β Back up tasks as JSON with merge or replace modes
- β Works Offline β Full functionality without internet connection
- β Install as PWA β Works on desktop and mobile with offline support
- β Smart Notifications β Configurable reminders (5min to 1 day before due)
- β Auto-Updates β Service worker updates with user-friendly notifications
- β Periodic Sync β Background sync for installed PWAs (Chrome/Edge)
- β Dark Mode β Automatic theme switching with system preference support
- β Command Palette β Universal search and action interface with βK / Ctrl+K shortcut
- β Quick Settings Panel β Slide-out panel for frequently-adjusted preferences (theme, notifications, sync interval)
- β Smart View Pinning β Pin up to 5 smart views to header with keyboard shortcuts (1-9, 0 to clear)
- β
Keyboard Shortcuts β Fast navigation (
nfor new task,βKfor command palette,?for help) - β Drag & Drop β Reorder tasks and move between quadrants
- β Responsive Design β Optimized for desktop, tablet, and mobile
- Click "New Task" or press
n - Enter a task title
- Optionally add a description
- Mark the task as Urgent and/or Important
- Click "Add Task"
Your task will automatically appear in the correct quadrant based on your selections.
- Complete a task β Click the checkmark icon
- Edit a task β Click the edit icon (pencil)
- Delete a task β Click the delete icon (trash)
- Move between quadrants β Drag and drop tasks, or edit to change urgency/importance
View your productivity metrics and patterns by switching to Dashboard view (toggle in header):
- Task Overview β Total, active, and completed task counts
- Completion Rate β Percentage of tasks completed
- Quadrant Distribution β See where your tasks are concentrated
- 7-Day Trend β Visualize task completion over the past week
- Due Date Analysis β Track overdue and upcoming tasks
- Activity Heatmap β Identify your most productive days of the week
Use these insights to:
- Identify bottlenecks (too many tasks in Q1? You might be reactive instead of proactive)
- Validate focus (Q2 should be where you spend most time)
- Spot patterns (completing more tasks on certain days?)
Select and manage multiple tasks at once:
- Click "Select Tasks" button in the header to enter selection mode
- Click checkboxes on task cards to select multiple tasks
- Use the floating action bar at the bottom to:
- Complete selected β Mark all as done
- Reopen selected β Mark completed tasks as active
- Delete selected β Remove multiple tasks at once
- Move to quadrant β Change urgency/importance for all selected
- Add tags β Apply tags to multiple tasks
- Assign dependencies β Set up blocking relationships
This is especially useful for:
- Weekly reviews (bulk moving tasks between quadrants)
- Cleaning up old tasks (bulk delete completed items)
- Organizing projects (bulk tagging related tasks)
Define relationships between tasks where one must be completed before another:
- When creating or editing a task, use the Dependencies section
- Search for tasks to add as dependencies (tasks that must be completed first)
- Selected dependencies appear as chips with remove buttons
- The system prevents circular dependencies (A depends on B, B depends on A)
Why use dependencies?
- Break down large projects into ordered steps
- Ensure prerequisite work is done before starting next phase
- Visualize task relationships and blockers
Example: "Deploy to production" depends on "Run tests" and "Code review approved"
Automatically recreate tasks on a schedule:
- When creating or editing a task, set Recurrence to Daily, Weekly, or Monthly
- When you mark the task complete, a new instance is automatically created with the next due date
- Subtasks reset to uncompleted in the new instance
- Recurring tasks show a repeat icon (β³) on the task card
Use cases:
- Daily standup prep
- Weekly status reports
- Monthly expense reviews
Tags β Categorize tasks with custom labels:
- Add tags like
#work,#personal,#healthin the task form - Tags appear as colored chips on task cards
- Use search to filter by tag
Subtasks β Break complex tasks into steps:
- Add checklist items in the task form
- Toggle subtask completion independently
- Progress bar shows completion (e.g., 2/5)
Notifications β Get reminded before tasks are due:
- When setting a due date, choose when to be notified (5 mins, 15 mins, 1 hour, 1 day before)
- Enable/disable notifications per task with the checkbox
- Grant browser notification permissions when prompted
Global Shortcuts:
βK/Ctrl+Kβ Open command palette (universal search and actions)nβ Create a new task/β Focus the search bar?β Show help dialog
Smart View Shortcuts:
1-9β Activate pinned smart view at that position0β Clear active smart view filter
Command Palette Shortcuts:
βM/Ctrl+Mβ View matrixβD/Ctrl+Dβ View dashboardβT/Ctrl+Tβ Toggle themeβ,/Ctrl+,β Open settings
Use the command palette (βK) to discover all available shortcuts and actions!
Since all your tasks are stored locally in your browser:
- Click the Settings icon in the header
- Click "Export Tasks" to download a JSON backup
- Click "Import Tasks" to restore from a backup file
When importing, you'll choose between two modes:
- Merge β Keep existing tasks and add imported tasks (safer, prevents data loss)
- Replace β Delete all existing tasks and replace with imported tasks (shows warning)
Important: Clearing your browser data will delete your tasks. Export regularly to avoid data loss!
GSD can be installed on your desktop or mobile device for offline access:
- Desktop (Chrome/Edge): Click the install icon in the address bar
- Mobile (iOS Safari): Tap Share β "Add to Home Screen"
- Mobile (Android Chrome): Tap the three-dot menu β "Install app"
Visit the Install page for detailed instructions.
- Start your day in Quadrant 2 β Focus on important, non-urgent tasks before firefighting begins
- Review weekly β Use batch operations to move tasks between quadrants as priorities shift
- Be honest about urgency β Not everything is urgent, even if it feels that way
- Eliminate ruthlessly β If a task stays in Q4 for weeks, delete it
- Export regularly β Keep backups of your task data
- Check the dashboard weekly β Review your completion rate and quadrant distribution to identify patterns
- Use dependencies for projects β Break down large initiatives into sequential tasks with clear prerequisites
- Batch organize during reviews β Use selection mode to bulk tag, move, or clean up tasks
- Tag strategically β Use consistent tags like
#work,#personal,#waitingto enable filtering - Set recurring tasks for routines β Weekly reviews, daily planning sessions, monthly goal check-ins
- Break down complex tasks β Use subtasks to make large tasks less intimidating and more actionable
- Let notifications help β Set reminders for time-sensitive tasks, but don't rely on them exclusively
GSD Task Manager works completely offline by default, but includes an optional cloud sync backend powered by a self-hosted PocketBase instance.
The backend provides optional cloud sync via PocketBase at https://api.vinny.io:
- PocketBase Backend β Self-hosted on AWS EC2, user owns the server and data
- OAuth Authentication β Secure login with Google or GitHub via PocketBase built-in auth
- Multi-Device Sync β Keep tasks in sync across devices with last-write-wins (LWW) resolution
- Realtime Updates β PocketBase SSE (Server-Sent Events) for instant cross-device sync
- Device Management β Manage and revoke access for specific devices
- MCP Server Integration β AI-powered task management through Claude Desktop (see below)
The production deployment uses a CloudFront Function for intelligent URL routing at edge locations:
Purpose: Next.js static exports with trailingSlash: true create files like /dashboard/index.html, but S3 bucket endpoints don't automatically serve index.html for directory paths. Without URL rewriting, navigating to /dashboard/ would return a 403 error.
Solution: A CloudFront Function runs on every request with sub-millisecond latency to rewrite URLs before they reach S3:
/dashboard/β/dashboard/index.htmlβ/install/β/install/index.htmlβ/β/index.htmlβ
Files:
cloudfront-function-url-rewrite.js- Edge function code (JavaScript runtime)scripts/deploy-cloudfront-function.sh- Automated deployment script
Deployment:
# Deploy or update the CloudFront Function
./scripts/deploy-cloudfront-function.shThis creates the function, publishes it, attaches it to the CloudFront distribution, and invalidates the cache. Changes propagate to all edge locations within 2-3 minutes.
Why CloudFront Functions?
- Runs at CloudFront edge (sub-ms latency, closer to users than Lambda@Edge)
- Lightweight JavaScript runtime (no Node.js overhead)
- Processes 100% of viewer requests before reaching origin (S3)
- Cost-effective at scale (charged per million requests)
Run the entire GSD stack (static site + PocketBase backend) in a single Docker container using Caddy as the HTTPS reverse proxy:
# Clone and build
cd docker
docker compose up -d
# Access at https://localhostWhat's included:
- Multi-stage build β Bun builds the static Next.js export, then Caddy + PocketBase serve it
- Automatic HTTPS β Caddy handles TLS certificates (self-signed for localhost, Let's Encrypt for custom domains)
- PocketBase bundled β No separate database server needed; data persists in a Docker volume
- Non-root container β Runs as unprivileged user for security
Custom domain with Let's Encrypt:
environment:
- SITE_ADDRESS=gsd.example.comSee docker/ directory for Dockerfile, docker-compose.yml, Caddyfile, and entrypoint script.
π¦ npm Package: gsd-mcp-server
The Model Context Protocol (MCP) Server enables AI assistants like Claude or ChatGPT to manage your tasks through natural language.
What is MCP?
- MCP is Anthropic's protocol for connecting AI assistants to external data sources
- The GSD MCP Server runs locally on your machine and communicates with Claude, ChatGPT, or any MCP-compatible AI tool
- Provides full CRUD access to your synced tasks with dry-run safety mode
Features:
- β Full CRUD Operations β Create, read, update, complete, and delete tasks with natural language
- β Bulk Operations β Update up to 50 tasks at once with dry-run preview
- β Productivity Analytics β Metrics, quadrant analysis, tag analytics, streak tracking
- β Smart Search & Filtering β Search across all task content, filter by quadrant, status, or tags
- β Retry & Caching β Exponential backoff for transient failures, in-memory TTL cache
- β Dry-Run Mode β Preview all write operations before committing
- β Self-Hosted β Your PocketBase server stores data; MCP server communicates directly with it
Available Tools (20):
| Category | Tools |
|---|---|
| Read (7) | list_tasks, get_task, search_tasks, get_sync_status, list_devices, get_task_stats, get_token_status |
| Write (5) | create_task, update_task, complete_task, delete_task, bulk_update_tasks |
| Analytics (5) | get_productivity_metrics, get_quadrant_analysis, get_tag_analytics, get_upcoming_deadlines, get_task_insights |
| System (3) | validate_config, get_help, get_cache_stats |
Use Cases:
- Weekly Planning β "What are my urgent tasks this week?"
- Task Creation β "Add a task to schedule my dentist appointment, tag it #personal"
- Productivity Analysis β "Show my quadrant distribution and completion streaks"
- Smart Prioritization β "Which tasks should I focus on today?"
- Bulk Updates β "Move all overdue #work tasks to Do First quadrant"
Security:
- Auth token stored only in local Claude Desktop config
- Tasks stored on your self-hosted PocketBase server (you own the data)
- Dry-run mode available for all write operations
- Opt-in feature (requires explicit configuration)
Quick Start:
npx gsd-mcp-server --setupSee packages/mcp-server/README.md for detailed setup instructions.
v7.x (Latest) π
- β Docker Self-Hosting β Single-container deployment with Caddy + PocketBase (#171)
- β TanStack Integration β TanStack Virtual, Query, and Form for improved performance (#168)
- β Eisenhower Matrix Launch Screen β Visual onboarding experience (#169)
- β UX Polish β Shadows, gradients, micro-interactions, progressive disclosure, button variants (#167, #173, #179)
- β Tooltip Portals β Tooltips render via portal to prevent overflow clipping (#178)
- β Security Hardening β Patched flatted, undici, path-to-regexp, picomatch vulnerabilities
- β Non-root Docker β Container runs as unprivileged user (#172)
- β Coding Standards β DRY error handling, reduced nesting, split oversized components (#170, #174, #180)
v6.9.0
- β PocketBase Migration β Replaced Cloudflare Workers backend with self-hosted PocketBase
- β Simplified Sync β Last-write-wins (LWW) replaces vector clocks; SSE for realtime updates
- β Google + GitHub OAuth β PocketBase built-in auth replaces custom OIDC
- β MCP Server Updated β Uses PocketBase SDK directly, removed encryption layer
- β ~23,700 lines removed β Deleted worker/, crypto, vector clocks, old sync engine
v5.10.0
- β Command Palette β Universal βK interface for quick actions, navigation, and task search
- β Quick Settings Panel β Slide-out panel for frequently-adjusted settings
- β Smart View Pinning β Pin up to 5 smart views to header with keyboard shortcuts (1-9, 0 to clear)
v5.0.0
- β MCP Server β AI-powered task management with 20 tools (read, write, analytics, system)
- β OAuth Cloud Sync β Multi-device sync with Google/GitHub login
- β Security Hardening β Comprehensive security audit and fixes
v3.x
- β Next.js 16 with Turbopack and React Compiler
- β Dashboard and analytics system
- β Batch operations and task dependencies
- β CloudFront edge routing for static export SPA navigation
v2.0.0
- β Recurring tasks, smart views, tags, subtasks, and advanced filtering
For developers interested in contributing, self-hosting, or deploying:
- CLAUDE.md β Architecture, database schema, and project context
- packages/mcp-server/README.md β MCP server setup and API reference
# Install dependencies
bun install
# Run development server
bun dev
# Run tests
bun run test
# Type checking
bun typecheck
# Build for production
bun run build- Frontend: Next.js 16, React 19, TypeScript, Tailwind CSS v4
- Data Layer: Dexie (IndexedDB), TanStack Query/Virtual/Form, Zod validation
- Charts: Recharts for analytics visualizations
- Backend (Optional): Self-hosted PocketBase (SSE realtime, LWW sync)
- Auth (Optional): OAuth 2.0 with Google/GitHub via PocketBase
- Deployment: S3/CloudFront static hosting or Docker (Caddy + PocketBase)
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE for details
- Inspired by the Eisenhower Matrix productivity framework
- Built with Claude Code


