Bundle frontend with esbuild, serve fonts offline, fix dashboard
- Add esbuild bundling: JS (IIFE, minified, sourcemapped) and CSS into single dist/ files, replacing 15+ individual CSS links and CDN scripts - Bundle Chart.js and ELK.js from npm instead of CDN (fully offline) - Serve DM Sans and Orbitron fonts locally from static/fonts/ - Fix dashboard automation card stretching full width (max-width: 500px) - Fix time_of_day condition not localized in automation cards - Add Chrome browser tools context file for MCP testing workflow - Update frontend context with bundling docs and Chrome tools reference Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -157,6 +157,53 @@ document.addEventListener('languageChanged', () => {
|
||||
|
||||
Static HTML using `data-i18n` attributes is handled automatically by the i18n system. Only dynamically generated HTML needs this pattern.
|
||||
|
||||
## Bundling & Development Workflow
|
||||
|
||||
The frontend uses **esbuild** to bundle all JS modules and CSS files into single files for production.
|
||||
|
||||
### Files
|
||||
|
||||
- **Entry points:** `static/js/app.js` (JS), `static/css/all.css` (CSS imports all individual sheets)
|
||||
- **Output:** `static/dist/app.bundle.js` and `static/dist/app.bundle.css` (minified + source maps)
|
||||
- **Config:** `server/esbuild.mjs`
|
||||
- **HTML:** `templates/index.html` references the bundles, not individual source files
|
||||
|
||||
### Commands (from `server/` directory)
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `npm run build` | One-shot bundle + minify (~30ms) |
|
||||
| `npm run watch` | Watch mode — auto-rebuilds on any JS/CSS file save |
|
||||
|
||||
### Development workflow
|
||||
|
||||
1. Run `npm run watch` in a terminal (stays running)
|
||||
2. Edit source files in `static/js/` or `static/css/` as usual
|
||||
3. esbuild rebuilds the bundle automatically (~30ms)
|
||||
4. Refresh the browser to see changes
|
||||
|
||||
### Dependencies
|
||||
|
||||
All JS/CSS dependencies are bundled — **no CDN or external requests** at runtime:
|
||||
|
||||
- **Chart.js** — imported in `perf-charts.js`, exposed as `window.Chart` for `targets.js` and `dashboard.js`
|
||||
- **ELK.js** — imported in `graph-layout.js` for graph auto-layout
|
||||
- **Fonts** — DM Sans (400-700) and Orbitron (700) woff2 files in `static/fonts/`, declared in `css/fonts.css`
|
||||
|
||||
When adding a new JS dependency: `npm install <pkg>` in `server/`, then `import` it in the relevant source file. esbuild bundles it automatically.
|
||||
|
||||
### Notes
|
||||
|
||||
- The `dist/` directory is gitignored — bundles are build artifacts, run `npm run build` after clone
|
||||
- Source maps are generated so browser DevTools show original source files
|
||||
- The server sets `Cache-Control: no-cache` on static JS/CSS/JSON to prevent stale browser caches during development
|
||||
- GZip compression middleware reduces transfer sizes by ~75%
|
||||
- **Do not edit files in `static/dist/`** — they are overwritten by the build
|
||||
|
||||
## Chrome Browser Tools
|
||||
|
||||
See [`contexts/chrome-tools.md`](chrome-tools.md) for Chrome MCP tool usage, browser tricks (hard reload, zoom, console), and verification workflow.
|
||||
|
||||
## Visual Graph Editor
|
||||
|
||||
See [`contexts/graph-editor.md`](graph-editor.md) for full graph editor architecture and conventions.
|
||||
|
||||
Reference in New Issue
Block a user