ÎșαÎčÏÏÏ
Kairos is my custom-made kanban for my own private, obsessive INTJish needs. I have used various time-trackers and activity scheduling tools throughout decades, but none was good or exact enough to fulfill me, and the best I got to develop turned out to have fatal flows (too cumbersome, too slow, too computationally costly). With AI, it is however now possible to build the perfect tool.
Versions
- v°0.1.0 (30 October (2026)) â the board skeleton (with Claude). Four columns, In progress, To-do, Waiting and Done, whose tilesâeach with its title, its AF tag and the colour of its groupâmove by drag and drop, with the mouse (several at once if selected) or with the keyboard. No database yet: the nine tiles are placeholders.
- v°0.2.0 (30 October (2026)) â an In Progress band above the columns holds the one tile being worked on: a tile dropped there sends the previous one back on top of To-Do today, the new name of the first column. The header shows a small Kairos, the picture above cut out from its background, and ÎșαÎčÏÏÏ. Drag-and-drop tests run in Chrome.
- v°0.3.0 (30 October (2026)) â tiles can be made: a dialog asks for the title, the content and the category, which sets the colour. + New tile puts the tile on top of To-do, the + of a column on top of that column. Each tile gets its own AF tag from
af, never the same twice. No database yet, so new tiles are lost on reload.
- v°0.4.0 (30 October (2026)) â the database: the board now lives in its own MariaDB database, kept by a Python server, and survives reloads. Each tile records when it was made, and each of its stays in In Progress, To-Do today, To-do, Waiting or Done is a time window with its start and its end. Every creation, move and change of column is also appended to an event log, never changed, from which any statistic can be rebuilt. The tests have a database of their own, so they never touch the real tiles.
- v°0.5.0 (30 October (2026)) â each tile shows the time it has spent In Progress, today and in total: to the second and running on the tile in progress, to the minute on the others. Today starts again at midnight.
- v°0.5.1 (30 October (2026)) â the time In Progress is written smaller, and a tile whose time there is all from today shows only today.
- v°0.6.0 (30 October (2026)) â a small calendar under each tile's drag handle opens its time windows, as the database keeps them: when the tile was made, each of its stays in a column with its start, end and length (the one still open runs), and its time in each column.
- v°0.7.0 (30 October (2026)) â new categories, made in the New tile dialog: a name, and a colour from a palette of ten soft ones, apart from the first five. The category is kept in the database and chosen for the tile being made; a name already taken is refused.
- v°0.8.0 (31 October (2026)) â counts: the header counts the tiles, and opens how many there were over time, per category or per column, as a chart or a table, rebuilt exactly from the database (the time windows and the tiles' creation).
- v°0.9.0 (31 October (2026)) â priorities: a category (Now, Urgent, High, Normal, Low, Maybe) and a score from 0 to 10 within it, so that Urgent 3 is above High 9. A badge under the drag handle shows it and opens its editor; the piles are in order of priority, and a tile dropped between two others takes a priority between theirs. Priorities rise by themselves: with time, and as the deadline and the hard deadline, now dates on the tiles, come near.
- v°0.10.0 (31 October (2026)) â Sleeping: a black tile under an hourglass of stars, which counts sleep. It waits in a dock at the end of the In Progress band; dragged into the band it goes to sleep (and the band turns to night), and back to its dock, or replaced there by a task, it wakes up. Its clock and its calendar (asleep, awake) give the time slept. The columns never take it, and it is not counted among the tiles.
Stack
All open-source and free, in the browser on localhost:
- React Aria Components 1.22.1 (Adobe, Apache-2.0): the drag and drop. Chosen over dnd-kit and Pragmatic drag and drop as the only one doing all of it: moves within and between columns, files and links dropped in from other applications, tiles dragged out to them, keyboard and screen readers, touch.
- React 19.3.1, written in TypeScript 7.0.2.
- Vite 8.3.5: the development server and build tool.
- Node.js 24.22.2 LTS, in
~/.local/opt/node (the system's Node 18 is too old for Vite 8).
- Playwright 1.64.1, driving Chrome headless for the drag-and-drop tests.
- MariaDB 10.11.16: the database, beside the wiki's, which it can read.
- FastAPI 0.162.0, Uvicorn 0.54.0 and PyMySQL 2.2.8: the server, in Python 3.12, run by uv.
To come:
- a probe on azag and yzao recording which window has the focus, and when keyboard and mouse are idle.
The code is in ~/comp/claude/16--kairos (git, a tag per version); kairos-dev starts the server and the board, on localhost:5173.
Running
Since v°1.5.0, kairos runs by itself, no longer from a terminal. On azag it is three systemd user servicesâthe server, the board and the probeâgrouped in a kairos.target. They start at boot, even before a login (linger is on), except the probe, which needs the screen: it starts with each graphical session and stops with it. A part that crashes comes back after 5 s, and all they say goes to the journal.
A small launcher, kairos, drives them:
kairos # start it if needed, open the board
kairos status # what runs, since when
kairos restart # after a change of the code
kairos stop | start | log [-f] | enable | disable | install | help
KDE's menu has an entry kairos (under Office), with Kairos's head for its icon: a click opens the board, starting kairos first if needed, and a right click offers Restart, Stop, Status and Log. Having no console, it answers with desktop notifications.
From yzao, the same kairos does all this on azag over ssh, and kairos open brings the board to yzao, at the same localhost:5173, through an ssh tunnel that reconnects by itself after a sleep or a change of network. yzao has the menu entry too.
kairos-dev remains, for development in a terminal, after a kairos stop.