Web app · Product design

Kaku — Tiny Editor

Kaku (書く, “to write”) is somewhere between a notepad, a minimal rich-text editor, Japanese stationery and a retro typewriter. Open, write, make it beautiful, export, leave.

Type
Static web application
Stack
React 19 · TypeScript · Vite · Tiptap 3 · Tailwind CSS 4
Tested with
Vitest and Playwright (desktop and mobile)
License
MIT
The Kaku editor: a quiet toolbar above a single sheet of paper holding a short note in a typewriter font and a two-item checklist, with a “Nothing is saved” notice above.

Overview

Kaku is a single continuous sheet of paper with a quiet toolbar. There are no accounts and no cloud storage. When the tab closes, the page is blank again, and that is deliberate.

Motivation

Most writing tools want you to sign in, sync and keep everything forever. Kaku is for the opposite case: a short piece you want to write well, format nicely and take with you as a file, without leaving a copy anywhere.

Architecture

  • Memory only. The document lives in the tab’s memory and is never written to localStorage, sessionStorage, IndexedDB or cookies. Preferences reset with the tab too. If there is text on the page, the browser asks before you leave.
  • Local export. Markdown, plain text, standalone HTML (with a restrictive Content-Security-Policy) and print-to-PDF are generated in the browser and downloaded through Blob URLs. To-do lists can also be exported as a 1080px PNG card drawn with the Canvas API.
  • No third-party requests. Fonts are bundled through Fontsource and loaded only when you pick them, and there are no analytics.

Implementation

  • A rich-text editor built on Tiptap and ProseMirror: headings, lists, checklists, quotes, code, links, alignment, highlighter and ink colours, plus a floating toolbar on selection, a / slash menu and a command palette.
  • Eight themes (Typewriter, Sakura, Matcha, Seoul Morning, Peach Milk, Lavender Study, Tokyo Night and AR Console), nine curated fonts including Noto Sans JP and KR, and five paper styles.
  • Writing aids: focus and typewriter modes, a word goal and a writing timer, and live counts that handle Japanese and Korean text.
  • Optional typewriter sounds synthesized at runtime, with no audio files. Decorative effects are CSS-driven and respect prefers-reduced-motion.

How it’s verified

Unit tests cover the exporters, word counts, file names and URLs. Playwright browser tests cover formatting, export and printing, and check that nothing survives a reload or reaches browser storage. The deploy workflow runs both suites before publishing to GitHub Pages.

Contact

Have something interesting in mind?

I’m always interested in thoughtful collaborations, interesting research problems, and opportunities to build useful things.