Logo

Meetingnotes

The Free, Open-Source AI Notetaker for Busy Engineers

## Features Implemented: - Recording mic & system audio - End-of-meeting transcription through your Coder service - Ability to also write down additional notes - AI generated enhanced notes - Copy functionality - Meeting deletion functionality - Meeting search functionality - Abilty to edit system prompt - Select any compatible Coder model for transcription and note generation - Automatic start and stop from MuteDeck through a compatible local API, with a 10-second reconnect grace period - Merge an automatically split continuation back into its previous meeting - Auto updates - Text formatting - Different note templates - Integrate with Posthog for anonymous analytics (installs, opens, meetings created) - Onboarding screen to enable settings and set API key Todo: - improve provider balance and token validation errors - add padding to text inputs - add confirmation when clicking the copy button Later: - Cool recording indicator (dancing bars) - Connecting to your Google calendar - AI chat for asking questions about a meeting - Integrations for email, Slack, Notion, etc. ## Releasing a New Version Production releases are Developer ID signed, notarized by Apple, published to [Gitea Releases](https://git.jamesbone.net/coder/meetingnotes/releases), and signed for Sparkle auto-updates. ### Release Process 1. **Update the version number:** ```bash # For bug fixes (1.0 → 1.0.1): ./scripts/update_version.sh patch # For new features (1.0 → 1.1): ./scripts/update_version.sh minor # For major changes (1.0 → 2.0): ./scripts/update_version.sh major # For custom version: ./scripts/update_version.sh custom 1.2.0 ``` 2. Commit and push the version change to `main`. 3. Run the `Release` workflow from Gitea Actions on `main` and enter the version without the `v` prefix. The workflow signs and notarizes the app, generates the signed appcast, creates the version tag, and publishes both release assets. The app checks `https://git.jamesbone.net/coder/meetingnotes/releases/download/latest/appcast.xml` and installs later releases automatically through Sparkle. ### Recovering Meetings The first Developer ID signed build may not automatically inherit data from an older ad-hoc signed build. In Settings, use **Import Meetings...** and select the old `Meetings` folder. After this one-time transition, the stable signing identity keeps the same sandbox container across updates. ### Build runner and GitHub transition `.gitea/workflows/build.yml` builds universal macOS artifacts for pushes and pull requests to `main`. The shared account-scoped `mac-mini` runner uses the `macos-arm64` label. Smoke tests use a separate CI bundle identifier and temporary launch preferences and an internal-volume staging directory. Keychain services follow the bundle identifier, so CI never reads production credentials; the smoke test removes its isolated API token before and after each launch. Release jobs import the original Developer ID certificate into a temporary keychain and keep the original Sparkle signing key in Gitea Actions secrets. They never publish from a development branch. Version 1.1.33 moves the embedded update feed to Gitea. After its notarized archive is verified, replace the `appcast.xml` asset on the last GitHub release with the new appcast. Existing installations discover the Gitea download through that old GitHub feed; after installing it, they check Gitea directly. Keep the old GitHub repository and its release appcast available for installations that update later.