diff --git a/.act/events/push-dev.json b/.act/events/push-dev.json
new file mode 100644
index 0000000..2bff2be
--- /dev/null
+++ b/.act/events/push-dev.json
@@ -0,0 +1,3 @@
+{
+ "ref": "refs/heads/dev"
+}
diff --git a/.act/events/push-main.json b/.act/events/push-main.json
new file mode 100644
index 0000000..ccb4cb1
--- /dev/null
+++ b/.act/events/push-main.json
@@ -0,0 +1,3 @@
+{
+ "ref": "refs/heads/main"
+}
diff --git a/.act/run b/.act/run
new file mode 100755
index 0000000..3bbdc0f
--- /dev/null
+++ b/.act/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+# Auto-detect Docker socket from active context, then delegate to act.
+# Respects DOCKER_HOST if already set.
+exec env \
+ DOCKER_HOST="${DOCKER_HOST:-$(docker context inspect -f '{{.Endpoints.docker.Host}}' 2>/dev/null)}" \
+ act "$@"
diff --git a/.act/secrets.example b/.act/secrets.example
new file mode 100644
index 0000000..525a4ed
--- /dev/null
+++ b/.act/secrets.example
@@ -0,0 +1 @@
+GITHUB_TOKEN=ghp_your_personal_access_token_here
diff --git a/.actrc b/.actrc
new file mode 100644
index 0000000..6f584ea
--- /dev/null
+++ b/.actrc
@@ -0,0 +1,5 @@
+--container-daemon-socket /var/run/docker.sock
+--env ELECTRON_SKIP_BINARY_DOWNLOAD=1
+-P ubuntu-latest=catthehacker/ubuntu:act-latest
+-P macos-14=catthehacker/ubuntu:act-latest
+-P windows-latest=catthehacker/ubuntu:act-latest
diff --git a/.gitignore b/.gitignore
index 25f0be1..6f699c9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,6 @@ examples/chats/*.zip
# Playwright MCP screenshots
.playwright-mcp/
+
+# Local GitHub Actions secrets
+.act/secrets
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f427d97..fb45ef7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## [1.30.2](https://github.com/rodrigogs/whats-reader/compare/v1.30.1...v1.30.2) (2026-04-03)
+
+
+### Performance Improvements
+
+* reduce Electron app bundle size ([bf6b3b1](https://github.com/rodrigogs/whats-reader/commit/bf6b3b102d6cb5fdb3f8a6e06fb9c5e0a9240fe4))
+
## [1.30.1](https://github.com/rodrigogs/whats-reader/compare/v1.30.0...v1.30.1) (2026-04-01)
diff --git a/package-lock.json b/package-lock.json
index ad50f25..da4c5ff 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "whats-reader",
- "version": "1.30.1",
+ "version": "1.30.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "whats-reader",
- "version": "1.30.1",
+ "version": "1.30.2",
"license": "AGPL-3.0",
"dependencies": {
"@floating-ui/dom": "^1.7.6",
diff --git a/package.json b/package.json
index 3bfeeaa..573f398 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "whats-reader",
"productName": "WhatsApp Backup Reader",
- "version": "1.30.1",
+ "version": "1.30.2",
"description": "A desktop app to read and visualize WhatsApp chat exports",
"license": "AGPL-3.0",
"author": {
@@ -35,20 +35,26 @@
"electron:build:mac": "npm run build && electron-builder --mac",
"electron:build:win": "npm run build && electron-builder --win",
"electron:build:linux": "npm run build && electron-builder --linux",
- "machine-translate": "inlang machine translate --project project.inlang"
+ "machine-translate": "inlang machine translate --project project.inlang",
+ "act:setup": "docker pull catthehacker/ubuntu:act-latest && test -f .act/secrets || cp .act/secrets.example .act/secrets",
+ "act:ci": "npm run act:ci:lint && npm run act:ci:typecheck && npm run act:ci:build",
+ "act:ci:lint": ".act/run push -W .github/workflows/ci.yml -e .act/events/push-dev.json -j lint",
+ "act:ci:typecheck": ".act/run push -W .github/workflows/ci.yml -e .act/events/push-dev.json -j typecheck",
+ "act:ci:build": ".act/run push -W .github/workflows/ci.yml -e .act/events/push-dev.json -j build",
+ "act:release": ".act/run push -W .github/workflows/release.yml --secret-file .act/secrets -e .act/events/push-main.json",
+ "act:build": ".act/run workflow_dispatch -W .github/workflows/build.yml --secret-file .act/secrets --input version=${VERSION:-0.0.0-local} --matrix platform:linux-x64",
+ "act:deploy": ".act/run workflow_dispatch -W .github/workflows/deploy.yml -j build"
},
"dependencies": {
- "@floating-ui/dom": "^1.7.6",
- "@huggingface/transformers": "^3.8.1",
- "electron-updater": "^6.8.3",
- "idb-keyval": "^6.2.2",
- "jszip": "^3.10.1"
+ "electron-updater": "^6.8.3"
},
"overrides": {
"cookie": "^0.7.0"
},
"devDependencies": {
"@biomejs/biome": "2.4.10",
+ "@floating-ui/dom": "^1.7.6",
+ "@huggingface/transformers": "^3.8.1",
"@inlang/cli": "^3.1.9",
"@inlang/paraglide-js": "2.15.1",
"@inlang/plugin-m-function-matcher": "^2.2.4",
@@ -63,6 +69,8 @@
"cross-env": "^10.1.0",
"electron": "^39.8.6",
"electron-builder": "~26.0.12",
+ "idb-keyval": "^6.2.2",
+ "jszip": "^3.10.1",
"semantic-release": "^25.0.3",
"svelte": "^5.55.1",
"svelte-check": "^4.4.6",
@@ -88,6 +96,9 @@
"electron/**/*",
"!**/*.map",
"!**/*.md",
+ "!**/*.ts",
+ "!**/*.d.mts",
+ "!**/tsconfig*",
"!**/LICENSE",
"!**/README",
"!**/.github",
@@ -95,7 +106,11 @@
"!**/tests",
"!**/__tests__",
"!**/docs",
- "!**/examples"
+ "!**/examples",
+ "!build/og-image*.png",
+ "!build/apple-touch-icon.png",
+ "!build/web-app-manifest-*.png",
+ "!build/site.webmanifest"
],
"asarUnpack": [
"**/*.{node,dll}"
diff --git a/src/app.html b/src/app.html
index 2c5b206..2e75c3d 100644
--- a/src/app.html
+++ b/src/app.html
@@ -6,7 +6,6 @@
-
diff --git a/src/lib/assets/favicon.png b/src/lib/assets/favicon.png
new file mode 100644
index 0000000..7a2ea03
Binary files /dev/null and b/src/lib/assets/favicon.png differ
diff --git a/src/lib/assets/favicon.svg b/src/lib/assets/favicon.svg
deleted file mode 100644
index 55e454e..0000000
--- a/src/lib/assets/favicon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index e2ecb3c..6979ff5 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -1,5 +1,5 @@