diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..e528c98 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,240 @@ +# Gantt Board CLI Tools + +Command-line interface for managing tasks without using the browser. + +## Quick Start + +```bash +# List all tasks +./scripts/gantt-task-crud.sh list + +# List only open tasks +./scripts/gantt-task-crud.sh list open + +# Get specific task +./scripts/gantt-task-crud.sh get + +# Create a new task +./scripts/gantt-task-crud.sh create "Fix login bug" open high + +# Update task status +./scripts/gantt-task-crud.sh update status done + +# Attach a file to a task +./scripts/attach-file.sh ./document.pdf + +# View attached file content +./scripts/view-attachment.sh 0 +``` + +## Scripts + +### `gantt-task-crud.sh` - Task CRUD Operations + +Full Create, Read, Update, Delete for tasks. + +**Commands:** + +| Command | Arguments | Description | +|---------|-----------|-------------| +| `list` | `[status]` | List all tasks (optional: filter by status) | +| `get` | `` | Get a specific task by ID | +| `create` | ` [status] [priority] [project-id] [assignee-id]` | Create new task | +| `update` | `<task-id> <field> <value>` | Update any task field | +| `delete` | `<task-id>` | Delete a task | + +**Examples:** + +```bash +# List all tasks +./scripts/gantt-task-crud.sh list + +# List only tasks with status "in-progress" +./scripts/gantt-task-crud.sh list in-progress + +# Get a specific task +./scripts/gantt-task-crud.sh get 33ebc71e-7d40-456c-8f98-bb3578d2bb2b + +# Create a high priority open task +./scripts/gantt-task-crud.sh create "Update documentation" open high + +# Mark task as done +./scripts/gantt-task-crud.sh update 33ebc71e-7d40-456c-8f98-bb3578d2bb2b status done + +# Change priority +./scripts/gantt-task-crud.sh update 33ebc71e-7d40-456c-8f98-bb3578d2bb2b priority urgent + +# Assign to Matt (0a3e400c-3932-48ae-9b65-f3f9c6f26fe9) +./scripts/gantt-task-crud.sh update 33ebc71e-7d40-456c-8f98-bb3578d2bb2b assignee_id 0a3e400c-3932-48ae-9b65-f3f9c6f26fe9 + +# Delete a task +./scripts/gantt-task-crud.sh delete 33ebc71e-7d40-456c-8f98-bb3578d2bb2b +``` + +**Default Values:** +- Status: `open` +- Priority: `medium` +- Project ID: `1` +- Assignee: Max (9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa) + +--- + +### `attach-file.sh` - File Attachments + +Attach files to tasks. Files are stored as base64 data URLs in the database. + +**Usage:** +```bash +./scripts/attach-file.sh <task-id> <file-path> +``` + +**Supported file types:** +- `.md` / `.markdown` → `text/markdown` +- `.txt` → `text/plain` +- `.json` → `application/json` +- `.pdf` → `application/pdf` +- `.png` → `image/png` +- `.jpg` / `.jpeg` → `image/jpeg` +- `.gif` → `image/gif` +- Other → `application/octet-stream` + +**Examples:** + +```bash +# Attach a markdown file +./scripts/attach-file.sh 33ebc71e-7d40-456c-8f98-bb3578d2bb2b ./research-notes.md + +# Attach a PDF +./scripts/attach-file.sh 33ebc71e-7d40-456c-8f98-bb3578d2bb2b ./specs.pdf + +# Attach an image +./scripts/attach-file.sh 33ebc71e-7d40-456c-8f98-bb3578d2bb2b ./screenshot.png +``` + +**Verification:** +```bash +# Check attachment count after attaching +./scripts/gantt-task-crud.sh get 33ebc71e-7d40-456c-8f98-bb3578d2bb2b | jq '.attachments | length' +``` + +--- + +### `view-attachment.sh` - View Attached Files + +View the content of attached files from the command line. + +**Usage:** +```bash +./scripts/view-attachment.sh <task-id> [attachment-index] +``` + +**Examples:** + +```bash +# View first attachment (index 0) +./scripts/view-attachment.sh 33ebc71e-7d40-456c-8f98-bb3578d2bb2b + +# View second attachment (index 1) +./scripts/view-attachment.sh 33ebc71e-7d40-456c-8f98-bb3578d2bb2b 1 + +# List attachments first, then view +./scripts/gantt-task-crud.sh get 33ebc71e-7d40-456c-8f98-bb3578d2bb2b | jq '.attachments[].name' +``` + +**Text files** (md, txt, json) are displayed directly in the terminal. +**Binary files** (pdf, images) are saved to `/tmp/` and you get the path to open them. + +--- + +## Common Workflows + +### Create Task and Attach File + +```bash +# Create the task +TASK=$(./scripts/gantt-task-crud.sh create "Research iOS MRR" open high) +TASK_ID=$(echo "$TASK" | jq -r '.id') + +# Attach the research file +./scripts/attach-file.sh "$TASK_ID" ./ios-mrr-research.md + +# Verify attachment +./scripts/gantt-task-crud.sh get "$TASK_ID" | jq '.attachments | length' +``` + +### Complete a Task with Documentation + +```bash +# Attach completion notes first +./scripts/attach-file.sh 33ebc71e-7d40-456c-8f98-bb3578d2bb2b ./completion-notes.md + +# Then mark as done +./scripts/gantt-task-crud.sh update 33ebc71e-7d40-456c-8f98-bb3578d2bb2b status done + +# Verify +./scripts/gantt-task-crud.sh get 33ebc71e-7d40-456c-8f98-bb3578d2bb2b | jq '{status, attachments: .attachments | length}' +``` + +### Batch Operations + +```bash +# List all open tasks and get their IDs +./scripts/gantt-task-crud.sh list open | jq -r '.[].id' + +# Find tasks by title +./scripts/gantt-task-crud.sh list | jq '.[] | select(.title | contains("iOS")) | {id, title, status}' +``` + +--- + +## Requirements + +- `curl` - HTTP requests (built into macOS) +- `jq` - JSON parsing: `brew install jq` +- `uuidgen` - UUID generation (built into macOS) +- `base64` - File encoding (built into macOS) + +--- + +## How It Works + +These scripts use the **Supabase REST API** directly with a service role key. This means: + +- ✅ No browser needed +- ✅ No authentication flow +- ✅ Full access to all tasks +- ✅ Works from anywhere (cron, scripts, CLI) + +The service role key is embedded in the scripts (read-only risk for local dev). + +--- + +## Troubleshooting + +### "jq: command not found" +```bash +brew install jq +``` + +### "Error: File not found" +Make sure you're providing the correct relative or absolute path to the file. + +### Task ID format +Task IDs are UUIDs like `33ebc71e-7d40-456c-8f98-bb3578d2bb2b`. You can find them: +- In the URL when viewing a task in the UI +- From `list` command output +- From `create` command output + +### Empty response from list +If you get `[]`, either: +- There are no tasks +- The status filter doesn't match any tasks + +--- + +## Tips + +1. **Always verify after attach:** Run `get` and check `attachments | length` +2. **Use jq for filtering:** Pipe output to `jq` for precise data extraction +3. **Task URLs:** Tasks are viewable at `https://gantt-board.vercel.app/tasks/<task-id>` +4. **No edit on view:** `view-attachment.sh` shows content but doesn't save edits