Installed apps now show an 'Update available' button (menu bar) and can
one-click install signed updates. Adds the Sparkle dependency, an
UpdaterManager wired into AppState, the menu-bar banner + 'Check for
Updates', and Info.plist SUFeedURL (https://grammagem.app/appcast.xml),
SUPublicEDKey, and scheduled background checks.
Build / release:
- build.sh embeds + rpaths Sparkle.framework; sign-app.sh signs it
inside-out (XPC services, Updater.app, Autoupdate, framework, then app)
for a valid, notarizable signature.
- release.sh stamps the version, builds, signs, notarizes, staples, zips,
and emits the EdDSA-signed appcast.xml to upload to grammagem.app.
- A hidden --update-selftest checks a feed headlessly (CI/build pipeline).
Verified: a v0.1.0 build detects a v0.2.0 update against a local signed
appcast (UPDATE_FOUND: 0.2.0); the signed app passes codesign --strict.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements the highest-leverage items from docs/grammarly-value-plan.md:
- Live Check: on-device 0-100 writing score, Correctness/Clarity/Polish
count chips, and per-suggestion Dismiss / Add-to-dictionary (a cheap,
always-available 'no' is what makes 'Apply' feel safe).
- Value loop: day-streak, correction milestones and a 'subscription you
didn't pay' figure on the dashboard + a streak line in the menu bar
(all local, self-vs-self, no telemetry).
- First-run demo: a planted sample the real engine cleans in one click,
before any permission ask.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- SystemGrammarEngine: on-device spelling + grammar via NSSpellChecker (no deps,
no network), augmented with deterministic Harper-style rules. Now the default.
- TextFieldScanner: walks the frontmost window's Accessibility tree to find every
editable text area (bounded for huge web/Electron trees), not just the focused one.
- LiveMonitor now publishes per-field issues across the whole window + fix methods
(apply one suggestion, fix a field, fix everything) via AX value writes.
- LiveCheckView: a panel listing each text area with errors highlighted inline and
one-click fixes; opened from the menu bar (Show live issues / Show issues / Fix all).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- LiveMonitor: menu-bar–resident; reads the focused field via the Accessibility
API, runs the offline grammar engine, and shows live suggestions + a "Fix all".
- Menu-bar icon now reflects status (issue count / paused); added Pause/Resume.
- Page Blocker: exclude apps + websites (Safari domain detection) where GrammaGem
stays out of the way; hotkeys + monitoring suppressed there.
- build.sh now produces a universal (arm64 + x86_64) bundle; sign-notarize.sh is a
turnkey codesign→notarize→staple flow reading creds from env/keychain (no secrets).
- Clean entitlements plist (AMFI-compatible).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Management app: sidebar window with Dashboard (usage insights), Devices
(slot usage, deactivate this Mac), Writing Modes (custom + app-aware map),
Dictionary, Snippets, Shortcuts, AI Model, Privacy, General, License, About.
- New local stores: Preferences (launch-at-login, appearance), UsageStats
(privacy-friendly local insights), CustomModesStore, SnippetStore.
- License model now tracks device name + activation usage/limit for the
Devices screen.
- README rewritten as a conversion-focused product page (no internal cost/setup).
- Legal entity set to FounderGem LLC across README, LICENSE, Info.plist, About.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Native SwiftUI menu-bar app: global hotkey → capture selected text (AX API /
clipboard fallback) → grammar (Harper) / local AI (MLX) → replace in place.
Free/paid entitlement gate + Lemon Squeezy device-cap licensing, $0 marginal
cost per user. Heavyweight engines behind protocol stubs so it builds out of the box.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>