Task tracking tool for open-source developers. Track proposals, assignments, PRs, reviews, and payments across GitHub repositories — with an AI agent that automatically detects status changes.
- Notion-style table — Inline-editable task board with 12-status workflow, custom columns, and status group tabs
- AI-powered sync — LangGraph.js agent analyzes GitHub activity (issues, PRs, reviews, comments) and suggests status updates using Claude
- GitHub OAuth — Sign in with GitHub, auto-link repos
- Custom columns — Add your own text, date, number, URL, or select fields
- Encrypted credentials — API keys and tokens stored with AES-256-GCM at rest
- Auto-sync — Scheduled sync via GitHub Actions cron (every 6 hours)
- Chrome extension — View and update task statuses directly on GitHub issue and PR pages. On PRs, automatically detects linked issues from the description and bulk-updates their statuses
- Framework: Next.js 16 (App Router, Turbopack)
- Database & Auth: Supabase (PostgreSQL, RLS, OAuth, Realtime)
- AI Agent: LangGraph.js + @langchain/anthropic (Claude)
- UI: shadcn/ui (Base UI) + Tailwind CSS 4
- Language: TypeScript 5, React 19
- Node.js 18+
- A Supabase project
- GitHub OAuth app configured in Supabase Auth
- Clone the repo:
git clone https://github.com/your-username/tasker.git
cd tasker- Install dependencies:
npm install- Copy the environment file and fill in your values:
cp .env.example .env.local- Apply database migrations:
npx supabase db push- Run the dev server:
npm run devOpen http://localhost:3000.
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Yes | Supabase anonymous key |
SUPABASE_SERVICE_ROLE_KEY |
Yes | Supabase service role key (server-only) |
ENCRYPTION_KEY |
Yes | 32-byte hex string for AES-256-GCM encryption |
CRON_SECRET |
Yes | Bearer token for cron endpoint auth |
Generate an encryption key:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"The cron workflow at .github/workflows/sync-cron.yml calls /api/cron/sync every 6 hours. Add these as GitHub repo secrets:
CRON_SECRET— matches your env varAPP_URL— your deployed URL (e.g.,https://tasker.vercel.app)
Tasks follow a 12-status workflow grouped into three phases:
| To-do | In Progress | Complete |
|---|---|---|
| In Proposal | Assigned | Paid |
| Promising | Reviewing | Wasted |
| Got C+ | Changes Required | Regression |
| Update Proposal | Awaiting Payment | |
| Merged |
The AI agent detects transitions by analyzing GitHub events (assignments, PR reviews, merges, payment-related comments).
The extension/ folder contains a Chrome extension (Manifest V3) that adds Tasker status widgets directly to GitHub.
- On issues — adds a status widget in the sidebar to view/update the task status
- On PRs — adds a status button in the header row. Parses linked issue references (
#NNNNN) from the PR description and lets you bulk-update all tracked issues at once
cd extension
npm install
npm run buildThen load extension/dist as an unpacked extension in Chrome (chrome://extensions → Developer mode → Load unpacked).
src/
├── app/
│ ├── (dashboard)/ # Protected routes (tasks, settings)
│ ├── auth/ # Login, signup, OAuth callback
│ └── api/ # sync, settings, cron endpoints
├── components/
│ ├── task-table/ # Notion-style table + cell editors
│ └── ui/ # shadcn/ui components
├── hooks/ # use-tasks, use-custom-columns
├── lib/
│ ├── agent/ # LangGraph sync agent (graph, prompts, runner)
│ ├── supabase/ # Client, server, middleware
│ ├── encryption.ts # AES-256-GCM encrypt/decrypt
│ ├── github.ts # GitHub API wrapper
│ └── status.ts # 12-status config and helpers
└── types/ # TypeScript interfaces
extension/
├── src/
│ ├── background/ # Service worker (auth, task CRUD, batch updates)
│ ├── content/ # Content script + StatusWidget (issue/PR modes)
│ ├── popup/ # Extension popup (HTML/CSS/TS)
│ └── shared/ # Types, messages, constants
├── icons/ # Extension icons (16, 48, 128)
└── manifest.json # Manifest V3 config
MIT