## 1. Model & Types - [x] 1.1 Add User struct to `model/types.go` (id, name, username, email) - [x] 1.2 Add export-specific portable types to `model/types.go`: ExportEnvelope, ExportProject, ExportBoard, ExportList, ExportLabel, ExportCard, ExportTaskList, ExportTask, ExportComment ## 2. User Client - [x] 2.1 Create `client/users.go` with `ListUsers()` method (GET /api/users) ## 3. Project Export - [x] 3.1 Create `client/export.go` with `ExportProject(ctx, projectID, boardFilter)` method that orchestrates data gathering: fetch users (build userId→name map), fetch board(s) with included data, fetch per-card comments/task lists/tasks, assemble into portable export types - [x] 3.2 Create `cmd/export.go` with `project export [--board ]` command: resolve project by name or ID, call ExportProject, marshal JSON to stdout - [x] 3.3 Add project name/ID resolution helper: list projects, match by ID or exact name, error on ambiguous match ## 4. Project Import - [x] 4.1 Create `client/import.go` with `ImportProject(ctx, export)` method that: resolves/creates project by name, checks board name conflicts (fail-fast), creates boards → lists → labels → cards → card-labels → task lists → tasks → comments in order, maintains name→ID maps at each level, reports progress to stderr - [x] 4.2 Create `cmd/import.go` with `project import [--file ]` command: read JSON from stdin or file, unmarshal, validate version, call ImportProject ## 5. Wire Up & Integration - [x] 5.1 Register export and import subcommands under project command in `cmd/root.go` or `cmd/project.go` - [x] 5.2 End-to-end test: export a project, import to same instance under different project name, verify structure matches