Kevin Bell's summer 2026 project
Go to file
2026-07-17 15:33:54 -06:00
.vscode initial code 2026-07-15 17:55:53 -06:00
dashboard initial code 2026-07-15 17:55:53 -06:00
docs diagram of the entire architecture 2026-07-17 15:33:54 -06:00
scripts initial code 2026-07-15 17:55:53 -06:00
sql initial code 2026-07-15 17:55:53 -06:00
tests initial code 2026-07-15 17:55:53 -06:00
.env.example initial code 2026-07-15 17:55:53 -06:00
.gitignore initial code 2026-07-15 17:55:53 -06:00
README.md Update README.md 2026-07-16 22:07:01 +00:00
requirements.txt initial code 2026-07-15 17:55:53 -06:00

Summer Project 2026

kevinBell@Linux.com

https://kevinbell.dev/

Kevin Bell's summer 2026 data project using state of Utah county vehicle-registration and emissions-inspection data.

See the data inventory and the data-backed project shortlist.

Selected project

The selected direction is Utah Vehicle Health, an explainable model and dashboard for the first-attempt outcome of a vehicle's next inspection episode. Start with the project charter, then use the modeling protocol and dashboard specification as the project contracts. The latest private-sample pipeline findings are summarized in development results, with intended use and limitations consolidated in the model card.

Safe database access in VS Code

The local .env file contains the standard PostgreSQL connection variables and is intentionally excluded from Git. Never put those values in source code, screenshots, browser JavaScript, or a Bolt project.

  1. Install the workspace-recommended PostgreSQL extension by Microsoft (ms-ossdata.vscode-pgsql).
  2. In VS Code, run Tasks: Run Task and choose Countydata: test read-only connection. It loads .env, requires TLS, and forces the PostgreSQL session into read-only mode.
  3. To browse the server visually, open the PostgreSQL sidebar and add a connection using the values in .env. Set SSL mode to Require, save the profile at User scope, and store the password in macOS Keychain rather than workspace settings.
  4. Connect to countydata and run sql/00_read_only_connection_check.sql. Safe aggregate examples are in sql/01_safe_data_overview.sql.

The selected project's first aggregate cohort check is sql/10_episode_cohort_feasibility.sql. Private bounded extraction is handled by scripts/export_inspection_batch.py; it requires the project-specific VIN_HASH_KEY described in .env.example and never writes a raw VIN.

The current database login has write privileges even though this project only needs reads. Ask the database administrator for a dedicated read-only role before connecting any deployed service. Until then, always use explicit read-only transactions.

Reproducible development workflow

Create the local environment once:

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python scripts/create_vin_hash_key.py

The recommended way to run the pipeline is Tasks: Run Task in VS Code. The tasks preserve the intended order:

  1. Test the read-only TLS connection.
  2. Run the source outcome-mapping and aggregate feasibility audits.
  3. Export the private 10,000-vehicle development histories.
  4. Build the private DuckDB warehouse and Parquet feature mart.
  5. Run every test.
  6. Train the baselines while leaving the 2025 test partition locked.
  7. Train the nonlinear comparison while leaving the same partition locked.

The development history sample is deliberately not population-representative. It exists to exercise feature engineering and modeling before a complete, contiguous bounded extraction is approved. Generated extracts, marts, database files, keys, and model artifacts remain under Git-ignored private paths.

The 2025 metrics are not calculated by the normal training task. Unlocking them requires the conspicuous --evaluate-locked flag after the feature set, hyperparameters, calibration method, and reporting plan are frozen. That gate was opened once on the page-sampled development extract during live verification; the normal artifact paths were then regenerated closed. The audit trail is in development results, and no further 2025-informed tuning is permitted.

Sanitized dashboard preview

After training both closed model bundles, run Tasks: Run Task and choose Utah Vehicle Health: export sanitized dashboard preview. The exporter publishes only suppression-reviewed JSON under dashboard/public/data; it refuses the sampled mart unless the explicit development-preview flag is used and refuses model artifacts containing holdout metrics.

Preview the site without exposing the repository root:

node dashboard/server.mjs

Then open http://localhost:4173. Do not serve the repository root, because it contains the local connection profile and private ignored directories.

The checked-in bundle is visibly labeled as a non-population development preview. Before a real public-data release, rerun the frozen pipeline on an approved complete extraction and pass the publication review documented in the dashboard specification.

Local and Bolt handoff instructions are in dashboard/README.md. Bolt can import a GitHub repository, but the hosted site root must be the dashboard directory; never copy .env, private data, model artifacts, or database tooling into a web project.

Data safety and publishing

The source contains direct identifiers and operational data, including VINs, plates, user records, sessions, and upload metadata. A public dashboard should contain only de-identified aggregates and model outputs with minimum group-size suppression.

Recommended deployment flow:

countydata (read-only) -> local ETL/modeling -> sanitized aggregate tables/files
                                              -> Bolt-hosted dashboard

Do not connect a browser directly to countydata. If the dashboard must refresh automatically, use a scheduled backend job with a dedicated read-only database role and copy only approved aggregate results into the hosted application.