Skip to main content
Glama
README.md
# TaskWise

TaskWise is a task manager and day planner for people and AI agents. Sign in with Google, keep your own private task list, connect any calendar with its private iCal link, and get a plan that fits your tasks into the free time between your events. It also runs as an MCP server, so AI agents can use the same tools. Formerly AlexaTasker.

## Status

| Area | Status |
|---|---|
| Google sign-in, one private task list per user | Working |
| Tasks (add, list, update, complete, delete) | Working |
| Day planner | Working. With a calendar it places tasks in free time slots |
| Calendar (any calendar via private iCal link, read-only) | Working. Common repeat rules supported, see Limits |
| Conflict detection (overlapping events) | Working |
| MCP server (`POST /mcp`) | Working |
| Account deletion | Working |
| LaunchGuard for the project owner | Working (admin account only) |
| LaunchGuard for anyone's public GitHub repo | Planned |
| "Ask TaskWise" chat box (Gemini) | Planned |
| Per-user API tokens for agents | Planned |
| Google Calendar sign-in (two-way) | Planned |
| Task breakdown | Planned |

## What it does

- **Tasks:** each person only sees their own. Every database query is limited to the signed-in user, and automated tests check this.
- **Planning:** orders tasks by overdue first, then due date, then priority. With a calendar connected, tasks get real time slots inside working hours (default 09:00-17:00). Tasks that do not fit are listed, and overlapping events are flagged.
- **Calendar:** paste your private iCal (.ics) link from Google, Outlook, Apple or most other calendars. The link is stored encrypted. The server only fetches public https addresses and blocks private network addresses.
- **LaunchGuard:** a readiness check that reads project files and settings and reports findings labeled CONFIRMED, SUSPECTED or NEEDS MANUAL REVIEW. It is not a penetration test and never claims an app is secure.

## Tech stack

Node.js 20, TypeScript, Express, Prisma, PostgreSQL (Neon), `@modelcontextprotocol/sdk`, zod.

## Project layout

```
src/        server, auth, tasks, planner, calendar, LaunchGuard
prisma/     database schema
public/     web dashboard
tests/      automated tests
```

## Installation

Requirements: Node.js 20 and a PostgreSQL database.

```
git clone https://github.com/MarvelousEkhator/TaskWise.git
cd TaskWise
npm install
cp .env.example .env     # then fill in the values
npx prisma generate
npx prisma db push
npm run build
npm start
```

For development, `npm run dev` restarts the server on changes.

## Environment variables

Copy `.env.example` to `.env`. Never commit `.env`.

| Variable | Purpose |
|---|---|
| `PORT` | Port to listen on (the host usually sets this) |
| `DATABASE_URL` | Postgres connection string (pooled) |
| `DIRECT_URL` | Postgres connection string (direct, used for schema changes) |
| `ALLOWED_ORIGIN` | Exact public address of the site, no trailing slash |
| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth client for sign-in |
| `SESSION_SECRET` | Long random value that protects login sessions |
| `CALENDAR_ENC_KEY` | 32 random bytes, base64 encoded; encrypts saved calendar links |
| `ADMIN_EMAIL` | The one Google account that can run LaunchGuard on this server |
| `TASKWISE_API_KEY` | Optional owner key so an agent can open the admin's own tasks |

## Google sign-in setup

1. In Google Cloud, create a project and an OAuth client of type Web application.
2. Add this redirect URI: `https://YOUR-SITE/auth/google/callback`
3. Put the client ID and secret in your environment vari

MIT LICENCE 
copyright © 2026 Marvelous Henry Osagieduwa Ekhator