--- name: project-scaffold description: Scaffold a Vite + TypeScript personal dashboard project with the correct directory structure, dependencies, and configuration files. --- # Project Scaffold Set up a new **Vite + TypeScript** project for a personal daily monitoring dashboard. ## Directory Structure ``` my-daily-monitor/ ├── index.html ├── package.json ├── tsconfig.json ├── vite.config.ts ├── api/ # Serverless API proxy endpoints (Vercel) │ └── stocks.ts ├── src/ │ ├── main.ts # Entry point │ ├── components/ # Panel components │ │ ├── Panel.ts # Base panel class │ │ ├── StockPanel.ts │ │ ├── NewsPanel.ts │ │ └── index.ts │ ├── services/ # Data fetching services │ │ ├── stock-market.ts │ │ ├── news.ts │ │ └── index.ts │ ├── utils/ # Utilities │ │ ├── circuit-breaker.ts │ │ ├── sparkline.ts │ │ ├── format.ts │ │ └── index.ts │ ├── config/ # Panel config, API endpoints │ │ └── panels.ts │ └── styles/ │ └── main.css └── skills/ # OpenSpace skill files ``` ## package.json ```json { "name": "my-daily-monitor", "private": true, "version": "0.1.0", "type": "module", "scripts": { "dev": "vite", "build": "tsc && vite build", "preview": "vite preview" }, "devDependencies": { "typescript": "^5.7.2", "vite": "^6.0.7" } } ``` ## tsconfig.json ```json { "compilerOptions": { "target": "ES2022", "module": "ESNext", "moduleResolution": "bundler", "strict": true, "jsx": "preserve", "resolveJsonModule": true, "isolatedModules": true, "esModuleInterop": true, "lib": ["ES2022", "DOM", "DOM.Iterable"], "skipLibCheck": true, "noEmit": true, "paths": { "@/*": ["./src/*"] }, "baseUrl": "." }, "include": ["src"] } ``` ## vite.config.ts ```typescript import { defineConfig } from 'vite'; import { resolve } from 'path'; export default defineConfig({ resolve: { alias: { '@': resolve(__dirname, 'src'), }, }, server: { port: 5173, }, }); ``` ## index.html ```html