field note

Kairos — Know What's Possible Today

What does your day feel like?

A linear calendar shows blocks. 9:00 standup. 10:30 deep work. 14:00 lunch. It is a container for commitments. It does not show whether the day is full or spacious, whether you are in a morning sprint or evening wind-down, or whether six tasks can actually fit into the daylight you have left.

I wanted a different view. Not more blocks, but a sense of shape. A day planner that shows available energy instead of only allocated slots.

The spiral metaphor

Kairos is a spiral day planner. Time flows outward from the morning center to the evening edge. The morning sits in the middle — quiet, open, before the day accumulates. As you move outward, hours expand into the afternoon and evening. The spiral makes capacity visible: when tasks start filling the outer rings, the day feels full.

The spiral is not decoration. Every task is drawn as a wedge along its arc, positioned by the time it starts and sized by its duration. If the day is over capacity, a red overflow zone appears past the spiral edge. You see the limit, not just the list.

It uses sunrise and sunset data with real solar calculations — defaulting to Sofia, Bulgaria, where this lab operates. Morning tasks glow warm amber. Evening tasks shift to cool indigo. Task sectors on the spiral pick up the same colors, so the clock face itself tells you whether you are scheduling in daylight or after dark.

How it works

Type a task in natural language: "call dentist tomorrow at 14:00 for 30 min". Kairos parses the date, time, and duration, then places it on the correct day. If you type "draft launch post" with no time, it auto-schedules into the next open slot using a scheduler that respects day bounds, blocked events, and existing fixed tasks.

The stack is Vite + React + TypeScript with Tailwind v4 and Zustand persistence. State stays in the browser — no accounts, no backend, no login. Open the app, plan your day, close the tab. It remembers.

Other touches:

  • Moon phase in the "now" marker at night instead of the sun icon
  • Geolocation support — the spiral adjusts sunrise/sunset to your position
  • Conflict detection when two tasks overlap at a fixed time
  • Keyboard shortcuts: N for new task, arrow keys for date navigation

Where it stands

Kairos works. It is deployed at kairos-qcdn.vercel.app and usable on a phone or desktop browser. The core loop — add a task, see it on the spiral, complete it — is smooth and satisfying.

It also has rough edges I am not hiding:

  • The auto-scheduler has a trust-breaking bug where tasks can default to 00:00 on the current day instead of the next available slot
  • There are no automated tests yet — the scheduler behaviour is proven by manual use, not CI
  • A handful of lint warnings exist in the AddTaskModal and RadialClock components
  • The app is mobile-width even on desktop, which works but feels unfinished on larger screens

The next upgrade cycle should fix the auto-schedule bug first, then add Vitest tests for the scheduler, then surface the onboarding so a first-time user understands the spiral without guessing.

Why this matters

Most day planners are inventories. You list what you have to do, check boxes, and feel bad about what did not get done. Kairos is an attempt at a different question: not what do I have to do today, but what can I actually fit into the energy and daylight I have.

That is a subtle shift. An inventory lists obligations. A capacity-aware planner asks for a decision. The spiral makes that decision visible — before you commit to a task that does not fit.

The name comes from the Greek word for the opportune moment. The right time for something to happen. Not clock time, but enough time.

Lab update — June 22, 2026

Kairos V1 now runs as a native iOS app via Capacitor. It has been installed and tested on a physical iPhone — the core loop works: add a task, see it on the spiral, quit and reopen, the task is still there. The app uses local-only storage with Capacitor Preferences; no accounts, no backend.

What shipped since the article was written:

  • iOS Capacitor wrapper. Xcode project with branded assets, native splash that hides after hydration (no empty-day flash), safe-area handling for the notch, and status bar styling.
  • Swipe day navigation. Swipe left/right to change days with native bounce feel, respecting interactive targets so buttons still work.
  • Expand-day toggle. Completing a task can automatically pull the next task toward the current time — the day expands.
  • Physical iPhone QA. Passed install, smooth rendering, task persistence, and cold relaunch on a real device. 13 remote iPhone 17e simulator QA passes recorded.
  • 14 test files covering components, hooks (including swipe), platform lifecycle, haptics, persistence, and utility functions.

Known gaps before TestFlight: finish the physical smoke checklist (modal behavior, location prompt, natural-language parse on device), decide the bundle ID, and run the archive flow. The auto-schedule bug (tasks defaulting to 00:00) still needs fixing, and completed-task spiral semantics are being redesigned per user feedback — the spiral should show only what still occupies the day.

Live Vercel deployment is currently down. The app runs locally via npm run dev or npx cap run ios on a Mac with Xcode.

Live app: kairos-qcdn.vercel.app · Source: github.com/inde3d100/kairos · Related: Obsidian brain · QuestOps · agent-house