← Featured work

Screen-native AI tutor /

Kairo

A macOS AI tutor that combines voice and screen context to point at the next step while keeping the learner in control.

  • TypeScript
  • React
  • Rust
  • Tauri
  • Fastify
  • PostgreSQL

The problem

Practical software labs are highly contextual. A learner may be one click, command, or configuration change away from progress, but a conventional chat interface cannot see that state without a long explanation and constant context switching.

Kairo is built around a narrower promise: understand the learner's question and current screen, then point to the next action. It explains and guides, but never clicks or types on the learner's behalf.

System shape

The desktop app runs React 19 inside Tauri v2. Rust owns native concerns such as the global shortcut, audio, screen capture, panels, and overlay behavior. A Fastify backend owns authentication, provider credentials, preferences, usage metering, and billing, with PostgreSQL as the system of record.

Voice and screen context move through authenticated backend routes to speech and model providers. Production builds keep provider keys out of the desktop bundle, and the response returns as spoken guidance, a visual highlight, and a companion cursor.

Engineering decisions

Screen context is treated as sensitive input rather than an always-on stream. Voice questions capture after push-to-talk completes, a text gate decides whether the frame is required, and text-only requests discard it locally. Transmitted frames are resized before leaving the device.

  • Block capture for a conservative set of password, mail, wallet, banking, messaging, and photo applications.
  • Discard a frame if the frontmost application changes while capture is in progress.
  • Exclude Kairo's own guidance surfaces from normal production capture.
  • Keep direct-provider credentials limited to local development paths.

What it demonstrates

Kairo crosses native desktop behavior, product interaction, backend APIs, data, billing, and AI providers without blurring their boundaries. The interesting work is not a model call; it is building a product system where contextual assistance stays responsive, inspectable, and respectful of user control.