Try it — this is the live app
Add a task, drag a column down to delete it, sideways to reorder, and flip the interface across 한 / あ / 中. Your list persists locally.
Features
Tasks are columns
Every task is a full-height column read top→bottom, stacking right→left with the newest at the reading start. The list scrolls on the column axis, like a page of writing.
Pull down to delete
Drag a column down — past the end of its own text — and a trashcan opens behind it in the vacated slot. The gesture continues the reading direction to its conclusion.
Orthogonal drag axes
Vertical deletes, horizontal reorders. Direction alone disambiguates intent, so there are no long-press modes to discover.
Vertical text input
Composing a task happens in a contentEditable vertical column that stays column-centered as you type — writing and reading share one axis.
한 / あ / 中
One toggle re-localizes the entire interface across Korean, Japanese, and Chinese — the same interface logic expressed in three vertical scripts.
Design Decisions
Why are tasks full-height columns?
A to-do is a written line, and in vertical writing a line is a column. Giving every task the full column height keeps the page's rhythm — the list reads like text, not like a table of rows rotated sideways.
Why does pulling down delete?
Down is the reading axis: pulling a column past its own end reads it out of the flow. The trashcan appearing behind the card, in the slot the column vacated, gives the gesture a visible target instead of an invisible threshold.
Why split the drag axes?
With two orthogonal axes, direction alone carries intent — vertical removes from the flow, horizontal rearranges it. No modes, no delays: the first few pixels of movement declare what the gesture means.
Use it in the browser
The app owns the full viewport at /apps/notes. Your list is saved locally on this device.
