# Dimension Lab Website Standalone SvelteKit runtime for the Dimension Lab system overview dashboard. This project is not a Homepage customization and does not depend on Homepage runtime, frontend code, or configuration. The dashboard will be model-driven: the reusable renderer stays content-free, while environment-specific data lives in validated dashboard model state. ## Development ```sh bun install bun run dev ``` This MVP uses Drizzle with Bun SQLite for local file-backed persistence. ## Scripts - `bun run dev`: start the local development server. - `bun run check`: run Svelte and TypeScript checks. - `bun run test`: run Vitest. - `bun run build`: build the production app. - `bun run preview`: preview the production build. - `bun run storybook`: start the component explorer on port 6006. - `bun run build-storybook`: build the static Storybook review artifact. - `bun run db:generate`: generate Drizzle migrations from the server schema. - `bun run db:check`: validate migration consistency. ## Persistence Dashboard documents are stored in SQLite through Drizzle. The default database URL is: ```sh DATABASE_URL=file:./data/dimensionlab.sqlite ``` SQLite files under `data/` are ignored. Drizzle schema lives in `src/lib/server/db/schema.ts`; tracked migrations live in `drizzle/`. Runtime startup applies the checked-in dashboard migrations before reads or writes. If the app is launched from outside the repo tree, set `DASHBOARD_MIGRATIONS_DIR` to the tracked migrations directory. The current driver is `bun:sqlite`, which keeps this repo installable in the Bun workflow. The store boundary is isolated so a later Postgres driver can replace the SQLite connection without changing the dashboard model or renderer. Stored dashboard documents pass through a version migration boundary before reads or writes; the MVP supports `dashboard.v1` and fails unsupported versions with an explicit migration error. ## Seed Data The initial Dimension Lab dashboard lives in `src/lib/model/fixtures/dimensionlab.ts` as validated model data. It includes the first-screen telemetry, service groups, status strip, weather module, Iconify icon identifiers, links, and datasource references. Values that are not live yet are labeled as fallback values in the data so later datasource adapters can replace them without changing presentation components. ## Runtime Shape The SvelteKit build uses the Node adapter, and the current persistence runtime is Bun because the MVP SQLite driver is `bun:sqlite`. Later issues add the seed data expansion and rendering pipeline. ## Storybook Storybook covers the reusable UI components with generic fixtures only. Stories must not import environment-specific dashboard content; the presentation layer accepts labels, values, icons, status, and links through typed props.