Data Types
The TaskJunky data model — Task, Project, List, Rule, Activity, and enums.
All data is stored in Neon Postgres via Drizzle ORM. Fields marked with * are required.
Fields ending with ? are nullable.
Project → List (parentListId = sublist) → Task (parentTaskId = subtask)
- Global Inbox has no project (uncategorized)
- Lists can exist without a project
- Tasks can live at any level
| Field | Type | Description |
|---|
id * | uuid | Unique identifier |
title * | string | Task title |
description | string? | Task description |
status * | enum | todo | in_progress | done |
priority * | enum | low | medium | high | urgent |
userId * | string | Owner user ID |
listId | uuid? | Parent list ID |
parentTaskId | uuid? | Parent task ID (for subtasks) |
position * | number | Sort position within list |
assignee | enum? | user | claude |
source | enum? | mcp | web | ios | api | github |
notes | string? | User/AI editable notes |
aiNotes | string? | Append-only progress notes from AI (via add_note) |
plan | string? | Game plan, spec, or checklist (markdown) |
dueDate | timestamp? | Due date |
completedAt | timestamp? | When task was completed |
githubIssueNumber | number? | Linked GitHub issue |
githubPrNumber | number? | Linked GitHub PR |
createdAt * | timestamp | Creation time |
updatedAt * | timestamp | Last update time |
| Field | Type | Description |
|---|
id * | uuid | Unique identifier |
name * | string | Project name |
description | string? | Project description |
icon | string? | Emoji icon |
color | string? | Hex color |
userId * | string | Owner user ID |
githubOwner * | string | GitHub repo owner |
githubRepo * | string | GitHub repo name |
githubRepoId | number? | GitHub repo ID |
isArchived * | boolean | Whether archived |
createdAt * | timestamp | Creation time |
| Field | Type | Description |
|---|
id * | uuid | Unique identifier |
name * | string | List name |
description | string? | List description |
icon | string? | Emoji icon |
color | string? | Hex color |
userId * | string | Owner user ID |
projectId | uuid? | Parent project |
parentListId | uuid? | Parent list (for sublists) |
isDefault * | boolean | Is this the Inbox |
isArchived * | boolean | Whether archived |
createdAt * | timestamp | Creation time |
| Field | Type | Description |
|---|
id * | uuid | Unique identifier |
content * | string | Rule instruction text |
isActive * | boolean | Whether enabled |
priority * | number | Sort order (higher = first) |
userId * | string | Owner user ID |
createdAt * | timestamp | Creation time |
| Field | Type | Description |
|---|
id * | uuid | Unique identifier |
taskId | uuid? | Related task |
listId | uuid? | Related list |
projectId | uuid? | Related project |
actor * | enum | user | claude |
action * | enum | created | updated | completed | deleted | moved | commented | linked |
metadata | jsonb? | Extra data (status changes, file paths, etc.) |
createdAt * | timestamp | When it happened |
| Enum | Values |
|---|
task_status | todo, in_progress, done |
task_priority | low, medium, high, urgent |
task_source | mcp, web, ios, api, github |
task_assignee | user, claude |
activity_action | created, updated, completed, deleted, moved, commented, linked |
activity_actor | user, claude |