Skip to content
This repository was archived by the owner on Mar 30, 2026. It is now read-only.

fix: privacy-hardened OpenWhispr fork with network guard and upstream sync#2

Merged
jrschumacher merged 15 commits intomainfrom
jrschumacher/cloudfree-dlp-filter
Mar 16, 2026
Merged

fix: privacy-hardened OpenWhispr fork with network guard and upstream sync#2
jrschumacher merged 15 commits intomainfrom
jrschumacher/cloudfree-dlp-filter

Conversation

@jrschumacher
Copy link
Copy Markdown
Owner

@jrschumacher jrschumacher commented Mar 15, 2026

Summary

This PR introduces CloudFree, a privacy-hardened fork of OpenWhispr with network-level access controls. All CloudFree-specific code is isolated in src/cloudfree/ with minimal surgical edits to upstream files.

Key Changes

Network Guard

  • src/cloudfree/networkGuard.js: Electron session-level URL filter enforcing cloudfree-allowlist.json
  • Blocks all outbound requests except whitelisted domains + paths
  • Real-time logging UI showing allowed/blocked requests, statistics, and allowlist viewer
  • Supports wildcard path patterns (/v1/audio/*, /*, etc.)

UI Integration

  • Settings → CloudFree pane: Network panel, allowlist viewer, statistics
  • Support dropdown: Fork-specific bug report link + upstream attribution
  • Removed account/sign-in section (not applicable to this fork)
  • Removed integrations nav item (cloud-only feature)
  • Branding URLs updated to jrschumacher/cloudfree-openwhispr

Auto-Updater

  • Configured to check CloudFree releases instead of upstream
  • Uses direct value replacement approach in src/updater.js

CI/CD

  • cloudfree-release.yml: Combined release-please + multi-platform build pipeline (Linux, Windows, macOS arm64/x64)
  • cloudfree-ci.yml: Lint and test scoped to src/cloudfree/ only
  • Disabled upstream build-and-notarize.yml and release.yml (kept for merge compatibility)
  • macOS code signing and notarization via Apple Developer ID

Upstream Sync Workflow

  • Daily automated checks for new upstream commits
  • Clean merges → PR with network scan report
  • Conflicts → issue pointing to CLOUDFREE.md for manual resolution
  • Network scan detects new outbound endpoints and flags for review

File Organization

  • All CloudFree code in src/cloudfree/ (hooks, network guard, UI components, branding)
  • cloudfree-allowlist.json — domain+path allowlist with wildcard support
  • CLOUDFREE.md — comprehensive fork maintenance guide

Testing

  • App launches without errors
  • Settings → CloudFree pane loads and shows network log
  • Network requests are logged (allowed and blocked)
  • Allowlist wildcard patterns work (/v1/audio/*, /*/repo/main/*)
  • Updating allowlist JSON reloads on app restart
  • No network requests to upstream-specific services (cloud sync, auth, etc.)
  • Auto-updater checks CloudFree releases
  • Fonts render without Google Fonts CDN requests

🤖 Generated with Claude Code

jrschumacher and others added 15 commits March 15, 2026 06:48
- Embeds Noto Sans woff2 variable-weight font files (weights 300–700, normal + italic, latin + latin-ext subsets) into src/assets/fonts/
- Replaces Google Fonts CDN links in index.html with local stylesheet reference
- Eliminates outbound requests to fonts.googleapis.com and fonts.gstatic.com, improving privacy and enabling full offline functionality

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Replace the hook-based updater override with a simpler direct edit to
owner/repo in updater.js. Document the updater change, electron-builder
files addition, and sidebar account section removal in CLOUDFREE.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Avoids collision with any future upstream allowlist file and makes
the fork-owned config immediately identifiable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add reference to CLOUDFREE.md when manually resolving merge conflicts.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Combines release-please versioning with multi-platform build pipeline
in a single workflow. Triggers on push to main, builds Linux/Windows/macOS
when a release is created.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaced by cloudfree-release.yml which combines release-please
versioning with the multi-platform build pipeline. Upstream workflows
kept in repo (trigger neutered) to avoid merge conflicts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Runs eslint and vitest on pull requests and pushes to main.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use npm install instead of npm ci to avoid lockfile sync issues
from upstream. Only lint and test CloudFree-owned code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Root eslint.config.js ignores src/** — run from src/ to pick up
the src/eslint.config.js that covers React/TS files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tinyexec (vitest dep) needs postinstall to work. Using plain
npm install instead of npm ci to tolerate lockfile drift from upstream.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Lockfile has peer dep conflicts from upstream that cause npm ci
to fail. Using --legacy-peer-deps to tolerate them.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tinyexec (vitest dep) is marked devOptional and was being skipped.
Explicitly include dev and optional deps to ensure vitest works.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The upstream lockfile is out of sync (missing pg packages) which
prevents normal install from resolving all transitive deps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a verification step that checks for tinyexec and reinstalls
vitest if the transitive dep is missing after npm install --force.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jrschumacher jrschumacher changed the title Add cloudfree DLP hardened solution CloudFree: Privacy-hardened OpenWhispr fork with network guard and upstream sync Mar 16, 2026
@jrschumacher jrschumacher changed the title CloudFree: Privacy-hardened OpenWhispr fork with network guard and upstream sync fix: privacy-hardened OpenWhispr fork with network guard and upstream sync Mar 16, 2026
@jrschumacher jrschumacher merged commit 9877e9a into main Mar 16, 2026
1 check passed
@jrschumacher jrschumacher deleted the jrschumacher/cloudfree-dlp-filter branch March 16, 2026 22:58
This was referenced Mar 16, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant