TaskBoard Quick Reference
demonstrates: A one-page lookup for TaskBoard: interface actions, printing rules, the data model, the REST API endpoint index, and backend configuration knobs.
Fast lookup for TaskBoard. For step-by-step instructions, see the TaskBoard User Manual; for exhaustive request and response shapes, see the TaskBoard API Reference.
Interface actions
| Action | Where | Result | Prints? |
|---|---|---|---|
| Sign in | Cognito login (cloud builds) | Authenticates the user; boards are per-account | No |
| Switch board | Sidebar, click a subject | Loads that board | No |
| New board | Sidebar, + New board | Creates a board seeded with Pending / In Progress / Complete | No |
| Add task | Swimlane, + Add task | Creates a task in that swimlane | NEW TASK |
| Move task | Drag a card to another swimlane | Changes the task’s status | MOVED / COMPLETED |
| Open task | Click a card | Opens the task drawer | No |
| Edit description | Task drawer, description box (saves on blur) | Updates the task | No |
| Set progress | Task drawer, slider (saves on release) | Updates progress 0 to 100 | No |
| Add comment | Task drawer, comment box (Enter or Add) | Appends a comment | No |
| Delete task | Task drawer, Delete task (confirm) | Removes the task | No |
| Change backend | Sidebar, API URL (saves on blur; local/self-host builds only, hidden in cloud) | Reconnects the client | No |
Printing rules
| Event | Receipt | Card fields |
|---|---|---|
| Task created | NEW TASK | TASK, BOARD, SWIMLANE |
| Task moved to a different swimlane | MOVED | TASK, BOARD, MOVE (from -> to), PROGRESS bar |
| Task moved into a Complete / Completed / Done swimlane | COMPLETED | TASK, BOARD, MOVE, PROGRESS (snaps to 100%) |
| Any other action | none | none |
- A move within the same swimlane does not print (the status did not change).
- Printing is asynchronous and best-effort: it never blocks the request or changes the response.
- console mode (default) renders each receipt to the server log as a bordered ASCII card; printer mode prints it on the RP850. Printer hardware is optional; console mode requires none.
Receipt anatomy
NEW TASK
Mon Jul 14 2:05pm
========================
TASK
Draft cover letter
BOARD
Job Search
SWIMLANE
Pending
========================
Receipt width defaults to 24 characters (set by PRINT_WIDTH). The PROGRESS line on MOVED / COMPLETED cards renders as [######..........] 40% (16 slots at the default width).
Data model
Board (subject) 1--* Swimlane (status column)
Board 1--* Task
Task 1--* Comment
| Entity | Key fields | Notes |
|---|---|---|
| Board | id, name, description, position, created_at | Has a per-user owner (Cognito sub), not returned in responses. New boards seed swimlanes Pending, In Progress, Complete. Deleting a board cascades to its swimlanes, tasks, and comments. |
| Swimlane | id, board_id, name, position | Ordered by position. Names Complete / Completed / Done are treated as “finished”. |
| Task | id, board_id, swimlane_id, title, description, progress, position, created_at, updated_at, comments[] | progress is an integer 0 to 100. A task lives in exactly one swimlane. |
| Comment | id, task_id, author, body, created_at | author defaults to "me". Listed oldest first. |
REST API
Base URL: https://printchit.app in the cloud (behind API Gateway + CloudFront); defaults to http://127.0.0.1:8000 locally. Interactive docs at /docs, raw schema at /openapi.json.
| Method | Path | Purpose | Prints? |
|---|---|---|---|
| GET | /health | Liveness and current print mode ({ "status": "ok", "print_mode": ... }) | No |
| GET | /boards | List board summaries | No |
| POST | /boards | Create a board (seeds default swimlanes), 201 | No |
| GET | /boards/{id} | Full board with swimlanes and tasks (comments nested) | No |
| PATCH | /boards/{id} | Update name / description / position | No |
| DELETE | /boards/{id} | Delete board, 204 (cascades) | No |
| GET | /boards/{board_id}/swimlanes | List swimlanes, ordered by position | No |
| POST | /boards/{board_id}/swimlanes | Create a swimlane, 201 | No |
| PATCH | /swimlanes/{id} | Update name / position | No |
| DELETE | /swimlanes/{id} | Delete swimlane, 204 | No |
| GET | /tasks/{id} | Get one task with nested comments | No |
| POST | /tasks | Create a task, 201 (swimlane_id defaults to the board’s first) | NEW TASK |
| PATCH | /tasks/{id} | Update title / description / progress | No |
| POST | /tasks/{id}/move | Move to another swimlane (prints only if the swimlane changes) | MOVED / COMPLETED |
| DELETE | /tasks/{id} | Delete a task, 204 | No |
| GET | /tasks/{task_id}/comments | List comments, oldest first | No |
| POST | /tasks/{task_id}/comments | Add a comment, 201 | No |
| GET | /print-jobs | List queued receipts for the home agent (status, limit); queue mode | No |
| POST | /print-jobs/{id}/ack | Mark a queued receipt printed | No |
Conventions
- Media type:
application/jsonfor requests and responses. - Authentication: Cognito JWT bearer token on every endpoint except
/health; validated by API Gateway in the cloud, or skipped locally withAUTH_DISABLED=1. Boards are per-user (multi-tenant): a resource owned by another user returns404, never403. - IDs: integers, unique per resource.
- Timestamps: ISO 8601 datetimes.
- Status codes:
200OK,201Created,204No Content,400bad request,401unauthorized,404not found,422validation error.
Backend configuration
Read by app/config.py from the environment (or api/.env). The core knobs are in .env.example; the delivery and auth knobs below are set in the deployment environment.
| Variable | Default | Purpose |
|---|---|---|
PRINT_MODE | console | console logs receipts to the server log; printer prints on the RP850 |
PRINT_DELIVERY | direct | direct prints inline; queue enqueues jobs for the home print-agent (cloud) |
PRINT_OWNER_SUB | (unset) | In queue mode, only this owner’s boards enqueue prints; unset fails closed in the cloud |
PRINTER_NAME | POS-80 | Windows printer name used in printer mode |
PRINT_WIDTH | 24 | Receipt character width |
DATABASE_URL | sqlite:///./tasks.db | Storage location (Aurora Postgres in the cloud) |
CORS_ORIGINS | * | Comma-separated allowed origins (tightened in the cloud) |
AUTH_DISABLED | 1 | 1 disables auth for local dev; 0 requires Cognito JWTs |
COGNITO_ISSUER | (unset) | Cognito issuer URL used to validate tokens (cloud) |
COGNITO_AUDIENCE | (unset) | Accepted Cognito app client id(s), comma-separated |