- CHANGELOG.md: Phase 1~13 + 랜딩 페이지 전체 변경 이력 - LICENSE: MIT - CONTRIBUTING.md: 개발 환경, 코드 표준, PR 프로세스 - SECURITY.md: 보안 정책, 취약점 보고 절차 - .editorconfig: 에디터 설정 통일 (indent, charset, eol) - .nvmrc: Node.js 20 - .gitattributes: line ending 정규화, 바이너리 선언, linguist 설정 - .gitignore: site/dist, Python, Whisper 모델 등 누락 항목 추가
2 KiB
2 KiB
Contributing to D3RO Voice
Thank you for your interest in contributing to D3RO Voice!
Development Setup
Prerequisites
- Node.js 20+
- Python 3.10+ (for faster-whisper sidecar)
- Ollama (for LLM features)
- Windows 10/11 (primary platform)
Getting Started
# Clone the repository
git clone https://gitlab.twentyoz.kr:8443/d3r0/voice.git
cd voice
# Install dependencies
npm install
# Download SoX binary (Windows)
npm run setup:sox
# Start development
npm run dev
Project Structure
src/
main/ # Electron main process (services, IPC, DB)
renderer/ # React app (MUI, components, pages)
preload/ # contextBridge IPC bridge
shared/ # Shared types, IPC channels, errors
site/ # Landing page (Vite + React + Tailwind)
docs/ # Design documents and phase specs
tests/ # Unit tests (vitest)
Code Standards
- TypeScript strict mode (
noImplicitAny,strictNullChecks) - No
anytypes - No
console.log(use electron-log via LoggerService) - Colors via
d3roPaletteCSS variables (no hardcoded hex in components) - UI strings via
t()i18n function (no hardcoded Korean/English) - Services: singleton + EventEmitter pattern
- IPC channels defined in
src/shared/ipc-channels.ts
Running Tests
npm run typecheck # Type checking
npm run lint # ESLint
npm run test # Unit tests
Building
npm run build # Production build
npm run dist # Build + NSIS installer
Design Documents
Before implementing, always reference:
docs/design/00-master-architecture.mddocs/design/01-service-specifications.mddocs/design/02-ipc-and-types.mddocs/design/03-db-and-ui.md
Pull Request Process
- Create a feature branch from
main - Follow the coding standards above
- Ensure
npm run typecheckpasses - Ensure
npm run testpasses - Update CHANGELOG.md if applicable
- Submit a merge request with a clear description