How to Contribute to the Meetily Project: A Complete Developer's Guide
Contributing to Meetily requires forking the repository, branching from devtest (not main), and submitting pull requests that include tests and follow conventional commit standards for changes to the Rust backend or Next.js frontend.
Meetily is a privacy-first AI meeting assistant built as a Tauri desktop application that tightly couples a Rust backend with a Next.js/React frontend. Before writing code, understanding the repository structure and development workflow ensures your contributions align with the project's architecture and quality standards.
Understanding Meetily's Architecture
Meetily organizes its codebase into distinct layers that handle audio capture, transcription, and AI-powered summarization. The frontend in frontend/src/app/page.tsx communicates with the Rust backend through Tauri commands and events.
| Component | Role | Key Source File |
|---|---|---|
| Frontend (Next.js) | UI for meeting management, transcript display, and settings | frontend/src/app/page.tsx |
| Tauri Core (Rust) | Window handling, command registration, and event dispatch | frontend/src-tauri/src/lib.rs |
| Audio Engine | Microphone and system audio capture, professional mixing, and voice activity detection (VAD) | frontend/src-tauri/src/audio/pipeline.rs |
| Transcription Engine | Local Whisper/Parakeet execution with GPU acceleration | frontend/src-tauri/src/whisper_engine/whisper_engine.rs |
| Database | SQLite storage for meetings, transcripts, and summaries | frontend/src-tauri/src/database/models.rs |
| Summary Engine | LLM provider integration (Ollama, Claude, Groq, OpenRouter) | frontend/src-tauri/src/summary/processor.rs |
For a visual overview, reference docs/architecture.md before modifying any core systems.
Setting Up Your Development Environment
Start by forking the repository on GitHub and cloning your fork locally. The project uses a monorepo structure with the frontend and Rust backend colocated.
git clone https://github.com/YOUR_USERNAME/meetily.git
cd meetily
Install dependencies for both the frontend and Tauri backend according to the setup instructions in CONTRIBUTING.md. Ensure you have Rust, Node.js, and any system dependencies for Tauri development installed before proceeding.
Contribution Workflow for Meetily
Meetily follows a structured workflow defined in CONTRIBUTING.md (lines 7-94). All contributions must target the devtest branch, not main.
Branch Strategy
Always branch from devtest and pull the latest changes before creating your feature branch.
git checkout devtest
git pull upstream devtest
git checkout -b feature/your-feature-name
Making Changes and Writing Tests
Follow the code-style guidelines in the contribution docs: use meaningful variable names, keep functions small, and add comments for complex logic. Every change to the Rust backend requires corresponding unit or integration tests.
Run the full test suite before committing to ensure no regressions:
cargo test
Documentation and Commit Standards
Update relevant markdown documentation in README.md or docs/*.md if you modify public APIs or UI flows. Write commit messages using conventional commit format:
feat(audio): add high-res resampler
fix(transcription): resolve GPU memory leak
docs: update architecture diagrams
Submitting Your Pull Request
Push your branch and open a Pull Request targeting devtest. Fill out the PR template (lines 63-94 of CONTRIBUTING.md) and link related issues using Fixes #XYZ.
GitHub Actions workflows automatically run lint checks, tests, and build verification. Wait for maintainer review and address any feedback before the core team merges into devtest. Periodic merges from devtest to main are handled exclusively by the maintainers.
Key Contribution Areas
Focus your efforts on these active development zones based on your expertise:
Audio Pipeline
Refactor the mixing logic in frontend/src-tauri/src/audio/pipeline.rs, improve VAD accuracy, or add support for new audio devices. The recording manager in frontend/src-tauri/src/audio/recording_manager.rs orchestrates start/stop functionality.
Transcription Engine
Integrate new models or optimize GPU acceleration in frontend/src-tauri/src/whisper_engine/whisper_engine.rs and the Parakeet engine files.
Summary Generation
Add new LLM providers or tweak prompt templates in frontend/src-tauri/src/summary/processor.rs and frontend/src-tauri/src/summary/llm_client.rs.
UI/UX
Polish React components and state management in frontend/src/app/* and frontend/src/components/Sidebar/*.
Database
Implement schema migrations or performance tweaks in frontend/src-tauri/src/database/models.rs and database/manager.rs.
Code Examples
Registering a New Tauri Command
Add your command function in the appropriate Rust module, then register it in frontend/src-tauri/src/lib.rs:
#[tauri::command]
async fn toggle_noise_gate(enabled: bool) -> Result<(), String> {
audio::engine::set_noise_gate(enabled);
Ok(())
}
// In lib.rs
.invoke_handler(tauri::generate_handler![
start_recording,
toggle_noise_gate, // ← add here
])
Calling Commands from the Frontend
Use the Tauri API to invoke registered commands from TypeScript:
import { invoke } from '@tauri-apps/api/tauri';
export async function setNoiseGate(enabled: boolean) {
await invoke('toggle_noise_gate', { enabled });
}
Writing Unit Tests for Rust Commands
Add test modules to verify your backend logic:
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_noise_gate_toggle() {
toggle_noise_gate(true).await.unwrap();
assert!(audio::engine::is_noise_gate_enabled());
}
}
Summary
- Target the
devtestbranch, nevermain, when creating feature branches - Follow conventional commit messages and include tests for all Rust changes
- Key files:
lib.rsfor command registration,audio/pipeline.rsfor audio processing,whisper_engine.rsfor transcription, andsummary/processor.rsfor LLM integration - Documentation: Update
CONTRIBUTING.mdanddocs/architecture.mdwhen changing public APIs - Process: Fork → Branch from
devtest→ Code + Test → PR → Review → Merge
Frequently Asked Questions
What branch should I target when contributing to Meetily?
Always create your feature branches from devtest and set devtest as the base branch for your Pull Request. The main branch represents the stable release and only receives merges from the core team during scheduled releases.
Do I need to write tests for frontend changes?
While the contribution guidelines emphasize Rust unit tests for backend changes in frontend/src-tauri/src/, you should include integration tests for significant UI flows in the Next.js frontend. Run the full test suite with cargo test and any frontend test commands before submitting your PR.
How do I add a new LLM provider for summaries?
Modify frontend/src-tauri/src/summary/processor.rs and frontend/src-tauri/src/summary/llm_client.rs to implement the provider's API client. Follow the existing patterns for Ollama, Claude, or Groq integration, and update the configuration types to expose the new provider in the settings UI.
Where do I register new Tauri commands?
Define your command function with the #[tauri::command] attribute in the relevant module (such as audio or summary), then add the function name to the generate_handler! macro in frontend/src-tauri/src/lib.rs. Without this registration, the frontend cannot invoke the command.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →