feat: integrate Electron for desktop app

- Add electron-vite + Electron Forge tooling
- Create Electron main process with embedded Express server
- Create preload script with native dialog IPC bridge
- Refactor server.ts to export createExpressApp() (dual web/electron)
- Adapt renderQueue.ts for packaged binaries + pre-built bundle
- Add ensureBrowser() for Chrome Headless Shell pre-download
- Add scripts/bundle-remotion.js for packaging
- Data persists in ~/Library/Application Support/Bradly/
- Web mode preserved via npm run dev:web
This commit is contained in:
2026-06-02 03:57:17 -05:00
parent b135a70cc7
commit 92a8cf78a9
10 changed files with 6137 additions and 26 deletions
+19 -7
View File
@@ -1,15 +1,23 @@
{
"name": "react-example",
"name": "bradly",
"productName": "Bradly",
"private": true,
"version": "0.0.0",
"version": "0.1.0",
"type": "module",
"main": "out/main/index.js",
"scripts": {
"dev": "tsx server.ts",
"build": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
"start": "node dist/server.cjs",
"dev": "electron-vite dev",
"dev:web": "tsx server.ts",
"build": "electron-vite build",
"build:web": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
"start": "electron-vite preview",
"start:web": "node dist/server.cjs",
"preview": "vite preview",
"clean": "rm -rf dist server.js",
"lint": "tsc --noEmit"
"clean": "rm -rf dist out server.js",
"lint": "tsc --noEmit",
"remotion:bundle": "node scripts/bundle-remotion.js",
"package": "npm run remotion:bundle && npm run build && electron-forge package",
"make": "npm run remotion:bundle && npm run build && electron-forge make"
},
"dependencies": {
"@dnd-kit/core": "^6.3.1",
@@ -35,12 +43,16 @@
"vite": "^6.2.3"
},
"devDependencies": {
"@electron-forge/cli": "^7.11.2",
"@electron-forge/maker-dmg": "^7.11.2",
"@types/express": "^4.17.21",
"@types/file-saver": "^2.0.7",
"@types/multer": "^2.1.0",
"@types/node": "^22.14.0",
"@types/papaparse": "^5.5.2",
"autoprefixer": "^10.4.21",
"electron": "^41.7.1",
"electron-vite": "^5.0.0",
"esbuild": "^0.25.0",
"tailwindcss": "^4.1.14",
"tsx": "^4.21.0",