diff --git a/assets/icon.png b/assets/icon.png index 0c5d9665..f858c9eb 100644 Binary files a/assets/icon.png and b/assets/icon.png differ diff --git a/build/appx/LargeTile.png b/build/appx/LargeTile.png new file mode 100644 index 00000000..fc7392b4 Binary files /dev/null and b/build/appx/LargeTile.png differ diff --git a/build/appx/LargeTile.scale-125.png b/build/appx/LargeTile.scale-125.png new file mode 100644 index 00000000..de2fdddc Binary files /dev/null and b/build/appx/LargeTile.scale-125.png differ diff --git a/build/appx/LargeTile.scale-150.png b/build/appx/LargeTile.scale-150.png new file mode 100644 index 00000000..f2b5fa55 Binary files /dev/null and b/build/appx/LargeTile.scale-150.png differ diff --git a/build/appx/LargeTile.scale-200.png b/build/appx/LargeTile.scale-200.png new file mode 100644 index 00000000..f90f6410 Binary files /dev/null and b/build/appx/LargeTile.scale-200.png differ diff --git a/build/appx/LargeTile.scale-400.png b/build/appx/LargeTile.scale-400.png new file mode 100644 index 00000000..7ad08812 Binary files /dev/null and b/build/appx/LargeTile.scale-400.png differ diff --git a/build/appx/SmallTile.png b/build/appx/SmallTile.png new file mode 100644 index 00000000..b34463e4 Binary files /dev/null and b/build/appx/SmallTile.png differ diff --git a/build/appx/SmallTile.scale-125.png b/build/appx/SmallTile.scale-125.png new file mode 100644 index 00000000..660cfdf1 Binary files /dev/null and b/build/appx/SmallTile.scale-125.png differ diff --git a/build/appx/SmallTile.scale-150.png b/build/appx/SmallTile.scale-150.png new file mode 100644 index 00000000..cfa78187 Binary files /dev/null and b/build/appx/SmallTile.scale-150.png differ diff --git a/build/appx/SmallTile.scale-200.png b/build/appx/SmallTile.scale-200.png new file mode 100644 index 00000000..f105e5f1 Binary files /dev/null and b/build/appx/SmallTile.scale-200.png differ diff --git a/build/appx/SmallTile.scale-400.png b/build/appx/SmallTile.scale-400.png new file mode 100644 index 00000000..aa60849f Binary files /dev/null and b/build/appx/SmallTile.scale-400.png differ diff --git a/build/appx/Square150x150Logo.png b/build/appx/Square150x150Logo.png new file mode 100644 index 00000000..082ae93c Binary files /dev/null and b/build/appx/Square150x150Logo.png differ diff --git a/build/appx/Square150x150Logo.scale-125.png b/build/appx/Square150x150Logo.scale-125.png new file mode 100644 index 00000000..276c9dd3 Binary files /dev/null and b/build/appx/Square150x150Logo.scale-125.png differ diff --git a/build/appx/Square150x150Logo.scale-150.png b/build/appx/Square150x150Logo.scale-150.png new file mode 100644 index 00000000..b106b83b Binary files /dev/null and b/build/appx/Square150x150Logo.scale-150.png differ diff --git a/build/appx/Square150x150Logo.scale-200.png b/build/appx/Square150x150Logo.scale-200.png new file mode 100644 index 00000000..26a97b25 Binary files /dev/null and b/build/appx/Square150x150Logo.scale-200.png differ diff --git a/build/appx/Square150x150Logo.scale-400.png b/build/appx/Square150x150Logo.scale-400.png new file mode 100644 index 00000000..907d2d06 Binary files /dev/null and b/build/appx/Square150x150Logo.scale-400.png differ diff --git a/build/appx/Square44x44Logo.png b/build/appx/Square44x44Logo.png new file mode 100644 index 00000000..ea3e6f7a Binary files /dev/null and b/build/appx/Square44x44Logo.png differ diff --git a/build/appx/Square44x44Logo.scale-125.png b/build/appx/Square44x44Logo.scale-125.png new file mode 100644 index 00000000..44524971 Binary files /dev/null and b/build/appx/Square44x44Logo.scale-125.png differ diff --git a/build/appx/Square44x44Logo.scale-150.png b/build/appx/Square44x44Logo.scale-150.png new file mode 100644 index 00000000..3a3e93da Binary files /dev/null and b/build/appx/Square44x44Logo.scale-150.png differ diff --git a/build/appx/Square44x44Logo.scale-200.png b/build/appx/Square44x44Logo.scale-200.png new file mode 100644 index 00000000..a85af2df Binary files /dev/null and b/build/appx/Square44x44Logo.scale-200.png differ diff --git a/build/appx/Square44x44Logo.scale-400.png b/build/appx/Square44x44Logo.scale-400.png new file mode 100644 index 00000000..34312b69 Binary files /dev/null and b/build/appx/Square44x44Logo.scale-400.png differ diff --git a/build/appx/StoreLogo.png b/build/appx/StoreLogo.png new file mode 100644 index 00000000..ebebd5bf Binary files /dev/null and b/build/appx/StoreLogo.png differ diff --git a/build/appx/StoreLogo.scale-125.png b/build/appx/StoreLogo.scale-125.png new file mode 100644 index 00000000..25d03fa1 Binary files /dev/null and b/build/appx/StoreLogo.scale-125.png differ diff --git a/build/appx/StoreLogo.scale-150.png b/build/appx/StoreLogo.scale-150.png new file mode 100644 index 00000000..403266e8 Binary files /dev/null and b/build/appx/StoreLogo.scale-150.png differ diff --git a/build/appx/StoreLogo.scale-200.png b/build/appx/StoreLogo.scale-200.png new file mode 100644 index 00000000..dfea7856 Binary files /dev/null and b/build/appx/StoreLogo.scale-200.png differ diff --git a/build/appx/StoreLogo.scale-400.png b/build/appx/StoreLogo.scale-400.png new file mode 100644 index 00000000..f0e65665 Binary files /dev/null and b/build/appx/StoreLogo.scale-400.png differ diff --git a/build/appx/Wide310x150Logo.png b/build/appx/Wide310x150Logo.png new file mode 100644 index 00000000..f6fa6b9f Binary files /dev/null and b/build/appx/Wide310x150Logo.png differ diff --git a/build/appx/Wide310x150Logo.scale-125.png b/build/appx/Wide310x150Logo.scale-125.png new file mode 100644 index 00000000..11cfc2db Binary files /dev/null and b/build/appx/Wide310x150Logo.scale-125.png differ diff --git a/build/appx/Wide310x150Logo.scale-150.png b/build/appx/Wide310x150Logo.scale-150.png new file mode 100644 index 00000000..df9b1ab1 Binary files /dev/null and b/build/appx/Wide310x150Logo.scale-150.png differ diff --git a/build/appx/Wide310x150Logo.scale-200.png b/build/appx/Wide310x150Logo.scale-200.png new file mode 100644 index 00000000..a3a67f99 Binary files /dev/null and b/build/appx/Wide310x150Logo.scale-200.png differ diff --git a/build/appx/Wide310x150Logo.scale-400.png b/build/appx/Wide310x150Logo.scale-400.png new file mode 100644 index 00000000..0364664a Binary files /dev/null and b/build/appx/Wide310x150Logo.scale-400.png differ diff --git a/dev-server.js b/dev-server.js new file mode 100644 index 00000000..ba1c2b9c --- /dev/null +++ b/dev-server.js @@ -0,0 +1,81 @@ +/** + * Standalone dev server — runs the Express + SQLite backend WITHOUT Electron. + * Mocks only the Electron APIs used by db.ts and server.ts. + * Usage: node dev-server.js + */ + +// Load .env before anything else +const fs = require('fs'); +const envPath = require('path').join(__dirname, '.env'); +if (fs.existsSync(envPath)) { + for (const line of fs.readFileSync(envPath, 'utf8').split('\n')) { + const match = line.match(/^\s*([^#=\s]+)\s*=\s*(.*)$/); + if (match) process.env[match[1]] = match[2].trim(); + } + console.log('[DevServer] Loaded .env'); +} + +const path = require('path'); +const os = require('os'); + +// ── Mock Electron's `app` module ────────────────────────────────────────────── +const mockApp = { + isPackaged: false, + getPath: (name) => { + if (name === 'userData') return path.join(__dirname); + if (name === 'documents') return os.homedir(); + return os.tmpdir(); + }, + getVersion: () => require('./package.json').version, + getName: () => 'Flo (dev)', +}; + +require('module').Module._resolveFilename = (function (original) { + return function (request, ...args) { + if (request === 'electron') { + return __filename; // will be intercepted below + } + return original.call(this, request, ...args); + }; +})(require('module').Module._resolveFilename); + +// Intercept `require('electron')` before any dist file loads it +const Module = require('module'); +const originalLoad = Module._load; +Module._load = function (request, parent, isMain) { + if (request === 'electron') { + return { + app: mockApp, + // Stub anything else that might be imported at module level + BrowserWindow: class {}, + ipcMain: { handle: () => {}, on: () => {} }, + dialog: {}, + shell: {}, + Menu: { buildFromTemplate: () => ({}), setApplicationMenu: () => {} }, + Tray: class {}, + nativeImage: { createFromPath: () => ({ resize: () => ({}) }) }, + }; + } + return originalLoad.apply(this, arguments); +}; + +// ── Now load and start the compiled backend ─────────────────────────────────── +const { initDatabase } = require('./dist/db'); +const { startServer } = require('./dist/server'); + +(async () => { + try { + console.log('[DevServer] Initializing database...'); + initDatabase(); + + console.log('[DevServer] Starting Express server...'); + await startServer(); + + console.log('[DevServer] ✅ Backend running on http://localhost:3001'); + console.log('[DevServer] Frontend dev server: http://localhost:3000'); + console.log('[DevServer] API health: http://localhost:3001/api/health'); + } catch (err) { + console.error('[DevServer] Failed to start:', err); + process.exit(1); + } +})(); diff --git a/frontend b/frontend index 3c17960c..28668c93 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit 3c17960cb3dfa36112be2fe53c01535846877d69 +Subproject commit 28668c9376a86e77661b7234f21f20e7671f71b5 diff --git a/package-lock.json b/package-lock.json index f4dbe349..59c8d92f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "@types/qrcode": "^1.5.6", "@types/uuid": "^9.0.8", "@types/ws": "^8.5.10", - "electron": "^31.1.0", + "electron": "^31.7.7", "electron-builder": "^26.8.1", "kill-port": "^2.0.1", "typescript": "^5.4.5" @@ -442,7 +442,6 @@ "dev": true, "license": "BSD-2-Clause", "optional": true, - "peer": true, "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", @@ -464,7 +463,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -481,7 +479,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "universalify": "^2.0.0" }, @@ -496,7 +493,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 10.0.0" } @@ -1135,6 +1131,7 @@ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2140,8 +2137,7 @@ "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -2396,6 +2392,7 @@ "integrity": "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "app-builder-lib": "26.8.1", "builder-util": "26.8.1", @@ -2795,7 +2792,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", @@ -2816,7 +2812,6 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -4425,7 +4420,6 @@ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "minimist": "^1.2.6" }, @@ -4887,6 +4881,7 @@ "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", "license": "MIT", + "peer": true, "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", @@ -4984,6 +4979,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5061,7 +5057,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "commander": "^9.4.0" }, @@ -5079,7 +5074,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": "^12.20.0 || >=14" } @@ -5486,7 +5480,6 @@ "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -6151,7 +6144,6 @@ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" diff --git a/package.json b/package.json index c164c666..3d09b534 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@types/qrcode": "^1.5.6", "@types/uuid": "^9.0.8", "@types/ws": "^8.5.10", - "electron": "^31.1.0", + "electron": "^31.7.7", "electron-builder": "^26.8.1", "kill-port": "^2.0.1", "typescript": "^5.4.5"