Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Three artifacts build from this one repo: the Electron desktop app, its React re

## Commands

Run `pnpm run lint` and `pnpm run test` before finishing a change. The tests cover pure logic only (note Markdown export/parse, formatting, PDF file naming, waveform peaks), so also verify UI and main-process changes by running the app (`pnpm run dev`) and exercising the affected flow directly.
Run `pnpm run lint` and `pnpm run test` before finishing a change. The tests cover pure logic only (note Markdown export/parse, formatting, PDF file naming, waveform peaks, meeting filters/sort), so also verify UI and main-process changes by running the app (`pnpm run dev`) and exercising the affected flow directly.

The package manager is pnpm (pinned via `packageManager` in `package.json`); never use npm/npx or commit a `package-lock.json`. `pnpm-workspace.yaml` sets `nodeLinker: hoisted` so electron-builder sees a flat `node_modules`, and lists the dependencies allowed to run install scripts under `allowBuilds` (add new ones with `pnpm approve-builds <pkg>`). `verifyDepsBeforeRun: warn` stops `pnpm run` from silently reinstalling after `package.json` changes, because that reinstall replaces `node_modules/electron` and breaks it if the app is running; run `pnpm install` explicitly with the app closed. If Electron reports it "failed to install correctly", run `pnpm rebuild electron`. `minimumReleaseAge: 1440` makes pnpm refuse package versions published less than a day ago, a supply-chain guard; Dependabot has its own 7-day `cooldown` in `.github/dependabot.yml`. If `pnpm add`/`pnpm update` says a version is too new, wait, or for an urgent security fix add the package to `minimumReleaseAgeExclude` temporarily. Never remove the setting.

Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ updated: 2026-10-03

Chronological log of notable changes to the project. Newest first. This is a human-curated log — not a mirror of `git log`.

## [4.3.0] - 2026-10-08

### Added

- Meetings page "Filters" panel: date (Any time, Today, Last 7 days, Last 30 days or a custom from/to range), length (under 15 min, 15–60 min, over 1 hour), platform (Google Meet, Zoom, Teams) and content ("Has action items", "Has notes").
- Sort menu on the Meetings page: newest first (default), oldest first, longest first, shortest first, or title A–Z; sorting never counts as a filter.
- The Filters button shows how many filters are applied; with the panel closed, applied filters appear as dismissible chips beside an "N of M meetings" count and a "Clear all" shortcut.

### Changed

- The Notion menu on a meeting page now shares the Meetings sort menu's keyboard behaviour (arrow keys, Home/End, Escape).

## [4.2.0] - 2026-10-03

### Added
Expand Down
9 changes: 6 additions & 3 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,9 @@ it.
React 18 + Vite 6, no router: `renderer/app.jsx` is a single view-state switch between:

- `Dashboard.jsx`: stats and a recent-sessions list.
- `Meetings.jsx`: full session list.
- `Meetings.jsx`: full session list with search, status chips, a sort menu and a Filters panel
(date preset or range, length, platform, content); the filter/sort logic is pure, in
`lib/meetingFilters.js`.
- `NoteViewer.jsx` / `TranscriptViewer.jsx`: a completed session's notes or raw transcript.
- `Settings.jsx`, composed of `settings/GeneralSection.jsx`, `TranscriptionSection.jsx`,
`NotesSection.jsx`, `IntegrationsSection.jsx`, `SystemSection.jsx`: API keys, service
Expand All @@ -183,10 +185,11 @@ Supporting pieces: `RecordingBar.jsx` (persistent recording control), `Processin
(pipeline progress), `SessionCard.jsx`, `UpcomingMeetings.jsx` (Google Calendar),
`PasteTranscriptModal.jsx` (manual transcript import), `note/` (Markdown rendering,
`copyMarkdown.js` for JSON<->Markdown conversion, `pdfDocument.jsx` for the PDF export
template, `AudioPlayer.jsx` streaming from `meetmind-audio://`), `ui/` (Dialog, ConfirmDialog).
template, `AudioPlayer.jsx` streaming from `meetmind-audio://`), `ui/` (Dialog, ConfirmDialog,
`Menu.jsx` for keyboard-navigable dropdown menus).

State/plumbing: `lib/app-context.js`, `lib/hooks.js`, `lib/status.js`, `lib/format.js`,
`lib/platform.js`, `lib/scrollMemory.js`, `lib/audioMeter.js`, `lib/greeting.js`.
`lib/platform.js`, `lib/meetingFilters.js`, `lib/scrollMemory.js`, `lib/audioMeter.js`, `lib/greeting.js`.

Styling: Tailwind CSS (`darkMode: 'class'`, with `<html class="dark">` toggled by preload/React
based on the `theme` setting) driven by CSS custom properties in `renderer/styles/globals.css`
Expand Down
2 changes: 1 addition & 1 deletion extension/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "MeetMind",
"version": "4.2.0",
"version": "4.3.0",
"description": "AI meeting notes — auto-detects Google Meet & Zoom. Requires the MeetMind desktop app.",
"permissions": [
"tabs",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "meetmind",
"version": "4.2.0",
"version": "4.3.0",
"description": "Open-source AI meeting notes app for Windows: record Google Meet and Zoom calls, transcribe with AssemblyAI, Google STT, Sarvam AI or Groq, summarize with Gemini or Groq, and sync to Notion.",
"keywords": [
"ai-meeting-notes",
Expand Down
Loading
Loading