itsvertical 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +7 -0
- package/README.md +180 -0
- package/cli/dist/index.js +2291 -0
- package/dist/assets/index-CgahjK2L.css +1 -0
- package/dist/assets/index-DZzk7eGT.js +177 -0
- package/dist/assets/logo-B8C4aIsj.png +0 -0
- package/dist/index.html +13 -0
- package/package.json +57 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright 2026 Seasoned Desenvolvimento de Software LTDA.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Vertical
|
|
2
|
+
|
|
3
|
+
**Tickets pile up, scopes get done. Project work isn't linear, it's Vertical.**
|
|
4
|
+
|
|
5
|
+
Vertical is a file-based project management tool built around the nine-box grid. No accounts, no cloud, no setup. Just a `.vertical` file and your terminal.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npx itsvertical new my-project.vertical "My Project"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Built for AI agents
|
|
12
|
+
|
|
13
|
+
Vertical is designed to be used through AI coding agents like [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview). The CLI is the primary interface — every entity is addressed by ID, every command accepts `--json` for structured output, and errors are machine-readable. An agent can create a project, break work into scopes, add tasks, and track progress — all through the command line.
|
|
14
|
+
|
|
15
|
+
The browser UI (`itsvertical open`) is there for when you want to see the board visually, drag things around, or get a quick overview.
|
|
16
|
+
|
|
17
|
+
## How it works
|
|
18
|
+
|
|
19
|
+
Vertical organizes work into a 3x3 grid of boxes. Each box can hold tasks, and each box can be split into layers (steps). Tasks move between boxes, layers break work into phases, and things get marked done as you go.
|
|
20
|
+
|
|
21
|
+
Everything is saved to a single `.vertical` file. Version it with git, share it with teammates, or let your agent manage it.
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
npm install -g itsvertical
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Or run directly with npx:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
npx itsvertical new my-project.vertical "My Project"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Commands
|
|
36
|
+
|
|
37
|
+
All entities are addressed by ID. Use `itsvertical show` to see IDs. Every command accepts `--json` to output the full board state as JSON (useful for agents).
|
|
38
|
+
|
|
39
|
+
### Project
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
itsvertical new <path> <name> # Create a new .vertical file
|
|
43
|
+
itsvertical open <file> # Open in the browser UI
|
|
44
|
+
itsvertical show <file> # Print the board to the terminal
|
|
45
|
+
itsvertical show <file> --json # Output the board as JSON
|
|
46
|
+
itsvertical show <file> --box <slice-id> # Show only a specific box
|
|
47
|
+
itsvertical rename <file> <name> # Rename the project
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Tasks
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
itsvertical task add <file> <layer-id> <name> # Add a task to a layer
|
|
54
|
+
itsvertical task add <file> <lid> <n> --after <tid> # Insert after a specific task
|
|
55
|
+
itsvertical task done <file> <task-id> # Mark a task as done
|
|
56
|
+
itsvertical task undone <file> <task-id> # Mark a task as not done
|
|
57
|
+
itsvertical task rename <file> <task-id> <name> # Rename a task
|
|
58
|
+
itsvertical task delete <file> <task-id> # Delete a task
|
|
59
|
+
itsvertical task move <file> <task-id> <layer> # Move a task to another layer
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Boxes
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
itsvertical box rename <file> <slice-id> <name> # Rename a box
|
|
66
|
+
itsvertical box clear <file> <slice-id> # Clear box name
|
|
67
|
+
itsvertical box swap <file> <id-1> <id-2> # Swap two box positions
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Layers
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
itsvertical layer split <file> <task-id> # Split at a task (tasks after go to new layer)
|
|
74
|
+
itsvertical layer merge <file> <layer-id> # Merge with the next layer
|
|
75
|
+
itsvertical layer rename <file> <layer-id> <n> # Rename a layer
|
|
76
|
+
itsvertical layer clear <file> <layer-id> # Clear layer name
|
|
77
|
+
itsvertical layer status <file> <layer-id> done # Set status to "done"
|
|
78
|
+
itsvertical layer status <file> <layer-id> none # Clear status
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Browser UI
|
|
82
|
+
|
|
83
|
+
`itsvertical open` starts a local server and opens the board in your browser. Click **Save** or press **Ctrl+S** / **Cmd+S** to write changes back to the file.
|
|
84
|
+
|
|
85
|
+
## The nine-box grid
|
|
86
|
+
|
|
87
|
+
The board is a 3x3 grid. Each box represents a scope of work.
|
|
88
|
+
|
|
89
|
+
- **Name boxes** by clicking the title area
|
|
90
|
+
- **Drag boxes** to rearrange them in the grid
|
|
91
|
+
- **Add tasks** by clicking the input at the bottom of a box
|
|
92
|
+
- **Edit tasks** by clicking on them
|
|
93
|
+
- **Mark tasks done** with the circle checkbox
|
|
94
|
+
- **Drag tasks** between boxes and layers
|
|
95
|
+
- **Split layers** with the scissor tool (click ✂ or press **S**, then click a task to split at that point)
|
|
96
|
+
- **Unsplit layers** by focusing the dashed separator and pressing **Delete**
|
|
97
|
+
- **Set layer status** to "done" via the status dropdown
|
|
98
|
+
|
|
99
|
+
## Keyboard shortcuts
|
|
100
|
+
|
|
101
|
+
| Key | Action |
|
|
102
|
+
|-----|--------|
|
|
103
|
+
| **S** | Toggle split mode |
|
|
104
|
+
| **Escape** | Exit split mode / deselect |
|
|
105
|
+
| **Delete** / **Backspace** | Delete focused task or unsplit focused layer |
|
|
106
|
+
| **Enter** | Save inline edit |
|
|
107
|
+
| **Shift+Enter** | Save edit and create a new task below |
|
|
108
|
+
| **Ctrl/Cmd+S** | Save to file |
|
|
109
|
+
|
|
110
|
+
## The `.vertical` file
|
|
111
|
+
|
|
112
|
+
It's just JSON. You can version it with git, share it with teammates, or back it up however you like.
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"version": 1,
|
|
117
|
+
"project": { "name": "My Project" },
|
|
118
|
+
"slices": [],
|
|
119
|
+
"layers": [],
|
|
120
|
+
"tasks": []
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Development
|
|
125
|
+
|
|
126
|
+
Source at [github.com/seasonedcc/vertical](https://github.com/seasonedcc/vertical).
|
|
127
|
+
|
|
128
|
+
### Architecture
|
|
129
|
+
|
|
130
|
+
The package has two parts:
|
|
131
|
+
|
|
132
|
+
- **SPA** (`app/`) — A React app built with Vite. This is the nine-box board UI. Built to `dist/`.
|
|
133
|
+
- **CLI** (`cli/`) — A Node.js CLI built with tsup. Starts a local HTTP server that serves the SPA and provides a read/write API for the `.vertical` file. Built to `cli/dist/`.
|
|
134
|
+
|
|
135
|
+
The CLI and SPA share code: types (`app/state/types.ts`), serialization (`app/file/format.ts`), and project creation (`app/state/initial-state.ts`).
|
|
136
|
+
|
|
137
|
+
### State management
|
|
138
|
+
|
|
139
|
+
The SPA uses `useReducer` + React Context instead of a server. All mutations are synchronous dispatches — no loaders, no fetchers, no optimistic updates needed. The reducer is at `app/state/reducer.ts`.
|
|
140
|
+
|
|
141
|
+
On mount, the SPA fetches `GET /api/project` from the CLI server. On save, it posts `POST /api/project`. That's the entire API surface.
|
|
142
|
+
|
|
143
|
+
### Build
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
pnpm run build # builds both SPA (vite) and CLI (tsup)
|
|
147
|
+
pnpm run build:cli # builds only the CLI
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Test locally
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
pnpm run build
|
|
154
|
+
pnpm run itsvertical -- new test-project.vertical "Test Project"
|
|
155
|
+
pnpm run itsvertical -- open test-project.vertical
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Lint and type-check
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
pnpm run tsc
|
|
162
|
+
pnpm run lint
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Publish
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
pnpm run build
|
|
169
|
+
npm publish
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The `files` field in `package.json` includes only `cli/dist` and `dist` — the built outputs. Source files are not published.
|
|
173
|
+
|
|
174
|
+
## Credits
|
|
175
|
+
|
|
176
|
+
Made by [Ryan Singer](https://ryansinger.co) and [Seasoned](https://www.seasoned.cc).
|
|
177
|
+
|
|
178
|
+
## License
|
|
179
|
+
|
|
180
|
+
MIT
|