# Repository Guidelines ## Project Structure & Module Organization Hanji is a Nuxt 4/Vue 3 static app. Route components live in `app/pages/`, reusable UI in `app/components/`, stateful helpers in `app/composables/`, and global styling in `app/styles/`. Keep framework-independent data models and lookup logic in `shared/` so both the app and build scripts can import them. Data and font pipelines live in `scripts/`; their Vitest suites are in `tests/`. Generated character data, stroke shards, and font subsets under `app/assets/` are ignored and fingerprinted by Vite; stable legal texts live under `public/notices/`. Downloaded inputs under `data/raw/` are also ignored. Do not hand-edit generated outputs; change the relevant script or source lock instead. ## Build, Test, and Development Commands - `pnpm install` installs the pinned pnpm 11 dependencies and prepares Nuxt. - `pnpm build:data` generates datasets and font subsets. Run it before tests or a clean production build; the first run downloads roughly 211 MB. - `pnpm dev` starts the local Nuxt development server. - `pnpm test` runs all Vitest tests once. - `pnpm lint` checks TypeScript, Vue, and UnoCSS conventions. - `pnpm typecheck` runs Nuxt's Vue-aware TypeScript checker. - `pnpm format` formats the repository with the shared Prettier configuration. - `pnpm generate` writes the deployable static app to `.output/public/`. ## Coding Style & Naming Conventions Use TypeScript and Vue Composition API with `