The Eisenhower Matrix Goes Local

Many developers face a constant flood of tasks, each demanding attention. The GSD Task Manager tackles this head-on with a privacy-first Eisenhower matrix that sorts work into four clear categories: Do First, Schedule, Delegate, and Eliminate. The live application lives at gsd.vinny.dev and ships version 13.9.2. The product sits in its v11 single-matrix shell, built for offline-first local storage with optional PocketBase sync and a separate GSD MCP server. The core proposition is simple: stop juggling and start finishing.

The matrix itself maps urgency against importance. Do First claims urgent and important work. Schedule holds important but not-urgent items. Delegate captures urgent but unimportant tasks. Eliminate gathers neither-urgent-nor-important entries. This framing is not new, but GSD implements it as a responsive four-quadrant interface where each quadrant can receive tasks via drag-and-drop or keyboard focus. Pressing Option+1 through Option+4 (Alt on non-Mac keyboards) moves focus between quadrants, while Shift+N opens the full composer and n starts Quick Capture.

Quadranes, Capture and Daily Flow

The user interface lives in the browser and adapts to any screen size. A responsive four-quadrant matrix supports drag-and-drop movement of tasks between zones. Quick Capture sits ready at the top of the interface; pressing n opens it instantly. For richer entry, Shift+N launches the full composer. Search lives at /, help at ?, and quadrant focus uses the option-number shortcuts. The in-app help drawer serves as the canonical ledger for every keyboard command.

Tasks carry due dates, tags, and dependency links. The application prevents circular dependencies when links are drawn between items. Archive functionality removes completed work from active views, while dashboard and review analytics surface patterns over time. Smart Views can be toggled on or off as an optional filter layer. Retired surfaces from v7 and v8—selection-mode batch operations, the Quick Settings panel, and smart-view pinning shortcuts—are absent from the v11 shell, which concentrates on the core matrix experience.

Persistence, Backup and Offline First

Local task data lives in the browser's IndexedDB via the Dexie wrapper. The application runs entirely without a backend; tasks are stored offline and survive browser restarts. Because clearing browser data erases local tasks, the project urges users to export backups regularly. JSON import and export are built into the settings page, and the whole package runs as an offline PWA. This local-only mode is the default, and no account creation is required to start adding tasks.

When cloud sync becomes desirable, the application connects to a configured PocketBase server. The hosted configuration points at https://api.vinny.io, but self-hosting is fully documented under the docker/ directory. SECURITY.md describes the precise trust and token-storage posture, including encryption-at-rest hooks. Multi-device sync supports Google, Apple, or GitHub OAuth, and realtime updates arrive via server-sent events. Despite these options, the product explicitly positions sync as optional—the core experience never requires it.

Sync, MCP Server and Extended Tooling

Beyond the web interface, a separately installed MCP server provides 19 task, analytics, and diagnostic tools. These include validated writes and dry-run-aware operations, allowing scripts to check actions before committing them. The server runs as a standalone installation and communicates with the web app over the network when sync is enabled. Diagnostic endpoints surface health information, task counts, and sync history.

The MCP server also doubles as a gateway for realtime event flow. When PocketBase sync is active, server-sent events push updates to all connected clients instantly. This means a task added on one device appears on another without manual refresh. The 19 tools cover everything from simple task counts to complex dependency graph analysis, giving power users leverage without leaving the command line.

Technologies Under the Hood

The client is a Next.js 16 App Router static export, rendered entirely on the client side. React 19, TypeScript, and Tailwind CSS form the UI stack. The Violet Frost Inkwell token set styles the light and dark "GSD Editorial" themes, both meeting WCAG AA as the accessibility floor. Data persistence uses Dexie over IndexedDB locally, while PocketBase handles optional cloud sync.

On the tooling side, the project runs on Bun 1.3.14 with Node.js 22.22.2 or later (24.15+ or 26+ also supported). Bun executes package scripts, so tests, lint, and builds run on the installed Node version. Vitest handles unit and integration coverage, while Playwright tests Chromium, Firefox, and WebKit for end-to-end browser coverage. Bun workspaces include packages/mcp-server/, keeping the server code in a separate directory alongside the main web application.

The canonical command suite includes:

- bun install to fetch dependencies

- bun dev to start the local development server

- Open http://localhost:3000 to view the fresh profile at /about

- bun run test and bun run test -- --coverage for test suites

- bun typecheck, bun lint, and bun run quality:shape for code quality

- bun run license:check and bun audit --audit-level=high for supply-chain hygiene

- bun run build to produce the static export in the out/ directory

- bun run test:e2e for browser-based end-to-end checks

The project instructs users to use bun run test rather than the bare bun test command, as the latter invokes Bun's built-in runner instead of Vitest. An optional authenticated PocketBase harness runs with bun run test:system:pocketbase.

Production deployment targets only gsd.vinny.dev; a development deploy was retired on 2026-09-11. The docker/Dockerfile assembles a self-hosted Caddy and PocketBase image. CloudFront response-header policies and related scripts manage production headers, but uploading an artifact does not prove the CDN or a running container serves it—verification against the deployed URL is required.

Before announcing a new release version, the project compares the README version against package.json, verifies every feature claim against the running shell, runs the full canonical check suite, and updates GitHub release notes, SECURITY.md, and the trust-boundary map if claims have changed. The project treats source code, tests, build artifacts, deployment, and live runtime as separate evidence states. Contributors should read CONTRIBUTING.md before making changes, and vulnerability reports flow through the private process in SECURITY.md, not a public issue.

Running Your Own Setup

Getting started requires Bun, a current browser, and a few minutes. Running bun install pulls the dependency tree; bun dev starts the development server at localhost:3000. A fresh browser profile begins at the /about page, where an "Open App" call to action invites entry into the matrix. No PocketBase instance is needed for local task CRUD operations.

For sync, follow the self-hosting instructions in docker/ to spin up Caddy and PocketBase. Point the application at your own server URL and configure OAuth if desired. The MCP server binary lives in packages/mcp-server/ and can be installed separately for access to the 19 diagnostic tools.

Export tasks via JSON whenever a browser reset looms. The project's stance is clear: local data is ephemeral by design, and the user controls every aspect of persistence, sync, and deployment.