# Vellum web Svelte 5 + Vite + TypeScript single-page app. It is built to a static bundle in `dist/` and embedded into the Go binary, so all asset paths are relative (`base: './'` in `vite.config.ts`). ## Commands ```bash pnpm install pnpm dev # dev server on :5173, proxying /api to :7788 pnpm build # writes dist/ pnpm check # svelte-check ``` Run the Go server on `:7788` (`make run` from the repo root) and `pnpm dev` proxies API and health requests to it, so cookies and sessions behave exactly as they will in production. ## Layout ``` src/ main.ts entry point App.svelte login gate -> shell app.css design tokens and base styles lib/ api.ts typed client; mirrors the Go handlers session.ts auth + library stores nav.ts view state components/ Login.svelte Shell.svelte nav + view switch Libraries.svelte library list, create, scan, delete LibraryView.svelte item grid with covers Reader.svelte epub.js reader with progress sync Users.svelte admin user management ``` The reader resumes from a spine index, which is why progress positions are integers: it round-trips through the polymorphic `progress` table without needing a text column.