# web

The web frontend for yumak, a static knot. It is built with SvelteKit (Svelte 5) and
Tailwind 4. Every read goes to the knot serving the app as a plain GET xrpc; writes go to the
user's own PDS, the knot, or the repo's spindle.

## Requirements

- Node 24
- pnpm 11 (`corepack enable` picks up the pinned version)
- Bun 1.4+ (`pnpm build` runs vite under it)

## Getting started

```sh
pnpm install
pnpm dev        # http://127.0.0.1:5173
```

The app reads from the origin it is served from. To work against a deployed knot instead,
put its URL in `.env`:

```sh
VITE_BOBBIN_URL=https://knot.example.com
```

The other settings are in `src/lib/config.ts`, each one a `VITE_` variable baked in at build.

## Commands

| Command          | What it does                                                                |
| ---------------- | --------------------------------------------------------------------------- |
| `pnpm dev`       | Dev server                                                                  |
| `pnpm check`     | Type-check                                                                  |
| `pnpm lint`      | Prettier, ESLint, test-id check                                             |
| `pnpm test`      | Unit tests (Vitest)                                                         |
| `pnpm storybook` | Component stories on :6006                                                  |
| `pnpm build`     | The app into `build/`, the page renderer the knot runs into `build-server/` |
| `pnpm codegen`   | Regenerate lexicon types                                                    |

End-to-end tests live in [`../e2e`](../e2e/README.md).
