chore: scaffold vite react-three project

Establish initial project structure for LE BUS (clement.saillant.cc),
a demoscene-style personal identity hub built with Vite, React, and
react-three-fiber.

Changes:
- Add package.json with dependencies (React 19, Three.js,
  react-three/fiber, zustand, playwright for e2e)
- Add tsconfig.json with ES2022 target and react-jsx support
- Add vite.config.ts with React plugin
- Add minimal index.html, src/main.tsx, and src/style.css
- Add README.md with usage commands
- Add .gitignore (node_modules, dist, test artifacts, .DS_Store)
- Generate package-lock.json via npm install

Note: chiptune3 removed from dependencies (not on npm registry;
will be isolated behind src/audio/modPlayer.ts in Task 11 with mocks).

Build and test harness verified:
- npm run build succeeds → dist/index.html created
- npx vitest run --passWithNoTests exits 0
This commit is contained in:
L'électron rare
2026-07-09 10:56:10 +02:00
parent 6b2ed06925
commit 96c3062662
10 changed files with 3161 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
node_modules/
dist/
test-results/
playwright-report/
*.local
.DS_Store
+9
View File
@@ -0,0 +1,9 @@
# clement.saillant.cc — LE BUS
Demoscene-style personal identity hub: a bus driving across a giant
PCB. Spec: docs/superpowers/specs/2026-07-09-clement-saillant-cc-design.md
- `npm run dev` — dev server
- `npm test` — unit tests (vitest)
- `npm run e2e` — smoke tests (playwright)
- `npm run build` — static build in dist/
+12
View File
@@ -0,0 +1,12 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Clément Saillant — LE BUS</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
+3076
View File
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
{
"name": "clement-saillant-cc",
"private": true,
"version": "0.1.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview --port 4173",
"test": "vitest run",
"e2e": "playwright test"
},
"dependencies": {
"@react-three/drei": "^10",
"@react-three/fiber": "^9",
"react": "^19",
"react-dom": "^19",
"three": "^0.177.0",
"zustand": "^5"
},
"devDependencies": {
"@playwright/test": "^1.53",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/three": "^0.177.0",
"@vitejs/plugin-react": "^4",
"typescript": "^5.8",
"vite": "^7",
"vitest": "^3"
}
}
+3
View File
@@ -0,0 +1,3 @@
import './style.css'
console.log('LE BUS — scaffold OK')
+2
View File
@@ -0,0 +1,2 @@
:root { color-scheme: dark; }
body { margin: 0; background: #05010d; color: #ffd23f; font-family: "Courier New", monospace; }
+15
View File
@@ -0,0 +1,15 @@
{
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"module": "ESNext",
"moduleResolution": "bundler",
"jsx": "react-jsx",
"strict": true,
"noEmit": true,
"skipLibCheck": true,
"isolatedModules": true,
"types": ["vite/client"]
},
"include": ["src", "vite.config.ts", "e2e"]
}
+1
View File
@@ -0,0 +1 @@
{"root":["./src/main.tsx","./vite.config.ts"],"version":"5.9.3"}
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
})