diff --git a/index.html b/index.html
new file mode 100644
index 0000000..4c307ad
--- /dev/null
+++ b/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ The Director
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8634e97
--- /dev/null
+++ b/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "gm-director",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "test": "vitest run",
+ "test:watch": "vitest"
+ },
+ "devDependencies": {
+ "jsdom": "^24.0.0",
+ "vite": "^5.2.0",
+ "vitest": "^1.6.0"
+ }
+}
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..f8b25d9
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,2 @@
+// Boot entry. Component registration is added in later tasks.
+export const APP = 'the-director';
diff --git a/tests/smoke.test.js b/tests/smoke.test.js
new file mode 100644
index 0000000..12542b5
--- /dev/null
+++ b/tests/smoke.test.js
@@ -0,0 +1,13 @@
+// tests/smoke.test.js
+import { describe, it, expect } from 'vitest';
+import { APP } from '../src/main.js';
+
+describe('scaffold', () => {
+ it('boots and exposes the app id', () => {
+ expect(APP).toBe('the-director');
+ });
+ it('has a working DOM environment', () => {
+ document.body.innerHTML = 'hi
';
+ expect(document.getElementById('x').textContent).toBe('hi');
+ });
+});
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..274012c
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,8 @@
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ test: {
+ environment: 'jsdom',
+ include: ['tests/**/*.test.js'],
+ },
+});