Skip to content

features: define a custom folder for the summaries and transcriptions, pretty formatting for the markdown export, use openai compatible endpoints, CLI to build and run the project locally, ...#16

Open
nilleb wants to merge 69 commits into
RecapAI:mainfrom
nillebco:main

Conversation

@nilleb

@nilleb nilleb commented Oct 3, 2025

Copy link
Copy Markdown

Description

I do not expect you to merge this, Rawa, but I wanted to show you what I did - and let you pick the features you like.
Just name the features you'd like to have merged and I'll try to do that.

The features present in this branch

  • the system tray icon now changes color during recordings
  • the system tray icon has a menu where to access a few options
    • Start|Stop recording (cmd+R)
    • Settings
    • Drag & Drop a recording and get the summary/transcription
    • Quit (cmd+Q)
    • shortcuts (configurable) for start/stop recording
    • use an openai model (hosted on the official API or on a Azure instance)
    • button to test the llm endpoint
    • the icon changes color according to the system tray settings (dark/light mode)
    • define a storage location for the recordings/transcripts/summaries (useful for Obsidian integration)
    • markdown format for the transcriptions, prettified
    • the recap window allows you to retry the transcription / summarization (in case of errors) and even mark the recording as complete if the recording is not recoverable
    • rationalized the panels (recording sources now go to the general settings, recaps are accessed directly through the menu)
    • all the ilnter issues of the project have been fixed
    • the unit tests are passing

Notable fixes:

  • connecting bluetooth devices was preventing the recording from starting (because of an incorrect sampling frequency)

All this has been done with Claude/Codex/Cursor (with little supervision of my own)

All the best

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Test improvement

Testing

  • Unit tests pass locally
  • New tests have been added for new functionality
  • Existing tests have been updated if needed

Checklist

  • I have performed a self-review of my own code
  • I have commented my code where necessary (following the no-comments rule)
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Screenshots (if applicable)

Additional Notes

nilleb and others added 30 commits October 3, 2025 13:31
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
nilleb and others added 22 commits October 3, 2025 14:04
the sampling rate differs from the previously set one
Replace string concatenation with multiline literals in logger calls
to fix compilation errors and comply with SwiftLint line length rules.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This comprehensive refactoring addresses all critical swiftlint violations
and significantly improves code quality and maintainability:

## Violations Fixed

### Closure Parameter Position (5 files) ✅
- Fixed closure parameters to be on same line as opening brace
- Updated in DropdownWindowManager, RecapsWindowManager, MicrophoneCapture+AudioEngine, LLMService

### Function Body Length (6 files) ✅
- ProcessTap.swift: Extracted helper methods (createTapDescription, createProcessTap, createAggregateDevice)
- AudioRecordingCoordinator.swift: Extracted startSystemAudioRecording, startMicrophoneRecording, getTapStreamDescription
- GlobalShortcutManager.swift: Replaced switch with dictionary lookup
- SummaryView.swift: Extracted stateHeader, actionSection, stateWarningMessage, button computed properties
- AlertToast.swift: Extracted view mode methods and handleTapGesture

### Cyclomatic Complexity (3 occurrences) ✅
- GlobalShortcutManager.getKeyString: Reduced from 57 to 1 using dictionary
- GlobalShortcutSettingsView.getKeyString: Replaced with dictionary lookup
- GlobalShortcutSettingsView.getKeyCodeFromKeyEquivalent: Simplified with dictionary + small switch

### Type Body Length (5 files) ✅
- UserPreferencesRepository: 345→176 lines (extracted performUpdate helper, consolidated update methods)
- ProcessingCoordinator: Extracted processSummarizationIfEnabled, saveTranscriptionResults
- GeneralSettingsViewModel: Extracted validation and model update methods
- GeneralSettingsView: Reduced by extracting preview mocks
- SummaryView: Extracted helper methods and computed properties

### File Length (3 files) ✅
- AlertToast.swift: 775→425 lines (45% reduction)
  - Created AnimatedCheckmark.swift
  - Created AlertToast+Modifiers.swift
  - Created AlertToastTypes.swift
  - Created View+Toast.swift
- GeneralSettingsView.swift: 444→332 lines
  - Created GeneralSettingsView+Preview.swift
- GeneralSettingsViewModelSpec.swift: Minor test file cleanup

## Files Created
- Recap/Frameworks/Toast/AnimatedCheckmark.swift
- Recap/Frameworks/Toast/AlertToast+Modifiers.swift
- Recap/Frameworks/Toast/AlertToastTypes.swift
- Recap/Frameworks/Toast/View+Toast.swift
- Recap/UseCases/Settings/Components/TabViews/GeneralSettingsView+Preview.swift

## Build Status
✅ All files compile successfully
✅ No swiftlint errors remaining
⚠️ 8 minor warnings remain (file/type length just above thresholds)

## Key Improvements
- Better code organization with logical method extraction
- Reduced complexity using dictionaries instead of large switch statements
- Improved reusability with extracted helpers (e.g., performUpdate())
- Better separation of concerns with extracted preview mocks
- Maintained functionality while improving maintainability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
feat: drag and drop and test the configured LLM
@nilleb nilleb changed the title features: define a custom folder for the summaries and transcriptions, pretty formatting for the markdown export, use openai compatible endpoints, CLI to build and run the project locally, Oct 4, 2025
@manueldeprada

Copy link
Copy Markdown

I'd love to see this merged!! specially retrying the transcription / summarization. It also would be very cool to be able to copy the transcriptions/summaries in a click!

@meskmo

meskmo commented Apr 16, 2026

Copy link
Copy Markdown

Same I love that so much

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

4 participants