# Projects (/entities/projects)



Build features, fix bugs, ship releases, track everything.

Project [#project]

Container for organized work.

```typescript
import { Noun } from 'digital-objects'

export const Project = Noun('Project', {
  name: 'string!',
  slug: 'string##',
  description: 'string',
  organization: '-> Organization',
  status: 'Active | Archived | Completed',
  visibility: 'Public | Private',
  owner: '-> Contact',
  startDate: 'date',
  targetDate: 'date',
  issues: '<- Issue.project[]',
  tags: 'string',
  archive: 'Archived',
  complete: 'Completed',
})
```

| Verb       | Event       | Description           |
| ---------- | ----------- | --------------------- |
| `archive`  | `Archived`  | Archive for reference |
| `complete` | `Completed` | Mark all work done    |

Issue [#issue]

Unit of work — bugs, features, tasks, epics.

```typescript
export const Issue = Noun('Issue', {
  title: 'string!',
  description: 'string',
  status: 'Open | InProgress | Review | Done | Closed',
  priority: 'Low | Medium | High | Urgent',
  type: 'Bug | Feature | Task | Epic',
  project: '-> Project.issues',
  assignee: '-> Contact',
  reporter: '-> Contact',
  labels: 'string',
  milestone: 'string',
  dueDate: 'date',
  comments: '<- Comment.issue[]',
  assign: 'Assigned',
  close: 'Closed',
  reopen: 'Reopened',
})
```

| Verb     | Event      | Description        |
| -------- | ---------- | ------------------ |
| `assign` | `Assigned` | Assign to a user   |
| `close`  | `Closed`   | Close the issue    |
| `reopen` | `Reopened` | Reopen after close |

Comment [#comment]

Discussion on Issues.

```typescript
export const Comment = Noun('Comment', {
  body: 'string!',
  author: '-> Contact',
  issue: '-> Issue.comments',
})
```
