feat(16-01): create Vite + React + TypeScript project

- packages/web/ with Vite dev server, React 19, TypeScript
- Server proxy /trpc -> http://127.0.0.1:3847 for CORS-free dev
- Root npm workspaces configured (packages/*)
- dev:web script for workspace dev server
This commit is contained in:
Lukas May
2026-02-04 17:10:15 +01:00
parent f5f25c4854
commit 99348e0650
9 changed files with 104 additions and 1 deletions

View File

@@ -3,6 +3,7 @@
"version": "0.0.1",
"description": "Multi-agent workspace for orchestrating multiple Claude Code agents",
"type": "module",
"workspaces": ["packages/*"],
"main": "./dist/index.js",
"bin": {
"cw": "./dist/bin/cw.js"
@@ -13,7 +14,8 @@
"clean": "rimraf dist",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage"
"test:coverage": "vitest run --coverage",
"dev:web": "npm run dev --workspace=packages/web"
},
"keywords": [
"claude",

12
packages/web/index.html Normal file
View File

@@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Codewalk District</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

23
packages/web/package.json Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "@codewalk-district/web",
"private": true,
"version": "0.0.1",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview",
"lint": "tsc --noEmit"
},
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"@vitejs/plugin-react": "^4.3.4",
"typescript": "^5.7.3",
"vite": "^6.1.0"
}
}

5
packages/web/src/App.tsx Normal file
View File

@@ -0,0 +1,5 @@
function App() {
return <div>Codewalk District</div>;
}
export default App;

View File

@@ -0,0 +1,11 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
}
body {
margin: 0;
min-width: 320px;
min-height: 100vh;
}

View File

@@ -0,0 +1,9 @@
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
createRoot(document.getElementById("root")!).render(
<StrictMode>
<App />
</StrictMode>
);

View File

@@ -0,0 +1,21 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src"]
}

View File

@@ -0,0 +1,6 @@
{
"files": [],
"references": [
{ "path": "./tsconfig.app.json" }
]
}

View File

@@ -0,0 +1,14 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
export default defineConfig({
plugins: [react()],
server: {
proxy: {
"/trpc": {
target: "http://127.0.0.1:3847",
changeOrigin: true,
},
},
},
});