90 lines
3.2 KiB
Markdown
90 lines
3.2 KiB
Markdown
# Utah Vehicle Health dashboard
|
|
|
|
This directory is a dependency-free static development prototype. It uses
|
|
semantic HTML, CSS, vanilla ES modules, and inline SVG generated from approved,
|
|
suppressed aggregate JSON. It has no database client, server credential,
|
|
analytics SDK, or external CDN.
|
|
|
|
Every displayed result comes from the private 10,000-vehicle development
|
|
sample. Results are sample-based, are not population estimates, and must not be
|
|
used for individual decisions. The final prototype model is calibrated logistic
|
|
regression; the boosted tree is a benchmark only.
|
|
|
|
## Run locally
|
|
|
|
From the Utah Vehicle Health source-repository root:
|
|
|
|
```bash
|
|
node dashboard/server.mjs
|
|
```
|
|
|
|
Open `http://127.0.0.1:4173`. Do not open `index.html` directly with a `file:`
|
|
URL; browsers will block the JSON module requests. To use another port:
|
|
|
|
```bash
|
|
PORT=8080 node dashboard/server.mjs
|
|
```
|
|
|
|
Run the dependency-free contract checks with:
|
|
|
|
```bash
|
|
node --test dashboard/tests/contract.test.mjs
|
|
```
|
|
|
|
After the contents of `dashboard/` have been copied into a dashboard-only
|
|
repository or project root, use the self-contained equivalents:
|
|
|
|
```bash
|
|
npm start
|
|
npm test
|
|
```
|
|
|
|
## Public-data boundary
|
|
|
|
The browser requires and validates these files beneath `public/data/`:
|
|
|
|
- `data_manifest.json`
|
|
- `overview_period_county.json`
|
|
- `age_risk_curve.json`
|
|
- `cohort_scorecard.json`
|
|
- `model_diagnostics.json`
|
|
- `coverage_quality.json`
|
|
- `filter_catalog.json`
|
|
- `sha256_manifest.json`
|
|
|
|
If any file is missing, malformed, has inconsistent publication flags, or
|
|
contains a denied identifier-like field, the dashboard shows an unavailable
|
|
state and no estimates. Regenerate assets with the repository's private local
|
|
pipeline; never hand-edit public JSON to bypass suppression.
|
|
|
|
The site intentionally contains no vehicle lookup, individual estimator,
|
|
operational connection, or row-level prediction output. VINs, plates, ZIPs,
|
|
stations, technician identifiers, raw source JSON, credentials, and operational
|
|
records must never enter this directory.
|
|
|
|
## Publish through Bolt
|
|
|
|
Use a separate static Bolt project backed by a dashboard-only repository. Do
|
|
not import this source repository into Bolt.
|
|
|
|
1. Run `npm test` from this directory and confirm every contract check passes.
|
|
2. Create a clean dashboard-only repository or Bolt project.
|
|
3. Copy only the *contents* of `dashboard/` into that project, so `index.html`
|
|
is at the project root.
|
|
4. Confirm that private `data/`, `artifacts/`, `models/`, `.env` files, SQL,
|
|
notebooks, and database tooling are absent.
|
|
5. Preview the project. There is no install or build step; if Bolt requests a
|
|
preview command, use `node server.mjs` with `HOST=0.0.0.0` and let Bolt
|
|
provide `PORT`.
|
|
6. Verify all four views, the development-sample messaging on every view, and
|
|
that the in-app status reads **Validated sample aggregates**.
|
|
7. Use **Publish** only after the aggregate bundle completes privacy review.
|
|
Bolt hosting is the default; Netlify can instead be selected before the
|
|
first publish if desired.
|
|
|
|
See Bolt's official documentation for [Git
|
|
integration](https://support.bolt.new/integrations/git) and [publishing with
|
|
Netlify](https://support.bolt.new/integrations/netlify).
|
|
|
|
No publishing action is performed by this repository.
|