Thanks for your interest in contributing! Scripta is a small project and every contribution matters — whether it's a bug fix, a feature idea, better docs, or just a question.
- macOS 14.0 (Sonoma) or later
- Xcode 15.4+ (for Swift 5.9 toolchain)
- Ollama installed and running (for AI features)
git clone https://github.com/thehwang/Scripta.git
cd Scripta
make runThis will:
- Create a local signing certificate (first time only)
- Build the app with Swift Package Manager
- Sign and launch
Scripta.app
Sources/
├── Scripta/ # Main application
│ ├── AppDelegate.swift # App lifecycle, window management
│ ├── ContentView.swift # Main UI (full + minimal modes)
│ ├── MeetingRecorder.swift # Recording orchestration
│ ├── SystemAudioCapture.swift # ScreenCaptureKit system audio
│ ├── SummaryService.swift # Ollama AI integration
│ ├── SummaryModelManager.swift # Model selection & health check
│ ├── ChatPanel.swift # AI Q&A sidebar
│ ├── HistoryPanel.swift # Meeting history browser
│ ├── HistoryDetailView.swift # Single session detail view
│ ├── MeetingStore.swift # Session data layer
│ ├── ScriptExporter.swift # Transcript/audio export
│ ├── TranslationService.swift # Apple Translation wrapper
│ └── Info.plist
└── ScriptaCore/ # Shared types
└── TranscriptEntry.swift
Open a Bug Report with:
- What happened vs. what you expected
- Steps to reproduce
- Your macOS version and chip (Apple Silicon / Intel)
- Console logs if available (
Console.app→ filter by "Scripta")
Open a Feature Request. Describe the use case — the "why" matters more than the "how."
-
Fork the repo and create a branch from
main:git checkout -b fix/your-description
-
Make your changes. Keep commits focused — one logical change per commit.
-
Test locally:
make run
Verify the app launches, recording works, and your change behaves as expected.
-
Push and open a PR against
main. Describe what you changed and why.
- Small and focused (< 300 lines is ideal)
- Includes a clear description of the problem and solution
- Doesn't break existing functionality
- Follows the existing code style (see below)
- Swift 5.9, targeting macOS 14+
- Use SwiftUI for all new UI components
- Prefer
@Publishedproperties over callbacks for observable state - Use
async/awaitfor asynchronous work; avoid rawDispatchQueueunless interfacing with C APIs - No third-party dependencies unless absolutely necessary — the zero-dependency approach is intentional
- Comments should explain why, not what
Looking for something to work on? These areas would benefit from contributions:
- Whisper integration — Add whisper.cpp as an optional transcription engine
- Export formats — SRT subtitles, PDF reports, Markdown with timestamps
- Keyboard shortcuts — Global hotkeys for start/stop recording
- Localization — Translate the UI into other languages
- Accessibility — VoiceOver support, keyboard navigation improvements
Check the Issues page for tasks tagged good first issue.
By contributing, you agree that your contributions will be licensed under the MIT License.