# SpellRay

SpellRay is an installable, offline spelling game built with SvelteKit, Svelte 5, Vite, Tailwind CSS, and shadcn-svelte's dialog primitives.

## Privacy and local storage

SpellRay is a fully static, client-only game. It has no API routes, database,
accounts, cookies, sessions, analytics, or telemetry. Gameplay state never
leaves the browser.

The browser stores one versioned `localStorage` record (`spellray-state-v1`)
containing the current puzzle ID, found words, and shuffled letter order.
Starting a new game replaces the current record. Clearing site data in the
browser removes all progress. If browser storage is unavailable, the game still
works for the current tab but cannot persist across reloads.

Other UI state—the current unsubmitted word, current screen, dialog and hint
state, feedback messages, and timers—exists only in memory and disappears when
the page closes. SpellRay has no score, profile, or settings state. The bundled
puzzle catalog is static application data, not user data.

The service worker's Cache Storage contains only versioned application assets
needed for offline play. It does not cache requests outside the built app shell
or contain gameplay state.

## Deployment

`npm run build` produces a static site in `build/`. A static file host is the
only production runtime required; there is no application server or writable
deployment storage.

## Develop

```sh
npm install
npm run dev
```

## Verify

```sh
npm test
npm run check
npm run build
npx playwright install chromium # first browser-test run only
npm run test:browser
```
