No description
  • Svelte 81.2%
  • TypeScript 15.6%
  • JavaScript 2.2%
  • CSS 0.6%
  • HTML 0.4%
Find a file
2026-08-13 19:53:24 +02:00
.dagger lint: reformat 2026-01-21 12:00:16 +01:00
assets feat: add audio channel test, av sync test 2024-02-24 22:21:24 +01:00
av-sync lint: reformat 2026-01-21 12:00:16 +01:00
messages feat(gamepad): add standard controller test view 2026-08-12 22:56:59 +02:00
project.inlang chore: inlang 2026-08-13 18:41:56 +02:00
src feat(mouse): add (multi)touch tests 2026-08-13 19:34:54 +02:00
static chore: add favicon 2025-02-11 13:55:09 +01:00
tests feat(mouse): add (multi)touch tests 2026-08-13 19:34:54 +02:00
.earthlyignore dev: add Earthfile to .earthlyignore 2024-02-22 23:05:14 +01:00
.eslintignore lint: reformat 2026-01-21 12:00:16 +01:00
.eslintrc.cjs chore: update eslint config 2025-09-27 13:50:36 +02:00
.gitattributes tests: update baseline, move out of outputs, add script 2026-08-13 18:41:45 +02:00
.gitignore tests: update baseline, move out of outputs, add script 2026-08-13 18:41:45 +02:00
.npmrc Initial commit. 2024-02-02 21:23:20 +01:00
.prettierignore lint: reformat 2026-01-21 12:00:16 +01:00
.prettierrc fix: test card double click 2026-01-20 23:13:02 +01:00
.woodpecker.yml chore: format 2025-09-26 22:19:02 +02:00
AGENTS.md chore: add README, update AGENTS 2026-08-13 19:53:24 +02:00
dagger.json lint: reformat 2026-01-21 12:00:16 +01:00
package.json tests: update baseline, move out of outputs, add script 2026-08-13 18:41:45 +02:00
pnpm-lock.yaml chore: bun -> pnpm 2026-08-05 18:01:53 +02:00
pnpm-workspace.yaml chore: bun -> pnpm 2026-08-05 18:01:53 +02:00
README.md chore: add README, update AGENTS 2026-08-13 19:53:24 +02:00
svelte.config.js fix: re-enable SSR, somewhat functional pre-JS version 2024-02-02 22:23:47 +01:00
tailwind.config.ts fix: test card double click 2026-01-20 23:13:02 +01:00
tsconfig.json Initial commit. 2024-02-02 21:23:20 +01:00
vite.config.ts feat: responsivify 2026-08-13 18:50:18 +02:00

Total Tech Test

A browser-based collection of audio, video, input, and device diagnostics. Use it to check a display, speakers, AV synchronisation, or browser-accessible hardware such as cameras, microphones, gamepads, and sensors.

Included tests

  • Video: fullscreen test card, AV sync video, display timer, and camera preview
  • Audio: stereo and surround channel tests, phase test, signal generator, microphone analyser and recorder
  • Controls: keyboard, mouse and multi-touch, and gamepad tests
  • Device and network: browser sensors and an embedded internet speed test

The UI is available in English, Spanish, French, German, Simplified Chinese, Japanese, Czech, and Ukrainian.

Getting started

Prerequisites: a current Node.js installation and npm.

npm install
npm run dev

Vite prints the local URL when the development server is ready. Browser permission prompts for cameras, microphones, location, and sensors must be granted before those tests can access the relevant hardware.

Commands

Command Description
npm run dev Start the development server.
npm run build Create the static production build in build/.
npm run preview Serve the production build locally.
npm run check Synchronise SvelteKit and run Svelte/TypeScript checks.
npm run lint Check formatting and run ESLint.
npm run format Apply Prettier formatting.
npm test Run the Vitest suite once.
npm run generate-assets Generate media assets with Earthly.
npm run av:dev Start the AV-sync asset development app.
npm run av:render:video -- <args> Render the AV-sync video asset.
npm run av:render:audio Render the AV-sync audio asset.

Testing

The test suite uses Vitest. The visual regression test starts a Vite server on port 5888, captures /card with Puppeteer, and compares it with tests/fixtures/testcard-baseline.png.

npm test

A deliberately updated visual baseline can be regenerated by deleting the fixture and rerunning the relevant test:

rm tests/fixtures/testcard-baseline.png
npx vitest --run tests/test-card.test.ts

Screenshots and visual diff artifacts are written to tests/output/, which is ignored by Git.

Project structure

  • src/routes/ — SvelteKit routes for each diagnostic
  • src/lib/ — reusable Svelte components, including the test card and audio visualisers
  • messages/ — translated Paraglide message files
  • assets/generated/ — generated AV assets; do not edit by hand
  • av-sync/ — source and render scripts for AV-sync media
  • tests/ — Vitest functional and visual regression tests

Development notes

This is a SvelteKit, Svelte 5, TypeScript, Vite, and Tailwind CSS application. It is statically prerendered, with trailing slashes enabled. Formatting is enforced by Prettier and linting by ESLint. See AGENTS.md for repository conventions and validation guidance.