Know the device before you buy it.
TESTDRIVE is a browser inspection tool for computers, phones, and tablets. It combines available browser observations, hands-on checks, optional Windows system-report import, and a portable report. Values always identify their source. An incomplete check stays untested.
The 1.2 update adds a clearer responsive interface, source-labeled device overview, fullscreen touch and display checks, and simpler media guidance. It retains one-click scanning, four documented US laptop keyboards, explicit capture, a pointer challenge and bounded automatic media observations. See what changed, design QA and the laptop catalog.
This repository is the implementation for HACK47: OFFGRID, October 2026. See the public product specification, verification evidence, and supported devices for the actual release state. A planned feature or a passing automated test does not establish that physical hardware passed.
- Live app — Firebase Hosting, beta
1.2.0-beta.1. - Public source and immutable 1.2 source tag.
- Release verification records source identity, 40 unit tests, local/browser results and CI. The current browser suite contains 27 scenarios.
- Current release notes. The earlier beta 3 demonstration remains historical.
- Demo recording and Devpost submission status are tracked in the verification record. Do not infer submission from the presence of this repository.
Use Node.js 24 LTS and npm (Node 22.12 or newer is accepted by this project).
npm ci
npm run devOpen the URL printed by Vite. localhost is a secure context for local media testing. A phone opening an ordinary LAN HTTP address may not receive camera/microphone access; use the public HTTPS deployment.
npm run typecheck
npm run lint
npm test
npm run build
npm run previewnpm run check runs the main local quality checks. The production files are in dist. Browser automation uses npm run test:e2e after Playwright browsers are installed; those checks are distinct from physical-device verification.
One click starts a local inspection and runs the available automatic scan. The app then guides one task at a time and advances to the next check after saving. Device class, keyboard profile and the inspection plan remain editable. Imported model identifiers can choose one of four documented US keyboard references, and a remembered manual choice stays labeled as a preference. Camera and microphone samples finish automatically; optional human feedback covers clarity and quality. Specific checks and their evidence are listed in supported-devices.md.
The current suite contains 27 browser workflows plus public HTTP/content-policy checks, including report export/import and print CSS. The earlier beta 3 release also received a seven-page browser-PDF render review; that PDF remains historical evidence. Windows Chromium automation and mobile viewport emulation exercise the interface; a physical iPhone, real camera/microphone quality, and physical input hardware have not been independently verified. Run the relevant checks on the actual device and read the report's limitations.
Browser observations cannot establish an exact laptop model, exact installed RAM, complete storage capacity, disk health, battery wear, ownership, authenticity, or the absence of hidden faults. Imported specifications describe the selected file; they are not independently authenticated. Catalog details do not establish a particular device's configuration. Keyboard capture suppresses only events delivered to the browser; OS-reserved shortcuts may still open. Word matching requires installed on-device speech support; ordinary audio detection does not claim to recognize speech. Workload timing reflects the browser and current environment, not a universal hardware score. Human observations remain labeled as human observations.
R1 work such as paired-device viewing, macOS reports, battery-report import, and a desktop collector must not be represented as shipped unless the release ledger records working evidence.
- On the computer being inspected, open System Information (
msinfo32). - Choose File → Export and save an English-language text report.
- In TESTDRIVE, choose the file under exact specifications. Review the extracted fields before applying them.
- Confirm that the report describes the device being inspected. Missing fields stay unknown.
The parser reads locally. Avoid sharing the raw report: it can contain names, serials, and other personal details. Use sanitized fixtures when reporting parser bugs.
Inspection records remain in browser storage on this browser/device unless the person exports them. Camera/microphone access starts only after a specific user action. Temporary captures and recordings are not uploaded to an application backend. Imported reports are read in the browser. Deleting local data does not delete files already downloaded by the person.
Firebase serves the static website and receives normal web requests, which may produce hosting access logs. This release does not need Firebase Authentication, Firestore, a realtime database, cloud storage, analytics, or an API key. No secret belongs in a VITE_ variable. Clearing browser storage or using a private window may remove local inspections.
See deployment.md for the exact Firebase target, prerequisites, smoke tests, and rollback. firebase.json publishes only dist, sets security/permission headers, refreshes the app shell, caches hashed assets, and rewrites extensionless app routes. Missing asset files remain missing rather than returning an HTML document.
GitHub Actions runs install, typecheck, lint, unit tests, a production build, and Chromium desktop/mobile-viewport scenarios. It does not deploy automatically; no deployment token is committed.
The application code is MIT licensed; dependencies retain their own licenses. See THIRD_PARTY_NOTICES.md. OpenAI Codex and specialist coding agents assisted with architecture, implementation, testing, and release preparation. AI-generated code does not replace live verification. The device-diagnostics category predates this project; TESTDRIVE's contribution is this implementation and inspection workflow.
To report an issue, include browser/OS versions, the affected check, steps, and a sanitized screenshot. Do not attach personal system exports, recordings, serial numbers, or credentials.