Skip to content

Build Quill — Overview

Quill is a notes app. You’ll build it over eleven chapters. By the end you will have:

  • A working notes app with create, read, update, delete, and a command palette
  • localStorage persistence behind a clean module boundary
  • An audit log that tracks every meaningful change
  • Toast notifications driven by a built-in module
  • A delete-confirmation dialog using native <dialog>
  • A Cmd-K command palette using the native popover API
  • An analytics module that observes the runtime and tracks product events

And — the structural payoff — every UI component will be ignorant of every cross-cutting concern. The button that saves a note doesn’t import storage, audit, analytics, or notifications. The form that creates a note doesn’t import any of them either. They emit events and commands. Modules handle the rest.

When you’re done, you will know how to use Kitsune to ship a real frontend without React, with a smaller bundle, better accessibility defaults, and code that’s structurally cleaner than the equivalent framework codebase.

ChapterWhat appears in the appWhat you learn
1. The ShellA page with <kit-shell> boots upShell, runtime, debug module
2. Boundaries and the ListA static list of notesNested boundaries, surface stacking
3. Note CardsClick a card to open a notemeta-event, payloads from DOM
4. The FormA new-note form with title and bodykit-field, native form validation
5. Persistence ModuleNotes survive a refreshAuthoring a module with state and a provider
6. Audit ModuleA “Recent activity” panelSubscribing to multiple events
7. Confirm with kit-dialogA “Delete?” dialog before destructionNative <dialog>, dialogModule, return values
8. ToastsSaved/deleted/restored toastskit-toast-region, notificationModule
9. Command PaletteCmd-K opens a fuzzy command barNative popover, dispatching commands programmatically
10. Analytics, Without Touching the UIA [analytics] console streamAdding capability without changing components
11. Where to Take Quill NextSync, search, multi-user, desktop, mobile

You can read the chapters straight through, or skip to one once you have the project set up.

You’ll need:

  • Node 24+ and pnpm
  • Comfort with TypeScript and HTML
  • Familiarity with the runtime loop (read this first if it’s still fuzzy)

You don’t need:

  • React
  • A bundler beyond Vite (the default)
  • Any non-trivial frontend tooling
Terminal window
pnpm create vite quill --template vanilla-ts
cd quill
pnpm install
pnpm add @atheory-ai/kitsune-core @atheory-ai/kitsune-app @atheory-ai/kitsune-ui @atheory-ai/kitsune-theme
pnpm add -D @atheory-ai/kitsune-dev
pnpm dev

Open the dev server. You should see Vite’s default page. We’ll replace it in the next chapter.

Each chapter:

  • Starts with What we want — a one-paragraph goal.
  • Walks through the code changes inline.
  • Ends with What we have now and What’s next.

Code is shown as it appears in the project at the end of the chapter. Diffs aren’t called out explicitly; you’ll either be writing new files or editing ones from earlier chapters in obvious ways.

Each chapter is short. The whole tutorial is meant to fit in an afternoon if you’re typing along.

Start: Chapter 1 — The Shell →