What it does today.
Only what is shipped — no roadmap items dressed up as features. Each section maps to code you can read on GitHub.
Tasks: board, list, and Gantt
Three views of the same task collection. Drag cards between status columns on the board. Filter, sort, search, and bulk-edit on the list. Plot tasks, sprints, or milestones on a month-scale Gantt timeline.
- Status, priority, type, platform, category, assignee, sprint, milestone, project, story points.
- Bulk-set status, priority, project, sprint, milestone, assignee, or delete from the list.
- Per-task activity log with field-level history.
- Markdown description with attachments, code references, and task-to-task dependencies.
Notes
A separate, simpler collection for thoughts that aren't tasks. Markdown body, tags, pinning, and project attribution. Pinned notes float to the top of every view.
- Fuzzy search over title, body, and tags.
- Bulk-pin, bulk-assign to a project, bulk-delete.
- Soft-delete propagates both ways between the web and the Caspian-Notes extension.
Sprints and milestones
Sprints group tasks into a time-boxed iteration with a start, end, and goal. Milestones are named delivery goals that span multiple sprints. Both render on the Gantt view and track progress as their tasks move through statuses.
Projects
Projects are the work-boundary container — a slice of a workspace with its own members, tasks, notes, sprints, milestones, and optional GitHub repository. Workspace members can see what exists; project members can edit.
- Per-project member list with maintainer / contributor / viewer roles.
- Per-project Sprints and Milestones tabs.
- Each project picks one repository from the workspace pool as its primary GitHub binding.
GitHub repo sync (optional)
Connect GitHub through Firebase Auth's GitHub provider — there is no custom OAuth backend and no client secret to leak. The workspace owner adds repositories to a shared pool; each project picks one as its primary repo.
- Tasks attributed to a project with a primary repo push to GitHub Issues.
- Tasks without a project are Caspian-only — they never touch GitHub.
- Either the web or the extension can win the push; the other side sees the ack and skips.
- Your GitHub token lives in React state during the picker session. It is never persisted server-side.
VS Code extension pairing
Caspian-Taskmaster for tasks, Caspian-Notes for notes. Both pair through the browser — sign in, pick a workspace, optionally pick a default project, confirm. The extension receives a Firebase custom token bound to that pair only.
- 15-second outbound and inbound sync cycles.
- Writer tags on every edit so the server can tell who wrote what and prevent loops.
- Works offline — the extension queues writes and flushes them when connectivity returns.
Workspaces, invites, and roles
Each workspace has a unique slug (the URL identity) and a member list. Owners invite by email; invites carry a 32-byte token and an expiry. Accepting an invite adds you to the workspace and routes you straight to the right page.
- Owner / member roles at the workspace level.
- Maintainer / contributor / viewer roles at the project level.
- Multi-tenant by design — one user can belong to many workspaces.
Search and notifications
Header search across tasks, notes, sprints, milestones, projects, and members. In-app notifications for assignments, status changes, comments, workspace membership, and new notes in your projects. Per-user opt-out for each event type. No email or push — the bell is the only surface.