The build deletes it. vite clears outDir (emptyOutDir: true), and that file is the only reason //go:embed all:dist compiles in a fresh clone - without it a clone that has not run a frontend build cannot run go build at all. Found because it happened: a pnpm build during the transcode work removed the tracked file, and it showed up as a deletion waiting to be committed. A developer who ran a build and then staged everything would have broken every clone silently, and the symptom would appear on someone else's machine. The build now regenerates it, with the explanation in the file itself so the next person to see it knows what it is for. |
||
|---|---|---|
| .. | ||
| dist | ||
| public | ||
| scripts | ||
| src | ||
| .gitignore | ||
| embed.go | ||
| index.html | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| svelte.config.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
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
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.