Thank you for your interest in contributing to Pulm Notes! This document provides guidelines and instructions for contributing.
By participating in this project, you agree to abide by our Code of Conduct.
- Node.js 18+ or Bun 1.0+
- Bun package manager (recommended)
- Rust toolchain (for desktop app development) - Tauri prerequisites
- Git for version control
-
Fork the repository on GitHub
-
Clone your fork locally:
git clone https://github.com/Luxion-Labs/PulmNotes.git cd PulmNotes -
Install dependencies:
bun install
Start the Next.js development server:
bun run devOpen http://localhost:3000 in your browser.
Run the Tauri development build:
bun run tauri:devbun run buildbun run tauri:build- Language: TypeScript (strict mode enabled)
- Indentation: 2 spaces
- Line endings: LF (Unix-style)
- Formatting: Follow existing code style
- Naming: Use camelCase for variables/functions, PascalCase for components/classes
Before submitting code, ensure it passes all checks:
# Run linter
bun run lint
# Run type checker
bun run typecheck
# Run tests
bun run test- Write unit tests for new features using Vitest
- Place tests in
__tests__directories next to the code they test - Test file naming:
*.test.tsor*.test.tsx - Run tests:
bun run test - Run tests with UI:
bun run test:ui
We follow conventional commit format:
<type>(<scope>): <subject>
<body>
<footer>
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(editor): add markdown export functionality
fix(storage): resolve data persistence issue on Windows
docs: update installation instructions
All commits must be signed off to indicate you agree to the DCO:
git commit -s -m "feat: add new feature"Or add to your commit message:
Signed-off-by: Your Name <your.email@example.com>
Use descriptive branch names:
feature/description- New featuresfix/description- Bug fixesdocs/description- Documentation updatesrefactor/description- Code refactoringtest/description- Test additions/updates
Examples:
feature/markdown-exportfix/storage-persistencedocs/update-readme
- Create a branch from
mainfor your changes - Make your changes following the guidelines above
- Test thoroughly on all relevant platforms (web/desktop)
- Run all checks:
bun run lint bun run typecheck bun run test bun run build - Commit with DCO sign-off (
git commit -s) - Push to your fork and create a pull request
- Fill out the PR template completely
- Respond to review feedback promptly
- All CI checks must pass
- Code must be reviewed and approved
- No merge conflicts with
main - DCO sign-off on all commits
- Tests added for new features
- Documentation updated if needed
To keep main stable, configure these branch protection rules in GitHub:
- Required status checks:
CI / Lint & TypecheckCI / Unit TestsCI / Build Web AppCI / Rust ClippyCI / Build Tauri AppDCO Check / Developer Certificate of Origin
- Required reviews: at least 1 approving review
- Restrict pushes: prevent force pushes and require pull requests
Use the Bug Report template and include:
- Platform (web/desktop) and OS
- Version number
- Steps to reproduce
- Expected vs actual behavior
- Screenshots/logs if applicable
Use the Feature Request template and include:
- Clear problem statement
- Proposed solution
- Use case description
- Target platform(s)
PulmNotes/
├── app/ # Next.js app directory
│ ├── components/ # React components
│ ├── lib/ # Utility functions and stores
│ └── types.ts # TypeScript type definitions
├── editor/ # Rich text editor components
│ ├── components/ # Tiptap editor components
│ └── hooks/ # Custom React hooks
├── src-tauri/ # Tauri (Rust) backend
│ ├── src/ # Rust source code
│ └── Cargo.toml # Rust dependencies
├── e2e/ # End-to-end tests (Playwright)
└── public/ # Static assets
- Frontend: React 19, Next.js 15 (App Router)
- Desktop: Tauri 2.0 (Rust)
- Styling: Tailwind CSS, SCSS
- Editor: Tiptap (ProseMirror)
- Testing: Vitest, Playwright
- Package Manager: Bun
- Language: TypeScript
- Open a Discussion
- Check existing Issues
- Review the README
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to Pulm Notes! 🎉