diff --git a/scouting/cypress_runner.js b/scouting/cypress_runner.js
new file mode 100644
index 0000000..6c63adb
--- /dev/null
+++ b/scouting/cypress_runner.js
@@ -0,0 +1,86 @@
+const child_process = require('child_process');
+const process = require('process');
+
+const cypress = require('cypress');
+
+// Set up the xvfb binary.
+process.env[
+  'PATH'
+] = `${process.env.RUNFILES_DIR}/xvfb_amd64/wrapped_bin:${process.env.PATH}`;
+
+// Start the web server, database, and fake TBA server.
+// We use file descriptor 3 ('pipe') for the test server to let us know when
+// everything has started up.
+console.log('Starting server.');
+let servers = child_process.spawn(
+  'testing/scouting_test_servers',
+  ['--port=8000', '--notify_fd=3'],
+  {
+    stdio: ['inherit', 'inherit', 'inherit', 'pipe'],
+  }
+);
+
+// Wait for the server to finish starting up.
+const serverStartup = new Promise((resolve, reject) => {
+  let cumulativeData = '';
+  servers.stdio[3].on('data', async (data) => {
+    console.log('Got data: ' + data);
+    cumulativeData += data;
+    if (cumulativeData.includes('READY')) {
+      console.log('Everything is ready!');
+      resolve();
+    }
+  });
+
+  servers.on('error', (err) => {
+    console.log(`Failed to start scouting_test_servers: ${err}`);
+    reject();
+  });
+
+  servers.on('close', (code, signal) => {
+    console.log(`scouting_test_servers closed: ${code} (${signal})`);
+    reject();
+  });
+
+  servers.on('exit', (code, signal) => {
+    console.log(`scouting_test_servers exited: ${code} (${signal})`);
+    reject();
+  });
+});
+
+// Wait for the server to shut down.
+const serverShutdown = new Promise((resolve) => {
+  servers.on('exit', () => {
+    resolve();
+  });
+});
+
+// Wait for the server to be ready, run the tests, then shut down the server.
+(async () => {
+  await serverStartup;
+  const result = await cypress.run({
+    headless: true,
+    config: {
+      baseUrl: 'http://localhost:8000',
+      screenshotsFolder:
+        process.env.TEST_UNDECLARED_OUTPUTS_DIR + '/screenshots',
+      video: false,
+      videosFolder: process.env.TEST_UNDECLARED_OUTPUTS_DIR + '/videos',
+    },
+  });
+  await servers.kill();
+  await serverShutdown;
+
+  exitCode = 0;
+  if (result.status == 'failed') {
+    exitCode = 1;
+    console.log('-'.repeat(50));
+    console.log('Test FAILED: ' + result.message);
+    console.log('-'.repeat(50));
+  } else if (result.totalFailed > 0) {
+    // When the "before" hook fails, we don't get a "failed" mesage for some
+    // reason. In that case, we just have to exit with an error.
+    exitCode = 1;
+  }
+  process.exit(exitCode);
+})();
