# TimeSafari Build Modernization Context **Author:** Matthew Raymer ## Motivation - Eliminate manual hacks and post-build scripts for Electron builds - Ensure maintainability, reproducibility, and security of build outputs - Unify build, test, and deployment scripts for developer experience and CI/CD ## Key Technical Decisions - **Vite is the single source of truth for build output** - All Electron build output (main process, preload, renderer HTML/CSS/JS) is managed by `vite.config.electron.mts` - **CSS injection for Electron is handled by a Vite plugin** - No more manual HTML/CSS edits or post-build scripts - **Build scripts are unified and robust** - Use `./scripts/build-electron.sh` for all Electron builds - No more `fix-inject-css.js` or similar hacks - **Output structure is deterministic and ASAR-friendly** - Main process: `dist-electron/main.js` - Preload: `dist-electron/preload.js` - Renderer assets: `dist-electron/www/` (HTML, CSS, JS) ## Security & Maintenance Checklist - [x] All scripts and configs are committed and documented - [x] No manual file hacks remain - [x] All build output is deterministic and reproducible - [x] No sensitive data is exposed in the build process - [x] Documentation (`BUILDING.md`) is up to date ## How to Build Electron 1. Run: ```bash ./scripts/build-electron.sh ``` 2. Output will be in `dist-electron/`: - `main.js`, `preload.js` in root - `www/` contains all renderer assets 3. No manual post-processing is required ## Customization - **Vite config:** All build output and asset handling is controlled in `vite.config.electron.mts` - **CSS/HTML injection:** Use Vite plugins (see `electron-css-injection` in the config) for further customization - **Build scripts:** All orchestration is in `scripts/` and documented in `BUILDING.md` ## For Future Developers - Always use Vite plugins/config for build output changes - Never manually edit built files or inject assets post-build - Keep documentation and scripts in sync with the build process --- This file documents the context and rationale for the build modernization and should be included in the repository for onboarding and future reference.