fix: production renderer, app icon, dev:web script

- Add Bradly app icon (.icns + .png) for macOS
- Fix Electron production mode: Express serves built renderer files
- Add extraResource for renderer + remotion-bundle in forge.config.ts
- Fix dev:web script to use npx tsx
This commit is contained in:
2026-06-02 04:06:00 -05:00
parent 92a8cf78a9
commit e42a484ab0
5 changed files with 27 additions and 1 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

+6
View File
@@ -11,11 +11,17 @@ const config: ForgeConfig = {
packagerConfig: { packagerConfig: {
name: 'Bradly', name: 'Bradly',
executableName: 'bradly', executableName: 'bradly',
icon: './assets/icon',
asar: { asar: {
// Remotion compositor binaries MUST be outside app.asar // Remotion compositor binaries MUST be outside app.asar
// because they are native executables that need direct filesystem access // because they are native executables that need direct filesystem access
unpack: '{**/node_modules/@remotion/compositor-*/**,**/node_modules/@remotion/renderer/**}', unpack: '{**/node_modules/@remotion/compositor-*/**,**/node_modules/@remotion/renderer/**}',
}, },
// Include the built renderer and Remotion bundle as extra resources
extraResource: [
'./out/renderer',
'./out/remotion-bundle',
],
// Ignore development files during packaging // Ignore development files during packaging
ignore: [ ignore: [
/^\/src$/, /^\/src$/,
+1 -1
View File
@@ -7,7 +7,7 @@
"main": "out/main/index.js", "main": "out/main/index.js",
"scripts": { "scripts": {
"dev": "electron-vite dev", "dev": "electron-vite dev",
"dev:web": "tsx server.ts", "dev:web": "npx tsx server.ts",
"build": "electron-vite build", "build": "electron-vite build",
"build:web": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs", "build:web": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
"start": "electron-vite preview", "start": "electron-vite preview",
+20
View File
@@ -71,6 +71,26 @@ async function startExpressServer(): Promise<void> {
const { createExpressApp } = await import('../../server'); const { createExpressApp } = await import('../../server');
const expressApp = await createExpressApp(); const expressApp = await createExpressApp();
// In production Electron, serve the built renderer files
if (!process.env.NODE_ENV || process.env.NODE_ENV !== 'development') {
const { default: express } = await import('express');
// electron-vite builds renderer to out/renderer/
const rendererPath = app.isPackaged
? path.join(process.resourcesPath, 'renderer')
: path.join(__dirname, '..', '..', 'out', 'renderer');
if (fs.existsSync(rendererPath)) {
expressApp.use(express.static(rendererPath));
// SPA fallback — serve index.html for all non-API routes
expressApp.get('*', (_req: any, res: any) => {
res.sendFile(path.join(rendererPath, 'index.html'));
});
console.log('📦 Serving renderer from:', rendererPath);
} else {
console.warn('⚠️ Renderer build not found at:', rendererPath);
}
}
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
const server = expressApp.listen(EXPRESS_PORT, '127.0.0.1', () => { const server = expressApp.listen(EXPRESS_PORT, '127.0.0.1', () => {
console.log(`🚀 Express server on http://127.0.0.1:${EXPRESS_PORT}`); console.log(`🚀 Express server on http://127.0.0.1:${EXPRESS_PORT}`);